OpenTable Restaurants & Reviews Scraper
DeprecatedPricing
from $1.50 / 1,000 result row emitteds
OpenTable Restaurants & Reviews Scraper
DeprecatedScrape OpenTable restaurant listings and reviews — price tier, star ratings, review counts, booking-popularity signal, phone, address, and recent review snippets, one row per restaurant. Search any city or neighborhood, optionally filtered by cuisine.
Pricing
from $1.50 / 1,000 result row emitteds
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
🎯 What this scrapes
OpenTable is the default reservation platform for tens of thousands of restaurants across the US and beyond. This Actor collects one structured row per restaurant for a searched city: price tier, overall and sub-category star ratings, review count, a booking-popularity signal, contact details, and a capped set of recent review snippets — built to feed local-restaurant SaaS tools, franchise/competitive-intel research, and site-selection analysis.
🔥 What we handle for you
- 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
- 🧊 Consistently structured dataset rows — validated fields, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — a small start fee per run, then you pay only for results that hit your dataset. A run that finds nothing pays only the start fee.
💡 Use cases
- Local-restaurant SaaS — keep a client-facing dataset of competitor listings, price tiers, and ratings current for a target metro.
- Franchise / competitive-intel research — compare cuisine mix, price tiers, and booking-popularity signals across a city or neighborhood.
- Site-selection analysis — map restaurant density, price tiers, and ratings for a candidate location before opening a new site.
- Reputation monitoring — track review counts and recent review snippets for a watchlist of restaurants over time.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
location | string | yes | 'New York, NY' | City or neighborhood to search on OpenTable, e.g. "New York, NY", or a city-listing slug. |
cuisine | string | no | 'Italian' | Optional cuisine filter, e.g. "Italian". |
maxResults | integer | no | 100 | Maximum number of restaurants to return in this run. |
includeReviews | boolean | no | True | Populate the reviews field on each row with recent review snippets. |
maxReviewsPerRestaurant | integer | no | 5 | Cap on review snippets collected per restaurant when Include reviews is on. |
proxyConfiguration | object | yes | {'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']} | Mandatory — defaults to RESIDENTIAL given OpenTable's site-wide bot-defense wall on non-residential IPs. |
Example input
{"location": "New York, NY","maxResults": 3,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
query_location | string | Original location input for this row. |
restaurant_name | string | Listing/detail page title. |
opentable_url | string | Canonical https://www.opentable.com/r/ |
opentable_id | ['string', 'null'] | Internal numeric/slug ID, if exposed (unconfirmed). |
city | string | Parsed from location or the listing page. |
neighborhood | ['string', 'null'] | Neighborhood name (unconfirmed). |
cuisines | array | Cuisine tags on the listing/detail page. |
price_tier | ['string', 'null'] | OpenTable's $–$$$$ symbol tier. |
rating_overall | ['number', 'null'] | 1–5 aggregate star rating. |
rating_food | ['number', 'null'] | Food sub-score (unconfirmed). |
rating_service | ['number', 'null'] | Service sub-score (unconfirmed). |
rating_ambience | ['number', 'null'] | Ambience sub-score (unconfirmed). |
review_count | ['integer', 'null'] | Total review count on the listing. |
booked_today_count | ['integer', 'null'] | "Booked N times today" popularity badge (unconfirmed). |
phone | ['string', 'null'] | Contact number on the detail page. |
address | ['string', 'null'] | Street address on the detail page. |
reviews | array | Recent review snippets (author, rating, text, date — all nullable, unconfirmed), only when includeReviews=true, capped… |
scraped_at | string | ISO 8601 UTC timestamp at row creation. |
Example output
{"query_location": "New York, NY","restaurant_name": "Gramercy Tavern","opentable_url": "https://www.opentable.com/r/gramercy-tavern-new-york","opentable_id": null,"city": "New York","neighborhood": "Flatiron District","cuisines": ["American","Contemporary American"],"price_tier": "$$$","rating_overall": 4.8,"rating_food": 4.9,"rating_service": 4.7,"rating_ambience": 4.8,"review_count": 6421,"booked_today_count": 37,"phone": "+1 212-477-0777","address": "42 E 20th St, New York, NY 10003","reviews": [{"author": "J.","rating": 5.0,"text": "Exceptional service.","date": "2026-07-28"}],"scraped_at": "2026-08-02T12:00:00+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result-row | $0.0015 | Per unique dataset item |
Example: 1 000 results at the rates above ≈ $1.70. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
This scaffold-stage release ships input validation and the full output shape but does not yet push scraped rows — production fetching/parsing is gated on a cloud recon pass confirming OpenTable's live wire format (see the Actor's CHANGELOG). Live table-availability/booking-time search, making or managing reservations, and any authenticated diner-account view are out of scope.
❓ FAQ
Do I need an OpenTable account or API key?
No. This Actor scrapes OpenTable's own publicly listed restaurant data — no login, no API key.
Why does this default to a residential proxy?
OpenTable runs a site-wide bot-defense wall that blocks direct/datacenter-IP requests. We default proxyConfiguration to Apify's RESIDENTIAL group so runs clear that wall without you tuning anything.
Can I filter by cuisine?
Yes — set cuisine (e.g. "Italian") alongside location.
Does every row include reviews?
Only when includeReviews is true (the default); reviews is capped at maxReviewsPerRestaurant per row.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.