Airbnb Real-Time Data — Listings & Host Portfolios avatar

Airbnb Real-Time Data — Listings & Host Portfolios

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Airbnb Real-Time Data — Listings & Host Portfolios

Airbnb Real-Time Data — Listings & Host Portfolios

Fresh Airbnb data for any market: listings with nightly prices, ratings, reviews, photos, plus host portfolios with listing counts and superhost status. Streams to your dataset, webhook-ready — built for market research and lead generation. Free plan gets a sample; paid plans unlock everything.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Airbnb Real-Time Data

Turn any market into an Airbnb dataset. Discover listings across cities, build host and portfolio views of professional operators, and enrich your own listing links — all as clean, flat JSON streamed to your Apify dataset while the run is still going.

The Actor is built for short-term-rental (STR) investors, hosts, property managers, lead-gen agencies, travel-tech teams, and AI workflows that need reliable Airbnb market data without hand-collecting it yourself.


Why this Actor

Airbnb Real-Time DataHand-collecting market data
SpeedMany listings per market, in one runHours of manual work per market
Memory512 MB default — light on long runsN/A
Multi-marketDozens of markets in a single runOne city at a time
SectionsListings, Hosts, Listing URLs — mix and matchManual, error-prone
OutputStructured, LLM-ready JSONCopy-paste into spreadsheets
DeliveryDataset + optional real-time webhookManual export
WebhooksNative (JSON or Slack)None
ScaleLarge runs — 1,000+ rows per runNot practical

What to collect (sections)

The input is organised into independent sections. Switch on the ones you want — each has its own options and its own result limit, so nothing is shared or guessed for you. Turn on one, two, or all three in the same run.

1. 🏠 Listings for markets — on by default

Give the Actor one or more markets ("Austin, TX", "Lisbon, Portugal", "Bali, Indonesia", …) and it returns listing rows with price, rating, review count, room/property type, bed/bath counts, coordinates, photos, and Guest Favorite status.

This section has its own controls:

  • Markets — one per row; add several to cover multiple markets in one run
  • Max listings per market — how deep to go in each market (default 100)
  • Max listings in total — the overall ceiling for listing rows across all markets
  • Include host details on listing rows — attach the host's name, profile link, and Superhost status to every listing (adds a little extra time per business)

Results stream to your dataset as they are ready, so a long multi-market run stays light on memory. Coverage goes well beyond the handful of results most tools stop at — one market can return 100+ unique listings.

2. 🧑‍💼 Host & portfolio view — off by default

Turn this on to also export one row per host. You get:

  • how many listings that host has across the markets you selected
  • the host's price band (min/max nightly rate)
  • average rating across their listings
  • Superhost status and a sample listing for reference

Its own controls:

  • Markets to build portfolios from — leave empty to reuse the markets from the Listings section (markets shared between sections are collected once)
  • Minimum listings per host — filter down to professional operators and multi-property managers
  • Max hosts — how many host rows to keep, biggest portfolios first

3. 🔗 Enrich listing URLs — off by default

Already have listing links (from a CRM, a spreadsheet, or a previous run)? Turn this on, paste them in, and get a full row for each one — host attribution, guest capacity, location, rating, review count, and a description excerpt.

Its own controls:

  • Listing URLs — one listing link per row
  • Max listings from URLs — how many of the supplied links to process

The price fields are only populated for market rows, since nightly rates depend on the stay window you choose.


What you get

Listing rows (type: "listing")

FieldDescription
listingIdStable listing identifier
titleListing name
urlDirect listing link
cityMarket this row was collected for
locationFull location string (street-level area)
latitude, longitudeCoordinates
roomTypee.g. Entire home/apt, Private room
propertyTypee.g. Home, Apartment, Condo, Guesthouse, Loft, Camper/RV
beds, bedrooms, bathsLayout
personCapacityMax guests
priceHeadline price for the selected stay window
pricePerNightPer-night rate
priceDisplayOriginal price text, as shown to guests
currencyCurrency code (pinned to USD for consistent comparisons)
ratingAverage guest rating (0–5)
reviewCountNumber of reviews
isGuestFavoriteWhether the listing carries a Guest Favorite badge
images[]Photo URLs
descriptionListing description excerpt (enriched links)
hostId, hostName, hostUrlHost attribution
isSuperhostSuperhost status
searchLocationMarket used for this row
checkIn, checkOutStay window used for this row
scrapedAtCollection timestamp

