OpenTable Restaurants Scraper
parseforge/opentable-scraper
TravelE-commerceAutomation
Scrapes OpenTable restaurant listings by search term or direct URL. Returns each restaurant as a flat row with rating, review count, price band, and optional full profile details.
- Total users
- 66
- Monthly active
- 17
- Total runs
- 1.1K
- Bookmarked
- 0
- Rating
- 1.8 (2)
- Last modified
- 12 days ago
Overview
OpenTable Restaurants Scraper
Scrape OpenTable restaurants, ratings, and diner reviews from any city, cuisine, or direct URL, up to a million per run. Every restaurant comes with its price band, rating, review count, and full profile details when you enable enrichment. Export to CSV, JSON, Excel, or XML.
OpenTable's public search and profile pages hold the most current restaurant availability, pricing, and diner sentiment data, but collecting it by hand across hundreds of listings is slow. This OpenTable scraper reads the live search results and restaurant profiles directly, filters by price band and sort order, and returns each match in one consistent row. No API key, no browser extension, and no manual copying.
| Who uses it | What they scrape OpenTable for |
|---|---|
| Market researchers | Track which cuisines and price tiers are expanding in a metro area. |
| Competitive intelligence analysts | Monitor competitor ratings, review volume, and profile completeness across a city. |
| Data journalists | Build a dataset of restaurant openings, price distributions, and diner feedback trends. |
| Hospitality consultants | Benchmark a client's rating and review count against the local market. |
What it does
This Actor collects OpenTable restaurants by search term or direct restaurant URL and returns each one as a flat row with its rating, review count, price band, and optional full profile details.
- π Search by term: feed it a city, neighborhood, cuisine, or restaurant name and paginate through every result.
- π Direct URLs: drop in one or more OpenTable restaurant profile URLs and collect exactly those records.
- π° Price band filter: restrict results to $, $$, $$$, or $$$$ so only the relevant tier reaches your dataset.
- π Full profile enrichment: open each restaurant's page for hours, menu links, executive chef, payment options, and more.
- π Fixed flat schema: every restaurant lands as one row, ready for CSV, JSON, Excel, or XML export.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with OpenTable data
π Track a city's dining scene.
A market researcher searches "Chicago" with the $$$$ price band to list every fine-dining restaurant, then enriches profiles to compare menu links and hours.
π₯ Benchmark competitor ratings.
A restaurant group drops in 50 competitor URLs, collects rating and review counts, and identifies which locations are gaining or losing diner sentiment.
πΊοΈ Map cuisine availability by neighborhood.
A data journalist runs searches for "Italian," "Japanese," and "Mexican" across five boroughs and exports a CSV of cuisine density by price band.
πΌ Qualify hospitality leads.
A consultant scrapes every restaurant in a metro area, filters to $$$ and above, and uses the profile data to prioritize outreach by rating and review volume.
Why choose this scraper
| What you get | |
|---|---|
| Live search results | What a diner sees today, not a cached snapshot. |
| Price band filtering | Narrow to budget, mid-range, or fine dining in one run. |
| Full profile enrichment | Hours, menu links, chef name, and payment options when you need the complete picture. |
| No API key required | Reads the public pages, so you start scraping immediately. |
How it compares
This Actor focuses on restaurant discovery and profile data with price band filtering and full profile enrichment. Here is how it compares to other OpenTable scrapers on Apify.
| Feature | ParseForge | OpenTable Reviews Scraper π½οΈ | OpenTable Scraper |
|---|---|---|---|
| Search by city or cuisine | Yes | Not listed | Not listed |
| Price band filtering | Yes | Not listed | Not listed |
| Full restaurant profile enrichment | Yes | Not listed | Not listed |
| Direct restaurant URL input | Yes | Not listed | Not listed |
| Sort order control | Yes | Not listed | Not listed |
| Diner review text extraction | Not listed | Yes | Yes |
Configure the run
Drive the Actor from search terms and direct restaurant URLs, alone or together, and price band filters run as each result is read so only matches reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"searchTerms": [
"New York"
],
"maxItems": 10
}
A larger pull:
{
"searchTerms": [
"New York"
],
"maxItems": 200
}
Pricing
Pay-per-result: $0.021 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the OpenTable Restaurants Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to OpenTable through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/opentable-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results for my search term?
OpenTable may not recognize the term if it is too specific or misspelled. Try a broader term like the city name or a common cuisine, and check the spelling. You can also test the search directly on OpenTable.com.
The run stopped after 10 restaurants even though I set a higher maximum.
Free Apify accounts are limited to 10 results as a preview. Upgrade to a paid plan to collect more restaurants per run.
Some profile fields are empty even with enrichment enabled.
Not every restaurant fills in all profile fields on OpenTable. Hours, chef name, and menu links are only present when the restaurant has provided them.
The Actor is running slowly.
Full profile enrichment opens each restaurant's page, which adds time. If speed is more important than profile details, disable the enrichment checkbox to collect only the search-result fields.
I pasted a URL but the Actor says it is invalid.
Make sure the URL starts with https://www.opentable.com/r/ or https://www.opentable.com/restaurant/profile/. Shortened or redirected links may not work.
FAQ
| Question | Answer |
|---|---|
| Can I scrape reviews with this Actor? | The Actor collects the rating and review count for each restaurant. It does not extract the full text of individual diner reviews. If you need review body text, consider a dedicated reviews scraper. |
| How do I search for a specific cuisine? | Enter the cuisine name as a search term, such as "Italian" or "sushi." OpenTable's search will return restaurants tagged with that cuisine in the default location. |
| What does the full profile enrichment add? | When enabled, the Actor opens each restaurant's profile page and collects hours of operation, menu links, executive chef name, payment options, and other details not shown in search results. |
| Can I limit results to a specific price range? | Yes. Use the price band filter to select one or more tiers from $ (under $30) to $$$$ ($100 and over). Leave it empty to collect all price levels. |
| How many restaurants can I scrape in one run? | Free users can collect up to 10 restaurants as a preview. Paid users can set the maximum up to 1,000,000, and the default is 1,000 when the field is left empty. |
| Do I need an OpenTable account or API key? | No. The Actor reads the public search and profile pages that any browser can access. No login, API registration, or key is required. |
| Can I scrape restaurants from multiple cities at once? | Yes. Add each city or neighborhood as a separate search term. The Actor paginates through each term independently and combines the results. |
| What output formats are supported? | You can export your dataset as CSV, JSON, Excel, or XML from the Apify platform. |
| How do I scrape a specific restaurant I already know? | Paste its OpenTable URL into the restaurant URLs field. The Actor will collect that restaurant directly without running a search. |
| Does the sort order affect which restaurants are collected? | Yes. The sort order controls how OpenTable returns results. Featured (default) prioritizes popularity, while Distance sorts by proximity when a location is implied by your search term. |
Related actors
Browse the full ParseForge collection for more scrapers.
π Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
β οΈ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by OpenTable, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| searchTerms | array | Locations, neighborhoods, cuisines, or restaurant names to search on OpenTable. Each entry is paginated separately. | ["New York"] |
| restaurantUrls | array | Direct OpenTable restaurant URLs (e.g. https://www.opentable.com/r/le-bernardin-new-york or https://www.opentable.com/restaurant/profile/100). Used instead of search terms. | [] |
| maxItems | integer | How many restaurants to collect per run. Free users: limited to 10 (preview). Paid users: optional, up to 1,000,000 - defaults to 1,000 when left empty. | 10 |
| priceBands | array | Restrict to specific price tiers ($ = cheapest, $$$$ = most expensive). Leave empty for all. | [] |
| sortBy | string (2 options) | How OpenTable orders the search results. | web_conversion |
| enrichWithProfile | boolean | Open each restaurant's profile page for the complete record (hours, menu, executive chef, payment options). Slower but richer. | true |
Pricing
from $19.00 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.019 to $0.021 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~opentable-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": [
"New York"
],
"maxItems": 3
}' Examples
Input that runs as-is.
{
"searchTerms": [
"New York"
],
"maxItems": 3
} Reviews
Rated 1.8 out of 5 across 2 reviews. Read them on Apify.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
