Resy Scraper avatar

Resy Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Resy Scraper

Resy Scraper

[๐Ÿ’ฐ $4.0 / 1K] Extract restaurants from Resy by city, keyword, cuisine, or URL โ€” full venue details plus optional real-time reservation availability.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Pull restaurants from Resy at scale โ€” names, cuisines, neighborhoods, full addresses with coordinates, price bands, ratings, phone numbers, websites, social handles, photos, and platform IDs for every venue, plus optional real-time reservation time-slots for any date. Built for restaurant-tech teams, market analysts, and lead-gen agencies who need clean, structured Resy data across US dining markets without building and maintaining their own scraper.

Why This Scraper?

  • ~40 fields per restaurant โ€” name, cuisine tags, neighborhood, full street address with latitude/longitude, IANA time zone, phone, website, social profiles, photos, price band, rating, and review count, all in one flat row.
  • Real reservation availability, opt-in โ€” flip one switch to embed every bookable time-slot for a chosen date; a single popular venue returned up to ~90 slots in a single day during testing, each with start/end time, table type, and party size.
  • Reservation times included at no extra per-slot cost โ€” every restaurant stays one result, with its time-slots attached as a list inside it, so availability never multiplies your bill.
  • Party sizes from 1 to 20 โ€” check solo-diner counters or large-group tables; the actor queries the exact party size you ask for.
  • Three cross-referencing platform IDs per venue โ€” Resy venue ID, Google Place ID, and Foursquare ID, so you can join Resy records straight into Google or Foursquare datasets.
  • 15 curated cuisine filters โ€” American, French, Italian, Japanese, Korean, Mexican, Mediterranean, Seafood, Steakhouse, Sushi, Thai, and more, each running a focused city search.
  • Four input modes in one run โ€” search by city, free-text keyword, cuisine, or pasted Resy venue and city URLs, combinable in a single run.
  • Coverage across US dining markets โ€” New York, Los Angeles, Chicago, San Francisco, and beyond, all verified, with sustained pagination and maxResults: 0 for unlimited pulls.

Use Cases

Market Research

  • Map the dining landscape of a city by cuisine, price band, and neighborhood
  • Track which restaurants list on Resy in a target market over time
  • Benchmark price bands ($โ€“$$$$) across neighborhoods
  • Build cuisine-mix profiles for entire metro areas

Lead Generation

  • Build restaurant contact lists with phone, website, and social profiles
  • Target venues by cuisine, neighborhood, or rating threshold
  • Identify high-traffic restaurants by review count for sales outreach
  • Enrich CRM records with verified venue addresses and coordinates

Competitive Intelligence

  • Monitor reservation availability and prime-time slot scarcity at rival venues
  • Compare booking windows and table types across competitors
  • Track which venues offer waitlists versus open tables
  • Watch party-size limits and large-party policies in a market

Restaurant Tech & Data Enrichment

  • Power dining-discovery and reservation apps with structured venue feeds
  • Join Resy venues to Google or Foursquare records via shared platform IDs
  • Feed real-time slot availability into booking dashboards
  • Geocode and map venues using built-in latitude/longitude

Getting Started

Scrape a City

The simplest run โ€” just a city:

{
"city": "new-york-ny",
"maxResults": 50
}

Search by Cuisine and Keyword

{
"city": "los-angeles-ca",
"query": "sushi",
"cuisine": ["japanese", "seafood"],
"maxResults": 100
}

Include Reservation Availability

{
"city": "chicago-il",
"query": "italian",
"maxResults": 25,
"includeAvailability": true,
"reservationDate": "2026-06-05",
"partySize": 2
}

Scrape Specific Restaurants by URL

{
"startUrls": [
"https://resy.com/cities/new-york-ny/venues/eccolo-italian-restaurant"
],
"includeAvailability": true,
"partySize": 4
}

Input Reference

What to Scrape

