# Accor Hotel Search Scraper (`boncross/accor-search`) Actor

Scrape Accor hotel prices for any destination and dates. Just add a city and dates and get every Sofitel, Pullman, Novotel, Mercure and ibis with nightly and stay prices, member rate, breakfast flag, stars, guest rating, coordinates and distance. $0.80 per 1,000 hotels.

- **URL**: https://apify.com/boncross/accor-search.md
- **Developed by:** [BonCross API](https://apify.com/boncross) (community)
- **Categories:** Travel
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.56 / 1,000 hotel-listeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Accor Hotel Search Scraper

### What is Accor Hotel Search Scraper?

One search prices every Accor hotel in a city for your dates. Paris came back with 259 hotels, each one priced, in 19 seconds. Type a city and a country, pick your dates, and Accor Hotel Search Scraper gives you a row per hotel across Sofitel, Raffles, Fairmont, Pullman, MGallery, Novotel, Mercure, ibis and the rest of the group, with the nightly price, the stay total and the member rate beside the public one.

Why it's worth choosing:

- Your filters mean what you typed. Accor's own price filter counts the whole stay and its rating filter only takes whole bands. Here a price limit is checked per night, and a rating bound such as 4.5 is applied exactly.
- You see both sides of the member discount: the rate a visitor is shown, the public rate, the member rate and the saving, as numbers.
- It works in 14 languages and any currency Accor supports, and each row says whether its price includes tax. A US market is quoted before tax, and the row gives you the amount on top.
- You can price your own deal. Add a company client code, a preferential code or an ALL Accor loyalty card and the run returns the rates Accor quotes you.
- $0.80 per 1,000 hotels on the Free plan, $0.56 on Business. Hotels your filters remove, sold-out hotels and unchanged prices cost nothing.

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

- 51 of 51 live checks on its inputs and filters passed on 7 October 2026
- 7 destinations run the same day in 7 countries: 88 hotels, none empty
- Charges matched the rows

What else it does:

- Search a city, a radius around a point, a list of hotel ids, or a pasted Accor search URL for a neighbourhood or landmark
- Filter the way the site does: stars (including unclassified), brands by name, any amenity Accor offers (accessibility, eco-certified, pets, wellness and more), property type, guest rating, price range, promotions, breakfast, member rates and availability
- Sort by price, distance, stars, guest rating or Accor's own recommendation
- Read stars, guest rating, review count, brand, property type and coordinates for each hotel
- Remember prices between runs and return only the hotels whose price moved
- See the destination, urban or resort fee Accor itemises for a US market
- Get a row that says why when a destination can't be searched

### What Accor data do you get?

| | |
|---|---|
| 🏨 Hotel name and Accor id | 🔗 Hotel URL |
| Brand, property type and management type | ⭐ Star rating |
| Guest rating and review count | 💷 Price per night and stay total |
| Public rate and member-rate saving | Currency |
| 🍳 Board type and breakfast flag | Rate id and rate code |
| 📍 Street, postcode, city, country and coordinates | Distance from the search centre |
| Availability status and reason when sold out | 🕑 Check-in and check-out times |
| Loyalty earning and redemption | Top amenities, labels and certifications |
| 🖼 Main image | 📈 Price change since the last run |

### How to scrape Accor hotel prices

There's nothing to install. You fill in a form and download a spreadsheet.

1. [Create a free Apify account](https://console.apify.com/sign-up) and open [Accor Hotel Search Scraper](https://apify.com/boncross/accor-search).
2. Add one or more destinations as "City, Country". Coordinates and pasted Accor search URLs work too.
3. Set your dates, guests and currency, then any filters and the sort order you want.
4. Click Start. A single city finished in 2 to 19 seconds in the measured runs below.
5. Download the hotels as Excel or CSV, or as JSON, XML or HTML.

### How much does it cost to search Accor?

| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| `actor-start`, per run | $0.002 | $0.002 | $0.002 | $0.002 |
| `hotel-listed`, per hotel returned | $0.0008 | $0.00072 | $0.00064 | $0.00056 |

Enterprise plans pay the Business price.

**$0.80 per 1,000 hotels** on the Free plan, $0.56 on Business, with all fields included. That's the whole price: platform usage is included and there's no proxy charge.

You pay for hotels returned and for nothing else. Hotels removed by a filter, sold-out hotels hidden by "Only available hotels" and hotels whose price hasn't moved in a change-only run are free. So is a destination that fails: you get an error row and no charge.

- One city, 250 hotels: $0.002 + 250 × $0.0008 = **$0.202** a run ($0.142 on Business).
- A daily monitor of one city at 200 hotels for a month, where about 50 prices move each day: 30 × ($0.002 + 50 × $0.0008) = **$1.26** for the month ($0.90 on Business).

The $5 of credits in Apify's Free plan each month covers about 24 city searches of 250 hotels, roughly 6,000 priced hotels, before you pay anything.

### ⬇️ Input

Start with a destination. You can write it four ways:

- "City, Country", such as "Paris, France" or "Tokyo, Japan"
- an Accor destination slug, such as "paris-france"
- coordinates as "lat,lng,metres", such as "35.6812,139.7671,5000"
- an Accor search URL pasted from your browser. This is how you search a neighbourhood or a landmark, and the URL's own dates and number of adults are used for that destination.

If you already know which hotels you want priced, put their four-character Accor ids (such as 0663 or C185) or their hotel URLs in "Hotel ids", with or without a destination.

Dates are either fixed ("Check-in" and "Check-out") or rolling ("Check-in days ahead", default 30, and "Nights", default 2). Rolling dates are the ones to use on a schedule. Everything else is optional.

**Filters.** All of Accor's search filters are here and Accor applies them: star ratings (including unclassified), brands (by name, such as "ibis Styles", or by code), amenities (including "Accessible room available", "Hearing impaired room" and "Wheelchair accessible hotel"), property types, minimum guest rating, minimum and maximum price per night, promotions only, ALL loyalty hotels only (hotels where points are earned and spent) and only available hotels, which is on by default. "Breakfast included only" and "Member rate only" narrow the offers further. If you pick several amenities you get the hotels that have all of them, as on the site.

**Your own rates.** Add your company's client code (with its access code if your company uses one), a preferential code, or your ALL Accor loyalty or subscription card, and prices are the ones Accor quotes you. All four are stored encrypted. "Public rates only" does the opposite: it returns the public rate in place of the discounted member rate, so your prices match what a signed-out visitor sees. "Day use" prices a daytime stay with no overnight.

**Language, currency and market.** "Currency" (default USD) is the money prices are quoted in. "Country market" (default GB) is the traveller's country, which can change the rates on offer and whether tax is included. "Language" (default `en`; also `fr`, `de`, `es`, `it`, `pt`, `nl`, `pl`, `ja`, `ko`, `zh`, `ru`, `tr`, `ar`) sets the language of names, descriptions and labels.

**Two limits.** "Max hotels per destination" (default 100, up to 1,000) applies to each destination separately: ten destinations at 50 each returns 500. "Maximum results for the whole run" caps the run as a whole. It defaults to 0, which means no cap, and nothing past it is charged for.

A city for a two-night stay, cheapest first:

```json
{
  "destinations": ["Paris, France"],
  "checkIn": "2026-11-11",
  "checkOut": "2026-11-13",
  "adults": 2,
  "currency": "EUR",
  "countryMarket": "FR",
  "sort": "price",
  "maxResultsPerDestination": 100
}
```

Several cities, four and five star hotels with a good guest rating:

```json
{
  "destinations": ["London, United Kingdom", "Berlin, Germany", "Amsterdam, Netherlands"],
  "checkIn": "2026-11-11",
  "checkOut": "2026-11-13",
  "adults": 2,
  "currency": "GBP",
  "stars": ["4", "5"],
  "minRating": 4,
  "sort": "rating",
  "sortDirection": "DESC",
  "maxResultsPerDestination": 50
}
```

Everything within five kilometres of a point, for a family:

```json
{
  "destinations": ["35.6812,139.7671,5000"],
  "checkInDaysAhead": 45,
  "nights": 3,
  "adults": 2,
  "childrenAges": [7, 4],
  "currency": "JPY",
  "countryMarket": "JP",
  "sort": "distance",
  "maxResultsPerDestination": 200
}
```

A daily price monitor that returns only what moved:

```json
{
  "destinations": ["Dubai, United Arab Emirates"],
  "checkInDaysAhead": 60,
  "nights": 2,
  "currency": "USD",
  "maxResultsPerDestination": 200,
  "priceStoreName": "dubai-prices",
  "onlyNewOrChanged": true
}
```

| Field | Notes |
|---|---|
| `destinations`, `hotelIds` | Where to search, or which hotels to price. |
| `checkIn`, `checkOut`, `checkInDaysAhead`, `nights` | Fixed or rolling dates. |
| `adults`, `childrenAges`, `dayUse` | Who is staying, and whether it's a daytime stay. |
| `stars`, `brands`, `amenities`, `lodgingTypes`, `minRating` | Accor's own search filters. |
| `minPricePerNight`, `maxPricePerNight` | Price bounds per night, in your currency. Decimals are fine. |
| `promotionsOnly`, `loyaltyHotelsOnly`, `onlyAvailable`, `breakfastOnly`, `memberRateOnly` | Narrow the hotels or the offers. |
| `sort`, `sortDirection` | `recommended`, `price`, `distance`, `stars`, `rating` or `availability`, `ASC` or `DESC`. |
| `clientCode`, `accessCode`, `preferentialCode`, `loyaltyCardNumber`, `hideMemberRate` | Your own rates, or public rates only. |
| `currency`, `countryMarket`, `language` | Money, traveller's country and language. |
| `priceStoreName`, `onlyNewOrChanged`, `dedupStoreName` | Change tracking for scheduled runs. |
| `maxResultsPerDestination`, `maxItems` | The per-destination cap and the run-wide cap. |
| `maxConcurrency`, `delayMs`, `includeRawOffer` | Tuning and the raw offer. |

#### For developers

- `maxResultsPerDestination` is the per-destination limit and `maxItems` the run-wide one.
- `hotelIds` takes ids or hotel URLs and can be combined with `destinations`.
- `priceStoreName` names the store that remembers the last price for each hotel and stay. With `onlyNewOrChanged` on, a run returns only new or moved rows. `dedupStoreName` names a second store that remembers which hotels you've already been given, and later runs output only hotels that are new to you.
- With either store set, destinations are searched one at a time, because each reads what the last one wrote. Without them, destinations are searched in parallel and written in input order.
- `maxConcurrency` (default 8, from 1 to 32) is how many requests run at once. The default is the fastest setting Accor answered cleanly in testing.
- `delayMs` (default 0) adds a pause before each request, in milliseconds. Values above 2000 are treated as 2000. We'd leave it at 0.
- `includeRawOffer` (default off) adds Accor's untouched offer object to each record, next to the mapped fields.
- A destination whose filters match almost nothing stops early: after 500 hotels read with fewer than 0.15 in 100 kept, the actor moves on.
- If Apify restarts a run part-way through, it carries on where it stopped. No hotel is returned or charged twice.

### ⬆️ Output

One row is one hotel for one stay, priced at its cheapest offer. You can view the dataset as a table or as JSON in the Output tab.

```json
{
  "id": "0785", "hotelId": "0785", "hotelName": "Novotel Paris Les Halles",
  "url": "https://all.accor.com/hotel/0785/index.en.shtml",
  "brand": "NOV", "brandName": "Novotel", "lodgingType": "HTL", "lodgingTypeText": "Hotel",
  "stars": 4, "rating": 4.5, "ratingScale": 5, "ratingSource": "TRUST_YOU", "totalReviews": 2478,
  "lat": 48.86053, "lng": 2.346531,
  "address": "8 Place Marguerite de Navarre", "postcode": "75001", "city": "PARIS",
  "country": "France", "countryCode": "FR",
  "checkInFrom": "3:00 PM", "checkOutUntil": "12:00 PM",
  "destination": "Paris, France", "destinationSlug": "paris-france",
  "checkIn": "2026-11-11", "checkOut": "2026-11-13", "nights": 2, "adults": 2, "childrenAges": [],
  "isAvailable": true, "availabilityStatus": "AVAILABLE", "distanceMetres": 486,
  "currency": "GBP", "pricePerNight": 270.14, "priceTotal": 540.27, "priceTotalText": "£541",
  "priceListedPerNight": 283.59, "priceListedTotal": 567.17,
  "memberPerNight": 270.14, "memberTotal": 540.27,
  "discountPercent": 5, "discountText": "£27", "discountType": "MEMBER_RATE", "isMemberRate": true,
  "mealPlan": "EUROPEAN_PLAN", "isBreakfastIncluded": false,
  "rateId": "1RA3", "rateCode": "1RA3-DR", "offerCategories": ["MEMBER_RATE"],
  "topAmenities": ["PARKING", "PET", "RESTAURANT"], "certifications": ["Ecocertified"],
  "isLoyaltyEarning": true, "isLoyaltyRedeemable": true,
  "image": "https://www.ahstatic.com/photos/0785_ho_00_p_1024x768.jpg", "totalPhotos": 58,
  "previousPricePerNight": null, "priceChange": null,
  "scrapedAt": "2026-09-12T00:30:20.318Z"
}
```

#### Also on every row

| Field | What it is |
|---|---|
| `totalReviews` | Accor's own review total for the property. |
| `pricesIncludeTax` · `taxesAndChargesExcluded` · `taxText` | Whether the quoted price already includes taxes and fees, the taxes charged on top where it does not, and Accor's own wording. Accor quotes a US `countryMarket` before tax ("Taxes not included : $120"), and the other markets tested with taxes included. Null where Accor says nothing. |
| `feesIncluded` · `feesIncludedText` · `feesIncludedBreakdown` | The destination, urban or resort fee Accor itemises for the stay, such as New York's Urban Experience Fee or a Las Vegas resort fee: the amount for the whole stay in `currency`, already part of `priceTotal`, with Accor's label and the named per-night lines. Accor itemises it for a US `countryMarket`; other markets quote the same hotels with the fee folded into the price, so the columns are null there. Rounded to the whole currency unit. Null where Accor says nothing, never 0. |
| `priceAggregation` · `priceAggregationText` | Whether the price is quoted per stay or per night: `TOTAL_STAY`, "per stay". |
| `priceBand` | Accor's price bracket for the property: `€€`, `€€€`, `€€€€`. |
| `hasMemberRate` · `offerCategoryText` · `offerCategoriesAvailable` | Whether a member rate exists, what it is called, and which rate categories are on offer. |
| `loyaltyStatus` | `PARTICIPATING_HOTEL` where ALL points are earned and spent, `NON_PARTICIPATING` otherwise. |
| `mealPlanText` | The meal terms where the offer states them, such as "Breakfast included". |
| `offerType` | What is being priced: `ROOM`. |
| `recommendedScore` | Accor's own ranking score, which drives the default `recommended` sort. |
| `isDayUse` | Whether this is a day-use stay rather than an overnight one. |
| `availabilityReasons` | Why a hotel is unavailable, when it is. Empty unless you turn **Only available** off. |
| `labels` · `kickers` | Short badges the property carries: "Renovated", "Family friendly", "Skip the Clean". |
| `totalPhotos` | How many photos and videos Accor shows for the hotel, the "1/111" on its card. |
| `priceChange` · `priceChangePct` · `previousPricePerNight` · `previousScrapedAt` | Filled only when you set **Price memory store** and re-run. Null on a first run. |
| `scale` · `managementType` · `managementTypeText` · `reservationSystem` | How Accor classifies the property and whether it manages or franchises it. |
| `state` | Filled where the country has one: a US or Australian property, not a French one. |
| `specialRates` | `company`, `preferential` or `loyalty` when your own codes or card priced the run, null otherwise. |
| `input` | Exactly what you passed in, so a row can be traced back to its input. |

**The rate terms aren't in a search row.** Accor's search results give the price but not the offer detail, which means no cancellation policy, no itemised tax breakdown and no rooms-left figure here. For those, pass the hotel ids to [Accor Room Rates Scraper](https://apify.com/boncross/accor-room-rates), which returns each room and rate plan of a hotel with its terms.

### How many hotels, and how fast?

| Run | Result |
|---|---|
| Tokyo, 2 nights, JPY, 10 hotels | 10 hotels priced in about 2 seconds |
| Paris, 2 nights, EUR, cheapest first, everything the city has | 259 hotels, all priced, in 19 seconds |
| Paris, London, Berlin and Sydney, 2 nights, up to 200 hotels each | 366 hotels, all priced, in 5 to 8 seconds |
| 24 destinations, 2 nights, up to 200 hotels each | 1,038 hotels in about 6 seconds |

The two larger runs were measured on 2 October 2026. Destinations are searched at the same time, which is why adding cities adds little to the run. A few thousand destinations still finish well inside the default one-hour run limit.

How many hotels you get depends on how you write the destination. A city name covers the city itself: Paris has about 260 Accor hotels. A radius search around the same point reaches the wider metropolitan area, and stops at 300 hotels however wide you draw it.

### FAQ

#### Do I need proxies or an Accor account?

Neither. There's nothing to configure, no login is involved, and proxy usage isn't charged.

#### Which Accor brands does it cover?

The whole group, because the brands share one booking platform: Raffles, Orient Express, Fairmont, Sofitel, MGallery, Pullman, Swissôtel, Movenpick, Novotel, Mercure, Adagio, ibis, ibis Styles, ibis budget, greet and more. Use "Brands" if you only want some of them.

#### Why is my US price lower than the same hotel priced for the UK?

Accor quotes a US country market before tax, and the other markets tested with taxes and fees included. `pricesIncludeTax` tells you which way each price went, and for a pre-tax price `taxesAndChargesExcluded` is the tax on top. If you compare markets, compare on the same basis.

#### How do I see my company's, my code's or my loyalty card's rates?

Add your company client code and access code, a preferential code, or your ALL Accor loyalty or subscription card number. The prices in that run are then the ones Accor quotes you. The codes are stored encrypted and never appear in the results or the log. If Accor rejects a company code or a card, the run stops with Accor's own message, so you're never shown public prices in their place. Preferential codes are different: Accor doesn't check them and quotes its ordinary rates for one it doesn't recognise. The run log tells you when no offer came back with a rate specific to your code.

#### Which price is the member rate?

Accor shows a discounted loyalty rate next to the public one. `pricePerNight` is the rate a visitor is shown. `memberPerNight` and `memberTotal` are the member rate, whether or not it was the one shown. `priceListedPerNight` is the crossed-out public rate, filled only when it's dearer than the shown rate, and `discountPercent` is the saving. Switch on "Public rates only" if you want public rates alone.

#### How do I get only the prices that changed since yesterday?

Give "Price memory store" any name, switch on "Only new or changed prices", and schedule the run with rolling dates. The actor remembers the last price for each hotel and stay and returns only new or moved rows. Hotels that haven't moved aren't charged.

#### Can I search a neighbourhood or a landmark?

Search for it on Accor's site and paste the search URL as the destination. For a circle around a point, write "lat,lng,metres", for example "35.6812,139.7671,5000". Free text such as a street name isn't looked up.

#### What can't it do?

- You get each hotel's cheapest offer only. Every room and rate plan comes from Accor Room Rates Scraper.
- Cancellation and prepayment policy, the itemised tax breakdown and rooms left aren't part of Accor's search results. A search row does say whether the price includes tax and, where it doesn't, the tax on top.
- A typed destination must be a city with a country, a slug, or coordinates.
- A radius search returns at most 300 hotels.
- Without codes, prices are what a signed-out visitor sees, including the standard member rate. Company and preferential rates need your own codes, and loyalty status rates need your card number.
- Accor sorts by price on its own basis, and two hotels within about 0.5% of each other can appear out of order in the currency you asked for.

#### Is it legal to scrape Accor?

The actor reads only what Accor serves to any logged-out visitor, and hotel prices are public commercial data, not personal data. You're responsible for complying with Accor's terms and applicable law in how you use the data.

### Scheduling, API and AI agents

A rate shopper usually wants this on a schedule: an Apify Schedule with rolling dates and "Only new or changed prices" gives you a daily feed of price moves for a market, and a webhook or the Slack and Google Sheets integrations can pass them on. People also use the data for price parity checks, for measuring how deep the member discount runs by city and brand, and for building a hotel database with coordinates and ratings.

From code, one call runs the actor and returns the hotels:

```
POST https://api.apify.com/v2/acts/boncross~accor-search/run-sync-get-dataset-items?token=YOUR_TOKEN
```

There are `apify-client` packages for Node.js and Python. For an AI agent, add the Apify MCP server (`mcp.apify.com`) to your client and reference the actor as `boncross/accor-search`. You could ask it for the cheapest four-star Accor hotels in a city on given dates.

### More from BonCross

- [Accor Hotel Details Scraper](https://apify.com/boncross/accor-hotel-details): Full Accor hotel records.
- [Accor Room Rates Scraper](https://apify.com/boncross/accor-room-rates): Every room and rate plan an Accor hotel sells for your dates.
- [Agoda Room Rates Scraper](https://apify.com/boncross/agoda-room-rates): Every room type and rate plan Agoda shows for a hotel and stay.
- [Agoda Search Scraper](https://apify.com/boncross/agoda-search): Agoda search results for any destination and dates.
- [Booking.com Hotel Details Scraper](https://apify.com/boncross/booking-hotel-details): The full Booking.com record for a property.
- [Booking.com Hotel Search Scraper](https://apify.com/boncross/booking-hotel-search): Every hotel Booking.com is selling for a destination and your dates.

### Your feedback

Seen a price that doesn't match Accor's site, or a hotel missing from a city? Report it on the Issues tab in Apify Console with the destination and dates you used. We read every issue and answer there.

# Changelog

This Actor's version history is a separate document: https://apify.com/boncross/accor-search/changelog.md

# Actor input Schema

## `destinations` (type: `array`):

Where to search. Use "City, Country" ("Paris, France", "Tokyo, Japan"), an Accor destination slug ("paris-france"), or coordinates as "lat,lng,metres" ("35.6812,139.7671,5000").

## `hotelIds` (type: `array`):

Optional. Price a specific set of Accor hotels instead of (or as well as) a destination. Four-character ids such as 0663 or C185, or all.accor.com hotel URLs.

## `maxResultsPerDestination` (type: `integer`):

Stop after this many hotels per destination.

## `maxItems` (type: `integer`):

A run-wide ceiling across every target. The per-target limit above applies to each one separately, so ten targets at 50 each returns 500; set this to cap the total. Zero means no run-wide limit. Rows that report an input the actor could not resolve are not counted here and are never charged for.

## `checkIn` (type: `string`):

Arrival date, YYYY-MM-DD. Leave empty to use "Check-in days ahead".

## `checkOut` (type: `string`):

Departure date, YYYY-MM-DD. Leave empty to use "Nights".

## `checkInDaysAhead` (type: `integer`):

Used when Check-in is empty: arrive this many days from today. Handy for scheduled runs.

## `nights` (type: `integer`):

Used when Check-out is empty. 1 to 30.

## `adults` (type: `integer`):

Adults in the room.

## `childrenAges` (type: `array`):

One entry per child, in years. Leave empty for an adults-only stay.

## `dayUse` (type: `boolean`):

Price a daytime stay with no overnight instead of a normal booking.

## `memberRateOnly` (type: `boolean`):

Keep only hotels whose cheapest offer is a loyalty member rate.

## `promotionsOnly` (type: `boolean`):

Keep only hotels with a promotional rate for your dates, Accor's "Promotion" filter.

## `loyaltyHotelsOnly` (type: `boolean`):

Keep only hotels where ALL Accor points can be earned and spent, Accor's own loyalty filter. Applied by Accor.

## `preferentialCode` (type: `string`):

A preferential or promotional code, as entered in Accor's "Special rates" box. Accor does not check these codes: one it does not recognise, or that does not apply to these hotels and dates, returns the ordinary rates, and the run log warns when no code-specific rate came back. Stored encrypted.

## `clientCode` (type: `string`):

Your company's Accor client code ("SC…"), for your negotiated rates. Give the access code below too if your company uses one. Stored encrypted.

## `accessCode` (type: `string`):

The access code that goes with your company client code. Stored encrypted.

## `loyaltyCardNumber` (type: `string`):

Your ALL Accor loyalty or subscription card number, to see the rates your card gets. Stored encrypted, and never written to the results or the log.

## `hideMemberRate` (type: `boolean`):

Return the public rate instead of the discounted member rate, so prices match what a signed-out visitor sees.

## `sort` (type: `string`):

Order of the results.

## `sortDirection` (type: `string`):

Ascending or descending.

## `stars` (type: `array`):

Keep only these star classes. Leave empty to keep all.

## `brands` (type: `array`):

Keep only these brands, by name or Accor code: "ibis" or IBH, "Novotel" or NOV, "Sofitel" or SOF, "ibis Styles" or IBS, "Pullman" or PUL, "Raffles" or RAF, and every other Accor brand. Empty keeps all.

## `amenities` (type: `array`):

Keep only hotels with ALL of these, as ticking several boxes does on Accor's site. Applied by Accor.

## `lodgingTypes` (type: `array`):

Keep only these property types. Applied by Accor.

## `minRating` (type: `number`):

Keep hotels rated at least this, on the 5-point guest scale; 0 keeps all. Decimals such as 4.5 are applied exactly.

## `minPricePerNight` (type: `number`):

In the chosen currency. 0 means no minimum.

## `maxPricePerNight` (type: `number`):

In the chosen currency. 0 means no maximum.

## `onlyAvailable` (type: `boolean`):

Drop hotels that are sold out or not bookable for the dates.

## `breakfastOnly` (type: `boolean`):

Keep only hotels whose cheapest offer includes a meal plan.

## `currency` (type: `string`):

ISO currency code for every price, for example USD, GBP, EUR, JPY. Default USD.

## `countryMarket` (type: `string`):

Two-letter country of the traveller. Accor uses it to pick the market, so it can change taxes and which rates are shown.

## `language` (type: `string`):

Language for names, descriptions and labels.

## `priceStoreName` (type: `string`):

Name of a key-value store that remembers the last price per hotel and stay. Set it once and every run adds the previous price and the change.

## `onlyNewOrChanged` (type: `boolean`):

With a price memory store set, skip hotels whose price has not moved since the last run.

## `dedupStoreName` (type: `string`):

Name of a key-value store that remembers which hotels have already been returned, so scheduled runs output only hotels that are new to you.

## `delayMs` (type: `integer`):

Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows. Values above 2000 are treated as 2000.

## `maxConcurrency` (type: `integer`):

How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.

## `includeRawOffer` (type: `boolean`):

Add the untouched offer object to every record, next to the mapped fields.

## Actor input object example

```json
{
  "destinations": [
    "Paris, France"
  ],
  "hotelIds": [],
  "maxResultsPerDestination": 100,
  "maxItems": 0,
  "checkIn": "",
  "checkOut": "",
  "checkInDaysAhead": 30,
  "nights": 2,
  "adults": 2,
  "childrenAges": [],
  "dayUse": false,
  "memberRateOnly": false,
  "promotionsOnly": false,
  "loyaltyHotelsOnly": false,
  "hideMemberRate": false,
  "sort": "recommended",
  "sortDirection": "ASC",
  "stars": [],
  "brands": [],
  "amenities": [],
  "lodgingTypes": [],
  "minRating": 0,
  "minPricePerNight": 0,
  "maxPricePerNight": 0,
  "onlyAvailable": true,
  "breakfastOnly": false,
  "currency": "USD",
  "countryMarket": "GB",
  "language": "en",
  "priceStoreName": "",
  "onlyNewOrChanged": false,
  "dedupStoreName": "",
  "delayMs": 0,
  "maxConcurrency": 8,
  "includeRawOffer": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Accor search results: every row the run returned.

## `stats` (type: `string`):

Counts for the run: what was resolved, fetched, filtered and returned.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "destinations": [
        "Paris, France"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("boncross/accor-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "destinations": ["Paris, France"] }

# Run the Actor and wait for it to finish
run = client.actor("boncross/accor-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "destinations": [
    "Paris, France"
  ]
}' |
apify call boncross/accor-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,boncross/accor-search"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Pc9FAHtaYkcECChXQ/builds/UnPNtcXi9fliowg3U/openapi.json
