Skip to main content

Airbnb Scrapers on Apify Compared: I Ran All Five (2026)

· 14 min read
Yassine El Haddad
Software Developer & Automation Specialist

I build production AI agents, web scrapers, and automation pipelines. Most of what I publish here comes from the actual problems they run into: proxies that get banned, anti-bot stacks that fingerprint your client, RAG that drifts when the underlying data moves. Stack: Python, TypeScript, Go, FastAPI, LangChain, Crawlee, Playwright, deployed on AWS, GCP, and Cloudflare.

Five Actors on the Apify Store say they scrape Airbnb. On 6 November 2026 I pushed the identical job through all of them: one market (Porto, Portugal), one stay window (4 nights in December), ten listings, no reviews, USD. Then I read every dataset and every invoice.

Disclosure before anything else: I built and sell one of the five — the Airbnb Scraper API. That is why every number below comes from identical runs on the same day. Where the others beat mine, the tables say so; where one returned nothing at all, they say that too.

Quick answer​

For full-detail data — numeric prices, a day-by-day availability calendar, all six rating categories, reviews in the same run — the Airbnb Scraper API returned the deepest record: 99 fields, at $3.00 per 1,000 listings on the free plan. tri_angle's Airbnb Scraper is the fastest full-detail option (18.8 seconds for 10 listings) and the most battle-tested (18,458 users), but its base event carries no calendar and reviews need a second Actor. Curious Coder's is the cheapest per result on a paid plan and finished the job in six seconds, but returns card-level data: 15 fields, prices as strings. Onidivo's returned zero listings in all three modes I tried.

How I tested​

Same minute, same account, five runs launched from the Apify CLI:

InputValue
MarketPorto, Portugal
Stay window2026-12-04 to 2026-12-08 (4 nights)
Cap~10 listings per Actor
Reviewsoff (where the Actor has a switch)
CurrencyUSD
Date2026-11-06

Each Actor names its inputs differently — location_queries, locationQueries, urls, location — so each got its own correctly-formed input, capped the same way. Per-event prices were read from api.apify.com the same day. The test account is on a paid plan, so event charges bill at the discounted tier; the "free plan" column in the tables is the sticker math from the API's FREE-tier rates, because that is what a first run actually pays.

Results: what the same job returned​

ActorListings returnedFields per recordRuntime10-listing cost, free plan
Airbnb Scraper API (codepoetry)10 of 109941.6 s$0.030
Airbnb Scraper (tri_angle)10 of 103718.8 s$0.040
Airbnb Scraper (Curious Coder)10 of 1015 (search mode)6.0 s$0.015
Airbnb Listing Scraper (Automation Lab)10 of 104353.2 s$0.055
Airbnb Scraper (Onidivo)00 usable42.0 s$0 events + platform usage

All five runs finished with status SUCCEEDED. Four of them delivered listings.

What a "listing" contains in each Actor​

This is the part no Store listing tells you, and it is the whole decision. A "listing" from one Actor and a "listing" from another are different products:

Airbnb Scraper APItri_angleCurious CoderAutomation Lab
Nightly price as a numberYes — price_per_night: 214.15, plus total_priceNo — price: "$312" stringNo — price: "$827" stringYes — nightlyPrice: 182.46
Day-by-day calendarYes — 120 days, plus occupancy_rateNoNo (a boolean available in URL mode)No
Rating categoriesAll 6, numericAll 6Search mode: overall only; URL mode: categories as stringsOverall only
Guest reviews in the same runYes, opt-in, $0.30/1kNo — separate Actor, $5.00/1k on free planNoNo
Amenities depth52 items, with boolean flags13 itemsNone in search mode7 items
Host detail14 fields11 fieldsPartial10 fields

Every cell above was read from a real record the test run produced, not from a README.

Why the string-versus-number row matters more than any price row: "$827" is a label. You cannot average it, filter on it, or feed it to a model that expects a float — not without a parsing pass you now own forever. Two Actors hand you the number directly. And a numeric nightly rate plus a day-by-day calendar in the same record — the two inputs every yield model needs — exist in exactly one Actor in this test, the Airbnb Scraper API.

The five Actors, one by one​

1. Airbnb Scraper API (codepoetry) — mine​

