OpenTable Real-Time Data avatar

OpenTable Real-Time Data

Pricing

from $3.00 / 1,000 results

Go to Apify Store
OpenTable Real-Time Data

OpenTable Real-Time Data

Get real-time OpenTable restaurant data for any city or cuisine: profiles, ratings, reviews, reservations, prices, contact details, websites, emails and socials. Perfect for lead generation, market research and AI workflows. Every result streams instantly to your dataset or webhook.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Turn OpenTable into a clean, structured restaurant database. Discover restaurants across any city and cuisine, pull full restaurant profiles, capture ratings, price bands, reservation volume, photos and coordinates, and enrich every listing with the restaurant's own website and contact email — all as clean, structured JSON streamed to your Apify dataset in real time.

Built for lead-gen agencies, restaurant-tech companies, market researchers, sales teams and AI workflows that need reliable OpenTable data without slow, high-maintenance tooling.

💡 Free plan / paid plan. This Actor is built for paid Apify plans. Free (non-paying) Apify accounts run in a restricted mode and receive only a small sample (2 results) — upgrade to a paid Apify plan to unlock full, unlimited output. The restriction is intentional (not a bug) and is repeated on the relevant input fields below.


Why this Actor

OpenTable Real-Time DataTypical OpenTable setup
SpeedFast collection, many markets at onceOften 5–20 s per restaurant
Memory1024 MB default — light, streaming output2–4 GB+, data accumulates in memory
ReliabilityManaged Apify residential proxy + automatic recovery from temporary hiccupsBreaks on the first hiccup
SetupClean, organized input UI — run in secondsFragile scripts you maintain yourself
OutputOne flat, LLM-ready JSON row per restaurantMessy markup that still needs cleaning
Multi-marketMany keyword + market pairs per runUsually one query at a time
Contact enrichmentWebsite and email discovery built inRarely included
DeliveryDataset streaming + optional real-time webhookDataset only

What you get — 30+ data points per restaurant

Every row is tagged with featureType and scrapedAt so you can filter, join and pipe it into any workflow.

GroupFields
IdentityrestaurantId, name, url, type, diningStyle, description
LocationaddressLine1, addressLine2, city, state, postCode, country, neighborhood, latitude, longitude
PricingpriceBandId, priceBandName, priceRange ($–$$$$), currencySymbol
Reputationrating, reviewCount, reservationCount, topReviewText
Food & venueprimaryCuisine, cuisine[], hasBar, hasCounter, hasHighTop, hasOutdoor, hasPrivateDining, hasEnhancedPrivateDining, hasTakeout, maxPartySize
Media & badgesphotoUrl, imageUrls[], awards[]
ContactphoneNumber, formattedPhoneNumber, website, websites[], email, emails[], socials[]
Booking & orderingoffers[], deliveryPartners[], orderOnlineUrl
TraceabilitymarketLabel, searchKeyword, searchIndex, sourceUrl, featureType, scrapedAt

Features

🍽️ Restaurant Discovery — on by default

Discover restaurants by keyword + market. Add as many rows as you like — e.g. sushi in New York and italian in Chicago — and they all run in a single job.

  • Search by cuisine, dish, restaurant name or dining style.
  • Target any city or area — dozens of major markets are recognized out of the box, and any other city still works.
  • Optional party size, date & time and price band filters.
  • Control results per task and collection depth for very large runs.
  • Every row streams to the dataset as it is collected — memory stays flat on long runs.

📍 Restaurant Details

Already have OpenTable restaurant URLs or numeric restaurant IDs? Paste them to receive a complete structured profile — name, description, dining style, full address, neighborhood, coordinates, price band, rating, review and reservation counts, cuisines, venue features, photos, phone, website, offers, delivery partners and online ordering.

🎯 Lead details

Enable Lead details to enrich every result with the restaurant's own website, contact email(s) and social profiles (Instagram, Facebook, TikTok, X, YouTube) — the switch that turns a bare listing into an actionable lead.

Results are never filtered out: every restaurant you asked for lands in the dataset, and contact fields are simply left empty when a business does not publish them. That means a run of 1,000 returns exactly 1,000 rows — predictable for pricing, budgets and downstream pipelines. Need only rows with emails? Filter the dataset afterward on the email field (or use the built-in Leads dataset view), or pipe the webhook into your CRM and filter there.

🔔 Webhooks (real-time delivery)

Every record is always written to the Apify dataset first. If you set a Webhook URL, each new record is also POSTed in real time to your CRM, Slack, Zapier, Make, Google Sheets or custom destination. Choose JSON (full record) or a Slack-friendly message. Delivery is best-effort — a failed webhook never stops the run.

💳 Billing

Billed per result via Apify pay-per-event. Runs respect your maximum cost per run and finish gracefully at the limit.