ParameterTypeDefaultDescription
citystring"new-york-ny"City to search on Resy. Enter a city name, Resy city code, or URL slug (e.g. "New York", "london", "los-angeles-ca").
querystring""Free-text search by restaurant name, cuisine, or keyword (e.g. "sushi", "Carbone", "rooftop"). Leave empty to return all restaurants in the city.
startUrlsarray[]Paste Resy restaurant or city page URLs to scrape directly. Use instead of, or alongside, the city/keyword search.

Filters

ParameterTypeDefaultDescription
cuisinearray[]Narrow results to one or more common cuisines. Each selection runs a focused search for that cuisine in the city. Leave empty to include all cuisines.
maxResultsinteger100Maximum number of restaurants to return. Set to 0 for unlimited.
includeDetailsbooleantrueFetch each restaurant's full profile โ€” ratings, street address, website, phone, social links, description, and photos. Turn off for faster, lighter results with just the core fields.

Cuisine options: American, Chinese, Cocktail Bar, French, Indian, Italian, Japanese, Korean, Mediterranean, Mexican, New American, Seafood, Steakhouse, Sushi, Thai.

Reservation Availability

ParameterTypeDefaultDescription
includeAvailabilitybooleanfalseAlso fetch real-time reservation time-slots for each restaurant. Each restaurant stays a single result โ€” the time-slots are attached as a list inside it.
reservationDatestringtodayDate to check availability, in YYYY-MM-DD format. Leave empty to use today. Only used when availability is enabled.
partySizeinteger2Number of guests for the reservation (1โ€“20). Only used when availability is enabled.

Output

Each restaurant is returned as a single flat record. When reservation availability is enabled, the bookable time-slots are embedded as a slots list inside the same record.

{
"recordType": "venue",
"id": 443,
"name": "Eccolo",
"urlSlug": "eccolo-italian-restaurant",
"url": "https://resy.com/cities/new-york-ny/venues/eccolo-italian-restaurant",
"neighborhood": "SoHo",
"locality": "New York",
"region": "NY",
"country": "US",
"address": "200 Lafayette St",
"postalCode": "10012",
"latitude": 40.7203,
"longitude": -73.9981,
"timeZone": "America/New_York",
"phone": "+12125551234",
"website": "https://eccolo-nyc.com",
"socialLinks": ["https://instagram.com/eccolonyc"],
"cuisine": ["Italian"],
"type": "Italian",
"priceRange": "$$$",
"currencyCode": "USD",
"rating": 4.7,
"ratingCount": 1820,
"minPartySize": 1,
"maxPartySize": 8,
"images": ["https://image.resy.com/abc.jpg"],
"description": "A modern Italian trattoria in SoHo...",
"metaDescription": "Book a table at Eccolo on Resy.",
"keywords": ["italian", "trattoria", "soho"],
"collections": ["Hot New Restaurants"],
"googlePlaceId": "ChIJ1234567890",
"foursquareId": "4a1b2c3d4e5f",
"venueGroup": "Eccolo Hospitality",
"awards": [],
"largePartyMessage": "For parties of 9+, please call.",
"waitlistAvailable": true,
"slotCount": 3,
"slots": [
{
"startTime": "2026-06-05 18:00:00",
"endTime": "2026-06-05 20:00:00",
"type": "Dining Room",
"configId": "rgs://resy/443/...",
"hasAddOns": false,
"shiftDay": "2026-06-05",
"date": "2026-06-05",
"partySize": 2
}
],
"scrapedAt": "2026-05-29T14:00:00Z"
}

Core & Identity

FieldTypeDescription
recordTypestringAlways "venue".
idintegerResy venue ID.
namestringRestaurant name.
urlSlugstringResy URL slug.
urlstringCanonical Resy venue URL.
typestringVenue type.
cuisinearrayCuisine tags.
descriptionstringVenue description.
metaDescriptionstringSEO meta description.
keywordsarrayKeyword tags.
collectionsarrayResy collections the venue appears in.
imagesarrayPhoto URLs.
venueGroupstringParent venue group or operator.
awardsarrayAwards and badges.
scrapedAtstringISO timestamp of the extraction.

