Marriott Hotel Search Scraper avatar

Marriott Hotel Search Scraper

Pricing

from $0.84 / 1,000 hotel-listeds

Go to Apify Store
Marriott Hotel Search Scraper

Marriott Hotel Search Scraper

Scrape every Marriott hotel for a destination and dates. Add a city and get each Ritz-Carlton, St. Regis, W, Westin, Sheraton, Courtyard, Moxy and Aloft with nightly and stay prices, taxes, mandatory fees, points cost, rating, coordinates and distance. $1.20 per 1,000 hotels.

Pricing

from $0.84 / 1,000 hotel-listeds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

What is Marriott Hotel Search Scraper?

Give Marriott Hotel Search Scraper a city and your dates, and it prices the whole market in one run. You get each Marriott property within the radius you set, from Ritz-Carlton and St. Regis to Courtyard and Moxy, with what a room costs for that stay. Ten cities came back as 732 hotels in about 10 seconds.

Four reasons to pick it for market work:

  • The price is taken apart for you. Each hotel has the nightly rate with tax and fees in, the rate before tax, the tax, the mandatory fees and the stay total as separate numbers.
  • Cash or Bonvoy points. Switch "Rates" to points and the same search prices the stay as an award.
  • Marriott does the filtering. Brand, amenity, hotel type, service level, transportation and a nightly price range are applied by Marriott's own search, and a hotel that's filtered out costs you nothing.
  • It's cheap to run wide. $1.20 per 1,000 hotels on the Free plan, $0.84 on Business, up to 1,000 hotels per destination.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 44 of 44 live checks on its inputs and filters passed on 6 October 2026
  • 6 destinations run on 7 October 2026 in 6 countries: 63 hotels, none empty
  • Charges matched the rows

What else you can do:

  • Sort by distance, price, guest rating, number of reviews, name, brand, city or points
  • Search by place name ("Edinburgh, Scotland") or by a coordinate pair
  • Keep sold-out hotels in the list when you're mapping a market, or drop them when you're booking
  • Get the brand and amenity breakdown of each market alongside the rows
  • Watch a stay the same distance ahead on every scheduled run

It asks for no access to your Apify account, and there's no proxy to set up and no proxy charge.

Who uses it, and for what?

  • Revenue teams tracking what a market costs night by night, or comparing one hotel with its neighbours on the same dates
  • Event and travel planners ranking a city by price, rating or distance from a venue
  • Analysts watching one brand's pricing across several cities at once
  • Anyone checking which hotels sell out on a peak date
  • Points collectors comparing the cash price of a stay with its Bonvoy price
  • Builders of travel search, price comparison and revenue-management models

What data do you get for each hotel?

🏨 Hotel name and MARSHA code (hotelId)Name in the hotel's default language
Brand code and brand name🔗 Hotel page URL
📍 Latitude and longitudeDistance from your destination, in miles or km
⭐ Guest rating out of 5Review count
📅 Check-in, check-out and nightsAdults and rooms
💷 Nightly price, tax and fees inNightly price before tax
Nightly price with mandatory feesTax per night and mandatory fees per night
💰 Stay total💱 Currency, and whether the nightly price includes tax
🎁 Bonvoy points per night (points searches)Rate category, rate status and rate source
Members-only flagAvailable and bookable flags
Resort, adults-only and all-inclusive flagsRecently renovated and new-property flags
Opening dateHotel's own currency
Marketing caption, plus resort or destination fee notes🖼 One image URL
Your destination input🕒 Timestamp of the run

How to scrape Marriott hotel prices

  1. Create a free Apify account and open Marriott Hotel Search Scraper.
  2. Put one or more places in Destinations: "Edinburgh, Scotland", "Times Square, New York", or "55.9533,-3.1883".
  3. Set Check-in and Check-out. If you leave them empty, the run prices one night starting 30 days from today.
  4. Choose cash or points, a Search radius, and how many hotels you want per destination.
  5. Click Start. You get one row per hotel, priced for that stay.
  6. Download the hotels as Excel, CSV or JSON.

⬇️ Input

A destination is all it needs. Type places the way you'd type them into marriott.com, or give a lat,lng pair to search around a point.

Two limits control the size of a run. "Max hotels per destination" (1 to 1,000, default 40) applies to each place separately. "Maximum results for the whole run" is a ceiling across all of them, and 0 means no limit.

