OpenTable Scraper
Extract restaurant listings, reservation availability, reviews, and menu data from OpenTable. Built on spider-browser .
- target
- opentable.com
- success rate
- 99.9%
- latency
- ~4ms
/fetch/opentable.com/ curl -X POST https://api.spider.cloud/fetch/opentable.com/ \ -H "Authorization: Bearer $SPIDER_API_KEY" \ -H "Content-Type: application/json" \ -d '{"return_format": "json"}'
{
"url": "https://opentable.com/",
"status": 200,
"data": {
"restaurant_name": "string",
"rating": "string",
"review_count": "string",
"cuisine": "string",
"price_range": "string",
"available_times": "string",
"neighborhood": "string",
"features": "string"
}
} # OpenTable Scraper
**Restaurant name**: string
**Rating**: string
**Review count**: string
**Cuisine**: string
**Price range**: string
**Available times**: string
**Neighborhood**: string
**Features**: string Extract data in minutes.
Structured JSON from opentable.com with a single POST. AI-resolved selectors, cached on the first call.
import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
stealth: 2,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://www.opentable.com/s?covers=2&dateTime=2026-04-01T19%3A00&metroId=4");
await page.content(10000);
const data = await page.evaluate(`(() => {
const restaurants = [];
document.querySelectorAll("[data-test='restaurant-card']").forEach(el => {
const name = el.querySelector("[data-test='restaurant-name']")?.textContent?.trim();
const rating = el.querySelector("[data-test='restaurant-rating']")?.textContent?.trim();
const cuisine = el.querySelector("[data-test='restaurant-cuisine']")?.textContent?.trim();
const price = el.querySelector("[data-test='restaurant-price']")?.textContent?.trim();
if (name) restaurants.push({ name, rating, cuisine, price });
});
return JSON.stringify({ total: restaurants.length, restaurants: restaurants.slice(0, 10) });
})()`);
console.log(JSON.parse(data));
await spider.close(); curl -X POST https://api.spider.cloud/fetch/opentable.com/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"return_format": "json"}' import requests
resp = requests.post(
"https://api.spider.cloud/fetch/opentable.com/",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"return_format": "json"},
)
print(resp.json()) const resp = await fetch("https://api.spider.cloud/fetch/opentable.com/", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ return_format: "json" }),
});
const data = await resp.json();
console.log(data); Fields you can pull.
Menu & restaurant data
Extract menus, prices, ratings, and delivery info from opentable.com.
Location targeting
Access location-specific menus and availability with geo-targeted proxies.
Dynamic content
Handle lazy-loaded menus, infinite scroll, and interactive search results.
More Food scrapers.
DoorDash Scraper
Extract restaurant listings, menu items, pricing, and delivery info from DoorDash.
Uber Eats Scraper
Extract restaurant listings, menu data, pricing, and delivery options from Uber Eats.
Allrecipes Scraper
Extract recipes, ingredients, nutritional info, and user reviews from Allrecipes.
Start scraping opentable.com.
Grab an API key and call the endpoint above. The first request resolves the config; every request after hits cache.