Location

FieldTypeDescription
neighborhoodstringNeighborhood.
localitystringCity.
regionstringState or region.
countrystringCountry.
addressstringStreet address.
postalCodestringZIP or postal code.
latitudenumberLatitude.
longitudenumberLongitude.
timeZonestringIANA time zone.

Contact & Social

FieldTypeDescription
phonestringPhone number.
websitestringRestaurant website.
socialLinksarraySocial profile URLs (Instagram, Twitter/X, Facebook).

Ratings & Price

FieldTypeDescription
priceRangestringPrice band ($โ€“$$$$).
currencyCodestringCurrency code.
ratingnumberAverage rating.
ratingCountintegerNumber of ratings.
minPartySizeintegerMinimum party size accepted.
maxPartySizeintegerMaximum party size accepted.
largePartyMessagestringLarge-party note.
waitlistAvailablebooleanWhether a waitlist is offered.

Platform IDs

FieldTypeDescription
googlePlaceIdstringGoogle Place ID.
foursquareIdstringFoursquare ID.

Reservation Availability

slotCount is the number of bookable slots found (0 when availability is off). slots is the embedded list of time-slots, each with the fields below.

FieldTypeDescription
slotCountintegerNumber of bookable slots found for the date and party size.
slotsarrayEmbedded list of reservation time-slots (populated only when availability is enabled).
slots[].startTimestringSlot start time.
slots[].endTimestringSlot end time.
slots[].typestringRoom or table type.
slots[].configIdstringBooking configuration token for the slot.
slots[].hasAddOnsbooleanWhether add-ons are available.
slots[].shiftDaystringService shift day.
slots[].datestringReservation date (YYYY-MM-DD).
slots[].partySizeintegerParty size queried.

Tips for Best Results

  • Use the URL slug form for city (e.g. los-angeles-ca, san-francisco-ca) for the most reliable market resolution; plain city names and Resy city codes also work.
  • Leave query empty to browse every restaurant in a city, or set it to a name, dish, or vibe ("rooftop", "omakase") to focus the search.
  • Each cuisine you pick runs its own focused city search, so selecting several cuisines widens coverage rather than narrowing it โ€” combine cuisines to sweep a market.
  • Turn on includeAvailability only when you need bookable times; it queries each restaurant for the chosen date and adds one extra lookup per venue.
  • Availability is a snapshot โ€” prime dinner slots at popular venues turn over fast, so re-run close to your target date for the freshest open tables.
  • Set maxResults to 0 for an exhaustive pull of a city, or cap it for quick samples; the actor overshoots the final page rather than cutting it short.
  • Leave includeDetails on (the default) for the richest records โ€” full address, website, social links, ratings, and photos. Turn it off for large, fast market sweeps when you only need core fields (name, neighborhood, cuisine, coordinates, price band).
  • Combine startUrls with a city search in one run to pull specific known venues alongside a broad market sweep.

Pricing

$4.00 per 1,000 results โ€” a single flat rate that undercuts the typical Resy data tier, with no compute charges and no per-slot surcharge for availability.

ResultsEstimated Cost
100$0.40
1,000$4.00
10,000$40.00
100,000$400.00

A "result" is one restaurant record, including any embedded reservation time-slots โ€” so availability never multiplies your bill. No compute charges โ€” you only pay per result returned. Apify platform fees are additional.

Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n โ€” Workflow automation
  • Google Sheets โ€” Direct spreadsheet export
  • Slack / Email โ€” Notifications on new results
  • Webhooks โ€” Trigger custom APIs on run completion
  • Apify API โ€” Full programmatic access

This scraper collects publicly available restaurant information from Resy. Use the data responsibly and in compliance with Resy's terms of service and all applicable laws, including data-protection regulations such as GDPR and CCPA. Do not use the data to harass businesses, send unsolicited bulk communications, or for any unlawful purpose. You are responsible for how you use the data you collect.