VRBO Vacation Rentals [$2.5๐ฐ] Scraper
Pricing
from $2.50 / 1,000 results
VRBO Vacation Rentals [$2.5๐ฐ] Scraper
[๐ฐ$2.5/1K] VRBO vacation-rentals scraper โ paste any VRBO property URL and get one structured row: title, price/night, bedrooms, sleeps, lat/lng, photos, amenities, host. Pure HTTP via Apify Residential, no auth required. Same Expedia Group backend as memo23/expedia-scraper.
Pricing
from $2.50 / 1,000 results
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
21
Total users
20
Monthly active users
3 days ago
Last modified
Categories
Share
VRBO Vacation Rentals Scraper โ Property + Calendar + Reviews + Rates
Scrape any VRBO property at $2.50 per 1,000 results. One actor, six input forms (URL, bare ID, location text, region, coords, /reviews suffix). Returns full property data (title, sleeps, bedrooms, photos, amenities, host), the date-by-date availability calendar with per-night pricing, a full rates breakdown (service fee + cleaning fee + taxes + total), and the complete paginated review history (up to 1,250 reviews per property) โ all from VRBO's own GraphQL backend. Pure HTTP via Apify Residential, no auth required, no login needed.
How it works

โจ Why use this scraper?
VRBO is the #2 vacation-rental marketplace globally (acquired by Expedia Group in 2015, 2M+ properties). Most VRBO scrapers on Apify either require account permissions (security risk), scrape thin DOM data (incomplete), or haven't shipped updates in months. This one is different:
- ๐ No auth required. Public property pages + VRBO's public GraphQL endpoint only. No login, no captcha solving, no account permissions.
- ๐ Apollo state extraction + paginated GraphQL. For property data we extract VRBO's own
window.__APOLLO_STATE__cache (canonical source). For reviews we additionally hit VRBO'sproductReviewDetailsGraphQL endpoint to paginate full history โ not just the 5โ10 reviews the HTML page ships inline. - ๐ Expedia Group backend. VRBO uses
siteId 9001001 / tpid 9001 / eapid 1on the shared Expedia GraphQL stack โ same infrastructure proven at 5.0โ on memo23/expedia-scraper (the #1 Expedia scraper on Apify). - ๐ก Akamai-cleared with per-session retry chain. 3 rotated sessions on Apify Residential primary โ optional Evomi fallback. Same proven stack as the Expedia actor.
- ๐ค Two row types from one actor.
kind: "property"andkind: "review", both pushed to the same dataset for downstream filtering. - ๐ฐ Predictable PPE pricing. $2.50 per 1,000 result rows, no monthly flat fee.
๐ฏ Use cases
| Team | What they build |
|---|---|
| Vacation-rental data platforms | Power your aggregator with structured VRBO inventory + calendars + reviews |
| Property managers | Track competitor pricing per-night by season; benchmark service fees, cleaning fees vs market |
| Market analysts | City-level ADR (Average Daily Rate) trends from the calendar; review sentiment over time |
| Sentiment / reputation analysts | Pull every review with manager responses โ analyze recovery patterns |
| Real-estate investors | Score short-term-rental potential by scraping comparable properties + their occupancy proxies |
| Travel-tech integrators | Build VRBO support into a multi-platform travel app without Expedia Partner Solutions |
๐ฅ Supported inputs (6 forms)
Paste any of these โ the actor classifies each input automatically.
| Input form | Example | Behaviour |
|---|---|---|
| Full URL | https://www.vrbo.com/2165911 | One property row |
| Bare ID | 2165911 or 4193579ha | Auto-prepends https://www.vrbo.com/ โ one property row |
| Dotted-ID | 321.2880733.3452770 | Legacy VRBO/Expedia format โ one property row |
| Reviews suffix | 2165911/reviews or 4193579ha/reviews | All paginated reviews for that property (up to 1,250) |
| Location text | Bali, New York, Tulum Mexico | Builds search URL โ walks pagination โ fans out to detail (up to 500 properties) |
| Region ID | region:2554 | Builds region-search URL |
| Coordinates | -7.7956, 110.3695 | Builds coords-search URL |
| Full search URL | https://www.vrbo.com/search/keywords:bali/ | Walks pagination + fan-out |
๐ How it works (step by step)
For detail/property inputs:
- Classify the input form โ resolve to canonical URL
- Inject date range (default: tomorrow + 30 days) so the Apollo cache loads with calendar + per-night pricing
- Fetch via impit + Apify Residential (Chrome 144 TLS fingerprint, per-session rotation ร 3 attempts before fallback)
- Extract
window.__APOLLO_STATE__via theJSON.parse("...")escape pattern - Map
PropertyInfo:{id}to a flat row + extract calendar, rates, policies
For reviews inputs (extra steps):
6. Resolve vrboId โ expediaPropertyId from the Apollo cache
7. POST to https://www.vrbo.com/graphql with the productReviewDetails operation, iOS-app-style headers
8. Paginate pageIndex: 0 โ 1 โ 2 โ โฆ at 25 reviews/page until empty or maxItems hit
9. Emit one row per review with the full schema (rating, text, "liked" tags, travel type, verified flag, manager response)
For search inputs: 10. Walk search-result pages (up to 50 pages), extract property IDs (up to 500) 11. Fan out as detail requests โ each emits its own row
โ๏ธ Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array of strings | โ (required) | Any of the 6 input forms above. Mix freely. |
checkIn | string (YYYY-MM-DD) | tomorrow | Loads calendar + rates into Apollo cache. Required for full data. |
checkOut | string (YYYY-MM-DD) | check-in + 30 days | Together with check-in defines the calendar window. |
adultsCount | integer | 2 | Used by VRBO to compute the rates breakdown. |
includeReviews | boolean | false | v1.7 โ when on, every property visited (direct URL and search fan-out) also emits paginated review rows. Pair with maxReviewsPerProperty to cap blowout. |
maxReviewsPerProperty | integer | 50 | Per-property hard cap on review rows when includeReviews=true or input is in {id}/reviews form. Max 1,000. |
maxItems | integer | 100 | Soft cap per source. Detail = 1 row; reviews = up to N rows; search = up to N fan-out. |
maxConcurrency | integer | 4 | Parallel HTTP requests. Sweet spot 3โ6 via Apify Residential. |
maxRequestRetries | integer | 6 | Per-URL retry budget on Akamai 429/403. |
proxy | object | Apify Residential | Required โ direct connections are blocked. |
fallbackProxyUrl | string | (none) | Optional Evomi URL when Apify Residential exhausts retries. |
How to get reviews โ two ways
| You want | How |
|---|---|
| Reviews for one specific property, no detail row | Paste 2165911/reviews (or full URL vrbo.com/2165911/reviews) in startUrls |
| Property + its reviews | Paste the property URL and check includeReviews |
| Every property in a city + their reviews | Paste Bali (or any search URL) and check includeReviews |
Cost math (at $2.50/1k rows): a Bali search hitting 50 properties ร maxReviewsPerProperty=50 = 50 property rows + 2,500 review rows = ~$6.38. Lower the per-property cap or maxItems if you want to dial that back.
Example input โ mixed forms in one run
{"startUrls": ["https://www.vrbo.com/2165911","4193579ha","Bali","2165911/reviews","region:2554","-7.7956, 110.3695"],"checkIn": "2026-07-01","checkOut": "2026-07-31","adultsCount": 4,"includeReviews": false,"maxReviewsPerProperty": 50,"maxItems": 100,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Example input โ property + full review history in one run (v1.7)
{"startUrls": ["https://www.vrbo.com/3444303"],"includeReviews": true,"maxReviewsPerProperty": 200,"maxItems": 250}
Emits 1 property row + up to 200 review rows for the listing.
๐ Output overview
Two row shapes โ both pushed to the same dataset. Filter by kind field to split downstream.
kind: "property"โ one row per property (from detail / search-fanout / bare-ID / location inputs)kind: "review"โ one row per review (from/reviewsinputs, paginated)
๐ฆ Output sample โ property row
{"kind": "property","vrboId": "2165911", // VRBO URL ID"expediaPropertyId": "63066336", // Expedia Group internal ID"listingUrl": "https://www.vrbo.com/2165911?startDate=2026-07-01&endDate=2026-07-31&adultsCount=4","title": "Piccolo Ponte 3 BR Caribbean Villa. Pool & Hot Tub. Canal front, SUP, Bikes.","headline": "Caribbean Villa with private pool and canal access",// Pricing summary (single nightly rate)"pricePerNight": 1094,"priceCurrency": "USD","priceFormatted": "$1,094 per night",// Capacity"sleeps": 6,"bedrooms": 3,"bathrooms": 3,"propertyType": "villa",// Location"address": {"full": "Providenciales, Turks and Caicos Islands","city": "Providenciales","country": "Turks and Caicos Islands","countryCode": "TC"},"coordinates": { "lat": 21.81669, "lng": -72.15198 },// Content + media"description": "Charming canal-front villa in the heart of Providenciales...","photos": [ { "url": "https://images.trvl-media.com/.../1.jpg", "caption": "Pool view" } ],"photosCount": 28,// Amenities (categorised)"amenities": [{ "id": "pool", "label": "Private pool", "group": "Pool & Spa" },{ "id": "hot_tub", "label": "Hot tub", "group": "Pool & Spa" }],"amenitiesCount": 42,// Review summary (full reviews via separate /reviews input)"rating": 9.4,"ratingScale": 10,"reviewCount": 87,// Host"host": {"name": "Piccolo Ponte Rentals","type": "property-manager","superhost": true,"responseRate": "100%"},// โโ v1.2: Detailed rates breakdown โโ"rates": {"nightlyRate": 1094,"serviceFee": 287,"cleaningFee": 250,"taxes": 178,"totalPrice": 33914,"currency": "USD","nights": 30,"checkIn": "2026-07-01","checkOut": "2026-07-31"},// โโ v1.2: Date-by-date availability calendar โโ"calendar": [{ "date": "2026-07-01", "available": true, "pricePerNight": 1094, "currency": "USD", "minStay": 3 },{ "date": "2026-07-02", "available": true, "pricePerNight": 1094, "currency": "USD", "minStay": 3 },{ "date": "2026-07-03", "available": false, "pricePerNight": null, "currency": null, "minStay": null }// ... up to 730 days ...],"calendarLength": 30,// โโ v1.2: Policy flags โโ"policies": {"pets": true,"smoking": false,"events": false,"children": true,"rawText": "House rules: No smoking. Pets welcome. Quiet hours 10pm-7am."},"cancellationPolicy": "Strict โ 50% refund if cancelled 60 days before check-in","minimumNights": 4,"scrapedAt": "2026-05-25T15:00:00.000Z"}
๐ฆ Output sample โ review row
{"kind": "review","vrboId": "3444303","expediaPropertyId": "...","listingUrl": "https://www.vrbo.com/3444303/reviews","reviewId": "6a00d16b320ff804c7f9e55a",// Rating"rating": 10,"ratingMax": 10,"ratingLabel": "Excellent",// Content"title": null,"text": "Comfy, cozy, and whimsical. We will return when we can spend more time.","liked": "cleanliness, check-in, communication, location, listing accuracy, value for money",// Author + verification"authorName": "Heidi S.","authorLocation": null,"isVerified": true,// Stay metadata"submittedAt": "2026-05-12T00:00:00.000Z","stayPeriod": "Stayed 2 nights in May 2026","travelType": "Traveled with family",// Engagement"helpfulVotes": 3,"managerResponse": {"text": "Thank you Heidi! We loved hosting you and look forward to your return!","respondedAt": "2026-05-15T14:22:00.000Z"},"scrapedAt": "2026-05-25T15:00:00.000Z"}
๐ Key output fields
| Group | Fields |
|---|---|
| Identity | kind, vrboId, expediaPropertyId, listingUrl, rawInput, title, headline |
| Pricing summary | pricePerNight, priceCurrency, priceFormatted |
| Rates breakdown (v1.2) | rates.{nightlyRate, serviceFee, cleaningFee, taxes, totalPrice, currency, nights, checkIn, checkOut} |
| Calendar (v1.2) | calendar[].{date, available, pricePerNight, currency, minStay}, calendarLength |
| Capacity | sleeps, bedrooms, bathrooms, propertyType |
| Location | address.{full,city,region,country,countryCode,postalCode}, coordinates.{lat,lng} |
| Content + media | description, photos[], photosCount |
| Amenities | amenities[].{id,label,group}, amenitiesCount |
| Review summary | rating, ratingScale, reviewCount |
| Host | host.{name,type,superhost,responseRate} |
| Policies (v1.2) | policies.{pets,smoking,events,children,rawText} |
| Per-review row (v1.4) | reviewId, rating, ratingMax, ratingLabel, text, liked, authorName, isVerified, stayPeriod, travelType, helpfulVotes, managerResponse.{text,respondedAt} |
๐ฐ Pricing
$2.50 per 1,000 result rows. Pay only for rows in the dataset.
| Event | Charged when | Rate |
|---|---|---|
apify-actor-start | Each run starts (Akamai-clearance overhead, proxy warm-up) | $0.008 / run |
apify-default-dataset-item | Each row written (property OR review) | $2.50 per 1,000 |
Cost examples:
- 100 property rows in Bali โ ~$0.26
- 1 property + its 250 reviews โ ~$0.64
- 50 properties ร 30 reviews each = 1,500 review rows + 50 property rows โ ~$3.88
- Daily monitoring of 500 properties โ ~$1.26/day = ~$38/month
What makes this richer than the competition
| Capability | Other VRBO scrapers | This actor |
|---|---|---|
| Auth requirement | Some require login | No auth โ pure HTTP |
| Data source | DOM scraping (fragile) | Apollo state + GraphQL endpoint (canonical) |
| Calendar / availability | Often missing | โ Date-by-date with per-night pricing |
| Rates breakdown | Just nightly rate | โ Service fee + cleaning fee + taxes + total |
| Reviews depth | First 5โ10 only (inline only) | โ Full paginated history up to 1,250 per property via direct GraphQL |
| Review fields | Basic rating + text | โ Rating + label + "liked" categories + travel type + verified flag + manager responses |
| Policies (pets/smoking/events) | Buried in amenities array | โ Top-level booleans for filterability |
| Input flexibility | URL only | โ 6 forms: URL, bare ID, dotted-ID, location, region, coords, /reviews |
| Akamai handling | Brittle (issues queue full of 429s) | โ Per-session retry chain ร 3 + optional Evomi fallback |
| Pricing | $1โ$30/month flat or $0.90โ$3/1k | $2.50/1k PPE โ predictable |
Notes & limitations
- Calendar requires a date range on the URL. v1.2 auto-injects tomorrow + 30 days by default. Pass
checkIn+checkOutfor a different window. Without a date range, VRBO ships only a sparse Apollo cache (no calendar, no rates). - Review pagination caps at 1,250 per property. That's 50 GraphQL pages ร 25 reviews/page. Most properties have far fewer reviews; the cap exists to prevent runaway billing on the rare 5,000-review listing.
/reviewsmode emits review rows only (no property summary). To get both, paste the property URL AND its/reviewsvariant.- Search-URL fan-out caps at 500 properties per source. Use multiple search URLs (different cities / property types) to scale beyond that.
- Apify Residential US/default pool works. Apify Residential GB is on Akamai's blocklist for VRBO โ use US or default.
โ FAQ
Q. Does this require a VRBO account or any auth? No. The actor only accesses public property pages + VRBO's public GraphQL endpoint. No login, no account-permission grant, no captcha solving.
Q. How is this different from existing VRBO scrapers on Apify? Existing scrapers ship only the first 5โ10 reviews (inline Apollo cache only). This actor uses VRBO's own paginated GraphQL endpoint to return the full review history. Plus we ship calendar + rates breakdown + policies โ features competitors haven't shipped despite buyers asking since 2023.
Q. Why same pricing as memo23/expedia-scraper?
VRBO is an Expedia Group property, uses the same backend, and the same Akamai protection. Same per-row cost makes bundling clean for buyers managing both vacation-rentals (VRBO) and hotels (Expedia / Hotels.com) data.
Q. Can I get the calendar for the next 12 months?
Yes โ pass checkIn: "2026-06-01" and checkOut: "2027-06-01". The Apollo cache will load a year-wide availability matrix when the date range is that long.
Q. What's the realistic throughput?
Default maxConcurrency: 4. ~2โ4 properties/sec for detail rows; ~5โ10 review pages/sec for reviews mode. So 1,000 properties in ~5 min; 250 reviews per property in ~50s.
Q. Reviews pagination โ do I pay per page or per review?
Per review. Each review row โ one $0.0025 event. Pages are free roundtrips; you only pay for what lands in the dataset.
Q. Can I get historical bookings, occupancy, or transaction data? No. VRBO doesn't expose closed-booking data publicly. The actor sees what's currently listed (price, description, calendar, public reviews).
Q. What if Apify Residential gets rate-limited mid-run?
The actor retries the primary proxy up to 3 times with rotated sessions automatically. Beyond that, set fallbackProxyUrl to an Evomi residential URL.
๐ฌ Support
- For issues or feature requests, please use the Issues tab on the actor's Apify Console page.
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
๐ Additional services
- Need Expedia / Hotels.com / Things-To-Do reviews? Use the sibling memo23/expedia-scraper โ same architecture, $2.50/1k, covers all 3 Expedia Group brands.
- Custom output shape, additional fields, or a private build: muhamed.didovic@gmail.com
- Need other vacation-rental platforms (Airbnb, Booking.com, Vacasa, FlipKey, HomeToGo)? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com
๐ Explore more scrapers
See other scrapers at memo23's Apify profile โ Expedia/Hotels.com reviews, ImmoScout24 DACH residential, LoopNet US+UK commercial, Stepstone DE jobs, Naukri India jobs, and more.
๐งช Smoke-test matrix (for developers / contributors)
Before every apify push, run the full input-form matrix AND the field-level assertion suite to catch regressions across input kinds AND data quality:
apify push --forceapify call --build <new-version> -f scripts/smoke-matrix.json# Copy the "Export results: https://console.apify.com/storage/datasets/<id>" linenode scripts/smoke-assertions.mjs <datasetId>
The matrix (scripts/smoke-matrix.json) exercises all 10 input forms in a single run (~25 s, ~23 rows). The assertion suite (scripts/smoke-assertions.mjs) runs ~350 field-level checks on the resulting dataset and exits non-zero on any failure.
Why two layers? The matrix proves rows LAND; the assertions prove rows aren't STUBS. A real-world bug (May 2026) shipped rows with title: null + rating: 0 because VRBO's API briefly returned a thin shell that the matrix counted as "success." The assertion suite catches that class of regression at ship time.
Sample assertions:
property.titlenon-empty (catches stub responses)property.ratingin[0, 10](catches encoding bugs)property.photosCount > 0ANDproperty.amenitiesCount > 0(every real VRBO property has both)property.rating > 0whenreviewCount > 0(catches the specific stub pattern where both go to 0)- Property-specific:
2165911must contain "Piccolo Ponte" in title, rating โฅ 9.5, reviewCount โฅ 30, countryCodeTCA - Coverage: every search input (
Bali,New York,region:6054439, coords,keywords:Tulum/) must produce at least one fan-out property row
The matrix:
| # | Input | Resolved kind | Expected output |
|---|---|---|---|
| 1 | https://www.vrbo.com/2165911 | detail | 1 property row |
| 2 | 2165911 | detail | deduped with #1 (same kind+canonical) |
| 3 | 4193579ha | detail | 1 property row (.ha-suffix support) |
| 4 | 2165911/reviews | reviews | up to maxItems review rows |
| 5 | 4193579ha/reviews | reviews | up to maxItems review rows |
| 6 | Bali | search โ fan-out | maxItems property rows |
| 7 | New York | search โ fan-out | maxItems property rows |
| 8 | region:6054439 | search โ fan-out | maxItems property rows |
| 9 | -7.7956, 110.3695 | search (coords) โ fan-out | maxItems property rows |
| 10 | https://www.vrbo.com/search/keywords:Tulum/ | search โ fan-out | maxItems property rows |
Pass criteria (two layers โ both must be green):
- Matrix layer:
details: 17 scraped, 0 failedANDreviews: โฅ6 row(s)ANDsearches: 5 processed, 0 failed(atmaxItems: 3). - Assertion layer:
node scripts/smoke-assertions.mjs <datasetId>exits 0. ~350 assertions; any failure printsโ [row] reasonand blocks the push.
โ ๏ธ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by VRBO, Expedia Group Inc., HomeAway, or any of their subsidiaries or related entities. All VRBO-, Expedia-, HomeAway-, and Expedia Group-related trademarks, service marks, trade names, and logos are the property of their respective owners and are used here solely for descriptive purposes โ to identify the public vacation-rental listings from which this scraper extracts data.
This Actor accesses only publicly available property-listing pages and the public GraphQL endpoint on www.vrbo.com. You are solely responsible for ensuring that your use of the data complies with VRBO's Terms of Service, applicable copyright law, the EU Database Directive, GDPR (where applicable), the US Computer Fraud and Abuse Act, and any other regulations that may apply to your jurisdiction or use case. Do not use this Actor to bulk-republish copyrighted content, to harass hosts or guests, to circumvent any rate-limiting or technical protection measure intentionally imposed by VRBO, or to enable unsolicited outreach in violation of CAN-SPAM / e-Privacy consent rules.
The author provides this Actor "as is", without warranty of any kind, and disclaims any liability for damages arising from its use.
SEO Keywords
vrbo scraper, vrbo api, vrbo.com scraper, vacation rentals scraper, vrbo vacation rental api, vrbo property scraper, vrbo calendar scraper, vrbo availability api, vrbo reviews scraper, vrbo all reviews api, vacation rental reviews api, vrbo pricing data, vrbo service fee api, vrbo cleaning fee data, vacation rental analytics, vrbo amenities scraper, vrbo photos api, vrbo host scraper, manager response scraper, vacation rental aggregator data, short term rental data, vrbo competitor of airbnb, vacation rental market intelligence, vrbo no auth scraper, apify vrbo actor, vrbo without login scraping, vacation rental adr benchmark, expedia partner solutions alternative, str data api, vacation rental scraper apify, vrbo paginated reviews