Host rows (type: "host")

FieldDescription
hostIdStable host identifier
hostNameHost display name
hostUrlHost profile link
isSuperhostSuperhost status
listingCountListings this host has in the collected markets
listings[]Listing IDs belonging to this host
markets[]Markets where this host operates
minPrice, maxPriceThe host's nightly price band
avgRatingAverage rating across their listings
sampleListingTitle, sampleListingUrlA representative listing
scrapedAtCollection timestamp

Use cases

Investment & market research

  • Estimate nightly rates and occupancy signals across a target city before buying a property
  • Compare price bands between neighbourhoods, or between two competing markets
  • Size a market: how many listings exist, how highly rated they are, and how concentrated ownership is

Host & operator intelligence

  • Identify professional hosts and multi-property managers in a market (Minimum listings per host ≥ 2)
  • Measure portfolio concentration — who actually controls supply
  • Track competitor pricing and rating changes over time by re-running on a schedule
  • Find high-performing hosts to learn from: filter for Superhosts with 50+ reviews and a 4.8+ rating

Lead generation & outreach

  • Build a prospect list of hosts for cleaning services, interior design, photography, insurance, or PMS software
  • Target hosts with weak ratings (opportunity) or large portfolios (high value)
  • Enrich a CRM: switch on the Enrich listing URLs section against your existing listing list to backfill host names, capacity, and ratings

Revenue management & pricing

  • Pull a competitive set for a specific market and stay window
  • Filter by price band and rating to isolate true comparables
  • Feed nightly rates into a pricing model or dashboard

Travel & content

  • Build regional shortlist datasets for editorial guides and travel content
  • Power "best stays in X" pages with real, sortable data
  • Feed an AI agent that drafts personalised stay recommendations

Data pipelines

  • Deliver rows straight into a warehouse, Google Sheet, Airtable, or CRM via webhook
  • Chain with other Actors (enrichment, scoring, outreach drafting) in an Apify workflow
  • Schedule runs weekly/monthly to build a longitudinal market dataset

Who it is for

You are…You use this Actor to…
STR investor / analystSize markets, compare price bands, validate a purchase thesis
Property managerTrack competitor portfolios and professional operator density
Real-estate agentShow clients a data-backed view of the local STR market
Growth / lead-gen agencyBuild host prospect lists and enrich CRMs
Travel-tech / startupPower a directory, pricing product, or recommendation engine
Data engineer / analystFeed structured STR data into a warehouse or model
AI builderGenerate LLM-ready market data for agents, RAG, and reports
Journalist / researcherQuantify short-term-rental supply and pricing in a city

Output reference

Every run streams rows to the default dataset and writes a run summary to the key-value store.

Dataset viewWhat it shows
overviewAll rows, listings and hosts mixed, with the columns that matter at a glance
listingsOne row per listing — price, rating, layout, host attribution, link
hostsOne row per host — portfolio size, price band, average rating

Export as JSON, CSV, Excel, RSS, or pull it via the Apify API.

Run summary (OUTPUT in the key-value store) includes:

{
"sections": ["listings", "hosts"],
"markets": ["Austin, TX"],
"hostMarkets": ["Austin, TX"],
"stayWindow": { "checkIn": "2026-11-06", "checkOut": "2026-11-08" },
"listingsExported": 118,
"hostsExported": 24,
"duplicatesRemoved": 0,
"hostDetailsAttached": 0,
"marketsWithoutResults": [],
"spendingLimitReached": false,
"freeTierLimitReached": false,
"errors": [],
"paywall": {
"detected": false,
"isPaying": false,
"pricingTier": null,
"blocked": false,
"limited": false,
"mode": "limit",
"freeTierMaxItems": null
}
}

The paywall object tells you exactly how the run was treated, so there are never surprises about why results were capped.


Input reference

InputTypeDefaultDescription
🏠 Listings for markets
collectListingsbooleantrueSwitch this section on/off
locationsstring[]["Austin, TX"]One market per row. Add several to cover multiple markets in one run
maxListingsPerMarketinteger100How many listings to take from each market
maxListingsinteger500Total listing rows to keep across all markets (best-rated first)
includeHostDetailsbooleanfalseAttach host attribution to listing rows. Adds a little extra time per business
🧑‍💼 Host & portfolio view
collectHostsbooleanfalseSwitch this section on/off
hostLocationsstring[]—Markets to build portfolios from. Empty = reuse the Listings markets
maxHostsinteger100How many host rows to keep, biggest portfolios first
🔗 Enrich listing URLs
enrichListingsbooleanfalseSwitch this section on/off
listingUrlsstring[]—One listing link per row
maxListingsFromUrlsinteger200How many supplied links to process
📅 Stay window & guests
checkInstringautoYYYY-MM-DD. Leave empty for a sensible upcoming window
checkOutstringautoYYYY-MM-DD. Must be after checkIn
adultsinteger2Guests for the stay window. Affects which stays qualify and the displayed price
roomTypesselect[]allentire_home, private_room, shared_room
⚙️ Output & limits
maxItemsinteger1000Overall ceiling across every section. Runs stop as soon as this many rows exist
maxRetriesinteger3Retry attempts when a market is temporarily busy
🔔 Webhook
webhookUrlstring—Optional webhook URL for real-time delivery (dataset is always written too)
webhookFormatselectjsonjson (full row) or slack (Slack message)
🌐 Connection
proxyConfigurationobjectresidential USApify residential proxy is on by default

A full JSON schema lives in .actor/input_schema.json and on the Input tab.


A note on filtering: earlier versions could drop rows that missed a price or rating bar. That option was retired — every collected row now exports. Run length depends only on the amounts you ask for, and any narrowing you want is best done after the run (the rows arrive sorted best-rated first). If an old task still sends minPrice / maxPrice / minRating, the run simply notes that they are ignored.

Quick start examples

A single market, top-rated first

{
"collectListings": true,
"locations": ["Austin, TX"],
"maxListingsPerMarket": 50,
"maxListings": 50
}

Multi-market scan

{
"collectListings": true,
"locations": ["Austin, TX", "Nashville, TN", "Asheville, NC"],
"maxListingsPerMarket": 100,
"maxListings": 300,
"adults": 2
}

Find professional operators in a market

{
"collectHosts": true,
"hostLocations": ["Miami, FL"],
"maxHosts": 200,
"maxListingsPerMarket": 100
}

Listings and portfolios in one run

{
"collectListings": true,
"locations": ["Austin, TX"],
"maxListingsPerMarket": 150,
"maxListings": 150,
"collectHosts": true,
"hostLocations": ["Austin, TX"],
"maxHosts": 100
}

Full listing detail including host attribution

{
"collectListings": true,
"locations": ["Lisbon, Portugal"],
"maxListingsPerMarket": 60,
"maxListings": 60,
"includeHostDetails": true
}

Enrich your own listing links

{
"enrichListings": true,
"listingUrls": [
"https://www.airbnb.com/rooms/11442375",
"https://www.airbnb.com/rooms/16842314"
],
"maxListingsFromUrls": 50
}

Market run with Slack alerts as rows land

{
"collectListings": true,
"locations": ["Bali, Indonesia"],
"maxListingsPerMarket": 50,
"maxListings": 50,
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"webhookFormat": "slack"
}

Webhook delivery (optional)

Every row is always saved to the Apify dataset first. If you set webhookUrl, each new row is also delivered in real time to your own URL — ideal for CRMs, Slack, Zapier, Make, n8n, or a custom pipeline.

SettingDescription
webhookUrlYour own http or https URL. Leave empty to use the dataset only
webhookFormatjson — the full row object. slack — a compact Slack incoming-webhook message with title, price, rating, area, host, and a link

Webhook delivery is best-effort: a failed webhook never stops the run and never stops dataset writes. Failures are logged as a single fixed line.


