Airbnb Listings Scraper - Stays, Prices & Ratings avatar

Airbnb Listings Scraper - Stays, Prices & Ratings

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Airbnb Listings Scraper - Stays, Prices & Ratings

Airbnb Listings Scraper - Stays, Prices & Ratings

Scrape Airbnb vacation rentals by city across global markets. Extract stay prices, ratings, review counts, images, and listing URLs. Filter by room type, category tags, and property type for Excel, CSV, or JSON.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Airbnb Listings Scraper — Stays, Prices & Ratings

Scrape Airbnb vacation rentals by destination across global storefronts — prices, ratings, images, listing URLs, public host identity, locality, and geo leads. No login, no Airbnb API key.

  • Search any city or destination on 90+ Airbnb market domains (www.airbnb.com, www.airbnb.jp, www.airbnb.co.uk, …)
  • Filter Stays by room type, category rail tags (Amazing views, Cabins, …), and property type
  • Export name, nightly/total price, currency, rating, review count, image, and URL to JSON, CSV, or Excel
  • Enrich a bounded number of public listing Detail pages and follow each discovered public Host Profile at most once
  • Paste a filtered browser URL into startUrls when you need UI-only filters
  • Pay per event: $0.005 per run start + $2.00 per 1,000 results (platform usage included; Gold+ Store tiers $1.50 / 1,000)

Airbnb does not offer a public listings API for third-party apps. This Actor opens the same public Airbnb search pages people browse and returns structured rows you can schedule, webhook, or pipe into Sheets, Make, n8n, Zapier, and AI agents.


Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


What does the Airbnb Listings Scraper do?

This Actor is an Airbnb scraper for Stays search results. Enter a destination (or paste search URLs), optionally pick a market/currency and filters, and get a clean dataset of vacation rental cards — ready for pricing research, competitive monitoring, or travel content workflows.

It is useful when you need:

  • Nightly and stay-total price snapshots for a city or neighborhood
  • Rating and review-count signals across competing listings
  • Multi-country storefront coverage (Japan, UK, Singapore, EU, …) with matching currency
  • Category-rail scans (Amazing views, Beachfront, Cabins, …) without hand-copying pages
  • An Airbnb API alternative for Excel / CSV / JSON pipelines

Who is it for?

Short-term rental hosts and property managers

  • Benchmark nightly rates against nearby stays
  • Watch new inventory and rating trends in your market

Real estate and market analysts

  • Compare supply and pricing across cities and Airbnb domains
  • Schedule recurring scrapes for time-series pricing

Travel product and content teams

  • Build destination pages and rental guides from structured stay data
  • Feed listings into CMS, BI, or affiliate workflows

Developers and data scientists

  • Automate Airbnb search extraction via Apify API, webhooks, or integrations
  • Combine with your own enrichment for dashboards and ML features

What data can you extract from Airbnb?

Each dataset item is one Airbnb stay. Search supplies the card-level fields; bounded Detail/Profile enrichment adds public lead fields when available:

Data pointDescription
Listing name & URLStay title and canonical /rooms/… link
PriceParsed nightly (or primary displayed) amount
Total priceParsed stay total when Airbnb shows it
CurrencyISO code from the card or your configured currency
Rating & reviewsGuest score and review count when shown
Property typeCard subtitle (e.g. entire loft, private room)
LocationLocation line from the card when present
ImagePrimary card image URL
Market / domainStorefront used for the search
Filters appliedcategoryTag, roomTypesApplied, propertyTypeIdsApplied

Search prefers Airbnb's embedded SSR (#data-deferred-state-0) and falls back to DOM cards when needed. With enrichDetails=true, the worker opens at most detailEnrichLimit public listing Detail pages and follows each discovered public Host Profile once. It does not log in, send a message, or scrape private booking/contact data.

Lead and contact fields

Every row contains the complete ten-key lead shape. Empty values remain explicit and are paired with a field-specific reason in leadAbsences.

