Airbnb Phone Number Scraper with Superhost Lead Finder avatar

Airbnb Phone Number Scraper with Superhost Lead Finder

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Airbnb Phone Number Scraper with Superhost Lead Finder

Airbnb Phone Number Scraper with Superhost Lead Finder

Airbnb Phone Number Scraper gathers public phone contacts for agencies and B2B teams targeting short-term rental hosts. Reduce manual research and scale outbound calling efficiently.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

0

Monthly active users

10 days ago

Last modified

Share

Airbnb Phone Number Scraper — Bulk Host and Listing Leads

Airbnb Phone Number Scraper with Superhost Lead Finder turns keywords and locations into a bulk Airbnb lead-discovery run: it queries Google for site:airbnb.com results, classifies each hit as a listing, host, or experience, and captures any public email, contact link, or phone number that actually appears in the snippet. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a monitoring pipeline. Run one job across dozens of niches and get a deduplicated, keyword-attributed lead list back.

What is Airbnb Phone Number Scraper with Superhost Lead Finder?

Airbnb Phone Number Scraper with Superhost Lead Finder composes a site:airbnb.com Google search-engine-results-page (SERP) query for every keyword — and, optionally, every keyword × location combination — then parses the returned result cards into typed lead rows: listing, host, experience, help, community, or other. It never logs into Airbnb and never opens an Airbnb page directly; it only sees what Google has already indexed from Airbnb's public pages, so no Airbnb account, cookie, or session is required to run it.

  • Bulk multi-keyword × multi-location discovery in a single run
  • Cross-keyword de-duplication by Airbnb listing/host ID, or by URL when no ID is derivable
  • Result classification with the Airbnb ID parsed straight out of the URL
  • Public email and external contact-link capture from snippet text — real values only, null otherwise
  • Per-run lead summary row (leadSummary) rolling up totals, per-keyword counts, and duplicates removed
  • Automatic proxy escalation (Apify GOOGLE_SERP group, then residential) when Google blocks a request

What data can you get with Airbnb Phone Number Scraper with Superhost Lead Finder?

Every run writes two shapes of row to the same dataset: one row per discovered Airbnb result, and one aggregate summary row per run.

Result TypeExtracted FieldsPrimary Use Case
Airbnb lead (listing / host / experience / help / community / other)sourceKeyword, location, resultType, airbnbId, platform, keyword, title, description, url, email, contactLink, phone_number, country, dial_code, scrapedAtBulk outreach and prospecting list per keyword/niche
Lead summary (once per run, isSummary: true)type, isSummary, resultType ("summary"), title, description, country, dial_code, scrapedAt, plus a nested leadSummary object (totalUniqueLeads, totalKeywords, totalLocations, emailsFound, duplicatesRemoved, leadsPerKeyword)Per-run QA and keyword-performance rollup without a separate export step

Lead summary row

When includeSummaryRow is on (default), the actor appends one extra row after all keywords finish, with isSummary: true and resultType: "summary". Its leadSummary object carries totalUniqueLeads, totalKeywords, totalLocations, emailsFound, duplicatesRemoved, and a leadsPerKeyword map of keyword → unique-lead count. It's the fastest way to check keyword performance and email yield for a run without pulling every row into a spreadsheet first.

Why not build this yourself?

Airbnb does not publish a public API for keyword-based host or listing search, and it does not expose contact details on rendered public pages at all — anything you'd extract has to come from whatever Google itself has indexed. Building this yourself means reverse-engineering Google's shifting result markup (the actor's parser has a primary div.MjjYud path and a fallback anchor-based path for when Google's class names drift), detecting soft-block pages without false-positiving on Google's own JS chrome, and building a proxy escalation ladder (direct → GOOGLE_SERP datacenter → residential) with jittered retries. Airbnb Phone Number Scraper with Superhost Lead Finder already does all of that and returns normalized, deduplicated JSON.

How to scrape Airbnb with Airbnb Phone Number Scraper with Superhost Lead Finder?

  1. Open Airbnb Phone Number Scraper with Superhost Lead Finder on the Scrapier Apify Store listing
  2. Enter your search terms in searchKeywords — no field is schema-required, but the run needs at least one keyword to produce any leads
  3. Optionally add locations to expand each keyword into a keyword × location query matrix, and set leadCountry, maxLeadsPerKeyword, captureEmails, and dedupeAcrossKeywords to taste
  4. Start the run
  5. Download or stream results as JSON, CSV, or Excel from the run's dataset

Example request via the Apify API:

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchKeywords": ["property management", "villa rental"],
"locations": ["Lisbon", "Bali"],
"leadCountry": "United Kingdom (+44)",
"maxLeadsPerKeyword": 20
}'

How to run multiple queries in one job