AI, LLM & MCP integration

Rows are flat, predictable JSON — ideal for ChatGPT, Claude, Gemini, LangChain, LlamaIndex, and custom agents. No nested provider structures to untangle.

Apify MCP (Model Context Protocol)

Connect the Apify MCP server and let an AI assistant:

  • Run this Actor from a natural-language instruction
  • Read the dataset straight into the conversation
  • Chain it with other Actors (enrich → score → draft outreach)
User: "Map the Austin STR market — 50 well-rated 2-guest stays,
then tell me which neighbourhoods look underpriced."
→ MCP runs the Actor with locations=["Austin, TX"], maxListings=50
→ MCP reads the dataset items
→ LLM clusters by location, compares price bands, and summarises the gaps

Example row for an LLM prompt

{
"type": "listing",
"listingId": "11442375",
"title": "Tiny Tasteful 3",
"url": "https://www.airbnb.com/rooms/11442375",
"city": "Austin",
"location": "Austin, Texas, United States",
"roomType": "Entire home/apt",
"propertyType": "Home",
"bedrooms": 1,
"beds": 1,
"baths": 1,
"personCapacity": 2,
"pricePerNight": 175,
"currency": "USD",
"rating": 4.89,
"reviewCount": 481,
"isGuestFavorite": true,
"hostName": "Chet",
"isSuperhost": true,
"latitude": 30.27438,
"longitude": -97.75658,
"checkIn": "2026-11-06",
"checkOut": "2026-11-08"
}

API quick start

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"collectListings": true,
"locations": ["Austin, TX", "Nashville, TN"],
"maxListingsPerMarket": 75,
"maxListings": 150,
"includeHostDetails": true
}'

Read the results:

# Dataset items
curl "https://api.apify.com/v2/datasets/{datasetId}/items?format=json&token=YOUR_TOKEN"
# Run summary (includes the paywall object)
curl "https://api.apify.com/v2/key-value-stores/{storeId}/records/OUTPUT?token=YOUR_TOKEN"

Free plan sample vs paid plans

This Actor is a paid Actor. To keep the free tier useful for evaluation while still funding development:

  • Apify free plan: a run returns a small sample (2 results by default) and then finishes cleanly with a message telling you to upgrade. The paywall object in the run summary reports limited: true and freeTierMaxItems.
  • Any paid Apify plan (Bronze and above): the full, normal output with no caps. paywall.isPaying is true.
  • The sample arrives fast — collection stops as soon as the sample is complete rather than running to the end and trimming, so a free evaluation takes seconds, not minutes.

No run ever fails because of this — the restriction is reported transparently in the run log and the run summary, never as an error.


Reliability & performance

  • Streaming writes — rows are saved to the dataset as soon as they are ready, so a long run does not pile up in memory.
  • 512 MB default memory — plenty of headroom; you rarely need to tune it.
  • Tuned for speed — a run works on many items at once, so a market with host details attached finishes in seconds rather than minutes, and long runs stay quick.
  • Multi-market runs — add as many markets as you need in one run, and they are worked through side by side.
  • Depth per market — tuned by maxListingsPerMarket, so you get a meaningful slice of supply rather than a teaser.
  • Residential US proxy on by default — recommended for reliable, consistent results on larger runs.
  • Automatic retries — temporary rate limits and busy windows are retried with backoff, and the Actor rotates its connection when needed.
  • Graceful limits — spending limits and free-tier caps stop the run cleanly instead of erroring out.

Limits & compliance

  • Only publicly visible market data is collected. No accounts, no logins, no private data.
  • Guest identities, messages, calendars, and booking functionality are out of scope.
  • Nightly pricing depends on the stay window and guest count you pass in — compare rows within the same window.
  • Listing counts in the Host & portfolio view reflect the markets you collected, not a host's entire portfolio worldwide.
  • Some listings do not publish a rating or review count; those fields are null rather than guessed.
  • Not affiliated with, endorsed by, or sponsored by Airbnb. You are responsible for complying with applicable laws, platform terms, and local regulations.

FAQ

