Resy Restaurant Scraper avatar

Resy Restaurant Scraper

Pricing

Pay per event

Go to Apify Store
Resy Restaurant Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
venueIdNumeric Resy venue identifier
nameRestaurant name
urlResy venue URL when available
sourcesearch, venueId, or venueUrl
searchQuerySearch query that found the venue
cityCity or Resy location name
neighborhoodNeighborhood returned by Resy
latitude / longitudeGeographic coordinates
cuisineCuisine or restaurant type array
priceRangeResy price band
averageBillSizeAverage bill size when returned
ratingAverageRating average
ratingCountNumber of ratings
phoneNumberPublic phone number
collectionsResy collection names
availableSlotCountPublic slot count for requested date and party size
availableTimesPublic available times when returned
scrapedAtISO 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

  1. Open the actor on Apify.
  2. Add one or more search queries such as rezdora, new york italian, or los angeles sushi.
  3. Optionally add known numeric Resy venue IDs.
  4. Set maxItems to the number of restaurants you want.
  5. Enable availability metadata only if you need date and party-size signals.
  6. Click Start.
  7. Export the dataset or consume it through the Apify API.

Input options

Search queries

Use searchQueries when you want discovery.

Examples:

  • rezdora
  • new york italian
  • los angeles sushi
  • chicago 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 ApifyClient
client = 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().items
print(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 italian and summarize the top venues."
  • "Find Resy restaurants matching los angeles sushi and 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.

Explore other Automation Lab actors:

Changelog

0.1

Initial build with search, direct venue IDs, venue profile enrichment, and optional read-only availability metadata.