Use cases

  • Restaurant lead generation — build outreach lists with phone, website and email for any city or cuisine.
  • Multi-city prospecting — run dozens of keyword + market pairs in one job.
  • Market mapping & density — compare how many restaurants, and at what price bands, exist per neighborhood.
  • Competitive intelligence — track ratings, review counts and reservation volume across competitors.
  • Cuisine gap analysis — find under-served cuisines and neighborhoods for expansion.
  • Sales prospecting for restaurant-tech — POS, reservations, marketing, delivery and supply vendors.
  • Price positioning studies — benchmark price bands by market and cuisine.
  • Reputation monitoring — watch rating and review-count movement for a portfolio.
  • Data enrichment — start from a URL or ID list and backfill full structured profiles.
  • AI & LLM pipelines — JSON for RAG, scoring, outreach drafts and territory summaries.
  • CRM & warehouse feeds — stream to your systems via webhook or the Apify API.
  • Franchise & expansion research — size demand for a concept in a new metro or neighborhood.
  • Supplier prospecting — find restaurants by cuisine, price band and location for B2B outreach.

Input reference

Enable only what you need. All features are independent.

InputTypeDefaultDescription
Restaurant Discovery
enableSearchbooleantrueDiscover restaurants by keyword + market
searchTasksobject[]2 example rowsPrimary input: { keyword, location, maxItems?, partySize?, dateTime?, priceBands? } per row
maxDepthPerTaskinteger20Collection-depth safety ceiling per market
Restaurant Details
enableRestaurantDetailsbooleanfalseExtract full profiles for specific URLs / IDs
restaurantUrlsstring[]—OpenTable restaurant URLs
restaurantIdsstring[]—Numeric OpenTable restaurant IDs
Lead details
enrichContactsbooleanfalseAdd website, email(s) and social profiles to every restaurant. Results are never filtered — all rows are always returned
Output & limits
maxItemsinteger1000Global cap on dataset rows for the run (set higher for large runs)
webhookUrlstring—Optional real-time POST URL — dataset is always written; webhook is additional
webhookFormatenumjsonjson (full record) or slack (Slack message)
Connection
proxyConfigurationobjectApify residentialApify proxy settings (on by default)

Full schema: see .actor/input_schema.json or the Input tab on Apify Console.


Output reference

Each dataset row is one restaurant. Filter by featureType:

featureTypeDescription
searchRestaurant from keyword discovery
restaurant_detailsFull profile from a restaurant URL or ID

Traceability fields on discovery results:

  • marketLabel — e.g. "sushi | New York, NY"
  • searchKeyword — the keyword that produced this row
  • searchIndex — 1-based position within the market

Export formats: JSON, CSV, Excel, RSS, or via the API.

Example record

{
"featureType": "search",
"restaurantId": 1197892,
"name": "Bad Habits",
"url": "https://www.opentable.com/r/bad-habits-astoria",
"description": "A lively neighborhood spot with a modern menu.",
"diningStyle": "Casual Dining",
"addressLine1": "32-03 Broadway",
"city": "Astoria",
"state": "NY",
"postCode": "11106",
"neighborhood": "Astoria",
"latitude": 40.7616752,
"longitude": -73.9242925,
"priceBandId": 2,
"priceBandName": "$$",
"priceRange": "$$",
"currencySymbol": "$",
"rating": 4.5,
"reviewCount": 171,
"reservationCount": 1,
"primaryCuisine": "Modern American",
"cuisine": ["Modern American", "Sushi", "Fusion"],
"hasBar": true,
"hasOutdoor": true,
"maxPartySize": 8,
"photoUrl": "https://resizer.otstatic.com/v3/photos/54327307-3?width=320&height=320",
"phoneNumber": "+13477385989",
"formattedPhoneNumber": "(347) 738-5989",
"website": "https://www.badhabitsastoria.com/",
"email": "info@example.com",
"emails": ["info@example.com"],
"socials": ["https://www.instagram.com/badhabitsastoria"],
"marketLabel": "sushi | New York, NY",
"searchKeyword": "sushi",
"searchIndex": 1,
"sourceUrl": "https://www.opentable.com/r/bad-habits-astoria",
"scrapedAt": "2026-09-22T12:00:00.000Z"
}

Note: some text fields (e.g. description, diningStyle, primaryCuisine, cuisine, neighborhood) are returned in the language that OpenTable serves for that market's listing. Restaurant names, ratings, counts, coordinates, phone numbers and URLs are language-neutral.


Webhook delivery (optional)

Every record is always saved to the Apify dataset first. If you set webhookUrl in the Output & limits section, each new record is also POSTed in real time to your destination — useful for CRMs, Slack, Zapier, Make or custom pipelines.

SettingDescription
webhookUrlYour destination URL (http/https). Leave empty to use the dataset only.
webhookFormatjson — full record object. slack — compact Slack incoming-webhook message.

Webhook delivery is best-effort: a failed webhook never stops the run or prevents dataset writes.

Example — discovery with Slack alerts

