Vrbo Scraper - Vacation Rentals, Reviews & Enriched Output avatar

Vrbo Scraper - Vacation Rentals, Reviews & Enriched Output

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Vrbo Scraper - Vacation Rentals, Reviews & Enriched Output

Vrbo Scraper - Vacation Rentals, Reviews & Enriched Output

Extract vacation rental data from Vrbo.com by location, region, coordinates, property URL, or property ID. Returns prices, availability signals, amenities, photos, geo data, ratings, full guest reviews, and structured listing details.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

18

Total users

1

Monthly active users

3 days ago

Last modified

Share

Vrbo Scraper: Vacation Rental Listings, Prices and Guest Reviews

Vrbo Scraper turns Vrbo into structured vacation rental data. Search a destination, a region ID, or coordinates, or paste property URLs, bare or dotted property IDs, a reviews link, or a Vrbo search URL, and get back property cards with nightly prices, capacity, ratings, photos and location, or full paginated guest reviews with manager responses and category ratings. Export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Five ways to find a property. Search by destination text, region ID, or coordinates, or paste property URLs, bare IDs, dotted IDs, reviews links, or a full Vrbo search URL, all in the same run.
  • Full guest reviews. Paginated review collection with ratings, review text, liked and disliked tags, manager responses, stay duration and category ratings (cleanliness, communication, location, accuracy).
  • Reviews on demand. Embed a capped number of reviews inside each property card, or switch to review rows only and get one record per review.
  • Real capacity fields. Sleeps, bedrooms, bathrooms and a detected property type, read directly off the listing.
  • Currency-honest pricing. priceCurrency reports the currency Vrbo actually rendered for the connection used, and the run tells you plainly when your requested currency could not be served.
  • Built for schedules. Resume one interrupted crawl by run or dataset ID, or turn on Incremental mode to see only new, updated, and expired properties on a recurring search.
  • Cost control that matches what happened. Only properties enriched with an extra request, a direct URL or ID fetch, or embedded reviews, carry an enrichment fee; plain search cards do not.

Use Cases

  • Vacation rental price and market research: track nightly rates, price drops and availability windows across a destination.
  • Rental pricing and revenue management: compare rates, ratings and reviews across similar properties to price your own listing.
  • Travel apps and metasearch: feed structured property data into your own listings site, comparison tool or chatbot.
  • Reputation and review monitoring: collect a property's full review history to track rating trends and guest feedback themes over time.
  • Market monitoring: schedule the actor with Incremental mode to see new listings, price changes and delisted properties for a destination as they happen.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
