VRBO Vacation Rentals [$2.5๐Ÿ’ฐ] Scraper avatar

VRBO Vacation Rentals [$2.5๐Ÿ’ฐ] Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
VRBO Vacation Rentals [$2.5๐Ÿ’ฐ] Scraper

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

21

Total users

20

Monthly active users

3 days ago

Last modified

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

How VRBO Scraper 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's productReviewDetails GraphQL 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 1 on 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" and kind: "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

TeamWhat they build
Vacation-rental data platformsPower your aggregator with structured VRBO inventory + calendars + reviews
Property managersTrack competitor pricing per-night by season; benchmark service fees, cleaning fees vs market
Market analystsCity-level ADR (Average Daily Rate) trends from the calendar; review sentiment over time
Sentiment / reputation analystsPull every review with manager responses โ†’ analyze recovery patterns
Real-estate investorsScore short-term-rental potential by scraping comparable properties + their occupancy proxies
Travel-tech integratorsBuild 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 formExampleBehaviour
Full URLhttps://www.vrbo.com/2165911One property row
Bare ID2165911 or 4193579haAuto-prepends https://www.vrbo.com/ โ€” one property row
Dotted-ID321.2880733.3452770Legacy VRBO/Expedia format โ€” one property row
Reviews suffix2165911/reviews or 4193579ha/reviewsAll paginated reviews for that property (up to 1,250)
Location textBali, New York, Tulum MexicoBuilds search URL โ†’ walks pagination โ†’ fans out to detail (up to 500 properties)
Region IDregion:2554Builds region-search URL
Coordinates-7.7956, 110.3695Builds coords-search URL
Full search URLhttps://www.vrbo.com/search/keywords:bali/Walks pagination + fan-out

๐Ÿ”„ How it works (step by step)

For detail/property inputs:

  1. Classify the input form โ†’ resolve to canonical URL
  2. Inject date range (default: tomorrow + 30 days) so the Apollo cache loads with calendar + per-night pricing
  3. Fetch via impit + Apify Residential (Chrome 144 TLS fingerprint, per-session rotation ร— 3 attempts before fallback)
  4. Extract window.__APOLLO_STATE__ via the JSON.parse("...") escape pattern
  5. 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

ParameterTypeDefaultDescription
startUrlsarray of stringsโ€” (required)Any of the 6 input forms above. Mix freely.
checkInstring (YYYY-MM-DD)tomorrowLoads calendar + rates into Apollo cache. Required for full data.
checkOutstring (YYYY-MM-DD)check-in + 30 daysTogether with check-in defines the calendar window.
adultsCountinteger2Used by VRBO to compute the rates breakdown.
includeReviewsbooleanfalsev1.7 โ€” when on, every property visited (direct URL and search fan-out) also emits paginated review rows. Pair with maxReviewsPerProperty to cap blowout.
maxReviewsPerPropertyinteger50Per-property hard cap on review rows when includeReviews=true or input is in {id}/reviews form. Max 1,000.
maxItemsinteger100Soft cap per source. Detail = 1 row; reviews = up to N rows; search = up to N fan-out.
maxConcurrencyinteger4Parallel HTTP requests. Sweet spot 3โ€“6 via Apify Residential.
maxRequestRetriesinteger6Per-URL retry budget on Akamai 429/403.
proxyobjectApify ResidentialRequired โ€” direct connections are blocked.
fallbackProxyUrlstring(none)Optional Evomi URL when Apify Residential exhausts retries.

How to get reviews โ€” two ways

You wantHow
Reviews for one specific property, no detail rowPaste 2165911/reviews (or full URL vrbo.com/2165911/reviews) in startUrls
Property + its reviewsPaste the property URL and check includeReviews
Every property in a city + their reviewsPaste 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 /reviews inputs, 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

GroupFields
Identitykind, vrboId, expediaPropertyId, listingUrl, rawInput, title, headline
Pricing summarypricePerNight, 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
Capacitysleeps, bedrooms, bathrooms, propertyType
Locationaddress.{full,city,region,country,countryCode,postalCode}, coordinates.{lat,lng}
Content + mediadescription, photos[], photosCount
Amenitiesamenities[].{id,label,group}, amenitiesCount
Review summaryrating, ratingScale, reviewCount
Hosthost.{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.

EventCharged whenRate
apify-actor-startEach run starts (Akamai-clearance overhead, proxy warm-up)$0.008 / run
apify-default-dataset-itemEach 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

CapabilityOther VRBO scrapersThis actor
Auth requirementSome require loginNo auth โ€” pure HTTP
Data sourceDOM scraping (fragile)Apollo state + GraphQL endpoint (canonical)
Calendar / availabilityOften missingโœ… Date-by-date with per-night pricing
Rates breakdownJust nightly rateโœ… Service fee + cleaning fee + taxes + total
Reviews depthFirst 5โ€“10 only (inline only)โœ… Full paginated history up to 1,250 per property via direct GraphQL
Review fieldsBasic 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 flexibilityURL onlyโœ… 6 forms: URL, bare ID, dotted-ID, location, region, coords, /reviews
Akamai handlingBrittle (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 + checkOut for 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.
  • /reviews mode emits review rows only (no property summary). To get both, paste the property URL AND its /reviews variant.
  • 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

๐Ÿ›  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 --force
apify call --build <new-version> -f scripts/smoke-matrix.json
# Copy the "Export results: https://console.apify.com/storage/datasets/<id>" line
node 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.title non-empty (catches stub responses)
  • property.rating in [0, 10] (catches encoding bugs)
  • property.photosCount > 0 AND property.amenitiesCount > 0 (every real VRBO property has both)
  • property.rating > 0 when reviewCount > 0 (catches the specific stub pattern where both go to 0)
  • Property-specific: 2165911 must contain "Piccolo Ponte" in title, rating โ‰ฅ 9.5, reviewCount โ‰ฅ 30, countryCode TCA
  • Coverage: every search input (Bali, New York, region:6054439, coords, keywords:Tulum/) must produce at least one fan-out property row

The matrix:

#InputResolved kindExpected output
1https://www.vrbo.com/2165911detail1 property row
22165911detaildeduped with #1 (same kind+canonical)
34193579hadetail1 property row (.ha-suffix support)
42165911/reviewsreviewsup to maxItems review rows
54193579ha/reviewsreviewsup to maxItems review rows
6Balisearch โ†’ fan-outmaxItems property rows
7New Yorksearch โ†’ fan-outmaxItems property rows
8region:6054439search โ†’ fan-outmaxItems property rows
9-7.7956, 110.3695search (coords) โ†’ fan-outmaxItems property rows
10https://www.vrbo.com/search/keywords:Tulum/search โ†’ fan-outmaxItems property rows

Pass criteria (two layers โ€” both must be green):

  1. Matrix layer: details: 17 scraped, 0 failed AND reviews: โ‰ฅ6 row(s) AND searches: 5 processed, 0 failed (at maxItems: 3).
  2. Assertion layer: node scripts/smoke-assertions.mjs <datasetId> exits 0. ~350 assertions; any failure prints โœ— [row] reason and 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