List every keyword in searchKeywords and, optionally, every city or region in locations — the actor forms the full keyword × location matrix (empty locations just searches each keyword alone) and runs it inside one job. Each resulting row is tagged with the exact sourceKeyword and location that produced it, and dedupeAcrossKeywords collapses the same listing/host if more than one combination finds it.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
searchKeywordsNoarrayOne or more keywords / niches / host handles to discover leads for, all in a single run. Each is turned into a site:airbnb.com Google dork. (Accepts the legacy keywords field as a fallback.)["property management", "villa rental", "co-host"]
locationsNoarrayOptional list of cities / regions. Every keyword is combined with every location to form the search matrix. Leave empty to search keywords alone.["Lisbon", "Bali"]
discoveryPlatformNostring (enum: "Airbnb")Which site the bulk SERP dork is scoped to. Currently tuned for Airbnb via google.com. (Accepts the legacy platform field as a fallback.)"Airbnb"
leadCountryNostring (enum of country + dial code labels)Country label + dial code stamped onto every discovered lead row and used to normalize any phone number that surfaces in a snippet. Does not restrict which results are searched. (Accepts the legacy country field as a fallback.)"United Kingdom (+44)"
maxLeadsPerKeywordNointeger (min 1, max 10000)Cap on unique leads collected per keyword (across its locations). Default is 20. (Accepts the legacy maxPhoneNumbers field as a fallback.)30
captureEmailsNoboolean (default true)When on, each result snippet is scanned for a public business email and an external contact link. Real values only — null when none is present.true
dedupeAcrossKeywordsNoboolean (default true)When on, a listing/host discovered by more than one keyword is kept only once (identity = Airbnb ID, else URL); the row is labeled with the first keyword that found it and duplicates are counted in the summary.true
includeSummaryRowNoboolean (default true)When on, a final summary row is appended with per-keyword counts, total unique leads, emails found, and duplicates removed (leadSummary object).true
proxyConfigurationNoobjectProxy settings. This actor enforces the GOOGLE_SERP Apify proxy group required for Google search harvesting.{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}

None of these 9 parameters are schema-required — an empty run simply logs an error and produces zero rows if searchKeywords is left empty.

Example input:

{
"searchKeywords": ["property management", "villa rental", "co-host"],
"locations": ["Lisbon", "Bali"],
"discoveryPlatform": "Airbnb",
"leadCountry": "United Kingdom (+44)",
"maxLeadsPerKeyword": 30,
"captureEmails": true,
"dedupeAcrossKeywords": true,
"includeSummaryRow": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"] }
}

Common pitfall: maxLeadsPerKeyword is applied separately to each keyword × location combination, not to the keyword as one combined total — so a keyword paired with 3 locations at maxLeadsPerKeyword: 20 can return up to roughly 60 unique rows for that keyword, not 20. Plan your cap with the number of locations in mind, and remember leadCountry only stamps and normalizes phone numbers — it never filters which Airbnb results are searched.

⬆️ Output

Airbnb Phone Number Scraper with Superhost Lead Finder writes typed JSON rows to the Actor's dataset, exportable as JSON, CSV, or Excel directly from the Apify platform. Fields that genuinely weren't present in a result — a phone number, an email, an Airbnb ID — are emitted as null, never fabricated.

Scraped results

[
{
"sourceKeyword": "villa rental",
"location": "Lisbon",
"resultType": "listing",
"airbnbId": "12345678",
"platform": "Airbnb.com",
"keyword": "villa rental",
"title": "Luxury villa with pool - Villas for Rent in Lisbon",
"description": "Entire villa hosted by Maria · 4.92 (86) · 5 bedrooms...",
"url": "https://www.airbnb.com/rooms/12345678",
"email": null,
"contactLink": null,
"phone_number": null,
"country": "United Kingdom",
"dial_code": "+44",
"scrapedAt": "2026-07-25T10:00:00+00:00"
},
{
"sourceKeyword": "property management",
"location": "Bali",
"resultType": "host",
"airbnbId": "98765432",
"platform": "Airbnb.com",
"keyword": "property management",
"title": "Made - Superhost - Bali, Indonesia - Airbnb",
"description": "Local property management team hosting 12 villas across Bali...",
"url": "https://www.airbnb.com/users/show/98765432",
"email": "contact@balivillamgmt.com",
"contactLink": "https://balivillamgmt.com",
"phone_number": null,
"country": "United Kingdom",
"dial_code": "+44",
"scrapedAt": "2026-07-25T10:00:14+00:00"
},
{
"sourceKeyword": "co-host",
"location": null,
"resultType": "listing",
"airbnbId": "45612378",
"platform": "Airbnb.com",
"keyword": "co-host",
"title": "Modern loft near the beach - Lofts for Rent",
"description": "Co-hosted stay with self check-in, managed by a local team...",
"url": "https://www.airbnb.com/rooms/45612378",
"email": null,
"contactLink": null,
"phone_number": null,
"country": "United Kingdom",
"dial_code": "+44",
"scrapedAt": "2026-07-25T10:00:29+00:00"
},
{
"type": "summary",
"isSummary": true,
"sourceKeyword": null,
"location": null,
"resultType": "summary",
"airbnbId": null,
"platform": "Airbnb.com",
"keyword": null,
"title": "Lead discovery summary",
"description": "3 unique leads across 3 keyword(s); 1 emails; 0 duplicates removed.",
"url": null,
"email": null,
"contactLink": null,
"phone_number": null,
"country": "United Kingdom",
"dial_code": "+44",
"leadSummary": {
"totalUniqueLeads": 3,
"totalKeywords": 3,
"totalLocations": 2,
"emailsFound": 1,
"duplicatesRemoved": 0,
"leadsPerKeyword": { "villa rental": 1, "property management": 1, "co-host": 1 },
"scrapedAt": "2026-07-25T10:00:30+00:00"
},
"scrapedAt": "2026-07-25T10:00:30+00:00"
}
]