mode"search" (also "url", "reviews")
vrboId"2165911"
listingUrl"https://www.vrbo.com/2165911"
title"Beachfront Villa with Private Pool"
propertyType"Villa"
sleeps / bedrooms / bathrooms8 / 4 / 3
pricePerNight / priceFormatted412 / "$412 nightly"
priceStrikeout / priceCurrency"$520" / "USD"
rating / ratingLabel9.8 / "Exceptional"
reviewCount137
latitude / longitude-8.6887 / 115.1700
image"https://media.example.com/villa-1.jpg"
images / imagesCountarray of photo URLs / 24
description"Completely renovated beachfront villa with private pool and ocean views."
provider"vrbo"
searchLocation"Bali"
checkIn / checkOut"2026-11-01" / "2026-11-06"
adults2
scrapedAt"2026-09-28T10:00:00Z"
extra.starRating4.5 (Vrbo's own star rating, when the card shows one)
changeType / changedFields"UPDATED" / ["pricePerNight", "priceFormatted"] (Incremental mode only)
firstSeenAt / lastSeenAtISO timestamps (Incremental mode only)

When Scrape reviews only is on, or you paste a /reviews link, each row is one guest review instead of a property card: mode is "reviews", vrboId and listingUrl identify the property (a review row's title field is always empty, Vrbo does not attach one at this step), reviewId, rating and ratingLabel score the stay, reviewTitle and reviewText hold the guest's words, authorName, reviewDate and stayDuration describe who wrote it and when, liked and disliked list tagged highlights and complaints, managerResponse carries the host's reply when there is one, photos lists any guest-uploaded images, propertyRating and propertyReviewCount summarize the property overall, categoryRatings (cleanliness, communication, location, accuracy) is attached only when Include Category Ratings is on, and locale and scrapedAt round out the row.

How to Use

  1. Pick a mode: Search mode (by destination, region ID or coordinates) or URL mode (paste property URLs, IDs, reviews links or a Vrbo search URL).
  2. Fill in the fields for that mode, set your stay dates and guest count, and switch on Include reviews or Scrape reviews only if you want guest reviews.
  3. Set Max items to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search a destination:

{
"mode": "search",
"destination": "Orlando, Florida",
"checkIn": "2026-11-01",
"checkOut": "2026-11-06",
"adults": 4,
"bedrooms": 3,
"maxItems": 50
}

Paste specific property URLs and IDs:

{
"mode": "url",
"startUrls": [
{ "url": "https://www.vrbo.com/2165911" },
{ "url": "321.2880733.3452770" }
],
"checkIn": "1 day",
"checkOut": "6 days"
}

Collect only the reviews for one property:

{
"mode": "url",
"startUrls": [{ "url": "https://www.vrbo.com/2165911/reviews" }],
"reviewsOnly": true,
"maxItems": 100,
"maxReviewsPerProperty": 100,
"includeCategoryRatings": true,
"checkIn": "1 day",
"checkOut": "6 days"
}

Search by coordinates with recurring monitoring:

{
"mode": "search",
"latitude": "-8.6887",
"longitude": "115.1700",
"checkIn": "30 days",
"checkOut": "35 days",
"incrementalMode": true,
"emitExpired": true,
"stateKey": "bali-monitor",
"maxItems": 200
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/vrbo-vacation-rentals-scraper").call(run_input={
"mode": "search",
"destination": "Orlando, Florida",
"checkIn": "1 day",
"checkOut": "6 days",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["pricePerNight"], item["priceCurrency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/vrbo-vacation-rentals-scraper').call({
mode: 'search',
destination: 'Orlando, Florida',
checkIn: '1 day',
checkOut: '6 days',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted crawl: paste its run or dataset ID and the actor skips every property ID already saved there, so the new run only fetches, and pays for, properties it has not already collected. This applies to property-card runs; a Scrape reviews only run does not skip previously collected properties.
  • Incremental mode (incrementalMode) is for scheduled runs of the same search. Each property is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), or EXPIRED (Search mode only, only after a run that scans the whole search without a cap, a resume, or another early stop, and only with emitExpired on). A property is classified REAPPEARED only if an earlier complete scan with emitExpired on found it missing, and it then shows up again in any later run, capped or not. stateKey names or shares the stored baseline; leave it empty and the actor derives one automatically from your search and stay settings. Raising maxItems or maxReviewsPerProperty never starts a new baseline. Reordered or newly embedded reviews, and a field flipping between unobserved (empty) and a real value, never count as a change on their own. title is excluded from change detection entirely, because Vrbo can render two different headlines for the same property depending on which internal path answered a given fetch, not because the listing itself changed. With Incremental mode off, output is exactly as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, and the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (by location) or url (by property URL, ID, or search URL).
destinationstringnone (prefill: Orlando, Florida)Search mode only. A location such as Orlando, Bali, or Tulum Mexico.
destinationIdstringnoneSearch mode only. Numeric Vrbo/Expedia region ID that pins an exact region instead of resolving destination by text.
latitudestringnoneSearch by coordinates instead of a location name. Provide with longitude.
longitudestringnoneSearch by coordinates instead of a location name. Provide with latitude.
startUrlsarraynone (prefill: one sample property URL)URL mode only. Full property URLs, bare IDs, dotted IDs, /reviews links, or Vrbo search URLs, in any mix.
checkInstring1 dayDate, or a relative value such as 1 day or 30 days. Drives nightly pricing in Search mode and for Vrbo search URLs; property URLs or IDs are fetched without a date range, so the dates are only echoed on the record. Required by the schema, but this default fills it in when left empty.
checkOutstring6 daysDate, or a relative value such as 6 days. Required by the schema, but this default fills it in when left empty.
adultsinteger2Number of adult guests. Affects pricing and availability.
childrenarray[]One entry per child, the age in years.
roomsinteger1Number of units to search for.
bedroomsintegernone (no minimum)Only return properties with at least this many bedrooms.
minPriceintegernone (no minimum)Minimum nightly price filter, in the selected currency.
maxPriceintegernone (no maximum)Maximum nightly price filter, in the selected currency.
sortBystringRECOMMENDEDRECOMMENDED, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, DISTANCE, or REVIEW.
reviewsOnlybooleanfalseOutput one row per review instead of property cards. Works in both modes.
includeReviewsbooleanfalseEmbed up to maxReviewsPerProperty reviews inside each property card. Ignored when reviewsOnly is on.
maxReviewsPerPropertyinteger25Cap on reviews collected per property, for both includeReviews and reviewsOnly.
reviewsFromstringnoneYYYY-MM-DD is accepted in the input, but is not currently applied as a filter; reviews are returned regardless of date.
includeCategoryRatingsbooleantrueAttach property-level category ratings (cleanliness, communication, location, accuracy) to each review record.
currencystringUSDCurrency for the prices shown on property cards. Vrbo renders the price for the market its connection actually lands in; priceCurrency reports what was rendered, which can differ from this setting.
localestringen_USLanguage and region for page content and review language.
maxItemsinteger20Hard cap on the total number of records saved to the dataset.
resumeFromRunIdstringnonePrevious run or dataset ID. Properties already saved there are skipped so this run only fetches new ones.
incrementalModebooleanfalseRemember this search between scheduled runs and classify each property as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED.
stateKeystringnoneNames a monitoring campaign so it keeps its own baseline. Left empty, one is derived automatically from the search and stay settings.
emitUnchangedbooleanfalseAlso return, and bill, properties classified UNCHANGED since the last run.
emitExpiredbooleanfalseSearch mode only. Also return, and bill, a previously tracked property as an EXPIRED tombstone when it is missing from a complete, uncapped scan.
proxyobjectnone (prefill: Apify Proxy, Residential group)Proxy settings. The actor tries several proxy countries automatically to find a working connection.
mcpConnectorsarraynoneSend a summary of each record to apps authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only. Page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"mode": "search",
"vrboId": "2165911",
"listingUrl": "https://www.vrbo.com/2165911",
"title": "Beachfront Villa with Private Pool",
"propertyType": "Villa",
"sleeps": 8,
"bedrooms": 4,
"bathrooms": 3,
"pricePerNight": 412,
"priceFormatted": "$412 nightly",
"priceStrikeout": "$520",
"priceCurrency": "USD",
"rating": 9.8,
"ratingScale": 10,
"ratingLabel": "Exceptional",
"reviewCount": 137,
"latitude": -8.6887,
"longitude": 115.17,
"image": "https://media.example.com/villa-1.jpg",
"images": ["https://media.example.com/villa-1.jpg", "https://media.example.com/villa-2.jpg"],
"imagesCount": 24,
"badges": [],
"description": "Completely renovated beachfront villa with private pool and ocean views.",
"provider": "vrbo",
"searchLocation": "Bali",
"checkIn": "2026-11-01",
"checkOut": "2026-11-06",
"adults": 2,
"scrapedAt": "2026-09-28T10:00:00Z",
"extra": { "starRating": 4.5 }
}

changeType, changedFields, firstSeenAt, and lastSeenAt are added only when Incremental mode is on.

Plan Requirement

This actor is billed per event: a flat fee when a run starts, a fee for each property or review record saved to the dataset, and a smaller fee only for properties enriched with an extra request, either fetched directly by URL or ID, or with reviews attached. Plain search cards without reviews carry no enrichment fee. The Pricing tab on the actor page shows the current rates. The default proxy setting works out of the box; the actor rotates connections automatically when one is refused, and you can supply your own proxy under Connection for the most demanding runs. Runs on the default Residential setting also get an operator-maintained residential failover connection after every other connection is refused; runs with their own proxy URLs, and runs without that entitlement, keep exactly the connections they configured.

FAQ

How much does it cost?

You are billed per event: once per run start, once per record saved (property card or review row), and a smaller fee only for properties enriched with an extra request. Location-search cards without reviews carry no enrichment fee. The Pricing tab shows the current rates. Use Max items to cap the size, and the cost, of any run.

This actor collects only publicly available vacation rental listings and reviews. You are responsible for how you use it: follow Vrbo's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing text, photos and guest reviews may be subject to third-party rights.

Can I get only new or changed properties on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated properties for the same search, and unchanged ones are not billed unless you turn on Emit unchanged properties. Turn on Emit expired properties too if you also want a one-time tombstone row when a tracked property disappears from a complete scan.

Why did the same property come back with a different title or a different currency?

Vrbo can answer the same property through more than one internal response path, and those paths occasionally render slightly different headline text for the same listing. Most title differences you will see run to run are this, not a real edit, which is why title is excluded from Incremental mode's change detection. Vrbo also renders prices for the market its connection lands in, not necessarily the currency you requested; priceCurrency always reports what was actually rendered, and the run's status message says so plainly if your requested currency could not be served.

Why did my run fail instead of returning an empty dataset?

The run fails outright when it saves no records and sees no properties at all (every connection attempt was refused, or the search, IDs or review pages returned nothing), when resumeFromRunId does not point to a run or dataset this Apify account can read, or when you combine resumeFromRunId with Incremental mode on a search that already has saved state. A Search mode run with no destination, region ID, or coordinates, or a URL mode run with no URLs, instead logs an error and finishes with an empty dataset, so check the run log if you get zero results without a failure.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

πŸ”— Want more travel data?

Pair this actor with these related scrapers from the same team:

🏨 Expedia Hotels Scraper
From $1/1K. Scrape Expedia.com hotel listings and reviews for any destination. Extract...
🏨 Booking.com Hotels, Prices and Reviews Scraper
Scrape booking.com hotels, apartments, villas and hostels. Search any destination with...
🏨 Airbnb Scraper
Scrape Airbnb stays by destination or link: nightly and total price, rating breakdown...
🏨 Traveloka Hotel Scraper
Scrape Traveloka hotels across Singapore, Malaysia, Indonesia, Thailand, Vietnam and the...
🏨 Yanolja Scraper
Scrape Yanolja (NOL), Korea's largest accommodations marketplace, by region or URL. Every...
🏨 Rover Pet Care Scraper
Scrape Rover.com pet-care providers: sitter search by city, rates per stay type, ratings...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.