FieldTypeAirbnb meaning
phones[{value, type, e164?}]Public host/listing phone numbers found on measured Detail or public Host Profile surfaces. The accepted Dream Lodge row returned [].
emails[{value, type}]Public host/listing email addresses. The accepted row returned [].
address{street, unit, locality, region, postalCode, country, full}Public listing location. unit is the door number when exposed. The accepted public Detail exposed locality/full=Singapore, not a street or unit.
geo{lat, lng} or nullPublic approximate listing coordinates. The accepted row exposed 1.3101, 103.8581; coordinates supplement, not replace, a postal address.
person{name, role?} or nullSeparate named host person when verified. The accepted run did not complete the optional Host Profile follow, so this remained null with 未验证.
orgobject or nullPublic host/profile identity and optional profile facts. The accepted Detail exposed Dream Lodge, profile ID 1465766722666010133, and its public profile URL.
web{website, socials[]}Public Host Profile/listing URL and host-level social links. Airbnb platform footer accounts are excluded.
leadSourcestring enumSurface that produced the lead: search, detail, entity, contact, or reveal-xhr. A completed public Host Profile merge uses entity.
leadRevealstring enumHow the lead was exposed: visible, click, xhr, gated, image, or absent. Current public Detail/Profile fields are visible.
leadAbsencesobject/mapPer-field reason: 本站无 only for a measured public-surface absence, 闸门锁 for login/action gates, or 未验证 when Detail/Profile acquisition did not complete.

Reveal cost

  • enrichDetails defaults to true; detailEnrichLimit defaults to 3 and is capped at 10.
  • Each selected row can add one public listing Detail acquisition and, when a valid host link is discovered, at most one public Host Profile acquisition.
  • No phone/email reveal click is performed. Message host is a communication/login action, not a contact reveal control, and the Actor never submits it.
  • Detail/Profile enrichment increases run time and proxy/browser use. Rows outside the limit still keep all lead keys with honest 未验证 reasons.

Honest limitations

  • Airbnb commonly withholds exact street and door number on public pre-booking pages. The accepted row had only Singapore plus approximate coordinates.
  • The accepted latest-build row exposed Dream Lodge from Detail, but the optional Host Profile follow did not complete (profileFollowed=0). Profile-dependent person/social fields therefore remain 未验证, not 本站无.
  • The measured public Detail/Profile samples did not expose host phone, email, or host-level social accounts. Airbnb platform social links are not attributed to the host.
  • Help Contact and Message host are login/communication gates. The Actor does not log in, send messages, make bookings, or claim gated data is publicly available.
  • Search-only rows whose enrichment fails use 未验证; they are not evidence that a field is absent across Airbnb.

More Actors like this

Need a similar travel or listings Actor? Start with these peers, then browse curated picks by category:

ActorBest for
Booking.com & Airbnb ScraperBooking.com + Airbnb stays, prices, and listing URLs
Booking.com Hotel ScraperHotels, prices, ratings, and availability on Booking.com
Agoda Hotel ScraperAgoda hotels with prices, ratings, and listing URLs
Trip.com Hotel ScraperTrip.com hotels, prices, and listing details
Expedia Hotel ScraperExpedia hotels and stay search data

Browse by category

See the full catalog in Related Actors below.

How to scrape Airbnb listings

  1. Open this Actor in Apify Console.
  2. Enter a destination (for example Osaka, London, Bali) or paste Airbnb search URLs into startUrls.
  3. Optionally set market, currency, dates, guests, room types, category tags, and property types.
  4. Keep the first run small (maxResults 5–20) to validate fields and cost.
  5. Click Start, then download JSON, CSV, or Excel.

Markets and storefronts

Pick a market code (or override domain / locale / currency). The Actor builds:

https://{host}/s/{destination}/homes?…&display_currency={currency}

When Apify Proxy is enabled and no proxy country is set, apifyProxyCountry defaults to the market country.

Examples: US, GB, JP, SG, DE, FR, AU, BR, CA, CA_FR, …

Language-specific hosts use dedicated codes (e.g. CA_FR → fr.airbnb.ca) so the input enum maps 1:1 to a domain.


Stays filters

InputAirbnb paramNotes
roomTypesroom_types[]Entire home/apt, Private room, Shared room, Hotel room (OR)
categoryTagscategory_tagCategory rail (Amazing views → Tag:8536, …). Each tag runs a separate search; results merge and dedupe by listing URL
propertyTypeIdsproperty_type_id[]Cabin, House, Villa, … (labels or numeric IDs)
startUrls—Full search URLs from the Airbnb UI (best escape hatch for rare filters)
placeIdplace_idOptional Airbnb place id when you already have one

Multiple roomTypes / propertyTypeIds go on the same URL. Multiple categoryTags run sequentially and share one global maxResults cap.


Input

