Vrbo Scraper + STR Market KPIs (ADR · Occupancy · RevPAR)
Pricing
from $3.00 / 1,000 listing extracteds
Vrbo Scraper + STR Market KPIs (ADR · Occupancy · RevPAR)
Vrbo scraper with built-in STR investor KPIs — ADR, occupancy, RevPAR, estimated annual revenue per listing. 5 search modes (location, coordinates, polygon, URL, propertyId). Granular per-event enrichment: availability, reviews, host. HTML market report included.
Pricing
from $3.00 / 1,000 listing extracteds
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Vrbo Scraper + STR Market KPIs — ADR · Occupancy · RevPAR 🚀
🎉 NEW: Built-in STR investor KPIs — ADR · Occupancy · RevPAR · Estimated Annual Revenue per Vrbo listing
Built for short-term-rental investors, vacation-rental property managers, and market-sizing analysts who underwrite deals from data, not gut feel.
📋 Overview
Underwrite a vacation-rental deal in minutes, not days. The Vrbo Property Scraper pulls every listing in your target market and ships ready-to-model STR KPIs alongside the raw data — so you can rank comps by RevPAR before you make an offer.
Why thousands of STR investors and managers choose us:
- ✅ Built-in STR KPIs: ADR,
occupancyRate, RevPAR,estimatedAnnualRevenue, andisStaleflag computed from per-listing calendar enrichment — competitors ship raw search results only. - ⚡ 5 search modes: Location, coordinates, polygon (lat/lon bounding box), URL, and direct property ID. Most incumbents ship 1–2.
- 🎯 Granular pay-per-event enrichment: Pay only for the data layer you actually need —
ListingExtracted,AvailabilityEnriched,ReviewsEnriched,HostEnriched. No bundled "result" charges. - 💰 Tiered Idealista-style curve: FREE $0.030 → flat $0.003 at GOLD. Beats every paid Vrbo incumbent at scale.
- 💎 HTML market report per run: KPI dashboard, ADR / occupancy distribution charts, top-host leaderboards — saved automatically, no extra cost.
- ✨ NEW: Polygon search — scrape only inside a custom lat/lon polygon for ski-resort zones, coastal strips, and hyperlocal neighborhoods incumbents can't target.
✨ Features
- 🏖️ Search by Location — City, region, country name; autocomplete-resolved
- 📍 Search by Coordinates — Lat/lon + radius for precise market scans
- 🗺️ Polygon Search — Multi-point lat/lon bounding for irregular markets
- 🔗 URL Search — Paste a Vrbo search URL; we parse the filters
- 🆔 Property ID Lookup — Direct fetch by Vrbo numeric ID
- 📅 Calendar Enrichment — Full forward calendar with nightly prices and availability flags
- ⭐ Reviews Enrichment — Paginated review feed with rating, date, and reviewer
- 👤 Host Enrichment — Host profile, badges (e.g. Premier Host), tenure, listing count
- 📈 STR KPIs Per Listing — ADR,
occupancyRate(with host-block baseline), RevPAR,estimatedAnnualRevenue,isStale - 📊 HTML Market Report — Auto-generated dashboard saved to the run's key-value store
🎬 Quick Start
Pick a search mode, hand us a location (or URL, coordinates, polygon, ID), choose which enrichments you want, and run. Results stream straight to the Apify dataset; the HTML report saves to the run's key-value store at report.html.
curl -X POST https://api.apify.com/v2/acts/sian.agency~vrbo-property-scraper/runs?token=[YOUR_TOKEN] \-d '{"searchMode": "location", "query": "Miami Beach, FL", "computeAvailability": true}'
🚀 Getting Started (3 Simple Steps)
Step 1: Pick a search mode
Choose one of: location, coordinates, polygon, url, or propertyId.
Step 2: Toggle the enrichments you want
Flip on computeAvailability for KPIs, computeReviews for the review feed, computeHost for host profile. Each is opt-in and priced separately — pay only for what you need.
Step 3: Hit run
The first 25 listings are free (no credit card). Watch the dataset fill in real time. Download as JSON / CSV / Excel directly from the Apify UI.
That's it! In under 5 minutes, you'll have:
- A clean dataset of Vrbo listings with 40+ fields
- Per-listing ADR / occupancy / RevPAR / annual revenue estimates
- An HTML market dashboard you can share with your team
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchMode | string | Yes | One of: location, coordinates, polygon, url, propertyId |
query | string | Conditional | Location name (for location mode) |
latitude / longitude | number | Conditional | Center point for coordinates mode |
radius | number | Optional | Search radius in km (coordinates mode) |
polygon | array | Conditional | Array of [lat, lon] points for polygon mode |
vrboUrl | string | Conditional | Search URL for url mode |
propertyId | string | Conditional | Direct Vrbo property ID for propertyId mode |
maxListings | integer | Optional | Cap on results (default: tier-based) |
computeAvailability | boolean | Optional | Enrich each listing with full calendar + STR KPIs |
computeReviews | boolean | Optional | Enrich each listing with paginated reviews |
computeHost | boolean | Optional | Enrich each listing with host profile |
Example — search a destination + compute KPIs:
{"searchMode": "location","query": "Aspen, CO","maxListings": 200,"computeAvailability": true,"computeHost": true}
Example — polygon-bounded market scan:
{"searchMode": "polygon","polygon": [[25.79, -80.13],[25.79, -80.10],[25.76, -80.10],[25.76, -80.13]],"computeAvailability": true}
📤 Output
Results are saved to the Apify dataset with 40+ fields per listing including:
| Field | Type | Description |
|---|---|---|
propertyId | string | Vrbo numeric ID (string for precision) |
listingTitle | string | Listing headline |
propertyUrl | string | Direct Vrbo URL |
city / region / country | string | Location breakdown |
latitude / longitude | number | Geo coordinates |
currentPriceNumeric | number | Parsed nightly price |
currency | string | ISO currency code |
ratingValue | number | Vrbo 0–10 rating |
bedrooms / bathrooms / maxOccupancy | integer | Property capacity |
propertyBadges | array | E.g. ["Premier Host", "On the beach"] |
photoUrls | array | All listing photos |
adr | number | Average daily rate over the calendar window |
occupancyRate | number | Computed occupancy (0–1), with 10% host-block baseline |
revpar | number | ADR × occupancyRate |
estimatedAnnualRevenue | number | RevPAR × 365 |
isStale | boolean | True if calendar is empty AND review count < 3 |
availabilityCalendar | array | Per-day calendar (when enrichment enabled) |
reviewSample | array | Paginated review feed (when enrichment enabled) |
hostProfile | object | Host profile, badges, tenure (when enrichment enabled) |
Example row (truncated):
{"propertyId": "1234567","listingTitle": "Oceanfront 2BR · Premier Host","city": "Miami Beach","currentPriceNumeric": 312,"currency": "USD","ratingValue": 9.6,"bedrooms": 2,"maxOccupancy": 4,"adr": 298.5,"occupancyRate": 0.71,"revpar": 211.94,"estimatedAnnualRevenue": 77357.6,"isStale": false,"propertyBadges": ["Premier Host", "On the beach"]}
An HTML market report is also saved to report.html in the run's key-value store — KPI distributions, top hosts, ADR histograms, and a search-summary panel.
💼 Use Cases & Examples
1. STR investor underwriting
A short-term-rental investor sizing up a Miami Beach acquisition.
Input: ZIP code or polygon around the target property Output: Every comp's ADR, occupancy, RevPAR, estimated annual revenue Use: Rank comps by RevPAR, find the 90th-percentile performer in the cluster, build a pro forma you can defend to a lender.
2. Vacation-rental market sizing
A property manager building a TAM model for a new destination.
Input: City or region name Output: Total active listings, segmented by bedroom count, amenities, host type Use: Compute total addressable supply, identify undersupplied bedroom counts, plan acquisition or onboarding strategy.
3. Competitor RevPAR benchmarking
A pricing manager watching direct comps week-over-week.
Input: A polygon around the manager's portfolio Output: Weekly snapshots of competitor calendar fill, price changes, blackout patterns, host-block ratios Use: Tune nightly pricing in PriceLabs / Wheelhouse with real comp data — not aggregator estimates.
4. Destination revenue forecasting
A market analyst building a 12-month revenue forecast for an investor deck.
Input: Destination name + radius Output: Aggregate ADR + occupancy curves across the next 30 / 90 / 365 days Use: Forward-looking RevPAR projections, seasonality curves, peak-window pricing analysis.
5. Polygon-bounded market scans
An analyst studying a ski-resort zone or coastal strip.
Input: Custom lat/lon polygon Output: Only listings inside the polygon — no spillover from neighboring zip codes Use: Hyperlocal supply analysis incumbents can't replicate; perfect for ski-town micro-markets, beach strips, neighborhood-level comp sets.
6. Calendar-pricing audits
An owner auditing their own pricing vs. the market.
Input: Property ID + nearby comp IDs Output: Full forward calendar per property with nightly price + availability Use: Identify nights where you're overpriced (low occupancy ahead) or underpriced (already booked solid).
🔗 Integration Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/vrbo-property-scraper').call({searchMode: 'location',query: 'Aspen, CO',maxListings: 200,computeAvailability: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].adr, items[0].occupancyRate, items[0].estimatedAnnualRevenue);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/vrbo-property-scraper').call(run_input={'searchMode': 'location','query': 'Miami Beach, FL','maxListings': 100,'computeAvailability': True,'computeHost': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['listingTitle'], item.get('revpar'), item.get('estimatedAnnualRevenue'))
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~vrbo-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode": "location", "query": "Lake Tahoe, CA", "computeAvailability": true}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Weekly schedule
- HTTP Request: Call the actor with your saved polygon
- Process: Read the dataset, compute deltas vs. last week
- Action: Push RevPAR alerts to Slack / email / a Notion database
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 listings per run — full feature access, identical data quality
- No credit card required
- Perfect for testing a market before you commit
PAID Tier (Production Ready)
- Unlimited listings per run
- Volume-tiered pricing — the more you scrape, the cheaper each listing becomes
- Pay-per-event: only charged for successful results
Headline pricing — ListingExtracted event:
| Tier | Price / listing |
|---|---|
| FREE | $0.030 |
| BRONZE ($20 spend) | $0.012 |
| SILVER ($100 spend) | $0.006 |
| GOLD ($500 spend) | $0.003 |
| PLATINUM ($2,000 spend) | $0.003 |
| DIAMOND ($5,000 spend) | $0.003 |
Enrichment events (opt-in, charged only on success): AvailabilityEnriched, ReviewsEnriched, HostEnriched — each follows a similar tiered curve, with GOLD floor at $0.002.
💰 Best price on the market at scale — every paid Vrbo incumbent charges $0.0025–$0.005 flat with no volume curve. At GOLD floor we beat them on the headline event and give you opt-in enrichment for thinner rows.
🔗 View live pricing on the actor page
❓ Frequently Asked Questions
Q: How many listings can I process? A: FREE tier: 25 per run. PAID tier: unlimited. The tier curve drops the per-listing price at $20, $100, $500, $2,000, and $5,000 of lifetime spend.
Q: How are ADR, occupancy, and RevPAR computed?
A: From each listing's forward calendar. ADR = mean nightly price across the window. occupancyRate = (unavailable nights ÷ window) − 10% host-block baseline (so we don't count blocked nights as bookings). RevPAR = ADR × occupancyRate. estimatedAnnualRevenue = RevPAR × 365.
Q: What's the isStale flag?
A: true when the forward calendar shows full availability and the review count is < 3 — a strong signal the listing is inactive or new and shouldn't be counted in comp sets.
Q: Does the polygon mode support irregular shapes?
A: Yes. Pass any closed lat/lon polygon (array of [lat, lon] points). We hand it to Vrbo's geo-bounded search.
Q: What output formats are available? A: JSON, CSV, Excel, RSS, JSONL, XML — export directly from the Apify dataset UI or via the API.
Q: Does it work with private or unlisted properties? A: No, only publicly accessible Vrbo listings are supported.
Q: Is this legal? A: Yes — we only extract publicly available data. See our legal section below.
Q: How long does processing take? A: ~1–2 seconds per listing including all enrichments. A 200-listing destination scan with full KPI enrichment runs in 4–6 minutes.
🐞 Troubleshooting
The dataset is empty after a successful run.
- Check
searchModematches the field you provided (e.g.locationmode needsquery;polygonmode needspolygon). - For
propertyIdmode, ensure the ID is the numeric Vrbo property ID (not the URL slug). - On FREE tier, only 25 results return per run — if your search has < 25 matches, that's the full set.
STR KPIs (adr, occupancyRate, revpar) are missing.
- Flip
computeAvailabilitytotrue. KPIs are computed from the calendar enrichment, which is opt-in to keep low-tier scans cheap.
Polygon search returns 0 results.
- Ensure the polygon is closed (first and last points equal — we auto-close if not) and contains at least 3 distinct points.
- Polygons must be in
[latitude, longitude]order, not[lon, lat].
A listing's ratingValue looks low (e.g. 4.8).
- Vrbo ratings are on a 0–10 scale (not 0–5 like Airbnb). 4.8 means "needs improvement"; 9.6 is "exceptional".
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
⚠️ Trademark Disclaimer
Vrbo® is a registered trademark of Expedia Group, Inc. This Apify Actor is an independent third-party scraping tool. It is not affiliated with, endorsed by, sponsored by, or connected to Vrbo, Expedia Group, or any of their subsidiaries. The Vrbo® name appears in this listing under nominative fair use, solely to identify the public platform whose publicly available listing data this tool helps you collect.
This tool does not provide access to Vrbo's internal systems, private APIs, partner data, or proprietary services. Users are responsible for ensuring their use complies with Vrbo's Terms of Service and all applicable laws.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check the SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools