Airbnb Phone Number Scraper
Pricing
$19.99/month + usage
Airbnb Phone Number Scraper
Airbnb Phone Number Scraper extracts publicly listed host and property phone numbers from Airbnb listings. Build targeted contact lists by city or property type. Ideal for marketers, agencies, and service providers.
Pricing
$19.99/month + usage
Rating
5.0
(4)
Developer
Scraper Engine
Maintained by CommunityActor stats
2
Bookmarked
74
Total users
5
Monthly active users
a day ago
Last modified
Categories
Share
Airbnb Phone Number Scraper — Titles, URLs and Phone Numbers
Airbnb Phone Number Scraper runs a Google site:airbnb.com search for your keywords and returns every indexed result as structured JSON: listing title, description snippet, URL, and a phone number whenever one is genuinely present in the public text. Each row also includes the keyword, country, and dial code used to validate any number found. No HTML parsing on your end — output loads straight into a spreadsheet, database, or LLM pipeline. Run it on Apify to get started.
What is Airbnb Phone Number Scraper?
Airbnb Phone Number Scraper is an Apify Actor that queries Google for site:airbnb.com results matching your keywords and turns each indexed hit into a structured JSON row — it never opens an Airbnb page directly. It captures a public phone number only in the rare case one is present in the indexed snippet, and returns null rather than guessing on every other row. No Airbnb account or login is required — the Actor only authenticates against Apify's own Google SERP proxy. It's built for lead researchers, market analysts, and developers who need Airbnb result discovery data without maintaining their own scraping and proxy infrastructure.
What Airbnb host contact data is publicly available to scrape?
Airbnb never publishes a host's real phone number or email on a public listing page. The table shows what's reachable without logging in versus what stays behind Airbnb's booking relay.
| Data Category | Publicly Available | Restricted behind Airbnb's booking relay |
|---|---|---|
| Listing title & description | Yes | — |
| Listing URL | Yes | — |
| Host first name | Sometimes | Full legal name — account/booking |
| Host phone number | Rare, if pasted into public text | Real number — masked until a confirmed booking |
| Host email address | No | Never shown — relay only |
| Availability calendar | Per-night rate only | Full calendar — Airbnb site/app |
Airbnb Phone Number Scraper only returns what Google has already indexed — nothing behind a login wall, and never a masked number invented to fill the field.
What data can I extract with Airbnb Phone Number Scraper?
Airbnb Phone Number Scraper returns one row per Google-indexed airbnb.com result, covering the result's identity, its source keyword, and any phone number genuinely present in the snippet.
| Field Name | Description |
|---|---|
platform | Source label for the query, e.g. Airbnb.com |
keyword | The search keyword that produced this row |
title | Result title, taken from Google's heading for the result |
description | Result snippet text shown under the title on the Google results page |
url | The airbnb.com URL Google indexed for this result |
phone_number | A validated international phone number if one is genuinely present in the snippet, else null — never fabricated |
country | The country selected in the input, used to label the run |
dial_code | The dial code (e.g. +44) tied to the selected country, used to normalize any phone number found |
Result identity fields
platform, keyword, title, description, url — these identify which query produced the row and which Airbnb page Google indexed.
Contact and location fields
phone_number, country, dial_code — the phone number is null-tolerant by design, and the country/dial code describe the run's selected filter, not a detected location.
🤖 Add-on: Need additional Airbnb data?
Airbnb Phone Number Scraper only reads Google's index, so it doesn't return price, amenities, host ratings, or availability. For full listing detail, pair it with Airbnb Scraper. For calendar pricing across a full year, use Airbnb Full Year Price Tracker: Cheapest & Most Expensive Dates. For booking-rate and open-date analysis, use Airbnb Occupancy Scraper with Booking Rate Percentage.
Why not build this yourself?
Airbnb doesn't publish a public API for searching listings by keyword or looking up contact details, and Google actively pushes back on automated search traffic with interstitial challenges and IP-based throttling. Building this in-house means maintaining rotating proxies, watching for markup changes on Google's results page (which shift often enough to silently break a hand-rolled parser), and re-tuning block-detection logic every time an interstitial pattern changes. Airbnb Phone Number Scraper already routes through Apify's GOOGLE_SERP proxy group, retries blocked requests automatically, and falls back to an anchor-based parser when Google's markup drifts — so you get structured rows without owning that maintenance burden or proxy bill yourself.
How to use Airbnb Phone Number Scraper
Airbnb Phone Number Scraper runs directly on Apify — there's no separate signup or API key beyond your Apify account.
- Open Airbnb Phone Number Scraper on the Apify Store and start a run from your Apify account.
- Add one or more search terms to keywords (required) — e.g.
"london apartment". - Select country (required) — its dial code is used to validate any phone number found.
- Optionally set maxPhoneNumbers per keyword (default 20) and a custom proxyConfiguration.
- Click Start; rows stream into the dataset as Google pages are parsed.
- Export the dataset as JSON or CSV once the run finishes.
How to scale to bulk Airbnb phone number extraction
keywords accepts an array, so one run can process any number of search terms — add every market, city, or property type you want covered, and the Actor works through them one keyword at a time, applying the same maxPhoneNumbers cap to each. There's no separate bulk-URL input. To cover more than one country, queue additional runs with a different country value, since a single run applies one country/dial code across all its keywords.
What can you do with Airbnb host contact data?
- A property manager scouting a new market uses
keywordandcountryto pull every indexed Airbnb listing matching a target city, then filters for the rarephone_numbervalue to build a direct-outreach shortlist. - A host partnership sourcer uses
titleandurlto compile a list of currently active listings before visiting each page to request contact through Airbnb's own booking flow. - A vacation-rental consultant tracks SERP visibility by re-running the same
keywordsover time and comparing whichurlvalues keep appearing for a target market. - A lead-gen researcher scopes a search to one region using
dial_codeandcountry, then feedstitleanddescriptioninto a spreadsheet for manual qualification. - An AI agent doing market research ingests
titleanddescriptiontext directly into an LLM summarization or classification pipeline — the JSON needs no HTML parsing before it reaches the model.
How does Airbnb Phone Number Scraper handle rate limits and blocking?
Every request routes exclusively through Apify's GOOGLE_SERP proxy group. The Actor randomizes the user-agent and accept-language header on each request and waits a randomized 1–2 second delay before firing it. If a page fetch fails or looks blocked, it waits 3–6 seconds and retries on a freshly rotated proxy URL, up to 3 attempts per page. A block is only flagged when a response is small and carries an explicit "unusual traffic" interstitial phrase (or lands on a /sorry/ URL) — a normal, large results page is never misflagged just because it embeds a captcha script. If a keyword hits 3 consecutive failed or empty pages, the Actor stops that keyword, logs why, and moves on to the next one rather than failing the whole run. It does not solve CAPTCHAs — a genuine block after all retries simply ends that keyword's collection.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
keywords | Yes | array of strings | A list of search keywords. Each is combined with site:airbnb.com to discover indexed Airbnb results on Google. | ["london apartment", "beach villa"] |
platform | No | string (enum: "Airbnb", default "Airbnb") | Select platform. For now this actor targets Airbnb via google.com SERP. | "Airbnb" |
country | Yes | string (enum of 150+ dial-coded countries, default "United Kingdom (+44)") | Select a country to scrape related phone numbers. The dial code is used to normalize and filter phone numbers. | "United Kingdom (+44)" |
maxPhoneNumbers | No | integer (min 1, max 10000, default 20) | Maximum number of airbnb.com results to collect per keyword. The scraper stops once this limit is reached. | 20 |
engine | No | string (enum: "legacy", default "legacy") | Scraping engine. This actor uses the GOOGLE_SERP proxy engine ('legacy'). | "legacy" |
proxyConfiguration | No | object (proxy editor) | Proxy settings. This actor always routes Google requests through the Apify GOOGLE_SERP proxy group. | { "useApifyProxy": true } |
Example input
{"keywords": ["london apartment", "beach villa"],"platform": "Airbnb","country": "United Kingdom (+44)","maxPhoneNumbers": 20,"engine": "legacy","proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"] }}
⬆️ Output
Airbnb Phone Number Scraper writes typed, normalized JSON to the Apify dataset — one row per discovered airbnb.com result, with the same 8 fields on every row. Export the dataset using Apify's standard options (JSON, CSV, Excel, XML, and more). Every row pushed to the dataset is billed under the row_result charged event; the Actor never pushes an uncharged accounting row, since a row is only created after a keyword page yields an actual discovered result.
Example output
[{"platform": "Airbnb.com","keyword": "london apartment","title": "Modern 1-Bed Apartment in Central London - Airbnb","description": "Entire rental unit in London. Superhost. 2 guests · 1 bedroom · 1 bath...","url": "https://www.airbnb.com/rooms/12345678","phone_number": null,"country": "United Kingdom","dial_code": "+44"},{"platform": "Airbnb.com","keyword": "beach villa portugal","title": "Beachfront Villa with Pool - Algarve - Airbnb","description": "Entire villa in Albufeira. Contact host directly: +351 912 345 678 for group bookings...","url": "https://www.airbnb.com/rooms/87654321","phone_number": "+351912345678","country": "United Kingdom","dial_code": "+44"}]
Most rows will have phone_number: null — that reflects Airbnb's own contact-hiding design, not a fault of the scraper, and the field is only ever populated with a genuinely present, validated number.
How does it work?
Airbnb Phone Number Scraper builds a site:airbnb.com "<keyword>" query for each keyword you provide and sends it to Google's search endpoint over aiohttp, routed exclusively through Apify's GOOGLE_SERP proxy group. Each request carries a randomized user-agent and accept-language header, with a short randomized delay before it fires. The returned HTML is parsed with BeautifulSoup: the Actor first looks for Google's standard result-block markup, then falls back to scanning every airbnb.com anchor near a heading if that markup has shifted, so a normal results page never reads as empty just because Google changed a CSS class name. From each match it pulls the title, snippet, and URL, and applies a strict phone filter that only accepts a token carrying an explicit international prefix — never inventing a number from listing metadata. Only data Google has already indexed publicly is returned, and the 8-field row schema stays the same regardless of markup drift.
Integrations
Airbnb Phone Number Scraper runs on Apify, so it works anywhere you can call an HTTP API or an Apify client library — no proprietary SDK required.
Calling Airbnb Phone Number Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("scraper-engine/airbnb-phone-number-scraper").call(run_input={"keywords": ["london apartment"],"country": "United Kingdom (+44)","maxPhoneNumbers": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
MCP integration for AI agents
Airbnb Phone Number Scraper is reachable through Apify's Actors MCP Server, which exposes Actors on Apify Store as callable tools for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by connecting from this Actor's page in Apify Console, or by running npx @apify/actors-mcp-server configured with this Actor's store ID.
No-code tools (n8n, Make, LangChain)
In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint, with your Apify API token in the Authorization header. In Make, use the Apify app's "Run Actor and get dataset items" module and map keywords and country from earlier scenario steps. In LangChain, call the same Apify API endpoint from a custom Tool, or load results with the community Apify dataset loader, so an agent can pull fresh Airbnb SERP rows mid-conversation.
Is it legal to scrape Airbnb host phone numbers?
Scraping publicly available web data, including Google's own search index, is generally lawful in most jurisdictions — this Actor only reads what Google has already indexed from Airbnb's public pages, and returns null rather than a private or masked number for the vast majority of rows. Because a phone number is personal data whenever one is captured, GDPR (EU/UK) and CCPA (California) still apply to how you store, process, and use it once it leaves this dataset — you need a lawful basis for retention and must honor deletion or opt-out requests if the number identifies a person. This Actor does not access anything behind Airbnb's login wall or booking-relay system. Consult legal counsel before bulk-storing or acting on personal data collected this way, particularly for outreach or marketing use.
Frequently asked questions
What Airbnb result fields does Airbnb Phone Number Scraper return?
It returns title, url, description, phone_number, and keyword on every row, plus platform, country, and dial_code. See "What data can I extract with Airbnb Phone Number Scraper?" above for the full field table.
Does Airbnb Phone Number Scraper require an Airbnb account or login?
No. It queries Google directly and never opens an authenticated Airbnb session — the only credential involved is your Apify account used to run the Actor.
How many Airbnb results can I extract in one run?
Up to maxPhoneNumbers (max 10,000) per keyword, multiplied by however many keywords you add to the keywords array — collection stops earlier per keyword if Google's index runs out of matching results first.
What happens if a keyword returns no phone numbers?
That's expected and not an error: the Actor still returns a row for every indexed airbnb.com result with title, description, and url populated, and simply sets phone_number to null for that row, since Airbnb strips contact details from almost all public pages.
Can I scrape multiple Airbnb keywords at once?
Yes — keywords is an array, so a single run works through as many search terms as you add, one after another, each capped by the same maxPhoneNumbers limit. country applies once per run; use separate runs for different countries.
Does Airbnb Phone Number Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's registered on Apify's Actors MCP Server for MCP-compatible clients, and it's callable as a plain HTTP endpoint by any agent framework that can send a request and read back JSON.
How is Airbnb Phone Number Scraper different from Airbnb Scraper?
Airbnb Phone Number Scraper discovers Google-indexed airbnb.com results by keyword and captures a phone number only on the rare row where one is publicly indexed. Airbnb Scraper, a separate Scraper-Engine Actor, opens the listing pages themselves to return full detail — price, amenities, host info, reviews, and availability. Use this Actor for keyword-driven discovery, and Airbnb Scraper once you already have listing URLs and want their full detail.
Does Airbnb Phone Number Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or selectors needed. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.
What happens when Google or Airbnb changes its layout or anti-bot system?
The Actor is maintained, and its anchor-based fallback parser is built specifically to keep working through Google markup drift, so the 8-field output schema stays stable. No specific update turnaround is promised.
Can I use Airbnb Phone Number Scraper without managing proxies or browser infrastructure?
Yes — the Actor provisions and rotates Apify's GOOGLE_SERP proxy automatically for every request; you don't configure or maintain any proxy pool yourself.
Which Airbnb Phone Number Scraper fields work best for AI training data and RAG indexing?
For RAG, index title and description — they carry the highest-information free text. For structured training data, phone_number, url, keyword, and dial_code return as consistent typed primitives (string or null) across every row.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Airbnb Scraper | Full Airbnb listing detail — price, amenities, host info, reviews, and availability |
| Airbnb Full Year Price Tracker: Cheapest & Most Expensive Dates | Daily calendar pricing across a full year, flagging the cheapest and most expensive dates |
| Airbnb Occupancy Scraper with Booking Rate Percentage | Booking-rate percentage and open-date gaps per listing |
| Extract Emails, Contacts, & Socials from Any Website | Multi-platform keyword-based email and contact discovery using the same SERP-style engine |
Your feedback
Found a bug or think a field is missing? Let us know so we can fix it. Reach the Scraper-Engine team through the Issues tab on this Actor's Apify Store page — we actively maintain this Actor as Google's markup and Airbnb's public pages change.
