Airbnb Listing Details - Amenities, Host & Ratings avatar

Airbnb Listing Details - Amenities, Host & Ratings

Pricing

from $1.00 / 1,000 listings

Go to Apify Store
Airbnb Listing Details - Amenities, Host & Ratings

Airbnb Listing Details - Amenities, Host & Ratings

Extract public Airbnb listing details with amenities, photos, host profile information and six numeric category ratings. One consistent schema with star distribution and plain-text descriptions. No prices, guest review texts or host contact data.

Pricing

from $1.00 / 1,000 listings

Rating

0.0

(0)

Developer

Sumitr Mardy

Sumitr Mardy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Airbnb Listing Details Scraper

Export public Airbnb listing details: amenities, photos, host profile fields, six category ratings and the star distribution. Pass listing ids or room URLs and receive one consistent, never-null row per unique listing.

This independent actor is not affiliated with or endorsed by Airbnb.

No prices are returned. The public server-rendered room page does not contain the booking-box price. Currency, dates and guest inputs do not change this. Use Airbnb Search Scraper for search prices, then pass its listingId values here to enrich those results.

Quick start

{"listings":["27349246","7743405"],"language":"en","currency":"USD"}

Country domains and subdomains work, for example https://www.airbnb.co.uk/rooms/27349246. Inputs are normalized to the canonical Airbnb.com room URL. Query strings in pasted room URLs are ignored.

Input

FieldDefaultBehavior
listingsRequiredNumeric id strings or public Airbnb room URLs. Up to 5,000, deduplicated by id. Use strings for long ids to avoid JavaScript number rounding.
currencyUSDPassed through to the public page; does not add prices.
languageenSent as accept-language. English is recommended for parsing overview counts.
checkIn, checkOutEmptyOptional YYYY-MM-DD pair, check-out after check-in. Passed through; no price output.
adultsEmptyOptional 1–16 adults, passed through; no price output.

The daily Store example requests only two Lisbon listings. Two listings are fetched concurrently. Writes and charges are serialized to honor the global event spending cap.

Output

One row per unique listing, including one free row when it fails. All keys are present, never null. Missing strings are "", numbers 0, booleans false and arrays []. Missing numeric values do not imply a verified zero.

FieldsMeaning
inputIndex, input, listingId, urlOriginal position/value, normalized id and canonical room URL.
name, propertyType, summaryTitleListing title, sharing/property type and public overview title.
guests, bedrooms, beds, bathsPublic capacity and parsed overview counts; baths can be fractional.
latitude, longitude, isExactLocationPublic coordinates and precision flag. Respect approximate locations.
city, breadcrumbsPublic localized location and SEO breadcrumb labels joined with >.
rating, reviewsCountOverall numeric rating and listing rating count.
ratingCleanliness, ratingAccuracy, ratingCheckinNumeric category ratings.
ratingCommunication, ratingLocation, ratingValueRemaining numeric category ratings.
ratingDistributionObject with all five keys, "1" through "5". Fractions from 0 to 1, not percentages or review counts. Missing data uses five zeros.
isGuestFavorite, isNewPublic quality flags. New listings can lack category ratings/distribution even if they have one overall rating.
hostName, hostId, isSuperhost, hostPhotoPublic host profile fields. hostId is decoded from DemandUser, not an unrelated contextual id.
hostRatingCountHost rating count supplied by the page; distinct from listing reviewsCount.
descriptionPlain text with line breaks; HTML tags removed and entities decoded.
amenities, amenitiesUnavailableAvailable and explicitly unavailable amenity titles.
houseRules, safety, highlightsPublic labels from those sections.
photosDeduplicated media-tour URLs, falling back to hero media if needed.
status, subStatus, error, scrapedAtResult status, machine-readable reason, error and UTC ISO timestamp.

Pricing and statuses

One listing event per saved successful detail row. FREE $0.002, BRONZE $0.0015, SILVER $0.0012, GOLD and above $0.001 ($2 / $1.50 / $1.20 / $1 per 1,000 listings). Standard Actor start fee is $0.00005 per GB, minimum one event.

Failed rows have no listing charge; the start fee still applies. No extra dataset-item event. The actor saves each row before charging and respects your event spending cap.

status / subStatusListing charge
ok / listingYes
failed / invalid_inputNo
failed / not_foundNo; HTTP 404 or 410
failed / redirectedNo; any 3xx, not followed
failed / http_CODE, blocked, parse_error, network_errorNo
failed / free_work_limitNo; internal unpaid-work guard
failed / cost_limit_reachedNo; event spending cap reached

Honest limits

  • No prices, calendars, guest review texts or host contact data. Only public listing-page fields.
  • No login, cookies, API key extraction or private booking API. Collection uses plain HTTP, not a browser or fingerprint spoofing.
  • Field layout and availability depend on Airbnb's public page. Missing fields keep stable sentinels; absent pdpPresentation yields a free parse_error.
  • English overview labels are used for bed/bath/guest count parsing. Other languages can return those counts as 0 when labels differ; explicit personCapacity still supplies guests when present.
  • A listing can be unavailable, removed or redirected. Redirects are intentionally not followed.
  • A 403/429 gets one direct retry after backoff, then at most one Apify datacenter proxy attempt if available. Never residential.
  • Requests have hard deadlines. An internal loss guard limits unproductive requests; large lists can stop with free_work_limit.
  • Public coordinates may be approximate. The actor does not infer a street address or host contact information.
  1. Run Airbnb Search Scraper for a city, dates and currency.
  2. Keep the successful rows and collect their listingId strings.
  3. Send those ids here; join both datasets by listingId to combine search prices with amenities, host fields and category ratings.

Search prices and room details are collected at different times and may change. For recurring work, configure your own Apify tasks/schedule.

API examples

curl -X POST \
"https://api.apify.com/v2/acts/sumitr_mardy~airbnb-listing-details/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"listings":["27349246","7743405"],"language":"en"}'
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("sumitr_mardy/airbnb-listing-details").call(
run_input={"listings": ["27349246", "7743405"]}
)
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["name"], listing["ratingCleanliness"], listing["amenities"])

Use it from AI agents (MCP)

Hosted OAuth clients can connect to Apify MCP:

{"mcpServers":{"airbnb-details":{"url":"https://mcp.apify.com/?tools=sumitr_mardy/airbnb-listing-details"}}}

Bearer clients can supply their own token through local secret configuration:

{"mcpServers":{"airbnb-details":{"url":"https://mcp.apify.com/?tools=sumitr_mardy/airbnb-listing-details","headers":{"Authorization":"Bearer <YOUR_APIFY_TOKEN>"}}}}

For stdio clients with Node.js:

{"mcpServers":{"airbnb-details":{"command":"npx","args":["-y","@apify/actors-mcp-server","--actors","sumitr_mardy/airbnb-listing-details"],"env":{"APIFY_TOKEN":"<YOUR_APIFY_TOKEN>"}}}}

Agent tips: start with two ids, inspect status before analysis, distinguish listing and host rating counts, treat distribution as fractions, and use the Search actor for prices.

Support: Actor issues.