FieldTypeDefaultWhat it does
destinationsarray[]Where to search. Prose, or lat,lng.
maxResultsPerDestinationinteger40Hotels per destination, 1 to 1,000. The actor follows Marriott's pages of 40 for you.
maxItemsinteger0A run-wide ceiling across every destination. Zero means no limit.
checkIn / checkOutstringemptyYYYY-MM-DD. Leave empty to use the rolling window below. Stays of 1 to 30 nights.
checkInDaysAheadinteger30Used only when check-in is empty, so a scheduled run keeps asking about a stay the same distance away.
nightsinteger1Used only when check-out is empty.
adultsinteger2Guests in the party, 1 to 8.
roomsinteger1Rooms to price, 1 to 9.
rateModeenumcashcash or points. Points prices the stay as a Bonvoy award, and the cash columns are then empty.
radiusMilesinteger25How far from the destination to look, 1 to 100 miles. Marriott's own site uses 50.
sortByenumdistancedistance, price-low, price-high, rating (highest guest rating first), reviews (most reviewed first), name (A to Z), brand (brand name A to Z), city (city A to Z) or points (fewest points first; use with Rates set to points).
brandsarray[]Keep only these brand codes (WH, WI, SH…).
amenitiesarray[]Keep only hotels with every amenity listed, by the name Marriott shows (Pool, Pets welcome, Free breakfast, EV Charging…) or its code (pool, pet-friendly).
hotelTypesarray[]Keep only hotels of these types, by name (Resort, Apartment, Extended stay, New hotel, Timeshare) or code (resort, apartment, extended-stay, new, timeshare).
serviceTypesarray[]Keep only hotels at these service levels: Luxury, Full service or Select Service (codes luxury, full-service, select-service).
transportationarray[]Keep only hotels offering these: Airport shuttle, Parking, Free Parking, Car rental desk (codes airport-shuttle, parking, free-parking, car-rental-desk).
minPriceUsdinteger0Keep only hotels whose nightly price is at least this, in US dollars, as marriott.com's own price filter works. Prices in the rows stay in the hotel's currency.
maxPriceUsdinteger0The same, as a maximum. Zero means no limit.
minRatingnumber0Drop hotels rated below this, out of 5. Decimals such as 4.5 work.
onlyAvailablebooleanfalseDrop anything sold out for the stay.
includeUnavailablebooleantrueReturn sold-out properties too, which is what you want when mapping a market rather than booking.
distanceUnitenummimi or km.
delayMsinteger0Optional pause before each request, in milliseconds. 0 runs as fast as the parallel limit allows.
maxConcurrencyinteger8How many destinations are searched at once, 1 to 32.

Search a city for a date range, cheapest first

{
"destinations": ["Edinburgh, Scotland"],
"checkIn": "2026-10-15",
"checkOut": "2026-10-17",
"adults": 2,
"radiusMiles": 25,
"sortBy": "price-low",
"maxResultsPerDestination": 40
}

Best-rated hotels between $150 and $300 a night

{
"destinations": ["London, United Kingdom"],
"checkIn": "2026-11-10",
"checkOut": "2026-11-12",
"minPriceUsd": 150,
"maxPriceUsd": 300,
"sortBy": "rating"
}

The range is in US dollars, as on marriott.com, while each row keeps the hotel's own currency. This London search returned 13 hotels priced from GBP 116 to GBP 216 a night (5 October 2026). In a US-dollar market the bounds hold on pricePerNight exactly: New York, $250 to $350, returned 25 hotels from $254.47 to $341.55.

Price a market in Bonvoy points

{
"destinations": ["Times Square, New York"],
"checkIn": "2026-12-31",
"checkOut": "2027-01-01",
"rateMode": "points",
"maxResultsPerDestination": 40
}

Watch several cities on a schedule, 30 days out

{
"destinations": ["Edinburgh, Scotland", "Glasgow, Scotland", "55.9533,-3.1883"],
"checkInDaysAhead": 30,
"nights": 2,
"onlyAvailable": true,
"maxItems": 200
}

For developers

  • maxResultsPerDestination is the per-destination limit and maxItems the run-wide one.
  • The filters (brands, amenities, hotelTypes, serviceTypes, transportation, minPriceUsd, maxPriceUsd, minRating, onlyAvailable) run before charging. A dropped hotel isn't billed.
  • Several values in one of amenities, hotelTypes, serviceTypes or transportation must all apply to a hotel for it to be kept.
  • maxConcurrency (default 8, 1 to 32) is how many destinations are searched at once. Rows still arrive in the order you listed the destinations.
  • delayMs (default 0, up to 10,000) adds a pause before each request. We'd leave it at 0.
  • Each destination writes a FACETS-… record to the run's key-value store (see Output).
  • If the platform restarts a run, it carries on where it stopped without repeating or re-billing rows.

⬆️ Output

You get one row per hotel:

