# Airbnb Address Scraper (Cheap) (`data_api/airbnb-address-scraper-cheap`) Actor

Airbnb address finder that looks up the real street address of any listing URL. Returns house number, road, city, postcode, and country as clean, separate fields. Works in bulk across any country.

- **URL**: https://apify.com/data\_api/airbnb-address-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![Airbnb Address Scraper](cover.jpg)

Airbnb hides the exact address of every listing. The map shows only a fuzzy circle, the street name is missing, and the real location appears only after you book. That is a wall if you are building a rental dataset, sizing up a market, or running address lookups at any kind of scale. This scraper gets you past it: drop in an Airbnb room URL and it reads the coordinates baked into the listing page, turns them into a full postal address, and hands back every part as its own field, alongside the core listing details. No booking, no manual map-reading. Feed it one URL or a list of thousands, anywhere in the world.

### What you get

Each URL becomes exactly one clean row with a consistent shape. Missing pieces come back as `null` instead of vanishing, so your columns stay predictable when you load results into a sheet or database. Two groups of data per listing:

- **Address** — `fullAddress`, `streetNumber`, `streetName`, `neighborhood`, `district`, `cityName`, `stateName`, `postalCode`, `countryName`, `countryCode`, plus raw `lat` / `lng`
- **Listing details** — `listingTitle`, `propertyType`, `roomType`, `maxGuests`, `bedroomCount`, `bedCount`, `bathroomCount`, `guestRating`, `reviewsTotal`, `hostName`, `superhost`, `nightlyPrice`, `currencyCode`

### Quick start

1. Hit **Try for free** and open the input form.
2. Paste one or more Airbnb room URLs into **Airbnb listing URLs** (a bare room ID works too).
3. Pick a proxy type and set a **Results limit** if you want to cap the run.
4. Press **Start**, then export the results as JSON, CSV, Excel, or XML when it finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Market research** — map listing density, pricing by neighborhood, and supply gaps across a whole city
- **Short-term rental competitor analysis** — pinpoint exactly where rival properties sit, not just the city
- **Property data enrichment** — turn a raw list of Airbnb URLs into a geocoded address database
- **Real estate investment** — cross-reference listing addresses with land registries, planning, or census data
- **Compliance and licensing** — check which listings fall inside a permit zone or jurisdiction
- **Investigative research** — recover the true location when the blurred map tells you nothing

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `targetUrls` | array of strings | Yes | Airbnb room URLs (or bare numeric room IDs) to resolve. Each entry is processed independently. |
| `retryLimit` | integer | No | Extra attempts on a failed request before logging an error for that listing. Default `3`. |
| `timeoutSeconds` | integer | No | Seconds to wait per response before timing out. Default `45`; raise it on residential proxies. |
| `resultsLimit` | integer | No | Cap on how many URLs to handle per run. Default `50`; set `0` for no cap. |
| `proxyConfiguration` | object | No | Proxies used for requests. Defaults to US datacenter; switch to Residential if Airbnb blocks requests. |

#### Example input

```json
{
    "targetUrls": [
        "https://www.airbnb.com/rooms/756301198472150388",
        "53114902",
        "https://www.airbnb.com/rooms/41028765"
    ],
    "retryLimit": 3,
    "timeoutSeconds": 45,
    "resultsLimit": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["DATACENTER"],
        "apifyProxyCountry": "US"
    }
}
```

### Output

Every input URL produces one row, and every field is always present — unavailable values come back as `null` so your dataset stays rectangular.

#### Example output

```json
{
    "listingUrl": "https://www.airbnb.com/rooms/756301198472150388",
    "roomId": "756301198472150388",
    "listingTitle": "Sunlit 1-Bed Loft Near the Riverfront",
    "propertyType": "Loft",
    "roomType": "ENTIRE_HOME",
    "maxGuests": 3,
    "bedroomCount": 1,
    "bedCount": 1,
    "bathroomCount": 1.0,
    "guestRating": 4.91,
    "reviewsTotal": 167,
    "hostName": "Elena",
    "superhost": true,
    "nightlyPrice": 112.0,
    "currencyCode": "USD",
    "lat": "41.8841",
    "lng": "-87.6298",
    "fullAddress": "418, North Wells Street, Near North Side, Chicago, Cook County, Illinois, 60654, United States",
    "streetNumber": "418",
    "streetName": "North Wells Street",
    "neighborhood": "Near North Side",
    "district": null,
    "countyName": "Cook County",
    "cityName": "Chicago",
    "stateName": "Illinois",
    "postalCode": "60654",
    "countryName": "United States",
    "countryCode": "us",
    "errorMessage": null,
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingUrl` | string | The Airbnb room URL that was looked up |
| `roomId` | string | Airbnb room identifier parsed from the URL |
| `listingTitle` | string | Headline of the listing |
| `propertyType` | string | Apartment, House, Villa, Condo, and similar |
| `roomType` | string | ENTIRE\_HOME, PRIVATE\_ROOM, SHARED\_ROOM, or HOTEL\_ROOM |
| `maxGuests` | integer | Highest guest count the place can host |
| `bedroomCount` | integer | Number of bedrooms |
| `bedCount` | integer | Number of beds |
| `bathroomCount` | number | Bathroom count, which can be a half value such as 1.5 |
| `guestRating` | number | Mean review score on a five-point scale |
| `reviewsTotal` | integer | Count of guest reviews |
| `hostName` | string | Public display name of the host |
| `superhost` | boolean | True when the host carries Superhost status |
| `nightlyPrice` | number | Per-night rate shown on the listing |
| `currencyCode` | string | Three-letter currency code, such as USD, GBP, or EUR |
| `lat` | string | Latitude of the property |
| `lng` | string | Longitude of the property |
| `fullAddress` | string | Complete formatted street address |
| `streetNumber` | string | Building or house number |
| `streetName` | string | Street or road name |
| `neighborhood` | string | Neighborhood or local community area |
| `district` | string | Borough, suburb, or district |
| `countyName` | string | County or administrative district |
| `cityName` | string | City or town |
| `stateName` | string | State, province, or region |
| `postalCode` | string | ZIP or postal code |
| `countryName` | string | Full country name |
| `countryCode` | string | Lower-case ISO 3166-1 alpha-2 code, such as us, gb, de |
| `errorMessage` | string | Reason a listing failed; `null` on success |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |

### Tips for best results

- **Start small.** Run 10 URLs before committing to hundreds — proxy setup and URL-format issues surface in the first few rows.
- **Switch to Residential if you get blocked.** Datacenter (US) clears most listings; residential helps when you see repeated 403s or CAPTCHAs.
- **Cap test runs with `resultsLimit`.** Set it to 20–50 while you confirm the output fits your pipeline, then drop it to `0` for the full batch.
- **Rural listings may stop at the street.** If the area is sparsely mapped, `streetNumber` can be `null` even with valid coordinates — that is a data limit, not an error.
- **Raise `timeoutSeconds` to ~60** when running internationally or on residential proxies.

### How can I use Airbnb address data?

**How can I use the Airbnb Address Scraper to build a short-term rental market dataset?**
Paste a batch of Airbnb room URLs for a target city and the scraper returns each listing's full street address, coordinates, and core details. Group the rows by neighborhood or postcode to map listing density, benchmark nightly prices, and spot supply gaps — a fast base layer for any Airbnb market-research project.

**How can I find an Airbnb address without booking, together with the listing details?**
Drop in a single room URL or a bare room ID. The scraper reads the coordinates embedded in the page, resolves them to a street-level address, and pairs them with the listing title, room type, rating, and host — so you get the real location and the context in one row, no reservation required.

**How can I enrich a list of Airbnb URLs with addresses for real estate research?**
Already have Airbnb links from another source? Set `resultsLimit` to `0` and feed the whole list. Every URL comes back as one row with a full address, coordinates, and listing stats — turning raw links into a geocoded address database you can cross-reference with land registries, planning records, or census data.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `urls` (type: `array`):

List of Airbnb room URLs to look up addresses for. Each URL must be a valid Airbnb listing, e.g. https://www.airbnb.com/rooms/1234567890

## `maxRetries` (type: `integer`):

How many times to retry a failed request before giving up and recording an error for that listing.

## `requestTimeoutSecs` (type: `integer`):

Maximum number of seconds to wait for a response before timing out. Increase if you see frequent timeout errors on slow proxy tiers.

## `maxItems` (type: `integer`):

Maximum number of URLs to process in a single run. Useful for testing or capping costs. Set to 0 for no limit.

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

Select proxies to use for requests. Helps avoid IP blocking and rate limits. Datacenter proxies (US) are the default and work well for most listings.

## Actor input object example

```json
{
  "urls": [
    "https://www.airbnb.com/rooms/1003437049851150279",
    "35117227",
    "https://www.airbnb.com/rooms/35122073"
  ],
  "maxRetries": 3,
  "requestTimeoutSecs": 30,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "urls": [
        "https://www.airbnb.com/rooms/1003437049851150279",
        "https://www.airbnb.com/rooms/672163727533057047",
        "https://www.airbnb.com/rooms/1343459621326001449",
        "35117227",
        "https://www.airbnb.com/rooms/35122073"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/airbnb-address-scraper-cheap").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 = {
    "urls": [
        "https://www.airbnb.com/rooms/1003437049851150279",
        "https://www.airbnb.com/rooms/672163727533057047",
        "https://www.airbnb.com/rooms/1343459621326001449",
        "35117227",
        "https://www.airbnb.com/rooms/35122073",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/airbnb-address-scraper-cheap").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 '{
  "urls": [
    "https://www.airbnb.com/rooms/1003437049851150279",
    "https://www.airbnb.com/rooms/672163727533057047",
    "https://www.airbnb.com/rooms/1343459621326001449",
    "35117227",
    "https://www.airbnb.com/rooms/35122073"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call data_api/airbnb-address-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/WJnDXYl66kjlAzXiu/builds/De4zaVkaMmBWsba9t/openapi.json
