# OpenTable Reviews Scraper

> OpenTable reviews scraper: get guest reviews with food, service and ambience ratings, or list restaurants in a city. No login, export to CSV or Excel.

URL: https://cliqtomedia.com/actors/opentable-reviews-scraper/

Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/opentable-reviews-scraper?fpr=cliqto

Get OpenTable guest reviews with detailed ratings and owner replies. Or get a list of restaurants in a city. You need no OpenTable account.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://www.opentable.com/r/brooklyn-chop-house-new-york` in Restaurant URLs or IDs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Paste OpenTable restaurant links and get their guest reviews with overall, food, service, ambience and value ratings, the dined date and the restaurant's reply, or search OpenTable restaurants by city and get cuisine, price band, rating, review count, address and phone. No login, cookies or API key.

- Reviews — you add restaurant links or IDs. For each restaurant you get one restaurant row with its details, then its reviews, newest first (or highest / lowest rated first).
- Search — you add a city or area. You get the restaurants OpenTable lists there, one row per restaurant, with details from each restaurant page.

### Good for

- Restaurant owners and marketing teams who watch their own and competitors' OpenTable reviews, ratings and replies.
- Analysts who compare restaurants in a city by cuisine, price band, rating and review count.
- Scheduled monitoring: with `reviewsSince` a run reads only new reviews and stops at the first older one.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.011 | Charged once per run, one fee per GB of memory. This tool uses 2 GB by default, so $0.022 per run. |
| Review | $0.0008 (from $0.00068 on paid Apify plans) | One OpenTable review saved in the Dataset, with its ratings, dined date and restaurant reply. |
| Restaurant | $0.003 (from $0.0026 on paid Apify plans) | One restaurant row saved in the Dataset (search result or the restaurant whose reviews you asked for). |
| Restaurant not found | $0.0015 | A restaurant link or ID that OpenTable does not have (404). The check is saved as a not_found row. Invalid, non-OpenTable links are free. |

- One result: about $0.02.
- 1,000 results: about $0.82.
- Every day 100 results, for 30 days: about $3.06 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/opentable-reviews-scraper?fpr=cliqto

## Questions

### Does it work with OpenTable UK or Canada?

Yes. Links from OpenTable country sites work, for example opentable.co.uk or opentable.ca. Numeric restaurant IDs work too.

### Can I see table availability or menus?

No. The tool gets reviews and restaurant details only. It does not read bookings, menus or review photos.

### How many reviews can I get for one restaurant?

OpenTable shows up to 10,000 reviews of one restaurant in one order. That is enough for most places.

### Do I need a proxy or cookies?

No. It reads public pages without login, cookies or a proxy.

### Which OpenTable sites work?

Links from any OpenTable country site, for example opentable.com, opentable.co.uk or opentable.ca, and numeric restaurant IDs. Search works with the location names OpenTable knows.

### Why does Search find fewer restaurants than OpenTable says?

OpenTable's list pages change and overlap while you read them. For big cities the Actor may get fewer unique restaurants than the total OpenTable shows; it says so in a warning. Search a smaller area for a fuller list.

### How fresh is the data?

Every row is read live during the run; `fetchedAt` shows when. Ratings on restaurant rows are OpenTable's averages of recent reviews.

## Data fields