Each lead row is pushed as a charged row_result event. The single per-run summary row is pushed without a charged event — filter it out of billing-sensitive counts with resultType != "summary" (or check that isSummary is not true).

How can I use the data extracted with Airbnb Phone Number Scraper with Superhost Lead Finder?

  • Property management outreach: run keywords like "property management" and "co-host" across your target cities in locations, then work the email and contactLink columns as a ready-made first-touch outreach list, with dedupeAcrossKeywords keeping the same company from appearing twice.
  • Host partnership sourcing: filter output rows to resultType: "host" (derived from /users/show/ URLs) to isolate host profile pages rather than individual listings, and use airbnbId as the stable join key when tracking the same host across multiple keyword runs.
  • AI engineers and LLM developers: call the actor with a query, receive structured JSON back, and pass title, description, and url into an LLM as grounding context for a prospecting or lead-qualification agent.
  • Market researchers: use the summary row's leadsPerKeyword map as a lightweight proxy for how much airbnb.com content Google has indexed per niche and per location, and compare it across keyword sets to spot where a market is more saturated.

How do you monitor new Airbnb leads over time?

Lead monitoring here means re-running the same keyword and location set on a schedule and comparing what's new against the last run, rather than re-discovering the same listings and hosts every time. Because dedupeAcrossKeywords identifies a row by airbnbId (or url when no ID is derivable), you can diff a new run's set of airbnbId values against a stored set from the previous run to isolate genuinely new listings or hosts for a niche. The summary row's leadsPerKeyword map makes broader shifts checkable at a glance — a rising count for a given keyword suggests Google has indexed more matching Airbnb content since the last run, without you having to diff every row by hand.

A practical workflow: schedule a run of the same searchKeywords/locations set weekly, store each run's dataset export, then compare the new run's airbnbId list against the prior run's to flag newly discovered leads, and compare leadsPerKeyword counts to flag which niches picked up new coverage. The actor has no built-in diffing — pair it with the Apify platform's Scheduler to trigger the recurring runs, and do the comparison in your own downstream script or pipeline.

Integrate Airbnb Phone Number Scraper with Superhost Lead Finder and automate your workflow

Airbnb Phone Number Scraper with Superhost Lead Finder works with any language or tool that can send an HTTP request.

REST API with Python

import requests
TOKEN = "YOUR_API_TOKEN"
ACTOR_ID = "YOUR_ACTOR_ID"
url = f"https://api.apify.com/v2/acts/{ACTOR_ID}/run-sync-get-dataset-items"
payload = {
"searchKeywords": ["property management", "villa rental"],
"locations": ["Lisbon", "Bali"],
"maxLeadsPerKeyword": 20,
}
resp = requests.post(url, params={"token": TOKEN}, json=payload)
leads = [row for row in resp.json() if not row.get("isSummary")]
print(f"Retrieved {len(leads)} leads")

MCP for query-grounded AI agents

Airbnb Phone Number Scraper with Superhost Lead Finder can be exposed to MCP-compatible clients through Apify's generic Actors MCP Server: run npx @apify/actors-mcp-server --actors YOUR_USERNAME/airbnb-phone-number-scraper-with-superhost-lead-finder with your APIFY_TOKEN set, and register it with Claude Desktop, Cursor, or any other MCP client. The agent flow: a user asks for Airbnb leads in a niche, the agent calls the tool with keywords and locations, receives structured JSON back, and grounds its answer in real discovered leads instead of guessing.

Scheduled monitoring and delivery

