
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape OpenTable restaurants from restaurant URLs, search pages or search terms: name, cuisine, price band, rating and sub-ratings, review count, address, coordinates, phone, website, hours, features, offers, menus, reviews and live reservation availability. No login needed.
Scrape restaurants from OpenTable: name, cuisine, price band, star rating with food, service, ambience and value sub-ratings, review count, full address with coordinates, phone, website, opening hours, features, offers, photos and menus. Optionally add diner reviews and live reservation availability for any date and party size. Paste restaurant or search URLs, or just type a cuisine and a city. No login, no API key.
https://www.opentable.com/r/...) or search URLs (https://www.opentable.com/s?term=...), or type search terms such as sushi and a location such as Chicago.| Field | What it does |
|---|---|
startUrls | Restaurant pages (/r/<name>, /restaurant/profile/<id>, any OpenTable country site) and search pages (/s?term=...). |
searchQueries | Search terms, e.g. steakhouse, rooftop, brunch. |
location | City, neighborhood, address or latitude,longitude for the search terms. |
maxItems | Max restaurants saved per search (default 20). |
minRating, minReviews, priceBands | Filter search results. |
scrapeDetails | Full record per restaurant (on) or fast search-result rows only (off). |
includeMenus | Add menus with prices (on by default). |
includeReviews, maxReviewsPerRestaurant, reviewsSort, reviewsStartDate | Reviews and how many, in which order, from which date. |
includeAvailability, availabilityDate, availabilityTime, partySize, availabilityDays | Bookable reservation times. |
{
"searchQueries": ["italian"],
"location": "New York",
"maxItems": 20,
"includeReviews": true,
"maxReviewsPerRestaurant": 20,
"includeAvailability": true,
"availabilityDate": "2026-11-20",
"availabilityTime": "19:30",
"partySize": 2
}
One row per restaurant. Main fields:
| Field | Description |
|---|---|
id, name, url, profileUrl | OpenTable id, name and links |
primaryCuisine, cuisines, priceBand, diningStyle, dressCode | What kind of place it is |
rating, foodRating, serviceRating, ambienceRating, valueRating, noiseRating | Star ratings (1-5) |
ratingCount, reviewCount, ratingDistribution, reviewTags, awards, reviewSummary | Review statistics |
address, line1, city, state, postalCode, country, neighborhood, latitude, longitude | Location |
phoneNumber, formattedPhoneNumber, website | Contact |
hours, features, paymentOptions, parkingInfo, publicTransit, executiveChef | Practical details |
offers, popularDishes, photos, photoCategories, privateDining, faqs, menus | Rich content |
topReviews | The 3 newest reviews (always included) |
reviews | Reviews, when turned on |
availableSlots, availableSlotCount, noAvailabilityReasons | Reservation times, when turned on |
searchQuery, searchUrl, position | Where the restaurant was found |
{
"id": "1426036",
"name": "Jay's",
"url": "https://www.opentable.com/r/jays-fort-lauderdale",
"primaryCuisine": "Steakhouse",
"cuisines": ["Steakhouse", "Seafood", "Prime Rib"],
"priceBand": "$50 and over",
"rating": 4,
"foodRating": 4,
"serviceRating": 4,
"ambienceRating": 4.4,
"valueRating": 3.7,
"noiseRating": 2,
"ratingCount": 241,
"reviewCount": 519,
"ratingDistribution": { "5": 140, "4": 21, "3": 33, "2": 25, "1": 22 },
"diningStyle": "Casual Elegant",
"dressCode": "Business Casual",
"hours": "Tue–Thu, Sun 4:00 pm–11:00 pm\nFri, Sat 4:00 pm–12:30 am",
"address": "441 NE 3rd Ave, Fort Lauderdale, FL 33301-3233, United States",
"city": "Fort Lauderdale",
"state": "FL",
"postalCode": "33301-3233",
"neighborhood": "Lauderdale Manors",
"latitude": 26.127714,
"longitude": -80.1410511,
"formattedPhoneNumber": "(954) 329-0971",
"website": "https://www.jaysfortlauderdale.com/",
"features": ["Bar/Lounge", "Cocktails", "Entertainment", "Happy Hour", "Wheelchair Access"],
"paymentOptions": ["AMEX", "Mastercard", "Visa"],
"maxPartySize": 12,
"reviews": [
{
"text": "Great live music and the ribeye was cooked perfectly. Service was a bit slow on a busy Saturday.",
"rating": 4,
"food": 5,
"service": 3,
"ambience": 5,
"value": 4,
"noise": "Energetic",
"submittedAt": "2026-10-11T22:17:40Z",
"dinedAt": "2026-10-10T20:15:00-04:00",
"authorName": "Sam",
"authorCity": "Miami"
}
],
"availableSlotCount": 23,
"availableSlots": [
{ "date": "2026-10-16", "time": "18:45", "type": "Standard", "seating": ["default"], "points": 100 }
]
}
Pay per result:
Example: 1,000 restaurants with full details cost $3.00 in result fees; adding 20 reviews each adds $10.00. Platform usage (compute and proxy traffic) is billed on top at the normal platform rates; a full restaurant record uses about 0.2 MB of proxy traffic.
Is it legal to scrape OpenTable? The scraper only reads public restaurant pages that anyone can open without an account. Check OpenTable's terms and your local laws for your use case, and handle diner names in reviews according to privacy rules.
Do I need a login or an OpenTable account? No. Nothing needs logging in.
Do I need a proxy? A datacenter proxy is set by default and is all OpenTable needs. If its addresses get refused, the run switches to residential proxies automatically.
How many results can I get? OpenTable shows up to a few hundred restaurants per search (the run tells you how many exist). Use several search terms or locations for more.
Why is a field empty? OpenTable does not have it for that restaurant (for example, no menu or no website listed).
Can I schedule runs or use the API? Yes. Schedule the scraper or start it through the API and get results as JSON, CSV or Excel.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalOpenTable URLs
Restaurant pages (https://www.opentable.com/r/..., /restaurant/profile/, any OpenTable country domain) or search result pages (https://www.opentable.com/s?term=...&latitude=...&longitude=...). Restaurant ids also work.
searchQueriesarrayOptionalSearch terms
Search OpenTable like on the website: a cuisine, dish, restaurant name or vibe ("sushi", "rooftop", "steakhouse"). Combine with Location.
locationstringOptionalLocation
City, neighborhood, address or "latitude,longitude" to search around, e.g. "Chicago" or "London, UK". Used with Search terms.
maxItemsintegerOptionaldefault 20Max restaurants per search
How many restaurants to save from each search (search URL or search term). Restaurant URLs are always scraped.
minRatingstringOptionalMinimum rating
Skip search results rated below this (0-5, e.g. 4.5).
minReviewsintegerOptionalMinimum review count
Skip search results with fewer reviews.
priceBandsarrayOptionalPrice bands
Only keep search results in these price bands.
reviewsStartDatestringOptionalOnly reviews newer than
Keep reviews posted on or after this date (YYYY-MM-DD) or a relative period like "30 days".
scrapeDetailsbooleanOptionaldefault trueFull restaurant details
Open each search result for the full record (address, phone, hours, sub-ratings, offers, photos, menus). Turn off for fast, cheaper search-result rows only.
includeMenusbooleanOptionaldefault trueInclude menus
Add the restaurant's menus (sections, items, prices) when OpenTable has them.
includeReviewsbooleanOptionaldefault falseInclude reviews
Add diner reviews to each restaurant (text, overall and sub-ratings, dates, restaurant reply). Each review is charged separately.
maxReviewsPerRestaurantintegerOptionaldefault 50Max reviews per restaurant
Upper limit of reviews per restaurant. Reviews are saved inside the restaurant's row, and one row must stay under the platform's 9 MB item limit, so the maximum is 5,000.
reviewsSortenumOptionaldefault "newest"Review order
Which reviews come first.
includeAvailabilitybooleanOptionaldefault falseInclude availability
Add bookable reservation times for the date, time and party size below.
availabilityDatestringOptionalDate
Reservation date (YYYY-MM-DD). Empty means tomorrow.
availabilityTimestringOptionaldefault "19:00"Time
Preferred time (24h HH:MM). Slots up to 3 hours before and after are returned.
partySizeintegerOptionaldefault 2Party size
Number of guests.
availabilityDaysintegerOptionaldefault 1Number of days
Check this many days starting from the date (1-7).
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for OpenTable and cost the least. If they get refused, the run switches to residential proxies by itself.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| image | any | Photo |
| name | any | Restaurant |
| primaryCuisine | any | Cuisine |
| priceBand | any | Price |
| rating | any | Rating |
| reviewCount | any | Reviews |
| foodRating | any | Food |
| serviceRating | any | Service |
| ambienceRating | any | Ambience |
| valueRating | any | Value |
| neighborhood | any | Neighborhood |
| city | any | City |
| address | any | Address |
| formattedPhoneNumber | any | Phone |
| website | any | Website |
| latitude | any | Lat |
| longitude | any | Lng |
| availableSlotCount | any | Open slots |
| url | any | OpenTable URL |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Restaurant | One restaurant saved to the dataset (full record, or a search-result row when details are off). | $0.003 |
| Review | One diner review added to a restaurant (only when reviews are turned on). | $0.0005 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/opentable-scraper').call({
"startUrls": [
{
"url": "https://www.opentable.com/r/jays-fort-lauderdale"
},
{
"url": "https://www.opentable.com/s?term=italian&latitude=40.7128&longitude=-74.006"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/opentable-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/opentable-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Restaurant search by cuisine and city with full details.
Reviews and live availability for a restaurant URL.
Restaurants from a search URL filtered by rating.
Restaurant search in the UK.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.