Do I need an Airbnb account? No. No account, login, or credentials are needed. Public market data only.

How many results can I get per run? Each section has its own limit: maxListingsPerMarket and maxListings for listings, maxHosts for portfolios, maxListingsFromUrls for enriched links — with maxItems as an overall ceiling. A single market can return 100+ unique listings; multi-market runs scale from there.How long does a run take?

Seconds for a small market and a couple of minutes for a large, multi-market run. Runs sized by a limit finish as soon as that limit's rows exist — a 20-row run is quick even on a huge market. Asking for owner details on every listing (includeHostDetails) adds a little extra time per listing, and the Host & portfolio view adds a little more per portfolio. Applying a price or rating filter keeps the full sweep so the filter has something to choose from, which takes a little longer than an unfiltered, capped run. A busy window can add a short pause — the run retries on its own and keeps going.

Why are prices different between runs? Nightly rates move with dates and guest count. The Actor uses the stay window you provide (or a sensible upcoming window if you leave it blank), so re-run with the same dates to compare like for like.

Why is price sometimes different from pricePerNight? price is the headline figure for the whole stay window; pricePerNight is the per-night rate. Use pricePerNight to compare listings.

Why are some fields null? Some markets and listings simply do not publish a rating, review count, or bed/bath breakdown. The Actor never invents values.

Why did pricePerNight come back null for an enriched link? Per-night rates require a stay window, which only applies to market rows. The Enrich listing URLs section returns everything else about the listing.

Why do hostName fields look like first names? That is how hosts present themselves publicly. The hostUrl is the reliable identifier — join on hostId.

Can I get "entire home" only? Yes — set roomTypes to entire_home. To also exclude shared spaces, leave the other room types unselected.

Can I find multi-property operators? Yes. Switch on Host & portfolio view with minListingsPerHost set to 2 or higher. You will get one row per host with their portfolio size and price band — and you can export listings and hosts together in the same run.

Does it work outside the US? Yes. Pass any market in the world ("Lisbon, Portugal", "Bali, Indonesia") and choose the matching country in the connection settings if you want localized results.

Can I schedule it? Yes. Use Apify Schedules with a JSON input to build a longitudinal dataset — daily or weekly runs give you price and rating trends over time.

Can I stop early? Yes. maxItems caps the whole run, and each section's own limit caps its part of the output. The Actor stops cleanly the moment a limit is reached.

Will it drain my compute? No. Memory stays light because rows stream out as they are collected, and the default 512 MB is more than enough.

What happens on the free Apify plan? You receive a small sample (2 results by default) plus a clear upgrade message. Paid plans get the full, uncapped output.

Do you support webhooks? Yes — webhookUrl + webhookFormat (json or slack). Rows are always written to the dataset as well.

Can I use it with my own proxy? Yes. Open the connection settings and either keep the default Apify residential proxy or supply your own connection URLs.


Troubleshooting

SymptomLikely causeWhat to do
No rows returnedMarket name not recognized, or the stay window is invalidUse a clear market name ("City, State" or "City, Country"); leave dates empty to use the automatic window
Fewer rows than expectedThe market genuinely has less supply, or a section limit was hitCheck maxListingsPerMarket / maxListings, or add more markets
Webhook delivery failed for one record.Your URL rejected the deliveryCheck the URL, its TLS certificate, and that it accepts JSON deliveries
Run stops earlySpending limit or free-tier sample reachedCheck the run summary: spendingLimitReached / freeTierLimitReached tell you which
Price filters exclude everythingFilters compare the per-night rateWiden the range; remember pricePerNight is per night, not per stay

Support, custom work & more Actors

Need something beyond this Actor? I build custom scrapers, data pipelines, and full-stack applications for startups and enterprises.

Reach out for:

  • Custom Apify Actors for any site or data source
  • Short-term-rental and real-estate data projects at scale
  • LLM & MCP integrations on top of your data stack
  • Web apps, dashboards, and automation tools

If this Actor saves you time, a review on the Apify Store helps a lot. Found a bug or need a field that is missing? Open an issue and it will be addressed.


Airbnb Real-Time Data · by DrunkCodes