Resy Restaurant Scraper
Pricing
Pay per event
Resy Restaurant Scraper
Extract public Resy restaurant venue data, search results, ratings, cuisine, locations, price bands, and availability metadata. Export JSON, CSV, or Excel.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract public Resy restaurant venue details, discovery results, and read-only availability metadata with a simple Apify Actor.
Use it to monitor restaurants, dining markets, cuisine coverage, price bands, ratings, neighborhoods, and availability signals without building your own Resy API client.
What does Resy Restaurant Scraper do?
Resy Restaurant Scraper collects structured venue rows from public Resy surfaces.
It can:
- 🔎 Search Resy by restaurant name, cuisine, city, or market phrase.
- 🧾 Fetch known numeric Resy venue IDs directly.
- 🗺️ Return city, neighborhood, latitude, longitude, cuisine, and price metadata.
- ⭐ Include rating averages and rating counts when Resy returns them.
- 📞 Include public contact information such as phone numbers.
- 📅 Optionally check read-only public availability metadata for a date and party size.
- 📦 Export clean JSON, CSV, Excel, XML, RSS, or API dataset results from Apify.
Who is it for?
Hospitality analysts use it to track venue coverage and premium dining patterns.
Travel and concierge teams use it to build shortlists of restaurants in target cities.
Restaurant agencies use it to monitor client and competitor metadata.
Local SEO teams use it to compare cuisine, neighborhood, and rating signals.
Data teams use it to enrich internal restaurant databases with public Resy identifiers.
Why use this actor?
Resy data is useful, but public pages are JavaScript shells and manual collection is slow.
This actor uses Resy's public read endpoints over HTTP, so it is lightweight and does not require a browser session.
You get normalized rows that are ready for spreadsheets, dashboards, lead lists, enrichment workflows, and monitoring jobs.
What data can it extract?
| Field | Description |
|---|---|
venueId | Numeric Resy venue identifier |
name | Restaurant name |
url | Resy venue URL when available |
source | search, venueId, or venueUrl |
searchQuery | Search query that found the venue |
city | City or Resy location name |
neighborhood | Neighborhood returned by Resy |
latitude / longitude | Geographic coordinates |
cuisine | Cuisine or restaurant type array |
priceRange | Resy price band |
averageBillSize | Average bill size when returned |
ratingAverage | Rating average |
ratingCount | Number of ratings |
phoneNumber | Public phone number |
collections | Resy collection names |
availableSlotCount | Public slot count for requested date and party size |
availableTimes | Public available times when returned |
scrapedAt | ISO timestamp for the run |
How much does it cost to scrape Resy restaurant data?
The actor uses Apify pay-per-event pricing.
A small start event covers each run.
A per-item event is charged for each saved restaurant row.
For most small monitoring runs, the total cost is designed to be around cents per batch rather than dollars.
Exact pricing is shown on the Apify Store page before you run the actor.
How to use it
- Open the actor on Apify.
- Add one or more search queries such as
rezdora,new york italian, orlos angeles sushi. - Optionally add known numeric Resy venue IDs.
- Set
maxItemsto the number of restaurants you want. - Enable availability metadata only if you need date and party-size signals.
- Click Start.
- Export the dataset or consume it through the Apify API.
Input options
Search queries
Use searchQueries when you want discovery.
Examples:
rezdoranew york italianlos angeles sushichicago steakhouse
Venue IDs
Use venueIds when you already know numeric Resy IDs.
Example:
{"venueIds": ["443"],"maxItems": 1}
Venue URLs
Use venueUrls only when the URL contains a numeric id or venue_id parameter.
Slug-only Resy URLs often do not expose the numeric ID in the URL, so search queries are usually better.
Availability metadata
Set includeAvailability to true to collect public availability slot metadata.
This is read-only.
The actor does not book, hold, cancel, modify, or join reservations.
Example input
{"searchQueries": ["rezdora", "new york italian"],"venueIds": ["443"],"maxItems": 10,"includeVenueDetails": true,"includeAvailability": true,"partySize": 2}
Example output
{"venueId": 443,"name": "I Sodi","url": "https://resy.com/cities/ny/venues/i-sodi","source": "venueId","city": "New York","neighborhood": "West Village","cuisine": ["Italian"],"priceRange": 3,"ratingAverage": 4.7961,"ratingCount": 23654,"availableSlotCount": 0,"availabilitySummary": "No public slots returned for the requested date and party size","scrapedAt": "2026-06-13T08:36:07.976Z"}
Tips for best results
Use specific restaurant names when you need exact matches.
Use city and cuisine phrases when you want discovery.
Keep maxItems low for first tests.
Enable availability only when it matters to your workflow.
For repeat monitoring, schedule the actor daily or weekly and compare exports over time.
Integrations
You can connect the actor to:
- Google Sheets for restaurant tracking.
- Airtable for hospitality CRM enrichment.
- Slack for daily availability or new-venue alerts.
- BI tools for market analysis.
- Data warehouses through Apify webhooks or API pulls.
- Concierge workflows that need structured venue shortlists.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/resy-restaurant-scraper').call({searchQueries: ['new york italian'],maxItems: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/resy-restaurant-scraper').call(run_input={'searchQueries': ['los angeles sushi'],'maxItems': 10,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~resy-restaurant-scraper/runs?token=MY-APIFY-TOKEN' \-H 'Content-Type: application/json' \-d '{"searchQueries":["rezdora"],"maxItems":5}'
MCP usage
Use this actor from Claude Desktop, Claude Code, or another MCP-compatible client through Apify MCP.
Add the Apify MCP server to Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com"
For Claude Desktop, Cursor, or VS Code, add this JSON config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
You can then ask for automation-lab/resy-restaurant-scraper directly.
Example prompts:
- "Run the Resy Restaurant Scraper for
new york italianand summarize the top venues." - "Find Resy restaurants matching
los angeles sushiand export names, neighborhoods, and ratings." - "Check public availability metadata for venue ID 443 for a party of 2 tomorrow."
Scheduling ideas
Run daily to monitor availability signals.
Run weekly to refresh a restaurant market database.
Run monthly to compare cuisine and price-band coverage across cities.
Use Apify webhooks to send the dataset to your own endpoint after every run.
Data quality notes
The actor returns what public Resy endpoints return at run time.
Some venues may omit address, description, tags, or availability slots.
Availability can change quickly and should be treated as a point-in-time signal.
Ratings and counts are Resy-provided public values, not independently verified scores.
Limitations
The actor does not log in.
The actor does not solve CAPTCHA.
The actor does not book reservations.
The actor does not guarantee a complete city-wide directory from a single vague query.
Slug-only venue URLs may need to be provided as search queries or numeric venue IDs.
Legality and ethical use
This actor extracts public, read-only information.
Use the data responsibly and comply with applicable laws, Resy's terms, and your internal policies.
Do not use the actor to spam restaurants, bypass access controls, or automate bookings.
FAQ and troubleshooting
Why did I get fewer results than maxItems?
Resy may return fewer matches for a query, or duplicate venues may be removed before saving.
Try broader search phrases or multiple queries.
Why are availability fields empty?
Availability depends on date, party size, restaurant configuration, and public slot visibility.
An empty slot count means the public endpoint did not return slots for that request.
Why did a URL input not work?
Most Resy venue pages use slugs, while the public API uses numeric venue IDs.
Use a search query or provide the numeric ID directly.
Related scrapers
Explore other Automation Lab actors:
- https://apify.com/automation-lab/google-maps-scraper
- https://apify.com/automation-lab/tripadvisor-scraper
- https://apify.com/automation-lab/yelp-scraper
Changelog
0.1
Initial build with search, direct venue IDs, venue profile enrichment, and optional read-only availability metadata.