Select Stays is a hybrid property management company operating in San Diego, managing both arbitrage and contract-based rentals. In one of the country’s most competitive short-term rental markets, staying ahead means working smarter and automation is key.
Since launching in 2021, Select Stays has grown from managing a handful of arbitrage units to a thriving hybrid portfolio of 45 properties in San Diego. As they scaled, manual processes (especially reporting) started eating into valuable time. “We were already at 15 units and about to onboard seven more when we hit a wall,” said Jay Ullrich, CEO of Select Stays. “We needed better reporting and more flexibility through an open API. That’s when we found Hostfully.”
Before switching, their CFO Sam was spending hours each month pulling revenue from Airbnb, entering it into Google Sheets, manually adding expenses, and calculating owner payouts. “It took about 20 to 30 minutes per property,” Jay explained. “That’s an entire day every month for just 20 properties and it wasn’t scalable.”
The risk of errors was high, and the output wasn’t professional. “When you’re copying numbers into spreadsheets, it just doesn’t look that trustworthy,” Jay said. “It lacked structure, and owners had to rely on our word that everything added up. We’d get questions like ‘Where did this number come from?’ all the time.”
When Select Stays went searching for a better property management system, they evaluated several top contenders. “We looked at Guesty and Hostaway, but they were either too pricey or too clunky,” Jay said. Beyond usability, Select Stays was looking for two specific capabilities: detailed financial reporting and an open API that would allow them to build custom solutions as they grew. “Hostfully checked all our boxes,” said Jay. “We knew we were choosing a platform that would support us long term.”
Today, Select Stays uses Hostfully’s reporting tools to generate customized, professional reports across all 45 properties almost instantly. To do this, Select Stays’ CFO customized how each column is calculated using equations he set up. “It’s not much different than using Excel, and Hostfully made it really easy to customize how everything is calculated. We can now run reports for 45 properties in about 10 minutes,” Jay said. “That’s a huge win for our CFO, and it frees us up to focus on growing the business.”
Instead of spending hours in spreadsheets, Sam now pulls clean CSV exports directly from Hostfully, customized to reflect each owner’s payout terms. “The reports look sharp and are easy to read,” Jay explained. “Owners can see every dollar, from guest revenue, to cleaning fees, to expenses, etc without needing us to walk them through it.”
The structured reporting has eliminated many owner inquiries and improved transparency. “We don’t get questions like ‘What is this fee?’ or ‘Why is this missing?’ anymore. Everything’s there, broken down clearly,” said Jay. “That trust has been a big win.”
Select Stays also uses the reporting system to stay compliant with San Diego’s local tax laws. “Not all OTAs remit occupancy tax, so we use Hostfully to track which platforms we owe for,” Jay noted. “Without it, we’d probably have to hire a bookkeeper. Hostfully saves us that cost.”
They’ve even resolved past issues with duplicate charges. “When we were tracking things manually, we’d sometimes log the same cleaning fee twice,” Jay said. “Now, with Hostfully, that’s just not an issue. The system keeps us accurate.”
As they continue to scale, Jay sees Hostfully as more than a PMS. “We’ve tripled in size since last year, and Hostfully has kept up with us every step of the way. That’s not something we had with our last platform.”
Cookie | Duration | Description |
---|---|---|
__stripe_mid | 1 year | Stripe sets this cookie cookie to process payments. |
__stripe_sid | 30 minutes | Stripe sets this cookie cookie to process payments. |
_wpfuuid | 1 year 1 month 4 days | This cookie is used by the WPForms WordPress plugin. The cookie is used to allows the paid version of the plugin to connect entries by the same user and is used for some additional features like the Form Abandonment addon. |
cookielawinfo-checkbox-advertisement | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category . |
cookielawinfo-checkbox-analytics | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Analytics" category . |
cookielawinfo-checkbox-functional | 1 year | The cookie is set by the GDPR Cookie Consent plugin to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Necessary" category . |
cookielawinfo-checkbox-others | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Others". |
cookielawinfo-checkbox-performance | 1 year | Set by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Performance". |
CookieLawInfoConsent | 1 year | CookieYes sets this cookie to store the user consent. |
elementor | never | This cookie is used by the website's WordPress theme. It allows the website owner to implement or change the website's content in real-time. |
viewed_cookie_policy | 1 year | CookieYes set this cookie to keep track of whether the user has approved the use of cookies. |
Cookie | Duration | Description |
---|---|---|
_hjAbsoluteSessionInProgress | 30 minutes | Hotjar sets this cookie to track the beginning of the user's journey for a total session count. It does not contain any identifiable information. |
_hjIncludedInPageviewSample | 2 minutes | Hotjar sets this cookie to know whether that visitor is included in the data sampling defined by your site's pageview limit. |
li_gc | 5 months 27 days | Linkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes. |
lidc | 1 day | LinkedIn sets the lidc cookie to facilitate data center selection. |
UserMatchHistory | 1 month | LinkedIn sets this cookie for LinkedIn Ads ID syncing. |
Cookie | Duration | Description |
---|---|---|
_fbp | 3 months | Facebook sets this cookie to store and track interactions. |
_ga | 1 year 1 month 4 days | The _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors. |
_ga_* | 1 year 1 month 4 days | Google Analytics sets this cookie to store and count page views. |
_gcl_au | 3 months | Google Tag Manager sets this cookie to experiment advertisement efficiency of websites using their services. |
_hjFirstSeen | 30 minutes | Hotjar sets this cookie to identify a new user’s first session. It stores a true/false value, indicating whether it was the first time Hotjar saw this user. |
_hjRecordingEnabled | never | Hotjar sets this cookie when a Recording starts and is read when the recording module is initialized, to see if the user is already in a recording in a particular session. |
_hjRecordingLastActivity | never | Hotjar sets this cookie when a user recording starts and when data is sent through the WebSocket. |
_hjTLDTest | session | To determine the most generic cookie path that has to be used instead of the page hostname, Hotjar sets the _hjTLDTest cookie to store different URL substring alternatives until it fails. |
ajs_anonymous_id | 1 year | This cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before. |
ajs_user_id | never | This cookie is set by Segment to help track visitor usage, events, target marketing, and also measure application performance and stability. |
AnalyticsSyncHistory | 1 month | Linkedin set this cookie to store information about the time a sync took place with the lms_analytics cookie. |
CONSENT | 2 years | YouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data. |
ln_or | 1 day | Linkedin sets this cookie to registers statistical data on users' behaviour on the website for internal analytics. |
tk_ai | 1 year 1 month 4 days | JetPack sets this cookie to store a randomly-generated anonymous ID which is used only within the admin area and for general analytics tracking. |
tk_lr | 1 year | The tk_lr is a referral cookie set by the JetPack plugin on sites using WooCommerce, which analyzes referrer behaviour for Jetpack. |
tk_or | 1 year 1 month 4 days | The tk_or is a referral cookie set by the JetPack plugin on sites using WooCommerce, which analyzes referrer behaviour for Jetpack. |
tk_qs | 30 minutes | JetPack sets this cookie to store a randomly-generated anonymous ID which is used only within the admin area and for general analytics tracking. |
tk_r3d | 3 days | JetPack installs this cookie to collect internal metrics for user activity and in turn improve user experience. |
tk_tc | session | JetPack sets this cookie to record details on how user's use the website. |
Cookie | Duration | Description |
---|---|---|
_tt_enable_cookie | 1 year 24 days | Tiktok set this cookie to collect data about behaviour and activities on the website and to measure the effectiveness of the advertising. |
_ttp | 1 year 24 days | TikTok set this cookie to track and improve the performance of advertising campaigns, as well as to personalise the user experience. |
bcookie | 1 year | LinkedIn sets this cookie to track the use of embedded services. |
bscookie | 1 year | LinkedIn sets this cookie to track the use of embedded services. |
IDE | 1 year 24 days | Google DoubleClick IDE cookies are used to store information about how the user uses the website to present them with relevant ads and according to the user profile. |
NID | 6 months | NID cookie, set by Google, is used for advertising purposes; to limit the number of times the user sees an ad, to mute unwanted ads, and to measure the effectiveness of ads. |
test_cookie | 15 minutes | The test_cookie is set by doubleclick.net and is used to determine if the user's browser supports cookies. |
VISITOR_INFO1_LIVE | 5 months 27 days | A cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface. |
YSC | session | YSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages. |
yt-remote-connected-devices | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt-remote-device-id | never | YouTube sets this cookie to store the video preferences of the user using embedded YouTube video. |
yt.innertube::nextId | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
yt.innertube::requests | never | This cookie, set by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen. |
Cookie | Duration | Description |
---|---|---|
__q_domainTest | session | No description |
__q_state_qQfaoCzkKgjWcPNR | 1 year 1 month 4 days | No description |
__tld__ | session | No description |
_OG_GDPR_COOKIE_ | session | No description available. |
m | 1 year 1 month 4 days | No description available. |
viewedBlog | 1 month | No description |