# Airbnb Price & Availability Scraper — MaviStay (`mavilinklabs/airbnb-verified-price`) Actor

Airbnb scraper for exact stay price and Airbnb availability checks. Verify the bookable total, nightly average and taxes for exact dates, or run a destination market scan. No login; pay only for delivered data. Unofficial.

- **URL**: https://apify.com/mavilinklabs/airbnb-verified-price.md
- **Developed by:** [MaviLinkLabs](https://apify.com/mavilinklabs) (community)
- **Categories:** Real estate, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 price quotes

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 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

## Airbnb Price & Availability Scraper — MaviStay

Looking for an **Airbnb price** or **Airbnb availability** check for the dates you actually want? MaviStay is an **Airbnb scraper** built around **exact stay price** verification—not just the price printed on a search card. It checks the listing calendar, requests a live stay quote, confirms the amount against Airbnb's public **Confirm and pay** checkout page, and returns the total, average per night, taxes, availability, and a clear quality verdict.

Need an Airbnb **market scan** instead? Switch to **Fast Scan** to collect price signals for a city or region. MaviStay keeps market signals separate from verified booking totals, so the output never promises more than the source proved.

> Unofficial. MaviStay is not affiliated with, endorsed by, or sponsored by Airbnb. It uses public, unauthenticated pages and does not require an Airbnb login.

### Why choose MaviStay?

- **Checkout-confirmed totals** — Exact Price checks the final amount for the same listing, dates, guests, currency, and market.
- **Taxes included when Airbnb adds them separately** — the verified total and average per night reflect the amount shown at checkout.
- **Honest failures** — if a price cannot be confirmed or reconciled, MaviStay does not deliver or charge for a verified quote.
- **Availability plus price** — get the availability calendar and the exact-date price in one run.
- **Any supported currency and market** — currency and market country are separate controls because they can affect the result independently.
- **Pay only for delivered data** — failed or empty quote attempts are not charged.

### Choose your workflow

| Your goal | Workflow | What you receive |
|---|---|---|
| Check what one or more Airbnb listings really cost for specific dates | **🏷️ Exact Price** — default | Bookable total, average per night, availability, price breakdown, tax context, and quality verdict |
| Explore prices visible in a city, region, or Airbnb search | **🌍 Fast Scan** | Unique market cards with price signals plus an honest coverage report |

**Exact Price is recommended and selected by default.** Paste the listing URL, choose the stay details, and click **Start**. If you want a destination search instead, select Fast Scan and open its section.

### Quick start: verify an exact Airbnb price

1. Keep **Exact Price** selected.
2. Paste one or more Airbnb room URLs or listing IDs.
3. Choose check-in, check-out, adults, currency, and market country.
4. Click **Start**.

Example:

```json
{
  "mode": "exactCompare",
  "listings": ["https://www.airbnb.com/rooms/14926879"],
  "startDate": "2026-09-10",
  "endDate": "2026-09-12",
  "adults": 2,
  "currency": "USD",
  "marketCountry": "US"
}
```

The result shows whether those dates are available, the checkout-confirmed stay total, the effective nightly average, and what evidence supports the price.

### Quick start: scan Airbnb prices in a destination

1. Select **Fast Scan**.
2. Open the Fast Scan section and enter a destination such as `Lisbon, Portugal`, or paste an Airbnb search URL.
3. Set the maximum number of market results.
4. Choose dates, guests, currency, and market country, then click **Start**.

Example:

```json
{
  "mode": "fastScan",
  "searchQuery": "Lisbon, Portugal",
  "maxListings": 50,
  "startDate": "2026-09-10",
  "endDate": "2026-09-12",
  "adults": 2,
  "currency": "EUR",
  "marketCountry": "PT"
}
```

Fast Scan returns search-card price signals. These are useful for market research, competitor discovery, and short-term-rental analysis, but they are **not labelled as verified checkout prices**.

### What data do you get?

#### Exact Price

- Listing ID and direct URL
- Check-in, check-out, and guest count
- Day-by-day Airbnb availability calendar
- Verified bookable stay total
- Average price per night
- Accommodation, fees, discounts, and taxes when shown
- Requested currency and market country
- Minimum-stay context
- Cancellation and instant-book signals when available
- Quality and completeness verdicts that explain what was verified

#### Fast Scan

- Listing ID, title, and property type
- Search-card stay price signal and currency
- Rating and review count when visible
- Dates, guests, and destination used for the search
- Direct Airbnb listing URL
- Run-level coverage report showing what the scan did and did not observe

Use the **Output** tab for the ready-to-read table, or export the dataset as JSON, CSV, Excel, or through the Apify API.

### Built for

- **Travel price checking** — compare the real total of shortlisted stays before booking.
- **Vacation-rental market research** — scan a city, then verify the strongest candidates.
- **Property managers and hosts** — monitor comparable stays for chosen dates and guest counts.
- **Travel applications and AI agents** — feed structured Airbnb price and availability data into workflows through the API.
- **Analysts and researchers** — keep verified totals separate from unverified market signals.

### Pricing

MaviStay uses pay-per-event pricing with platform usage included:

| Delivered event | Price |
|---|---:|
| Actor start | $0.00005 |
| Availability calendar | $0.005 |
| Checkout-verified price quote | $0.008 |
| Fast Scan discovery card | $0.0003 |

Typical examples:

- One listing with one verified quote: about **$0.01305**
- Three listings with one verified quote each: about **$0.03905**
- Fast Scan with 50 delivered cards: about **$0.01505**

Failed quote attempts and duplicate market cards are not charged. Advanced limits let you cap larger jobs before paid data is delivered.

### Important limits

- Airbnb prices are live and can change. Re-run when you need a fresh quote.
- A Fast Scan price is a search-card signal, not a checkout-confirmed total.
- Exact Price never estimates missing taxes or invents a total. Unverified values remain empty.
- Hotel and multi-room pages may expose only Airbnb's default room or rate plan.
- Airbnb can change its public response format; open an Issue if a previously working input stops returning data.

### FAQ

#### Does Airbnb have a public API?

Airbnb does not provide a general public listings API. MaviStay acts as an Airbnb price and availability data tool using public web responses and Apify's API, datasets, schedules, and integrations.

#### Does the result include Airbnb taxes and fees?

Exact Price reads the structured checkout items and confirms their arithmetic. If Airbnb adds destination taxes separately, MaviStay includes them in the verified total. If the evidence is incomplete, it reports that instead of guessing.

#### Can I scrape Airbnb prices for exact dates?

Yes. Provide the listing URL, check-in, check-out, adults, currency, and market country. Exact Price returns the amount quoted for that stay when Airbnb exposes a confirmable checkout total.

#### Can I scrape an Airbnb availability calendar?

Yes. Exact Price returns day-by-day availability and minimum-stay context for up to 12 months. You can request one exact date range or a broader calendar horizon.

#### Do I need an Airbnb login or API key?

No Airbnb account, login, cookie, or API key is required. Run the Actor from Apify Console or use the generated API examples in the **API** tab.

#### What should I run first?

Start with one listing and one exact stay. Confirm that the output matches your workflow, then add more listings or use Fast Scan for broader market discovery.

### Support

If a listing or destination does not behave as expected, open the **Issues** tab and include the public listing/search URL, dates, guest count, currency, market country, and Run ID. Do not include private account or payment information.

# Actor input Schema

## `mode` (type: `string`):

Exact Price checks specific listings against Airbnb's booking and checkout surfaces. Fast Scan explores search-card price signals for a destination.

## `listings` (type: `array`):

Exact Compare / Exact Price: paste one or more Airbnb room URLs or listing IDs. Required for this workflow and ignored by Fast Scan.

## `searchQuery` (type: `string`):

Enter a place such as London, United Kingdom. Leave blank when verifying specific listings.

## `searchUrl` (type: `string`):

Optional Airbnb /s/.../homes URL instead of a destination name.

## `maxListings` (type: `integer`):

Maximum unique discovery cards to deliver and charge. Duplicates and failed cards are not charged.

## `startDate` (type: `string`):

Check-in date for either mode. Use together with check-out to price this stay.

## `endDate` (type: `string`):

Check-out date for either mode. It must be after check-in and within 12 months.

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

Number of adult guests. Used by Exact Compare and Fast Scan.

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

Currency used for the request and every returned price.

## `marketCountry` (type: `string`):

Country used for the request. It can change Airbnb taxes and prices independently of currency.

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

Language used for Airbnb responses, for example en, tr, de or en-GB.

## `calendarMonths` (type: `integer`):

How many months of availability to fetch per listing, starting from the current month (1-12).

## `pricingMode` (type: `string`):

Sample a few dates, or price every eligible date with an explicit limit.

## `quoteNights` (type: `integer`):

Use 0 for the listing's minimum-stay rule. Exact dates are priced as one stay.

## `enrichPrices` (type: `boolean`):

Fetch checkout-confirmed bookable totals and per-night breakdowns for eligible stays.

## `maxQuotesPerListing` (type: `integer`):

Maximum delivered and charged quotes per listing in sampled mode.

## `maxPricedDates` (type: `integer`):

Required only for All available dates. Sets the quote limit per listing.

## `onCostLimitExceeded` (type: `string`):

Stop without pricing, or return only the first dates up to your limit.

## `deepScan` (type: `boolean`):

Split a large map into tiles. Requires a bounding box and maximum cost.

## `bbox` (type: `object`):

Bounding box with west, south, east and north coordinates. Used only by Deep Scan.

## `maxCostUSD` (type: `number`):

Hard request-cost stop required for Deep Scan.

## `maxSplitDepth` (type: `integer`):

Maximum number of map subdivision levels used by Deep Scan.

## `minDelayMs` (type: `integer`):

Minimum delay between Fast Scan search requests.

## `proxyConfiguration` (type: `object`):

Residential Apify Proxy is preselected for reliable public-page access.

## Actor input object example

```json
{
  "mode": "exactCompare",
  "listings": [
    "https://www.airbnb.com/rooms/14926879"
  ],
  "maxListings": 50,
  "adults": 2,
  "currency": "USD",
  "marketCountry": "US",
  "locale": "en",
  "calendarMonths": 3,
  "pricingMode": "sampled",
  "quoteNights": 0,
  "enrichPrices": true,
  "maxQuotesPerListing": 4,
  "onCostLimitExceeded": "error",
  "deepScan": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `verifiedPrices` (type: `string`):

Exact Compare: bookable total, average per night, tax scope, and quality verdict for each listing.

## `marketScan` (type: `string`):

Fast Scan: search-card price signals. These are not verified booking quotes.

## `coverageManifest` (type: `string`):

Fast Scan evidence: what was seen, what stopped the scan, and whether coverage was partial or limited.

# 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 = {
    "listings": [
        "https://www.airbnb.com/rooms/14926879"
    ],
    "maxListings": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mavilinklabs/airbnb-verified-price").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 = {
    "listings": ["https://www.airbnb.com/rooms/14926879"],
    "maxListings": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mavilinklabs/airbnb-verified-price").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 '{
  "listings": [
    "https://www.airbnb.com/rooms/14926879"
  ],
  "maxListings": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mavilinklabs/airbnb-verified-price --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mavilinklabs/airbnb-verified-price"
        }
    }
}

```

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/a4TBYHPqAElio10Fx/builds/WMXgqAYFssLush8qt/openapi.json