{
"id": "NYCSW",
"hotelId": "NYCSW",
"url": "https://www.marriott.com/en-us/hotels/nycsw-the-westin-new-york-at-times-square/overview/",
"scrapedAt": "2026-09-26T17:16:41.433Z",
"input": "Times Square, New York",
"name": "The Westin New York at Times Square",
"brandCode": "WI",
"brandName": "Westin Hotels & Resorts",
"lat": 40.757475,
"lng": -73.989401,
"distance": 0.2,
"distanceUnit": "mi",
"distanceText": "0.2 mi",
"rating": 3.8,
"ratingScale": 5,
"reviewCount": 5133,
"checkIn": "2026-12-31",
"checkOut": "2027-01-01",
"nights": 1,
"adults": 2,
"rooms": 1,
"pricePerNight": 1043.14,
"pricePerNightExcludingTax": 866,
"pricePerNightIncludingFees": 906,
"priceTotal": 1043.14,
"taxesPerNight": 137.14,
"mandatoryFeesPerNight": 40,
"currency": "USD",
"pointsPerNight": null,
"isMembersOnly": false,
"rateCategory": "StandardRates",
"rateStatus": "AvailableForSale",
"pricesIncludeTax": true,
"isAvailable": true,
"hotelCurrency": "USD",
"isBookable": true,
"openingDate": "2002-10-16",
"marketingCaption": "Our hotel, close to Times Square, is steps from Madison Square Garden, Broadway and Hudson Yards.",
"descriptions": [
{ "type": "DESTINATION_FEE_DESCRIPTION", "text": "Daily $20 food and beverage credit |…" },
{ "type": "HOTEL_MARKETING_CAPTION", "text": "Our hotel, close to Times Square, is steps from…" }
],
"imageUrl": "https://cache.marriott.com/content/dam/marriott-renditions/NYCSW/nycsw-exterior-9397-hor-wide.jpg"
}

If a destination's request fails, or Marriott doesn't recognise the place, you get a single row whose error says which. You're never charged for that row.

How to read the prices

Marriott quotes a stay per room per night. The actor does the arithmetic and labels each figure for what it is:

  • pricePerNight: one night, tax and mandatory fees included. This is the headline number. In the rare case Marriott returns only the rate before tax, that rate is shown here and pricesIncludeTax is false.
  • pricesIncludeTax: whether pricePerNight includes tax. true for the usual all-in figure, false for a rate before tax, empty when the hotel returned no cash price.
  • pricePerNightExcludingTax: one night, before tax and fees.
  • pricePerNightIncludingFees: one night with mandatory fees, before tax.
  • taxesPerNight and mandatoryFeesPerNight: the two components, per night.
  • priceTotal: pricePerNight × nights × rooms, the whole booking with tax. Derived here, not quoted by Marriott. Empty when no tax-included nightly figure was returned.

For the Westin above that reads 866 + 137.14 tax + 40 fees = 1,043.14 a night. For W Edinburgh over two nights, 520.50 + 26.02 = 546.52 a night and 1,093.04 for the stay.

Beside the prices, nameInDefaultLanguage is the hotel's name in its own default language and rateSource is where Marriott says the rate comes from. The flags isResort, isAdultsOnly, isAllInclusive, isRecentlyRenovated and isNewProperty are Marriott's, and each is empty where it says nothing.

The market breakdown

Each destination also writes a FACETS-… record to the run's key-value store. It lists the brands, amenities, property types and price bands present near that place, each with a count. It's a quick way to size a market before you decide what to pull.

One row per hotel, not per rate plan

You get the lowest available rate for each hotel here. For the full grid (each room type crossed with each rate plan, with cancellation deadlines and points options), run Marriott Room Rates Scraper on the hotels this one finds.

How many hotels can you get, and how fast?

Up to 1,000 hotels per destination, within a radius of up to 100 miles. The actor follows Marriott's pages of 40, and each page takes under a second.

RunRowsRun time
Edinburgh, 8 hotels81.7 s
London, Tokyo, New York and Paris, up to 120 each25910.4 to 11.7 s
London, New York, Chicago and Dubai, up to 100 each3317.6 to 8.1 s
Twelve world cities, up to 80 each46213.8 s
Ten cities, up to 100 hotels each732about 10 s

Whole runs on Apify, measured on 1 and 2 October 2026. Several destinations are searched at once (8 by default), and the rows still arrive in the order you listed them.

Edinburgh within 60 miles returned 22 hotels, and London within 50 miles filled a 60-hotel request across two pages.

Marriott answers about 80 result pages a minute per run. Very large runs settle at roughly 3,000 hotels a minute, which is about 180,000 hotels inside the default one-hour run limit.

