VRBO Vacation Rentals Scraper avatar

VRBO Vacation Rentals Scraper

Under maintenance

Pricing

Pay per event

Go to Apify Store
VRBO Vacation Rentals Scraper

VRBO Vacation Rentals Scraper

Under maintenance

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

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours 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
destinationsarrayyes1-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.02One-off warm-up charge per run.
result-row$0.0028Per listing row written to your dataset.

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

🚧 Limitations

v0.1 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.