# Vrbo Scraper (`one-api/vrbo-scraper`) Actor

Scrape Vrbo.com vacation rentals — property details, reviews, host info, calendar availability, and search by location / coordinates / polygon / URL plus autocomplete. One dataset row per listing/review/host/day with photo, price, rating and Raw JSON.

- **URL**: https://apify.com/one-api/vrbo-scraper.md
- **Developed by:** [ONE API](https://apify.com/one-api) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 155 total users, 44 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Vrbo Scraper

Scrape **Vrbo.com** vacation rentals — full property details, paginated reviews, host bios, calendar availability, and paginated search by location / coordinates / polygon / Vrbo URL plus search-box autocomplete — all from one Actor. Backed by [realtyapi.io](https://realtyapi.io)'s real-time Vrbo API.

⭐️ Found this useful? Please leave 5 stars! Issues / requests: 📬 **oneapi.project@gmail.com**

***

### What you can do

| Section | What it does | Input format |
|---|---|---|
| 🏠 **Property Details** | Full details for a property (title, description, rooms, amenities, photos, host, reviews summary, policies, price) | `propertyId` digits OR Vrbo property URL — auto-detected per row |
| ⭐ **Reviews** | Paginated guest reviews for a property (author, date, rating, text, host reply) | `propertyId` digits, one per line |
| 👤 **Host Details** | The full `About the Host` block: name, photo, languages, response rate, premier-host badge | `propertyId` digits |
| 📅 **Availability / Calendar** | Per-day rates + availability across Vrbo's 12-month window (optionally narrowed to a date range) | `propertyId` digits |
| 🔎 **Search Listings** | Paginated search by destination / lat-lng circle / polygon / Vrbo URL with the full filter set | free text, `lat,lng,radius_mi`, `lat,lng;lat,lng;...` polygon, or Vrbo URL |
| 🔍 **Autocomplete** | Search-box suggestions: cities, neighborhoods, multi-city regions, properties, airports (resolves to `regionId`) | partial query string |

You can fill any combination of sections in a single run — leave the others empty.

***

### Output

Each listing / review / host / calendar-day / suggestion is pushed as **one dataset row**, flattened to friendly columns plus a `Raw` column with the original JSON for power users.

| Mode | Property ID | Name | Rating | # Reviews | Price | Address | Photos | Listing URL |
|---|---|---|---|---|---|---|---|---|
| `search/bylocation` | 70477069 | Quiet Oasis in Lovely Neighborhood | 9.8 | 184 | $108 | — | https://media.vrbo.com/... | https://www.vrbo.com/2430840?... |
| `details/byid` | 70477069 | Quiet Oasis in Lovely Neighborhood | 9.8 | 184 | — | Orlando, FL | https://media.vrbo.com/... | https://www.vrbo.com/70477069 |
| `reviews` | 70477069 | — | 5 | — | — | Jane D. | — | https://www.vrbo.com/70477069 |
| `availability` | 70477069 | 2026-08-15 | — | — | $142 | — | — | https://www.vrbo.com/70477069 |
| `autocomplete` | 2297 | Miami, Florida, United States of America | — | — | — | CITY | — | — |

For nested fields (full photo arrays, full amenity list, calendar metadata, location nearby points, host profile, etc.), the complete upstream JSON is in the `Raw` column.

***

### Sample input

```json
{
    "property_inputs": [
        "70477069",
        "https://www.vrbo.com/2430840?expediaPropertyId=70477069"
    ],
    "reviews_inputs": ["70477069"],
    "reviews_resultCount": 25,
    "reviews_pages": 2,
    "reviews_sortOrder": "NEWEST_TO_OLDEST",

    "host_inputs": ["70477069"],

    "availability_inputs": ["70477069"],
    "availability_startDate": "2026-06-01",
    "availability_endDate": "2026-08-31",
    "availability_onlyAvailable": true,

    "search_inputs": [
        "Orlando, Florida",
        "28.5383,-81.3792,5",
        "28.6,-81.5;28.6,-81.2;28.4,-81.2;28.4,-81.5",
        "https://www.vrbo.com/search?destination=Miami&regionId=2297"
    ],
    "checkIn": "2026-07-15",
    "checkOut": "2026-07-22",
    "adults": 4,
    "children": 2,
    "priceRange": "min:100,max:500",
    "bedroomsRange": "min:2",
    "amenities": "POOL,WIFI,AIR_CONDITIONING",
    "sortOrder": "PRICE_LOW_TO_HIGH",
    "pages": 3,
    "resultCount": 50,

    "autocomplete_inputs": ["Maui", "Big Bear"]
}
```

***

### Search filters (apply to every `search_inputs` row)

- **checkIn / checkOut** — `YYYY-MM-DD`. Together they filter to listings available on those dates and price them for the stay. Leaving both blank returns flexible-date pricing.
- **adults / children** — guest counts used for pricing & filtering.
- **priceRange** — `min:X` | `max:Y` | `min:X,max:Y` in USD per night.
- **bedroomsRange / bathroomsRange** — same `min:X,max:Y` syntax.
- **propertyType** — comma list of `HOUSE, APARTMENT, CONDO, VILLA, CABIN, COTTAGE, BUNGALOW, CHALET, STUDIO, HOTEL_RESORT, BED_AND_BREAKFAST, TOWNHOUSE`. Empty = all.
- **amenities** — comma list. Common: `POOL, HOT_TUB, WIFI, AIR_CONDITIONING, KITCHEN, WASHER, PETS_ALLOWED, PARKING, OCEANFRONT, BEACHFRONT, FIREPLACE, GYM`.
- **sortOrder** — `RECOMMENDED`, `PRICE_LOW_TO_HIGH`, `PRICE_HIGH_TO_LOW`, `REVIEW`, `DISTANCE`.
- **pages** — pages to fetch per search (1–20). Each page = up to 50 listings.
- **resultCount** — listings per page (1–50, default 50).

***

### Pricing

**Pay per result** — $3 per 1,000 items pushed. Failed inputs return a row with `Summary: ERROR: ...` and are billed the same as a successful row.

To cap spend, set `Max paid dataset items` on the run page.

***

### Tips

- **Need just one property?** Use `property_inputs` — auto-detects propertyId vs URL.
- **Bulk reviews?** `reviews_resultCount=50` × `reviews_pages=5` = up to 250 reviews per property.
- **Calendar for booking analysis?** Use `availability_inputs` with `availability_onlyAvailable=false` to see blocked nights too (`Summary` column shows `available` / `blocked`).
- **Pull all listings in an area?** Use `search_inputs: ["Maui, Hawaii"]` with `pages: 5` for ~250 listings.
- **Lat/lng circle search?** Format: `28.5383,-81.3792,5` (last value is radius in miles).
- **Polygon search?** Format: `lat,lng;lat,lng;...` with at least 3 points. The actor uses the polygon centroid to anchor the regionId; the polygon itself is sent as the map bounds.
- **Got a Vrbo URL?** Drop it into `search_inputs` (search URL) or `property_inputs` (property URL) — both `byurl` modes parse the URL into the right call internally.
- **Find a regionId?** Use the `autocomplete` section — the `Property ID` column will show the `regionId` for each suggestion.

# Actor input Schema

## `property_inputs` (type: `array`):

Pull full details for a specific Vrbo property (title, description, rooms, amenities, photos, host, reviews summary, policies, price). Auto-detects each entry: all digits → propertyId (Vrbo's internal numeric id); http(s) URL → Vrbo property URL (the actor extracts `expediaPropertyId` from the query string, or falls back to a numeric path segment).

## `reviews_inputs` (type: `array`):

Pull paginated reviews for a property. Each review (author, date, rating, text, host reply) is pushed as its own dataset row. Use `reviews_resultCount` and `reviews_pages` below to control how many to fetch.

## `reviews_resultCount` (type: `integer`):

Vrbo returns up to 50 reviews per request. Defaults to 10. Used for every entry in the Reviews section.

## `reviews_pages` (type: `integer`):

How many pages of reviews to fetch per property. Combined with `reviews_resultCount` (e.g. 50 × 5 = up to 250 reviews per property).

## `reviews_sortOrder` (type: `string`):

How to sort reviews. `RECOMMENDED` is Vrbo's default ranking; `NEWEST_TO_OLDEST` and `OLDEST_TO_NEWEST` are date-based; `HIGHEST_RATED` and `LOWEST_RATED` are by stars.

## `host_inputs` (type: `array`):

Pull the `About the Host` block for a property: host name, profile photo, languages, response rate, years hosting, premier-host badge, and the host bio text. One dataset row per property.

## `availability_inputs` (type: `array`):

Pull the calendar of available dates and nightly rates for a property. Vrbo returns a ~12-month window of per-day data; each day with `available=true` (and any `displayPrice`) is pushed as its own dataset row. Optional `availability_startDate` / `availability_endDate` below override the default window.

## `availability_startDate` (type: `string`):

Optional ISO date (e.g. `2026-06-01`). When omitted, Vrbo returns its default 12-month window starting today.

## `availability_endDate` (type: `string`):

Optional ISO date (e.g. `2027-05-31`). Must be after `availability_startDate`.

## `availability_onlyAvailable` (type: `boolean`):

When checked (default), only days where Vrbo returns `available=true` are pushed as rows. Uncheck to also include blocked/unavailable days (useful if you want a full month-by-month map). The complete `days[]` array is always in the Raw column of every row.

## `search_inputs` (type: `array`):

Paginated Vrbo property search. Auto-detects each entry:
• `Orlando, Florida` or `Miami Beach` (free-text destination — resolved via autocomplete to a regionId)
• `28.5383,-81.3792,5` (lat,lng,radius\_miles — circle search)
• `28.6,-81.5;28.6,-81.2;28.4,-81.2;28.4,-81.5` (polygon — `lat,lng;lat,lng;...` with ≥3 points)
• `https://www.vrbo.com/search?destination=Orlando&regionId=2693` (Vrbo search URL)

Each search returns up to 50 listings per page. Use `pages` below to fetch multiple pages.

## `checkIn` (type: `string`):

Optional. Filters search results to properties available on these dates and prices them for the stay. Combine with `checkOut`. Leaving both blank returns flexible-date pricing.

## `checkOut` (type: `string`):

Optional. Pair with `checkIn`.

## `adults` (type: `integer`):

Number of adult guests for pricing. Defaults to 2.

## `children` (type: `integer`):

Number of children. Defaults to 0.

## `priceRange` (type: `string`):

`min:100`, `max:500`, or `min:100,max:500`. Filter is applied to nightly price.

## `bedroomsRange` (type: `string`):

`min:1`, `max:4`, or `min:1,max:4`.

## `bathroomsRange` (type: `string`):

`min:1`, `max:3`, or `min:1,max:3`.

## `propertyType` (type: `string`):

Comma-separated Vrbo property types. Empty for all. Allowed values include: `HOUSE, APARTMENT, CONDO, VILLA, CABIN, COTTAGE, BUNGALOW, CHALET, STUDIO, HOTEL_RESORT, BED_AND_BREAKFAST, TOWNHOUSE`.

## `amenities` (type: `string`):

Comma-separated Vrbo amenity tokens. Common: `POOL, HOT_TUB, WIFI, AIR_CONDITIONING, KITCHEN, WASHER, PETS_ALLOWED, PARKING, OCEANFRONT, BEACHFRONT, FIREPLACE, GYM`.

## `sortOrder` (type: `string`):

How to sort search results. `RECOMMENDED` is Vrbo's default.

## `pages` (type: `integer`):

Each page = up to 50 listings (Vrbo's default page size).

## `resultCount` (type: `integer`):

Listings per search page. Default 50 (Vrbo's default).

## `autocomplete_inputs` (type: `array`):

Vrbo search-box suggestions. Returns regionId + region name + geo type (CITY, NEIGHBORHOOD, MULTI\_CITY, PROPERTY, AIRPORT, etc.) for any partial query. Useful for finding the canonical regionId to use in your own pipelines.

## Actor input object example

```json
{
  "property_inputs": [
    "70477069",
    "https://www.vrbo.com/2430840?expediaPropertyId=70477069"
  ],
  "reviews_inputs": [
    "70477069"
  ],
  "reviews_resultCount": 10,
  "reviews_pages": 1,
  "reviews_sortOrder": "RECOMMENDED",
  "host_inputs": [],
  "availability_inputs": [],
  "availability_startDate": "",
  "availability_endDate": "",
  "availability_onlyAvailable": true,
  "search_inputs": [
    "Orlando, Florida"
  ],
  "checkIn": "",
  "checkOut": "",
  "adults": 2,
  "children": 0,
  "priceRange": "",
  "bedroomsRange": "",
  "bathroomsRange": "",
  "propertyType": "",
  "amenities": "",
  "sortOrder": "RECOMMENDED",
  "pages": 1,
  "resultCount": 50,
  "autocomplete_inputs": []
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "property_inputs": [
        "70477069",
        "https://www.vrbo.com/2430840?expediaPropertyId=70477069"
    ],
    "reviews_inputs": [
        "70477069"
    ],
    "host_inputs": [],
    "availability_inputs": [],
    "search_inputs": [
        "Orlando, Florida"
    ],
    "autocomplete_inputs": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("one-api/vrbo-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "property_inputs": [
        "70477069",
        "https://www.vrbo.com/2430840?expediaPropertyId=70477069",
    ],
    "reviews_inputs": ["70477069"],
    "host_inputs": [],
    "availability_inputs": [],
    "search_inputs": ["Orlando, Florida"],
    "autocomplete_inputs": [],
}

# Run the Actor and wait for it to finish
run = client.actor("one-api/vrbo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "property_inputs": [
    "70477069",
    "https://www.vrbo.com/2430840?expediaPropertyId=70477069"
  ],
  "reviews_inputs": [
    "70477069"
  ],
  "host_inputs": [],
  "availability_inputs": [],
  "search_inputs": [
    "Orlando, Florida"
  ],
  "autocomplete_inputs": []
}' |
apify call one-api/vrbo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,one-api/vrbo-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zIGynQOSyWB21wFgb/builds/gffRnfZIdPMfkeybR/openapi.json
