VRBO Vacation Rentals Scraper avatar

VRBO Vacation Rentals Scraper

Deprecated

Pricing

from $2.80 / 1,000 listing rows

Go to Apify Store
VRBO Vacation Rentals Scraper

VRBO Vacation Rentals Scraper

Deprecated

Scrape VRBO (Expedia Group) vacation-rental search results and listing details by destination: title, location, price per night, beds/baths, guests, rating, reviews, amenities, host, and coordinates. Camoufox-powered to clear anti-bot challenges. Pay only per listing scraped.

Pricing

from $2.80 / 1,000 listing rows

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share


🎯 What this scrapes

For each destination string you pass in (VRBO's own free-text search box format, e.g. "Orlando, Florida, United States of America"), this Actor:

  1. Opens a rendered VRBO search-results page for that destination and your check-in/check-out window.
  2. Captures up to your configured cap of listing cards — title, location, price per night, currency, bedrooms, bathrooms, and max guests.
  3. Optionally visits each listing's detail page for the fuller field set: rating, review count, amenities, host name, and latitude/longitude.
  4. Emits one row per listing to the default dataset, tagged with the destination query that found it.

🔥 Features

  • We clear the JS-execution gate VRBO puts in front of raw HTTP requests — a hardened browser layer renders the page like a real visitor instead of bouncing off a "Bot or Not?" challenge screen.
  • We rotate residential proxy sessions through Apify Proxy — a fresh exit IP and session on every block.
  • We back off when the target pushes back. Partial successes surface with a clear status message — we never silently return an empty dataset.
  • Run-wide wall-clock budget — the run stops opening new pages once your time budget is spent and finalizes cleanly with whatever it already scraped, instead of getting killed mid-write.
  • Per-listing fault isolation — one dead page or navigation timeout skips that listing with a logged warning; it never fails the whole run.
  • Pydantic v2 input + output validation — every row is a typed, schema-enforced record; nullable fields are always null, never silently dropped.
  • Pay-Per-Event pricing — you're charged per listing row written to your dataset, not per page fetched.

💡 Use cases

  • Market research — compare nightly rates, bedroom counts, and amenities across destinations for a vacation-rental market scan.
  • Revenue-management benchmarking — property managers pull comparable listings to sanity-check their own pricing.
  • Travel-content sourcing — bulk-pull listing photos-adjacent metadata (title, location, rating) for roundup articles or itinerary tools.
  • Lead generation — identify active hosts and listings in a target destination for partnership or outreach lists.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Add 1-10 destination strings (VRBO's own free-text search format works best).
  3. Optionally set check-in/check-out dates — otherwise the Actor defaults to a near-future window so results actually populate.
  4. Click Start. Output streams into the run's dataset.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
destinationsarrayyes—1-10 free-text VRBO destination search queries.
checkinstringno+30 days from run dateSearch window start (YYYY-MM-DD).
checkoutstringno+33 days from run dateSearch window end (YYYY-MM-DD), must be after checkin.
maxListingsPerDestinationintegerno201-50 listing rows collected per destination.
scrapeListingDetailsbooleannotrueIf false, search-card fields only (cheaper, faster).
maxRunMinutesintegerno12Run-wide wall-clock budget; stop opening new pages past this.
proxyConfigurationobjectnoRESIDENTIALApify Proxy — mandatory, falls back to BUYPROXIES94952.

Example input

{
"destinations": ["Orlando, Florida, United States of America"],
"checkin": "2026-09-10",
"checkout": "2026-09-13",
"maxListingsPerDestination": 20,
"scrapeListingDetails": true,
"maxRunMinutes": 12,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

📤 Output

Every row is one dataset item — one VRBO listing.

FieldTypeNotes
destination_querystringThe destination string that discovered this row.
listing_urlstringCanonical VRBO listing URL.
titlestringListing title.
locationstringListing location as displayed by VRBO.
price_per_nightfloat | nullNightly price for the searched window.
currencystringISO currency code.
bedroomsinteger | nullBedroom count.
bathroomsfloat | nullBathroom count.
max_guestsinteger | nullMax occupancy.
ratingfloat | nullAggregate rating (detail-page field).
reviews_countinteger | nullReview count (detail-page field).
amenitiesarrayAmenity labels (detail-page field).
host_namestring | nullHost display name (detail-page field).
latitudefloat | nullListing latitude, where public.
longitudefloat | nullListing longitude, where public.
scraped_atstringISO-8601 UTC timestamp.

Nullable fields are null, never omitted, when VRBO doesn't expose them publicly or scrapeListingDetails was false.

Example output

{
"destination_query": "Orlando, Florida, United States of America",
"listing_url": "https://www.vrbo.com/1234567ha",
"title": "Lakefront Cabin near Disney with Private Pool",
"location": "Orlando, Florida, United States",
"price_per_night": 189.0,
"currency": "USD",
"bedrooms": 3,
"bathrooms": 2.0,
"max_guests": 8,
"rating": 4.8,
"reviews_count": 214,
"amenities": ["Pool", "Wifi", "Kitchen", "Air conditioning"],
"host_name": "Jane D.",
"latitude": 28.3852,
"longitude": -81.5639,
"scraped_at": "2026-08-11T12:00:00.000Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run.
result-row$0.0028Per listing row written to your dataset.

Example: 1 000 results at the rates above ≈ $3.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

This scraper covers destination-string search only — no booking/availability-calendar scraping, no pricing quotes beyond the single search window used to populate results, no review text (aggregate rating + review count only), and no host-profile enrichment beyond the name shown on the listing. Map/geo bounding-box search is not supported.

❓ FAQ

Is this legal?

We only fetch content VRBO makes publicly available on its search and listing pages. Respect VRBO's terms of service before using output commercially.

Why is a field null?

Detail-page fields (rating, reviews_count, amenities, host_name, latitude, longitude) are null when scrapeListingDetails is false, or when VRBO doesn't expose that field publicly for a given listing.

Do I need my own proxy?

No — Apify Proxy (residential) is wired in by default.

Why did I get fewer rows than maxListingsPerDestination?

The run-wide maxRunMinutes budget stops opening new pages once it's spent, and any listing that hits a dead page or navigation timeout is skipped rather than failing the run — check the run's status message for a breakdown.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.