# 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:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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 (Expedia)

> ⭐ **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 HTTP API, no browser overhead, no CAPTCHA blocks.

This actor uses the Expedia Group mobile API directly, which serves both **VRBO** and **Expedia** inventory from the same endpoint. One scrape returns vacation rentals AND hotels for the same destination and dates.

---

### ✨ Why use this scraper

- ✅ **2-in-1 coverage**: VRBO vacation rentals + Expedia hotels in the same response
- ✅ **No CAPTCHAs, no DataDome blocks** — uses the official mobile API
- ✅ **Fast**: ~2 seconds per page (HTTP only, no browser)
- ✅ **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

- **Travel agencies**: build comparison tools across rentals and hotels
- **Real-estate analysts**: track vacation rental supply and pricing in target markets
- **Investors**: evaluate Airbnb-style markets via VRBO comp data
- **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) |
| `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 (per property)

```json
{
  "id": "80279416",
  "name": "Hotel Riu Palace Kukulkan - Adults Only - All Inclusive",
  "location": "Cancún, Quintana Roo",
  "url": "https://www.expedia.com/Cancun-Hotels-Riu-Palace-...",
  "priceFormatted": "$1,868 total",
  "priceLabel": "$1,868 total for 5 nights",
  "photos": [
    "https://images.trvl-media.com/lodging/.../riu-palace.jpg",
    "..."
  ],
  "searchedLocation": "Cancun"
}
````

### 💵 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 API since VRBO is owned by Expedia Group. A single scrape returns vacation rentals (VRBO) AND hotels (Expedia) for the same destination and dates.

#### How fast is this VRBO scraper?

About **2 seconds per page** of 50 properties. A 500-property scrape completes in ~20 seconds. It is roughly 10× faster than browser-based VRBO scrapers.

#### Does it bypass DataDome and Akamai bot protection?

Yes. The scraper uses Expedia's mobile API endpoint with the official mobile app's User-Agent and headers, which bypasses both Akamai Bot Manager and DataDome challenges that block conventional scrapers.

#### Can I scrape historical VRBO prices?

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

#### What proxy is required to scrape VRBO?

Apify Residential proxy is recommended and enabled by default. The scraper works without proxy for low volumes, but residential is needed for production-scale scraping to avoid rate limiting.

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

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

#### Does it work for international destinations?

Yes. Works for any destination Expedia covers — US, Mexico, Europe, Asia, 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.

### 🔗 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).

## `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,
  "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": "lKxM9vNQP88piR3QJ"
    },
    "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
                    },
                    "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