- `type` (string): review: one guest review (Reviews mode). restaurant: one restaurant (Search mode), or a restaurant input that could not be read (Reviews mode, status not_found or error).
- `status` (string): Restaurant rows only. complete: read; partial: search listing data only because the restaurant page could not be read (see error); not_found: OpenTable has no such restaurant; error: invalid input or unreadable page. not_found rows cost the lower Restaurant not found price; error rows are free.
- `restaurantId` (integer): OpenTable restaurant ID.
- `name` (string): Restaurant name.
- `url` (string): Restaurant page on OpenTable.
- `cuisine` (string): Primary cuisine.
- `cuisines` (array): All cuisines listed on the restaurant page.
- `priceBand` (string): Price per person as OpenTable shows it, e.g. "$31 to $50".
- `priceLevel` (integer): Price level 1 (cheapest) to 4.
- `currencySymbol` (string): Currency symbol of the price band.
- `rating` (number): Overall rating 1–5 (on reviews: the diner's overall rating; on restaurants: OpenTable's average based on recent reviews).
- `ratingFood` (number): Food rating 1–5.
- `ratingService` (number): Service rating 1–5.
- `ratingAmbience` (number): Ambience rating 1–5.
- `ratingValue` (number): Value rating 1–5.
- `ratingNoise` (number): Restaurants: average noise level 1 (quiet) to 3 (energetic).
- `ratingCount` (integer): Restaurants: number of recent reviews the ratings are based on.
- `ratingDistribution` (object): Restaurants: number of recent reviews with 1–5 stars.
- `reviewCount` (integer): Restaurants: all-time number of written reviews on OpenTable.
- `address` (string): Full address.
- `street` (string): Street address.
- `city` (string): City.
- `state` (string): State or region.
- `postalCode` (string): Postal code.
- `country` (string): Country.
- `countryCode` (string): Country code, e.g. US, GB.
- `neighborhood` (string): Neighborhood.
- `metro` (string): OpenTable metro area.
- `latitude` (number): Latitude.
- `longitude` (number): Longitude.
- `phone` (string): Phone number.
- `website` (string): Restaurant website.
- `diningStyle` (string): Dining style, e.g. Casual Dining.
- `dressCode` (string): Dress code.
- `executiveChef` (string): Executive chef.
- `hours` (string): Opening hours as text.
- `paymentOptions` (array): Accepted payment methods.
- `description` (string): Restaurant description.
- `reviewSummary` (string): OpenTable's summary of recent reviews.
- `awards` (array): OpenTable awards.

## Input settings

- `mode` (string): Reviews: guest reviews of the restaurants you paste below. Search: restaurants OpenTable lists for a city or area.
- `restaurantUrls` (array): OpenTable restaurant pages, e.g. https://www.opentable.com/r/brooklyn-chop-house-new-york, from any OpenTable country site, or numeric restaurant IDs. Up to 200; one run reads reviews of the first 40, the rest are listed as not started (free) for another run. Used when "What to scrape" is Reviews.
- `location` (string): City, neighborhood or area as you would type it on OpenTable, e.g. "New York", "Chicago" or "London". Used when "What to scrape" is Search.
- `maxReviewsPerRestaurant` (integer): Most reviews to return for each restaurant (1–10,000), in the order chosen below. OpenTable serves at most 10,000 reviews per restaurant in one order; run again with another order for more. Each returned review is one review event.
- `maxItems` (integer): Most rows to return in the whole run: reviews in Reviews mode (1–50,000, empty: 1,000), restaurants in Search mode (1–1,000, empty: 30). One run opens at most 40 OpenTable pages, so with details on, restaurants past about 38 come with search-list data only.
- `sortReviewsBy` (string): Which reviews come first: newest, highest rated or lowest rated.
- `reviewsSince` (string): Return only reviews submitted on or after this date: a date like 2026-01-31 or a period like "30 days", "2 weeks" or "6 months". With newest-first order the run stops reading a restaurant as soon as older reviews start, so scheduled runs only pay for new reviews.
- `includeRestaurantDetails` (boolean): Search mode only: on — every restaurant comes with address, phone, website, hours, food/service/ambience ratings and more (opens each restaurant page); off — only what the search list shows (name, cuisine, price band, rating, review count, neighborhood), which is faster. In Reviews mode every restaurant always has one restaurant row with these details before its reviews.

## Step by step on Apify

1. Open the Input tab.
2. Keep What to scrape (`mode`) as Reviews of restaurant URLs.
3. In Restaurant URLs or IDs (`restaurantUrls`) keep the example link or paste your own, e.g. `https://www.opentable.com/r/brooklyn-chop-house-new-york`.
4. Keep Max reviews per restaurant (`maxReviewsPerRestaurant`) at the prefilled 20.
5. Click Start.
6. Open the Output tab, view Reviews, and check `rating`, `text` and `dinedAt`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Read guest feedback for a restaurant | `restaurantUrls`, `maxReviewsPerRestaurant` | review | `rating`, `ratingFood`, `ratingService`, `text`, `dinedAt` | Export CSV or Excel |
| Check how a restaurant answers reviews | `restaurantUrls`, `sortReviewsBy: "lowest"` | review | `rating`, `restaurantReply`, `restaurantReplyAt` | Spreadsheet or BI tool |
| Get new reviews every week | `restaurantUrls`, `reviewsSince: "7 days"` | review | `reviewId`, `submittedAt`, `rating`, `text` | Apify schedule + API |
| Build a restaurant list for a city | `mode: "search"`, `location` | restaurant | `name`, `cuisine`, `priceBand`, `rating`, `reviewCount`, `phone` | CRM or map |

## Tips

- Use the date filter on a weekly schedule to get only new reviews.
- For a big city, search smaller areas to get a fuller restaurant list.
- Choose lowest rated first to find problems quickly.

## Limits



- No reservations, table availability, menus or review photos (only `photoCount`).
- Only public data. The Actor does not log in and does not return private diner data.
- OpenTable shows at most 10,000 reviews of one restaurant in one order. For more, run again with another `sortReviewsBy`.
- One run opens at most 40 OpenTable pages, because OpenTable blocks more. In Reviews mode that is 40 restaurants per run (reviews themselves do not count). In Search mode with details, about 38 restaurants get full details; the rest come with search-list data only.
- Search returns at most 1,000 restaurants per run (the `maxItems` maximum). OpenTable may list fewer unique restaurants for a big city.
- If OpenTable refuses every address the Actor tries in about two minutes, the run fails with a clear message; it does not return an empty result as success. Residential use per run is capped; past the cap the run goes on from its own address.

## Sample result

```json
{
  "type": "review",
  "restaurantId": 1017331,
  "restaurantName": "Brooklyn Chop House - Downtown",
  "restaurantUrl": "https://www.opentable.com/r/brooklyn-chop-house-new-york",
  "reviewId": "OT-1017331-261886-120047159362",
  "rating": 5,
  "ratingFood": 5,
  "ratingService": 5,
  "ratingAmbience": 4,
  "ratingValue": 4,
  "noise": "ENERGETIC",
  "text": "loved the ambiance. Alex, our waiter, was FABULOUS! My filet was cooked to perfection…",
  "dinedAt": "2026-09-30T18:30:00-04:00",
  "submittedAt": "2026-10-01T21:53:34Z",
  "reviewerName": "Diner1",
  "reviewerMetro": "County Durham",
  "reviewerReviewCount": 8,
  "reviewerIsVip": false,
  "helpfulUp": 0,
  "helpfulDown": 0,
  "restaurantReply": null,
  "restaurantReplyAt": null,
  "verified": true,
  "fromPreviousConcept": false,
  "photoCount": 0,
  "source": "opentable",
  "fetchedAt": "2026-10-14T15:29:52.739Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/opentable-reviews-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/opentable-reviews-scraper").call(run_input={
    "mode": "reviews",
    "restaurantUrls": [
        "https://www.opentable.com/r/brooklyn-chop-house-new-york"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~opentable-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "reviews", "restaurantUrls": ["https://www.opentable.com/r/brooklyn-chop-house-new-york"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/opentable-reviews-scraper")
result = tool.invoke({"run_input": {"mode": "reviews", "restaurantUrls": ["https://www.opentable.com/r/brooklyn-chop-house-new-york"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate.

## Similar tools

- [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/)
- [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/)
- [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/)
- [App Store Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/app-store-apps-search/)
- [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/)
- [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/)
