# VRBO Scraper - Vacation Rentals & Expedia Hotels API (`makework36/vrbo-scraper`) Actor

- **URL**: https://apify.com/makework36/vrbo-scraper.md
- **Developed by:** [deusex machine](https://apify.com/makework36) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 50 total users, 20 monthly users, 99.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 property 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 - Vacation Rentals & Hotels

> ⭐ **Useful?** [Leave a review](https://apify.com/makework36/vrbo-scraper/reviews) — takes 10 seconds and helps a lot!

⚡ **Scrape VRBO vacation rentals and Expedia hotels in a single API call.** Get property data — name, price, photos, location, ID, and direct booking link — by destination and dates. Fast, reliable, no browser overhead.

Filter by property type to get **only vacation rentals** (best for STR analytics, property managers, real-estate analysts) or **only hotels** (best for hotel comp tools and travel agencies).

---

### ✨ Why use this scraper

- ✅ **Filter by property type**: `VACATION_RENTAL_ONLY` for STR analytics, `HOTEL_ONLY` for hotel comps, `ALL` for both
- ✅ **Bedrooms, sleeps, amenities** included per listing — ready for STR comp analysis
- ✅ **2-in-1 coverage**: vacation rentals + hotels in the same response
- ✅ **No browser, no CAPTCHA prompts** in normal operation
- ✅ **Fast**: ~2 seconds per page of 50 properties
- ✅ **Cheap**: pay only per result, no monthly subscription
- ✅ **Pagination ready**: scrape up to 500 properties per location
- ✅ **Multi-location**: pass any list of cities or destinations
- ✅ **Multi-currency** and multi-locale (en_US, es_MX, fr_FR, etc.)

### 🎯 Use cases

- **Property managers**: track competitive pricing across vacation rental markets
- **STR analytics**: build datasets like AirDNA / Transparent / Rabbu
- **Real-estate investors**: evaluate ROI on potential STR properties
- **Travel agencies**: build comparison tools across rentals and hotels
- **Aggregators**: power your own travel meta-search with fresh inventory
- **Researchers**: study price elasticity and seasonality across destinations

### 📥 Input

| Field | Type | Default | Description |
|---|---|---|---|
| `locations` | string[] | `["Cancun"]` | Destinations to search (any city, region, neighborhood) |
| `checkIn` | string | today + 30 days | YYYY-MM-DD |
| `checkOut` | string | check-in + 5 days | YYYY-MM-DD |
| `adults` | int | 2 | Number of guests (1-16) |
| `maxResults` | int | 50 | Max properties per location (1-500) |
| `propertyType` | string | `ALL` | Filter: `ALL`, `VACATION_RENTAL_ONLY`, `HOTEL_ONLY` |
| `currency` | string | `USD` | USD, EUR, MXN, GBP, BRL, etc. |
| `locale` | string | `en_US` | en_US, es_MX, pt_BR, fr_FR, de_DE, etc. |
| `proxyConfig` | object | RESIDENTIAL US | Apify proxy config |

### 📤 Output

Vacation rental example:

```json
{
  "id": "45988591",
  "name": "Water Views! Walk to Beach Dogs Welcome!",
  "location": "Brewster",
  "url": "https://www.expedia.com/...",
  "priceFormatted": "$4,320 total",
  "priceLabel": "$4,320 total for 5 nights",
  "propertyType": "VACATION_RENTAL",
  "propertyTypeLabel": "Entire home by Vrbo",
  "bedrooms": 4,
  "bathrooms": null,
  "sleeps": 8,
  "amenities": ["Washer and dryer"],
  "photos": ["..."],
  "searchedLocation": "Cape Cod Beaches"
}
````

Hotel example:

```json
{
  "id": "80279416",
  "name": "Hotel Riu Palace Kukulkan - Adults Only - All Inclusive",
  "location": "On the beach",
  "url": "https://www.expedia.com/...",
  "priceFormatted": "$1,868 total",
  "priceLabel": "$1,868 total for 5 nights",
  "propertyType": "HOTEL",
  "propertyTypeLabel": null,
  "bedrooms": null,
  "bathrooms": null,
  "sleeps": null,
  "amenities": ["All inclusive", "Pool", "Hot tub"],
  "photos": ["..."],
  "searchedLocation": "Cancun"
}
```

#### Output fields

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique property ID |
| `name` | string | Listing title |
| `location` | string | City / neighborhood |
| `url` | string | Full booking URL |
| `priceFormatted` | string | Price (e.g. "$1,868 total") |
| `priceLabel` | string | Price qualifier with date range |
| `propertyType` | enum | `VACATION_RENTAL`, `HOTEL`, or `UNKNOWN` |
| `propertyTypeLabel` | string|null | "Entire home by Vrbo", "Entire apartment by Vrbo", etc. |
| `bedrooms` | int|null | Bedroom count when listed |
| `bathrooms` | float|null | Bathroom count (rare in search results — usually null) |
| `sleeps` | int|null | Max guest capacity when listed |
| `amenities` | string\[] | Top amenities (Pool, Kitchen, Washer/dryer, etc.) |
| `photos` | string\[] | Property image URLs |
| `searchedLocation` | string | Original search query |

### 💵 Pricing

**$2.50 per 1,000 results** — pay only for what you get, no monthly subscription required.

A typical search of 50 properties costs about **$0.13**. Apify residential proxy and compute are billed separately at standard rates (~$0.30 per 1,000 requests combined).

### ❓ FAQ

#### Does this scraper return VRBO or Expedia properties?

**Both.** VRBO and Expedia share the same backend (VRBO is owned by Expedia Group). A single scrape returns vacation rentals AND hotels for the same destination. Use the `propertyType` filter to narrow down to one or the other.

#### What does `VACATION_RENTAL_ONLY` filter actually do?

It excludes brand hotels (Hilton, Marriott, Hyatt, etc.) and resort chains. Returns private vacation homes, cottages, villas, cabins, condos, and similar STR inventory. Best for property managers and STR analytics tools.

#### How fast is this scraper?

About **2 seconds per page** of 50 properties. A 500-property scrape completes in ~20 seconds.

#### Can I scrape historical prices?

Not directly. The API only returns current availability and prices for the requested dates. To track price history, schedule the actor to run periodically (daily, weekly) and store the results.

#### What proxy is required?

Apify Residential proxy is recommended and enabled by default. Works without proxy for low volumes; residential is needed for production-scale scraping to avoid rate limiting.

#### Can I get property reviews and full details?

This actor returns the search-result level data (name, price, photos, location, link). For deep property details (reviews, amenities, availability calendar), follow the returned `url` field. A dedicated property-detail scraper is on the roadmap.

#### Does it work for international destinations?

Yes. Works for any destination Expedia covers — US, Mexico, Europe, Asia, Caribbean, etc. Use the `locale` and `currency` fields to localize pricing and language.

#### How do I scrape multiple cities in one run?

Pass them in the `locations` array: `["Cancun", "Tulum", "Playa del Carmen", "Miami"]`. Each location is searched independently with its own pagination.

#### Best markets for vacation rental data?

**VR-heavy markets** (use `VACATION_RENTAL_ONLY`):

- Outer Banks NC, Cape Cod MA, Lake Tahoe CA, Destin FL, 30A FL
- Big Bear, Lake Arrowhead, Smoky Mountains TN
- Hilton Head SC, Gulf Shores AL, Florida Keys

**Hotel-heavy markets** (use `HOTEL_ONLY` or `ALL`):

- Las Vegas, NYC, Miami Beach, Cancún, Punta Cana

### 🔗 Other actors by makework36

- [Fast Airbnb Price Scraper](https://apify.com/makework36/fast-airbnb-price-scraper) — Airbnb listings + prices
- [Fast Booking.com Hotel Scraper](https://apify.com/makework36/fast-booking-scraper) — hotels via Booking.com
- [Flight Price Scraper 2026](https://apify.com/makework36/flight-price-scraper) — compare flights across 7 sources
- [Trustpilot Reviews Scraper](https://apify.com/makework36/trustpilot-reviews-scraper) — reviews and ratings
- [Idealista Real Estate Scraper](https://apify.com/makework36/idealista-scraper) — Spain/Italy/Portugal listings

### 📞 Support

Open an issue on Apify Console or contact via the actor page.

# Actor input Schema

## `locations` (type: `array`):

List of destinations to search (city names, neighborhoods, regions).

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

Check-in date in YYYY-MM-DD format.

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

Check-out date in YYYY-MM-DD format.

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

Number of adult guests.

## `maxResults` (type: `integer`):

Maximum number of properties to extract per location (1–500).

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

Filter results by property type. VACATION\_RENTAL\_ONLY is best for property managers and STR analytics — excludes brand hotels. HOTEL\_ONLY returns only hotels. ALL returns everything (default).

## `currency` (type: `string`):

Currency for prices (USD, EUR, MXN, GBP, ...).

## `locale` (type: `string`):

Response locale (en\_US, es\_MX, fr\_FR, ...).

## `proxyConfig` (type: `object`):

Residential proxy is recommended for reliability. Enable Apify Proxy → RESIDENTIAL group.

## Actor input object example

```json
{
  "locations": [
    "Cancun",
    "Playa del Carmen",
    "Tulum",
    "Miami"
  ],
  "checkIn": "2026-06-05",
  "checkOut": "2026-06-10",
  "adults": 2,
  "maxResults": 50,
  "propertyType": "ALL",
  "currency": "USD",
  "locale": "en_US",
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "locations": [
        "Cancun"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("makework36/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 = { "locations": ["Cancun"] }

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

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "Cancun"
  ]
}' |
apify call makework36/vrbo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=makework36/vrbo-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VRBO Scraper - Vacation Rentals & Expedia Hotels API",
        "version": "1.0",
        "x-build-id": "c1vIcIbaaptgzvu44"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/makework36~vrbo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-makework36-vrbo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/makework36~vrbo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-makework36-vrbo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/makework36~vrbo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-makework36-vrbo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "locations"
                ],
                "properties": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "List of destinations to search (city names, neighborhoods, regions).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkIn": {
                        "title": "Check-in date",
                        "type": "string",
                        "description": "Check-in date in YYYY-MM-DD format."
                    },
                    "checkOut": {
                        "title": "Check-out date",
                        "type": "string",
                        "description": "Check-out date in YYYY-MM-DD format."
                    },
                    "adults": {
                        "title": "Number of guests",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of adult guests.",
                        "default": 2
                    },
                    "maxResults": {
                        "title": "Max properties per location",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of properties to extract per location (1–500).",
                        "default": 50
                    },
                    "propertyType": {
                        "title": "Property type filter",
                        "enum": [
                            "ALL",
                            "VACATION_RENTAL_ONLY",
                            "HOTEL_ONLY"
                        ],
                        "type": "string",
                        "description": "Filter results by property type. VACATION_RENTAL_ONLY is best for property managers and STR analytics — excludes brand hotels. HOTEL_ONLY returns only hotels. ALL returns everything (default).",
                        "default": "ALL"
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency for prices (USD, EUR, MXN, GBP, ...).",
                        "default": "USD"
                    },
                    "locale": {
                        "title": "Locale",
                        "type": "string",
                        "description": "Response locale (en_US, es_MX, fr_FR, ...).",
                        "default": "en_US"
                    },
                    "proxyConfig": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxy is recommended for reliability. Enable Apify Proxy → RESIDENTIAL group.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