Use the Apify platform's built-in Scheduler to trigger runs on a recurring interval (daily, weekly, custom cron) without managing your own job runner. Results land in each run's dataset, which you pull via the API or the platform's export formats after each scheduled run completes.

Yes, in general — this actor only retrieves what Google's public search index already serves, without logging into Airbnb or bypassing any access control. But a captured phone_number or email is personal data, and personal data carries obligations regardless of how publicly it was found: under GDPR (EU/UK) and the CCPA/CPRA (California), you need a lawful basis before storing, processing, or using someone's phone number or email for outreach, and individuals can request deletion or object to that processing. Using this data for a one-off research sample carries a different risk profile than bulk storage or automated cold-outreach campaigns — the latter is where privacy-regulation exposure is highest. Consult your legal team before using extracted contact data for commercial outreach at scale.

Frequently asked questions

Does leadCountry restrict which Airbnb listings are found?

No. leadCountry only stamps the selected country and dial code onto every row and normalizes any phone number that happens to appear in a snippet — it does not filter, geo-target, or restrict which Airbnb results Google returns. Use locations if you want to target specific cities or regions.

Does setting locations change how maxLeadsPerKeyword is applied?

Yes, and it's worth planning around: the cap is enforced separately for each keyword × location combination, not once per keyword overall. A keyword run against 3 locations at maxLeadsPerKeyword: 20 can return up to roughly 60 unique rows for that keyword rather than 20, before cross-keyword deduplication is applied.

How does the scraper handle Google's anti-bot measures?

It checks each response for known block phrases (for example, "unusual traffic from your computer network" or a /sorry/index redirect) while treating any page that carries real result markers as good regardless of those phrases, to avoid false positives. On a detected block it escalates through a proxy ladder — direct or GOOGLE_SERP datacenter proxy first, then residential proxy — with randomized delays between retries, up to a bounded number of attempts before the keyword's page is skipped.

Does this scraper detect or verify Superhost status?

No. Despite the actor's name, there is no Superhost field, badge parser, or Superhost filter in this actor — it does not check, verify, or expose whether a host holds Superhost status. You can put a term like "superhost" into searchKeywords and it will be treated as an ordinary search phrase (site:airbnb.com "superhost"), but nothing in the output distinguishes a genuine Superhost from a result that merely mentions the word. If verified Superhost status is a hard requirement for your use case, cross-check the returned url against the listing/host page directly.

How many results does the scraper return per query?

Up to maxLeadsPerKeyword per keyword × location combination (default 20, configurable 1–10,000), harvested page by page until that cap is hit or three consecutive empty/failed pages stop the search for that combination. With locations set, the effective ceiling for a keyword is maxLeadsPerKeyword multiplied by the number of locations searched, before cross-keyword de-duplication.

How do I use this to monitor new Airbnb leads over time?

Schedule a run of the same searchKeywords/locations set on a recurring interval, compare the new run's airbnbId values against the previous run's to isolate newly discovered listings or hosts, and check the summary row's leadsPerKeyword counts for niches that picked up new coverage. Trigger the recurring runs with the Apify platform's Scheduler.

Does it work with Claude, ChatGPT, and AI agent frameworks?

Yes, two ways: it's reachable through Apify's generic Actors MCP Server (npx @apify/actors-mcp-server --actors YOUR_USERNAME/airbnb-phone-number-scraper-with-superhost-lead-finder) for MCP clients like Claude Desktop and Cursor, and it's callable as a plain HTTP endpoint by any agent framework that can send a request — enabling grounded agents that retrieve live Airbnb leads before answering.

How does this compare to other Airbnb lead-generation scrapers on Apify?

As observed on their Apify Store listings on 2026-07-26, competitors such as Cirkit's Airbnb Host Scraper and ScrapySpider's Airbnb Host Contact Scraper read Airbnb's own host/listing pages directly and expose a genuine boolean Superhost field (hostIsSuperhost or an equivalent badge) alongside richer per-host data. This actor takes a different, login-free path: it mines Google's indexed site:airbnb.com results across a bulk keyword × location matrix and does not detect or verify Superhost status at all — its strength is breadth and de-duplication across many niches in one job, not a single-host data depth or Superhost verification.

Can I use this without managing proxies or an Airbnb account?

Yes. No Airbnb login, cookie, or session is ever required, and proxy escalation (GOOGLE_SERP datacenter, then residential) happens automatically when Google blocks a request. You only need to supply your own proxyConfiguration if you want to override that default behavior.

Your feedback

Found a bug or a field that doesn't match what's documented here? Let the Scrapier team know through the Actor's issue tracker on its Apify Store listing. Reports like these — especially about the Superhost-naming gap — help keep this README and the underlying scraper honest as Airbnb's public pages change.