10 of 10 listings in 41.6 seconds, 99 fields per record: price_per_night and total_price as numbers with the fee breakdown Airbnb displays, a 120-day availability calendar with an occupancy_rate of 0.23 computed for the window, all six rating categories as numeric scores, 52 amenities with boolean flags for the ones people filter on, host detail, and house rules. Reviews are opt-in ($0.0003 each) and land in the same dataset. Failed listings come back as error records that are not billed. Prices return in 28 currencies and 18 languages, and proxy_country lets a run browse from 23 markets — which matters, because Airbnb ranks and prices the same search differently depending on where it comes from.

  • Pricing (free plan): $0.003 per listing, $0.0005 per search-mode card, $0.0003 per review, $0.0001 per run start. Paid tiers discount the listing event to $0.0015 (Starter) and $0.00075 (Business).
  • Honest weaknesses: it is the slowest full-detail Actor here per listing (~4 s each, because it opens every property page); at 26 users it has a fraction of tri_angle's track record; and per raw result it is not the cheapest — Curious Coder undercuts it 3-to-1 on the free plan.

2. Airbnb Scraper (tri_angle) — the incumbent​

18,458 users and 941,238 total runs make this the Store's default answer, and the fastest full-detail run of the test: 18.8 seconds for 10 listings, on a 4 GB default memory allocation — the most compute of the five. 37 fields: description, coordinates, host, 13 amenities, price with breakdown, and all six rating categories.

  • Pricing (free plan): $0.004 per listing, $0.006 per "enriched listing", $0.0001 per start. Paid tiers fall to $0.001 at Gold.
  • The catch: no availability calendar in the base event, and reviews live in a separate reviews Actor at $5.00 per 1,000 on the free plan — so a reviews-plus-listings job means two Actors, two invoices and a dataset join. Its price fields are also strings.
  • Best for: teams that want the most battle-tested option, need speed, and do not need calendars.

3. Airbnb Scraper (Curious Coder) — the budget sweep​

The fastest and cheapest way to sweep a market: 10 card-level records in 6.0 seconds at $0.001 each on the free plan ($0.0003 on paid tiers, plus a $0.005 free-tier start fee that is negligible at volume). Search mode returns 15 fields — id, URL, title, star rating, review count, price as a string, photos, location. Point it at listing URLs instead and you get a 26-field detail record with category ratings and house rules.

  • Note the pricing moved: on 1 November 2026 the free-tier result price went from $0.0002 to $0.001 and gained a start fee. Several roundups (including, until this week, ours) still quote the old flat rate.
  • Best for: cheap, fast market scans where card-level data is enough and you will parse the price string yourself.

4. Airbnb Listing Scraper (Automation Lab) — the coverage play​

43 fields including a genuinely useful nightlyPrice numeric, and one capability nobody else here claims: price-range binary splitting, which its README says reaches beyond the ~270-result pagination cap Airbnb puts on any single search. If you need thousands of listings from one city, that claim makes this the Actor to benchmark first.

  • Pricing (free plan): $0.005 per listing plus a $0.005 one-time run start — about $5.01 per 1,000 listings, the highest rate here.
  • The catch: slowest of the working four (53.2 s), no calendar, no rating categories, no reviews.
  • Best for: large sweeps past Airbnb's pagination wall, where the per-listing premium buys coverage the others cannot reach from one query.

5. Airbnb Scraper (Onidivo) — currently returning nothing​

Priced FREE since 6 October 2026 (auto-migrated during Apify's rental sunset), with 801,419 historical runs. In this test it returned zero listings on three attempts: two search inputs and one direct listing URL. Every dataset contained only internal #debug records — the Actor still calls Airbnb's retired v2/explore_tabs API endpoint with a years-old key, and Airbnb no longer answers it. Its 3.5-star rating suggests I am not the first to notice.

The run still consumes platform usage ($0.002 for mine), and it still reports SUCCEEDED — so a scheduled pipeline could fail silently for weeks. Free is only cheap if something comes back.

Where my Actor loses​

Stated plainly, because a comparison that only flatters its author is an ad:

  • Per raw result on the free plan, Curious Coder is a third of the price. If card data is enough, mine is the wrong purchase.
  • Speed. tri_angle delivered full-detail records in half my runtime.
  • Track record. 26 users versus 18,458. If you want the Actor with 941,238 runs behind it, that is not mine.
  • Coverage tooling. Automation Lab's price-range splitting attacks a problem (Airbnb's ~270-result search cap) that my Actor leaves to you, via neighbourhood and price-band queries.

