Booking.com Market Supply & Facet Census avatar

Booking.com Market Supply & Facet Census

Pricing

$0.30 / 1,000 results

Go to Apify Store
Booking.com Market Supply & Facet Census

Booking.com Market Supply & Facet Census

Profile the accommodation supply of any Booking.com market in one pass: star ratings, review-score bands, property types, neighbourhoods, brands, facilities, meal plans and cancellation policies, each with the number of properties behind it and its share of the market.

Pricing

$0.30 / 1,000 results

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Get a complete, structured picture of the accommodation supply in any Booking.com market. Give it a city, a region, a district, an airport, a landmark or a coordinate pair, and you get back every labelled option Booking.com publishes for that market — star ratings, review-score bands, property types, neighbourhoods, brands, facilities, room features, meal plans, reservation policies, payment options, sustainability certification and accessibility — each one with the number of properties behind it and its share of the market. It is the market-structure dataset that hotel revenue teams, short-let operators, investors and analysts normally assemble by hand, and it lands in one pass per market.

What you can do with it

  • Size a market before you enter it. How many 4-star hotels, apartments and vacation homes compete in Austin — and what fraction of the market each segment actually is.
  • Benchmark quality and price positioning. Compare the review-score band distribution of 50 cities at once, and see which markets are dominated by 8-and-above supply.
  • Map brand and chain penetration. Which hotel brands are present in each market, and how many properties each of them runs there.
  • Track supply over time. Schedule it weekly with the same stay window and watch new supply, neighbourhood shifts and the free-cancellation share move.
  • Find where the supply actually is. Neighbourhood and distance-from-centre breakdowns show you which parts of a city carry the inventory.
  • Build filters and taxonomies for your own product. Every option arrives with the exact identifier Booking.com uses for it, so you can drive your own segmented searches from this dataset.

What you get

Two kinds of row. One per option in every group:

{
"recordType": "facetOption",
"destination": "Austin",
"destinationType": "CITY",
"checkIn": "2026-09-10",
"checkOut": "2026-09-12",
"nights": 2,
"leadTimeDays": 42,
"adults": 2,
"rooms": 1,
"children": 0,
"facetGroup": "class",
"facetCategory": "class",
"facetTitle": "Property rating",
"optionId": "class=4",
"optionValue": "4",
"optionLabel": "4 stars",
"count": 371,
"countNotAutoextended": 0,
"sharePctOfMarket": 57.43,
"discoveredUnder": null,
"destinationTotalProperties": 646,
"currency": "USD",
"actorRunId": "PBs4Xk2mZq7vN9Ld",
"scrapedAt": "2026-09-01T09:14:22.531Z"
}

And one rollup row per market, from the same pass, abridged here:

{
"recordType": "marketSummary",
"destination": "Austin",
"destinationType": "CITY",
"checkIn": "2026-09-10",
"checkOut": "2026-09-12",
"totalProperties": 646,
"facetGroupsReturned": 24,
"facetOptionsReturned": 130,
"emptyFacetGroups": ["price"],
"starClassMix": [
{ "optionId": "class=3", "label": "3 stars", "count": 143, "sharePct": 22.14 },
{ "optionId": "class=4", "label": "4 stars", "count": 371, "sharePct": 57.43 },
{ "optionId": "class=5", "label": "5 stars", "count": 10, "sharePct": 1.55 }
],
"reviewScoreBands": [
{ "optionId": "review_score=90", "label": "Wonderful: 9+", "count": 221, "sharePct": 34.21 },
{ "optionId": "review_score=80", "label": "Very Good: 8+", "count": 363, "sharePct": 56.19 }
],
"propertyTypeMix": [
{ "optionId": "ht_id=204", "label": "Hotels", "count": 204, "sharePct": 31.58 },
{ "optionId": "ht_id=220", "label": "Vacation Homes", "count": 236, "sharePct": 36.53 }
],
"districtMix": [
{ "optionId": "di=4838", "label": "South Austin", "count": 89, "sharePct": 13.78 }
],
"freeCancellationShare": 90.87,
"freeCancellationCount": 587,
"availableOnlyCount": 646,
"brandsReturned": 20,
"topBrands": [
{ "chainCode": "1851", "brandName": "Hampton by Hilton", "count": 9 },
{ "chainCode": "2117", "brandName": "Hilton Garden Inn", "count": 8 }
],
"currency": "USD",
"scrapedAt": "2026-09-01T09:14:22.531Z"
}