How much does it cost to search Marriott hotels?

EventFree planStarterScaleBusiness
actor-start, once per run$0.002$0.002$0.002$0.002
hotel-listed, per hotel returned$0.0012$0.00108$0.00096$0.00084

Enterprise plans pay the Business price.

$1.20 per 1,000 hotels on the Free plan, $0.84 on Business. Platform usage and proxy are included, and there's nothing else to pay.

  • One destination of 40 hotels: $0.002 + 40 × $0.0012 = $0.05 ($0.0356 on Business).
  • Ten such cities in one run: $0.002 + 400 × $0.0012 = $0.482 ($0.338 on Business).

On Apify's Free plan, the $5 of monthly credits buys about 100 of those 40-hotel searches, roughly 4,000 hotels.

What you don't pay for: a hotel removed by one of your filters, and a row reporting a destination that couldn't be reached. A sold-out hotel that's returned is a row like any other and is charged as one. Switch on "Only hotels with rooms for these dates" if you don't want them.

Limitations

  • One rate per hotel, the lowest available. Use Marriott Room Rates Scraper for the full grid.
  • Radius caps at 100 miles and each destination at 1,000 hotels.
  • Points come back when Rates is set to points, and only where Marriott offers an award for the stay (7 of 8 Times Square hotels on a measured run). A points run has no cash price, and a cash run no points. Run twice for both.
  • The price range is in US dollars whatever the hotel's currency, because that's how Marriott's own filter works. A hotel priced in another currency is matched on its dollar equivalent.
  • priceTotal is derived by multiplying out (per night × nights × rooms), because Marriott quotes per room per night.
  • Amenities, hotel type, service type and transportation are filtered by Marriott. The rows don't list a hotel's amenities, type or transport, and you can't re-check the filtered rows against a column. Marriott's own groupings apply: Luxury includes some JW Marriott and Marriott Hotels properties.
  • Sorting by city orders by the hotel's city, which isn't a column on the row. Sorting by brand orders by brand name, not by brandCode.
  • The all-inclusive flag is one Marriott rarely sets. It was empty on all 66 hotels of the 7 October 2026 sample.
  • imageUrl opens in any browser. A script or spreadsheet that fetches it may be refused unless it identifies itself the way a browser does.

FAQ

Do I need proxies or a Marriott account?

You need neither. There's no proxy to set up and no proxy charge, and the search results are the ones Marriott shows without a sign-in.

Can I search around a point instead of a city?

Pass "lat,lng" as the destination, such as "55.9533,-3.1883", and set the radius.

Why is a hotel listed with no price?

It's sold out or not bookable for those dates. isAvailable says so. "Only hotels with rooms for these dates" drops them, and so does turning off "Ask for unavailable hotels too".

I set a dollar price range. Why are my rows in pounds?

The range works the way marriott.com's own price filter does, in US dollars. The rows keep each hotel's own currency, and a hotel priced in pounds or yen is matched on its dollar equivalent.

Which brands does it cover?

All Marriott Bonvoy brands. Each run also records which ones are present near each destination, with counts, in the FACETS-… record.

How do I get every room and rate for one of these hotels?

Take its hotelId and run Marriott Room Rates Scraper.

Why did my destination return nothing?

Marriott didn't recognise the place. You get one uncharged row for that destination, with error saying so. Try the spelling marriott.com suggests, add the country, or use coordinates.

Can I filter on two amenities at once?

List both. A hotel is kept only if it has all of them, and the same rule holds inside the hotel type, service type and transportation filters. A resort that must also be an apartment can easily return nothing.

This actor reads search results Marriott publishes to anyone, with no login and no paywall, and collects no personal data. As with any scraping, what you do with the data is your responsibility. See Apify's ethical scraping guidance.

From a schedule, your code or an AI agent

To watch a market over time, leave the dates empty, set "Check-in days ahead" and put the run on an Apify Schedule. Each run then prices a stay the same distance out. A webhook can fire when it finishes, and the rows can go on to Google Sheets, Slack, Make, Zapier, Airbyte or n8n.

From code, POST https://api.apify.com/v2/acts/boncross~marriott-hotel-search/run-sync-get-dataset-items with the input JSON as the body returns the hotels in a single call for short runs. Longer ones use the standard run endpoints of the Apify API, and there are clients for JavaScript and Python.

An agent can call it at mcp.apify.com as boncross/marriott-hotel-search.

More from BonCross

Your feedback

Is there a property this misses, or a number on the row you need and can't find? Raise it on the Issues tab in Apify Console. BonCross reads each issue, and requests shape what gets added next.