What 1,000 listings costs (free-plan rates, November 2026)​

ActorListings onlyWith reviews (50/listing)Notes
Airbnb Scraper API$3.00$18.00One dataset, reviews opt-in
tri_angle$4.00$254.00Reviews via second Actor at $5.00/1k
Curious Coder$1.01n/aCard-level fields only
Automation Lab$5.01n/aPlus the pagination-wall splitting
Onidivo$0 + usagen/aReturned nothing in testing

Rates from api.apify.com, 2026-11-06. This niche re-prices often — three of the five changed pricing in the last five weeks — so treat any article older than a month as suspect, our own roundup included, if its verification date has slipped.

Switching costs: four input shapes​

The same job, four ways — this is what migration actually costs:

ActorLocation inputCap keyDate keys
Airbnb Scraper APIlocation_queriesmax_listingscheck_in / check_out
tri_anglelocationQueriesmaxResultscheckIn / checkOut
Curious Coderurls (search URL)limitPerUrl—
Automation LablocationQueriesmaxListingscheckIn / checkOut

Output shapes differ more than inputs do — snake_case versus camelCase is a find-and-replace, but a missing availability array is a rewrite. Pull 10 records from any candidate before you port anything.

How to choose​

There is no single best Airbnb scraper on Apify — there is the right one per job:

  • Building a yield or occupancy model: you need numeric nightly prices and the calendar. Only one Actor here returns both in one record.
  • Monitoring a market weekly at the lowest cost: Curious Coder's cards, plus your own price parsing.
  • One-time competitive snapshot, speed matters: tri_angle.
  • Thousands of listings from one city: Automation Lab's splitting, priced accordingly.
  • Reviews at volume: the Airbnb Scraper API ($0.30/1k in-run) versus tri_angle's separate Actor ($5.00/1k plus a join).

Whatever you pick, cap the first run, check the dataset before the invoice, and re-read the Pricing tab — the full per-event roundup carries the live table, and the worked example shows a 500-listing job end to end. Hosts who just want to know what to charge can skip scraping altogether and price against nearby comps with Claude.

Start with a 30-cent test

Run the Airbnb Scraper API on Apify — 100 full-detail listings cost $0.30 on the free plan, and failed listings are never billed. · Compare all Airbnb Actors on the Store →

Frequently Asked Questions

Two of the five, measured on 2026-11-06: the Airbnb Scraper API returns price_per_night and total_price as numbers, and Automation Lab's Airbnb Listing Scraper returns a numeric nightlyPrice. tri_angle and Curious Coder return price as a string like "$312", which needs a parsing pass before you can sort, filter or average it.

Not in testing on 6 November 2026. Three runs (two search inputs, one direct listing URL) all finished with status SUCCEEDED but returned zero listings — only internal debug records, showing calls to Airbnb's retired v2/explore_tabs API endpoint. Free pricing since October 2026 means you pay only platform usage, but the runs returned nothing usable.

Per result on the free plan: Curious Coder at $1.00 per 1,000 results plus a $0.005 start fee, after its price rose from $0.20 per 1,000 on 1 November 2026. On paid plans it drops to $0.30 per 1,000. It returns card-level data (15 fields). The cheapest full-detail record is the Airbnb Scraper API at $3.00 per 1,000 listings on the free plan.

Measured on the same query on 6 November 2026: Curious Coder 6.0 seconds (card-level), tri_angle 18.8 seconds, the Airbnb Scraper API 41.6 seconds (99 fields per listing), Onidivo 42.0 seconds (no usable output), Automation Lab 53.2 seconds.

Only partially. All five read location and stay dates, but under different input keys (location_queries versus locationQueries versus urls versus location), and their outputs are mutually incompatible: field naming flips between snake_case and camelCase, and calendars, rating categories and reviews exist in some outputs and not others. Pull a 10-record sample from any candidate and diff it against your current schema before porting.

The author sells one of the five tested (the Airbnb Scraper API), which is disclosed at the top of the article. All five ran the identical query on the same day from the same account, every number in the tables was read from the resulting datasets and invoices, and the sections called "Where my Actor loses" and each Actor's listed weaknesses are part of the same test.

Advertise on this page