Airbnb Listings & Pricing Scraper icon

Automation · Travel

Airbnb Listings & Pricing Scraper

Reliable Airbnb listing, pricing, and host data — the market-leading alternative fails 1 in 13 runs; we build for the retry path from day one.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Airbnb runs its own vast homes-search index with no public API and no documented quota — access is gated by anti-bot defenses, not an exhaustible rate limit. This Actor walks a search-results page (either a place name like "San Francisco, CA" or a full search URL you paste in, with your own check-in/check-out/guest filters applied) and pulls each listing's price, currency, rating, review count, host, superhost status, bedrooms/beds/bathrooms, location, and photos straight out of the page's embedded listing data. Flip on detail enrichment and we also fetch each listing's own page for its amenities list.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • STR investment comps — pull live nightly pricing and occupancy signals (ratings, review counts) for a market before buying a short-term rental property.
  • Dynamic-pricing tools — feed real competitor nightly rates into your own pricing model for a neighborhood or city.
  • Property-management benchmarking — compare your listings' price, rating, and amenities against nearby Superhosts.
  • Housing-policy research — track short-term-rental density and pricing by neighborhood for zoning or policy studies.
  • Travel-price monitoring — watch how nightly rates move for a destination as check-in dates approach.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
location string no Place name, e.g. San Francisco, CA. Required if searchUrl is not set — used to build the Airbnb search URL.
searchUrl string no Full airbnb.com/s/.../homes search URL with your own filters already applied. Wins over location if both are set.
checkIn string no ISO date (YYYY-MM-DD). Appended as checkin; drives totalPrice on each row.
checkOut string no ISO date (YYYY-MM-DD), must be after checkIn. Appended as checkout.
guests integer no Number of adult guests. Appended as adults.
maxResults integer no Hard cap on dataset rows. Pagination stops once this cap is hit.
enableDetailEnrichment boolean no Fetch each emitted listing's /rooms/<id> page for its amenities list. Off by default — multiplies request volume.
proxyCountry string no 2-letter uppercase country code. Pins the residential proxy exit country for every request — never randomized.
{
  "location": "Austin, TX",
  "maxResults": 3,
  "enableDetailEnrichment": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

listing_idtitleprice_per_nighttotal_priceratingreview_counthost_nameamenitiesurl

{
  "listing_id": "12345678",
  "url": "https://www.airbnb.com/rooms/12345678",
  "title": "Modern loft near Golden Gate Park",
  "listing_type": "Entire home",
  "room_type": "Entire home/apt",
  "city": "San Francisco",
  "country": "United States",
  "lat": 37.7694,
  "lng": -122.4862,
  "price_per_night": 217.0,
  "currency": "USD",
  "total_price": 1085.0,
  "rating": 4.87,
  "review_count": 213,
  "host_id": "987654",
  "host_name": "Maria",
  "is_superhost": true,
  "bedrooms": 2,
  "beds": 3,
  "bathrooms": 1.5,
  "max_guests": 4,
  "amenities": [],
  "image_urls": [
    "https://a0.muscache.com/im/pictures/example.jpg"
  ],
  "scraped_at": "2026-09-09T14:32:07Z"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result scraped$0.0029Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Airbnb is fronted by anti-bot defenses — a residential proxy is required, and the Actor rotates its session and browser fingerprint on any block, which can still slow a run down under heavy load.
  • Amenities are only populated when <code>enableDetailEnrichment</code> is on; the base search payload rarely carries them.
  • Review text, full calendar/availability, and Airbnb Experiences/Luxe listings are out of scope — only aggregate rating/review count and homes search are covered.
  • Prices and currency are passed through exactly as Airbnb reports them — no currency conversion is performed.

FAQ

Do I need an Airbnb account or API key?
No. Airbnb publishes no public API for this data. This Actor scrapes public search-results pages — see the Limitations section for what that means for reliability.
Can I scrape a specific search with my own filters?
Yes — apply your filters on airbnb.com, copy the resulting search URL, and paste it into <code>searchUrl</code>. It wins over <code>location</code> if both are set.
Why do I need check-in/check-out dates?
They're optional. Without them you get each listing's base nightly price. With both set, we also append them to the search and populate <code>total_price</code> for the stay.
What does detail-page enrichment add?
Turning on <code>enableDetailEnrichment</code> fetches each emitted listing's own page for its amenities list. It's off by default because it roughly doubles the request volume.
Why does this need a residential proxy?
Airbnb fronts its search pages with anti-bot defenses. The default proxy configuration already requests a RESIDENTIAL exit pinned to your chosen country — leave it as-is for reliable results.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run