{
"enableSearch": true,
"searchTasks": [{ "keyword": "sushi", "location": "New York, NY", "maxItems": 10 }],
"webhookUrl": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"webhookFormat": "slack"
}

Example — leads with emails + JSON webhook

{
"enableSearch": true,
"searchTasks": [{ "keyword": "italian", "location": "Chicago, IL", "maxItems": 100 }],
"enrichContacts": true,
"webhookUrl": "https://your-crm.example.com/api/leads",
"webhookFormat": "json"
}

Quick start examples

Multi-market lead gen (default pattern)

{
"enableSearch": true,
"searchTasks": [
{ "keyword": "sushi", "location": "New York, NY", "maxItems": 100 },
{ "keyword": "sushi", "location": "Los Angeles, CA", "maxItems": 100 }
],
"enrichContacts": true
}

High-end dining prospecting

{
"enableSearch": true,
"searchTasks": [
{ "keyword": "steakhouse", "location": "Miami, FL", "maxItems": 60, "priceBands": ["3", "4"] }
],
"enrichContacts": true
}

Enrich a URL / ID list

{
"enableSearch": false,
"enableRestaurantDetails": true,
"restaurantUrls": ["https://www.opentable.com/r/bad-habits-astoria"],
"restaurantIds": ["1197892"],
"enrichContacts": true
}

Dinner availability context (party of 4, Friday)

{
"enableSearch": true,
"searchTasks": [
{ "keyword": "brunch", "location": "Austin, TX", "maxItems": 40, "partySize": 4, "dateTime": "2026-10-02T19:00" }
]
}

LLM & MCP integration

Output is JSON Lines–friendly structured data — ideal for ChatGPT, Claude, Gemini, LangChain, LlamaIndex and custom agents.

  1. Run the Actor with the features you need.
  2. Pull dataset items via the Apify API or export JSON/CSV.
  3. Pass records to your LLM with a system prompt, or index them into a vector store.

Apify MCP (Model Context Protocol)

Use the Apify MCP server so AI assistants can:

  • Run this Actor with natural-language instructions
  • Read dataset results directly in the chat
  • Chain it with other Actors (enrich → score → CRM)
User: "Find 30 highly rated Italian restaurants in Chicago with emails and summarize each for outreach"
→ MCP runs the Actor with searchTasks=[{ keyword: "italian", location: "Chicago, IL" }], enrichContacts=true
→ MCP reads dataset items
→ LLM summarizes and drafts emails

API quick start

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enableSearch": true,
"searchTasks": [
{ "keyword": "sushi", "location": "New York, NY", "maxItems": 10 },
{ "keyword": "italian", "location": "Chicago, IL", "maxItems": 10 }
],
"enrichContacts": true
}'

Dataset items: GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json


Proxy & performance

  • Apify residential proxy is enabled by default — no extra setup required on Apify.
  • Default memory: 1024 MB.
  • Results are streamed to the dataset as they are collected, so long runs never pile up data in memory.
  • Discovery and details both collect deeply and deduplicate restaurants automatically within a market.

FAQ

How many restaurants can I get in one run? There is no hard limit — set maxItems high (e.g. 5,000+) and add as many keyword + market rows as you need.

Can I run many cities in one job? Yes. Each searchTasks row is an independent keyword + market, and they all run in the same job.

Do I get emails for outreach? Enable Lead details. When a restaurant publishes contact details, website, email, emails[] and socials[] are filled in.

Can I get only rows that have emails / websites / high ratings? The Actor always returns every row it collects so run size stays predictable — filter afterward on the email, website or rating fields (export the built-in Leads dataset view, or filter in your CRM/Sheet). That keeps pricing and budgets tied to the exact number of rows you request.

Can I enrich a list I already have? Yes. Use Restaurant Details with your OpenTable URLs or numeric restaurant IDs.

Can I get results in my own systems in real time? Yes. Set a Webhook URL and choose JSON or Slack formatting.

Which format is the output? One flat JSON object per restaurant, plus CSV, Excel and RSS export options.

Are there fields that may be empty? Some fields depend on what OpenTable lists for a given restaurant (for example, not every restaurant publishes an email). Empty fields are returned as null or [], never guessed.


Limitations & compliance

  • Field availability depends on what OpenTable lists for a given restaurant.
  • Some localized fields are returned in the language served for that market's listing.
  • Contact discovery is best-effort — not every restaurant publishes an email.
  • Not affiliated with OpenTable. Use responsibly and comply with applicable laws and OpenTable's Terms of Service.
  • Always respect rate limits and local regulations when collecting business data.

Contact & custom work

Need something beyond this Actor? I build custom data products, pipelines, and full-stack web applications for startups and enterprises.

Reach out for:

  • Custom Apify Actors (any website or data source)
  • Restaurant / local-market / lead-gen data projects at scale
  • LLM & MCP integrations with your data stack
  • Web apps, dashboards and automation tools

OpenTable Real-Time Data · by DrunkCodes