Input reference

SettingTypeDefaultWhat it does
Destinationslist of text["Austin"]The markets to profile. Place names (Austin, Lisbon, Bali) or coordinate pairs (30.2672,-97.7431). Up to 200 entries.
Destination typechoiceCityHow to read your place names: City, Region, Country, District, Airport, Landmark or Coordinates. A coordinate pair is always read as coordinates.
Check-in datedate45 days outFirst night of the stay the market is profiled for. Left empty, it rolls forward from the day the run starts, so a schedule never drifts into the past.
Check-out datedatecheck-in + 2 daysLast day of the stay.
Adultsinteger2Party size the counts are conditioned on. Max 30.
Roomsinteger1Rooms the counts are conditioned on. Max 30.
Childreninteger0Children in the party. Max 10.
Children's ageslist of text[]One age per child, 0–17. Booking.com decides availability by a child's age, so fill this in whenever Children is above zero.
Only these option groupslist of text[] (all)Leave empty for every group Booking.com publishes. Narrow the dataset by naming groups such as class, review_score, ht_id, di, chaincode, hotelfacility, mealplan, fc. Up to 24.
Expand truncated option listsbooleanfalseBooking.com trims long lists to their leading entries. Switch this on to profile each market again inside the segments below, which brings more of the tail into view.
Segments used to expand the taillist of text["class=3","class=4","class=5"]Segments each market is re-profiled inside, written as group=value. Up to 12.
Add a rollup row per marketbooleantrueAdds the one-row market summary shown above. It comes out of the same pass, so it is free.
Maximum markets per runinteger100Safety cap on how many markets one run profiles. Max 500.
Maximum lookups per runinteger600Hard budget for the run. One market needs one lookup, plus one more per segment when tail expansion is on. The run stops cleanly once the budget is spent. Max 6000.
Markets in parallelinteger4How many markets are profiled at the same time. Max 8.
CurrencytextUSDThree-letter code the market is read in.
Languagetexten-usLanguage of the option labels. Labels outside English come back as Booking.com writes them.
Browse from countrytext""Country to appear to browse from, as a two-letter code.

Output fields

Option rows (recordType: "facetOption")

FieldTypeMeaning
destinationtextThe market as you entered it
destinationTypetextHow it was read (CITY, REGION, LATLONG …)
checkIn, checkOut, nights, leadTimeDaysdate / numberThe stay window the counts are conditioned on
adults, rooms, childrennumberThe party the counts are conditioned on
facetGrouptextGroup identifier, e.g. class, ht_id, chaincode
facetCategorytextBooking.com's own grouping label
facetTitletextHuman-readable group name, e.g. "Property rating"
optionIdtextThe exact identifier for the option, e.g. chaincode=1851
optionValuetextJust the value part, e.g. 1851
optionLabeltextThe published label, e.g. "Hampton by Hilton"
countnumberProperties in this market carrying the option
countNotAutoextendednumberBooking.com's stricter count for the same option, published as-is
sharePctOfMarketnumbercount as a percentage of the market total; null when the total is unknown
discoveredUndertextnull for the market-wide pass; otherwise the segment that surfaced the option, and the count is a count within that segment
destinationTotalPropertiesnumberProperties listed in this market when the market was read
currency, actorRunId, scrapedAttextRun provenance

Market rollup rows (recordType: "marketSummary")

FieldTypeMeaning
totalPropertiesnumberProperties listed in the market for your stay window
facetGroupsReturned, facetOptionsReturnednumberHow much structure the market published
facetGroupNames, emptyFacetGroupslistEvery group present, and which of them published no options
starClassMixlistStar rating → count and share
reviewScoreBandslistReview-score band → count and share
propertyTypeMixlistHotels, apartments, vacation homes … → count and share
districtMixlistNeighbourhood → count and share
bedroomCountMix, mealPlanMixlistBedroom counts and meal arrangements → count and share
freeCancellationShare, freeCancellationCount, freeCancellationOptionIdnumber / textShare of the market offering free cancellation, and the option it was measured from
availableOnlyCount, availableOnlyOptionIdnumber / textProperties Booking.com counts as available for your dates
brandsReturned, topBrandsnumber / listBrands present, biggest first, with their identifier and property count
tailPreFiltersAppliedlistSegments used for tail expansion on this market
currency, actorRunId, scrapedAttextRun provenance

Pricing

Pay per result. There is one charge, and it applies each time a row is written to the dataset — an option row or a market rollup row, at the same price. There is no second, more expensive tier, because there is nothing behind one that would cost more: an entire market's structure, roughly 110 to 130 rows of it, is produced in a single pass. Single-tier pricing is deliberate here, and it makes this the cheapest row in the family.

ChargeApplies whenPrice
Result rowAny option row or market rollup row is written$0.0003 per row ( $0.30 per 1,000 rows )

Worked example. 100 markets, roughly 110 rows each, is about 11,000 rows — around $3.30 for a full 100-city supply census. Turning on tail expansion with three segments profiles each market four times, so budget accordingly.

Limits and what this actor cannot do

  • Counts are conditioned on the dates and the party you choose. Booking.com only counts properties that can actually host your stay, so a census for a peak-season weekend is a different (and smaller) market than the same city mid-week. Keep the stay window fixed when you compare markets or track one over time.
  • Booking.com's own market total moves between identical searches. We have seen the same city report 632, 646 and 647 within minutes. Treat totalProperties as a snapshot observation, not an audited figure — and treat small movements between runs as noise.
  • Long option lists are truncated by Booking.com. Brands, neighbourhoods and property types are published as a leading slice, not a full list. Tail expansion recovers more of it, but it cannot be proven exhaustive — no complete list of every brand in a market is available.
  • No price bands. Price is a slider on Booking.com, not a list of options, so the group is published with nothing in it. It is reported in emptyFacetGroups and produces no rows. If you need prices, use a price-oriented actor instead.
  • Brand identifiers are market-local. They were confirmed in one market only, so join on brandName and treat chainCode as a convenience within that market.
  • This profiles markets, not single properties. There is no way to point it at one hotel: a single-property lookup on Booking.com returns an identity and no market structure at all, so that destination type is deliberately not offered.
  • A market that has no availability for your dates publishes nothing. That is reported in the log as an empty market, and it is a real answer, not a failure.
  • Speed depends on the size of the job and on how quickly Booking.com answers. No fixed throughput is promised.
  • Booking.com's terms restrict automated access. You are responsible for using this data lawfully and in line with the source site's own terms.

FAQ

Do I need a Booking.com account? No. No account, no login, no personal details — set your destinations and run it.

How many rows should I expect per market? Around 110 to 130 for a mid-sized city, plus one rollup row. Small markets publish fewer groups and fewer options, large ones publish more.

Can I schedule it? Yes. Pin the check-in and check-out dates if you want a like-for-like series, or leave them empty and every run will profile the same rolling window (45 days out, two nights), which is usually what you want for a supply trend.

Is the data complete? The set of groups is complete — you get every group Booking.com publishes for the market. The options inside the long groups are not: Booking.com trims them. Tail expansion recovers more of the tail and labels where each option came from, but neither we nor anyone else can prove a brand or neighbourhood list is exhaustive.

Why is a share sometimes null instead of 0? Because a 0 would look like a finding. When the market total is unknown or zero, the share is genuinely unknowable, and the field says so rather than inventing a number.

What does discoveredUnder mean? It is null for the market-wide pass, where count is a count across the whole market. When it names a segment, that row was found while profiling that segment and its count is a count within the segment — the two are not interchangeable.

Can I profile a whole country? Yes — set the destination type to Country. Bear in mind that the counts are still availability-conditioned, and that very large markets truncate their long option lists more aggressively than cities do.