FieldTypeDefaultDescription
destinationstring—City or place to search (required unless startUrls is set)
marketstringUSAirbnb storefront / market code
domainstring—Optional host override (e.g. www.airbnb.co.uk)
localestringmarket defaultPlaywright / UI locale override
currencystringmarket defaultdisplay_currency (USD, EUR, JPY, …)
placeIdstring—Optional Airbnb place id
checkin / checkoutstring—YYYY-MM-DD trip dates for priced availability
adultsinteger2Guest count
roomTypesstring[][]Room type filters
categoryTagsstring[][]Category labels or Tag:id values
propertyTypeIds(string|integer)[][]Property type labels or IDs
startUrlsstring[] / {url}[][]Ready-made Airbnb search URLs
detailUrlsURL[][]Optional genuine Airbnb /rooms/{listingId} URLs; skips destination search and requires enrichDetails=true
enrichDetailsbooleantrueFetch bounded listing Details and follow each discovered public Host Profile once
detailEnrichLimitinteger3Maximum Detail/Profile enrichments, 1–10
maxResultsinteger50Max listings to save (1–500)
proxyobjectoffOptional Apify Proxy configuration

Key-value store artifacts:

  • INPUT_ECHO — normalized public input
  • RUN_SUMMARY — query counts, scraped/pushed totals, billing stop flag
  • ERROR_SUMMARY — written on invalid input or scrape failure

Pricing

This Actor uses pay-per-event pricing. Platform usage costs are included — you do not pay separate Apify compute on top of the event prices below (User pays platform usage costs: No).

EventPrice
Actor Start (apify-actor-start)$0.005 per start
Result (apify-default-dataset-item)$2.00 / 1,000 listings ($0.002 each) on FREE–SILVER; $1.50 / 1,000 ($0.0015 each) on GOLD–DIAMOND

Every dataset row is billed as one result.

Store discount tiers

Tier$/1,000per result
FREE*$2.000$0.002
BRONZE$2.000$0.002
SILVER$2.000$0.002
GOLD$1.500$0.0015
PLATINUM$1.500$0.0015
DIAMOND$1.500$0.0015

*FREE is the list price before any Store volume discount. GOLD, PLATINUM, and DIAMOND pay $1.50 / 1,000.

Example cost estimates

ListingsFREE–SILVERGOLD–DIAMOND
20~$0.045~$0.035
1,000~$2.005~$1.505
10,000~$20.005~$15.005

*Assumes one Actor start plus the tier result price. Exact start billing can scale with allocated memory (one start event per GB, minimum one). This Actor defaults to 512 MB, so a typical run is one start event.

Set a Maximum charge per run in Console if you want a hard PPE budget ceiling — the Actor stops pushing when the remaining dataset-item budget is exhausted.


Tips for better Airbnb stay data

  • Start with maxResults 5–20 before city-wide runs.
  • Keep detailEnrichLimit small when you need lead enrichment without opening every listing Detail.
  • Leave dates empty for flexible search; set both check-in and check-out for trip-specific pricing.
  • Prefer one categoryTag first; multiple tags multiply search rounds.
  • If a category or property-type ID drifts, copy the filtered UI URL into startUrls.
  • Use residential proxy for production volume; skip proxy for cheap local/cloud smoke tests when the datacenter path works.
  • Schedule weekly runs on the same destination to build a pricing time series.

FAQ

Can I scrape Airbnb without an API key or login?

Yes. The Actor uses public Airbnb search pages. You do not need an Airbnb developer key or account.

Does this scrape Experiences or Services?

No. Scope is Stays (/homes) only — room types, category rail, and property types.

Why did I get fewer listings than maxResults?

Airbnb availability, dates, filters, captchas, or empty markets can shrink the result set. Broaden the destination, clear dates/filters, or retry with residential proxy.

How do I get prices in JPY / EUR / GBP?

Set market (and/or currency) so the search uses display_currency. Card currency can still vary by locale; the Actor falls back to your configured currency when parsing.

Can I use my own Airbnb search URL?

Yes. Put one or more URLs in startUrls. Pagination still respects maxResults via items_offset when applicable.


Standby / Live View

  • GET / — service metadata
  • GET /health — health check
  • GET /input-example — sample input
  • GET /openapi.json — OpenAPI document

Standby is for live-view metadata. Use normal Actor runs for scraping.


Disclaimer

This Actor is not affiliated with Airbnb. Use it only on publicly available pages, respect Airbnb’s terms and applicable law, and keep request volume reasonable. You are responsible for how you use the data.

All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss