Resy Email Scraper
Pricing
from $2.49 / 1,000 results
Resy Email Scraper
Resy Email Scraper SD - Resy Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Resy results by keyword, location and email domain - Resy email extractor.
Pricing
from $2.49 / 1,000 results
Rating
0.0
(0)
Developer
Leads Scraper
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Resy Email Scraper
The Resy Email Scraper collects publicly indexed contact emails connected to resy.com, the reservation platform used by chef-driven and upscale American restaurants.
It builds Google queries with the site:resy.com operator, fetches them through the Apify GOOGLE_SERP proxy, and extracts emails from the result blocks.
No login, no browser, no Resy API — only what Google has already published in its index.
Start with the measured part. In a live test run, roughly 10 parsed results produced 9 rows with a usable venue identity, 9 resolvable profile URLs and 8 unique emails. That is one of the strongest profiles in this restaurant family, and it reflects how cleanly Resy's venue and city pages are indexed.
The audience matters as much as the numbers. Resy skews to tasting menus, wine programmes and independent groups — venues that publish an events or press inbox because private dining and collaborations are a real revenue line for them.
What one run of the Resy Email Scraper produces
Each dataset row is one unique email plus whatever venue context Google printed around it. You get the raw title, an account label, a cleaned snippet, the exact query used and a truncation flag. The Resy Email Scraper pushes rows to the Apify dataset as they are found, so you can export CSV, JSON or Excel mid-run.
Exporting and integrating the Resy Email Scraper dataset
Because rows are written incrementally, an aborted or migrated run still leaves a usable dataset behind. Export from the Apify console, pull the dataset over the API, or schedule the Resy Email Scraper and push results straight into your CRM.
How the Resy Email Scraper works: SERP parsing, not an API
The Resy Email Scraper runs the same six steps on every query it builds.
- It reads your input: keywords, location, email domains and limits.
- It builds Google queries with the
site:operator, for examplesite:resy.com "tasting menu" "@gmail.com" events. - It fetches result pages through the Apify GOOGLE_SERP proxy using async
aiohttprequests. - It parses each result block structurally — locating the
<h3>and the smallest surrounding block — rather than by CSS class name. - It extracts emails with a domain-filtered regex and normalises obfuscated forms.
- It deduplicates globally and pushes each lead to the dataset immediately.
There is no browser, no JavaScript rendering, no authentication and no cookies. The Resy Email Scraper never signs into Resy and never requests pages from Resy's own servers. Everything it returns was already public in Google's search index.
Resy Email Scraper features
Everything listed below is implemented in the Resy Email Scraper today.
| Feature | What it means in practice |
|---|---|
| Query expansion | Base, quoted, intitle: and one variant per modifier; base queries run first |
| Global deduplication | An email found by several queries is stored exactly once |
| Email normalisation | Understands name [at] domain [dot] com, name (at) domain, name @ domain, domain .com, zero-width characters and the full-width @ |
| Junk filter | Rejects placeholders such as email@, yourname@, test@, xxx@ and single-character locals |
| Boundary-correct matching | @gmail.com will not match inside @gmail.company or @gmail.com.br |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Structural parsing | Independent of Google's obfuscated CSS class names |
| Whole-page fallback | A markup change degrades to "emails without account details" rather than "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Failed-query requeue | Blocked or failed queries are re-queued once at the end of the run |
| Concurrency | An asyncio worker pool with a shared stop signal on maxEmails |
| Resumable state | Key-value store state keyed by an input hash; saves on PERSIST_STATE, MIGRATING and ABORTING |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |
Resy Email Scraper input fields
These are the exact input fields the Resy Email Scraper accepts, with the defaults it ships with.
| Field | Type | Default | Meaning |
|---|---|---|---|
keywords | array (required) | ["restaurant","tasting menu"] | Search terms describing the venues you want |
location | string | "" | Optional location phrase added to every query |
customDomains | array | ["@gmail.com","@yahoo.com"] | Only emails on these domains are kept; @ optional |
maxEmails | integer 1-10000 | 20 | Stop after this many unique emails |
countryCode | string | "" | Two-letter country for the search proxy — US is the natural value |
expandQueries | boolean | true | Search each keyword x domain in several phrasings |
queryModifiers | array | ["email","contact","catering","reservations","owner"] | Extra words combined with each keyword when expansion is on |
maxPagesPerQuery | integer 1-50 | 30 | Page cap per query |
maxConcurrency | integer 1-20 | 5 | Parallel queries |
Example Resy Email Scraper input
{"keywords": ["tasting menu", "wine bar", "chef counter"],"location": "Brooklyn","customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com"],"maxEmails": 200,"countryCode": "US","expandQueries": true,"queryModifiers": ["email", "contact", "events", "press", "owner"],"maxPagesPerQuery": 30,"maxConcurrency": 5}
City-level prospecting with location
location is the most valuable input in the Resy Email Scraper, because Resy's own footprint is organised by city.
It appends a quoted phrase to every query, so you can produce one dataset per market and hand each rep a territory rather than a national dump.
The metros where Resy is densest are the ones worth running first: New York, Brooklyn, Los Angeles, San Francisco, Chicago, Austin, Miami, Washington DC, Seattle.
Neighbourhood values work well too — Williamsburg, Silver Lake, Wynwood — when you want a walkable list.
Leave location empty for a first exploratory run to see what the index holds, then narrow.
Because Resy venues are already routed under a city segment, a location value and the resulting profileUrl usually agree, which makes territory tagging trivial.
Keyword suggestions for the Resy Email Scraper
The defaults, restaurant and tasting menu, are a good start. These terms match the parts of the index where upscale venues actually live.
| Keyword | Why it works on Resy |
|---|---|
chef counter | Omakase and counter-service formats concentrated on this platform |
wine bar | Small independents that publish an owner or beverage-director inbox |
omakase | High-ticket, reservation-only venues |
natural wine | A strong Resy-specific cohort in NY, LA and Chicago |
private dining | Directly targets pages that publish an events address |
cocktail bar | Bar programmes with press and partnership inboxes |
new american | A broad cuisine label used heavily on Resy listings |
pop up | Residencies and temporary concepts run by contactable operators |
Pair a format noun with an intent modifier — wine bar events, chef counter press — rather than searching a bare noun.
Resy Email Scraper output fields
Every dataset item the Resy Email Scraper writes carries all fourteen of these fields.
| Field | Meaning |
|---|---|
network | Platform name |
keyword | The keyword that produced the lead |
query | The exact Google query used |
title | Raw result title |
accountName | Account label Google prints |
fullName | Display name parsed from a profile-style title; empty for post captions |
username | URL-safe handle when the platform exposes one; otherwise null |
profileUrl | Canonical account URL when a handle is known; otherwise empty |
url | Direct platform link when exposed, else the profile URL |
description | Bio or snippet text, cleaned of labels and engagement counters |
email | Lower-cased email address |
emailDomain | The matched domain |
possiblyTruncated | true when Google's snippet ellipsis touched the email |
foundAt | ISO 8601 UTC timestamp |
Example Resy Email Scraper output
[{"network": "Resy","keyword": "tasting menu","query": "site:resy.com \"tasting menu\" \"@gmail.com\" events \"Brooklyn\"","title": "Oxalis - Brooklyn | Resy","accountName": "Oxalis","fullName": "Oxalis - Brooklyn","username": "ny","profileUrl": "https://resy.com/cities/ny","url": "https://resy.com/cities/ny","description": "Seasonal tasting menu in Prospect Heights. Events and buyouts: oxalis.events@gmail.com","email": "oxalis.events@gmail.com","emailDomain": "@gmail.com","possiblyTruncated": false,"foundAt": "2026-08-31T12:04:11Z"},{"network": "Resy","keyword": "wine bar","query": "site:resy.com \"wine bar\" \"@outlook.com\" contact \"Brooklyn\"","title": "Fromage Wine Room - Brooklyn | Resy","accountName": "Fromage Wine Room","fullName": "Fromage Wine Room - Brooklyn","username": "ny","profileUrl": "https://resy.com/cities/ny","url": "https://resy.com/cities/ny","description": "Natural wine and small plates. Press and partnerships: fromage.wineroom@outlook.com","email": "fromage.wineroom@outlook.com","emailDomain": "@outlook.com","possiblyTruncated": true,"foundAt": "2026-08-31T12:06:29Z"}]
Note the profileUrl shape carefully. Resy routes every venue under a city segment, so the canonical link the Resy Email Scraper can construct from Google's breadcrumb is https://resy.com/cities/{city} — a city page, not a per-venue page.
The venue itself is identified by accountName and fullName, which is why the strong identity rate on this platform matters so much.
What a measured Resy Email Scraper run looked like
Per roughly 10 parsed results in a live test: 9 rows with a usable identity, 9 resolvable profile URLs, 8 unique emails. Nearly every row came back with a named venue attached to the address.
That is unusually clean for SERP-based contact discovery. It makes the Resy Email Scraper a good first choice when you need names, not just addresses, for an upscale US restaurant list.
Restaurant lead generation use cases for the Resy Email Scraper
Here is where the Resy Email Scraper fits into real B2B prospecting and market research workflows.
| Use case | How to configure it |
|---|---|
| Reservation and table-management sales | keywords: ["restaurant","tasting menu"], one metro per run |
| Premium POS and payments prospecting | Add the owner modifier; independents make fast decisions |
| Wine, spirits and beverage distribution | keywords: ["wine bar","natural wine","cocktail bar"] |
| Specialty food and produce supply | keywords: ["chef counter","tasting menu"] for ingredient-led kitchens |
| Private dining and events sourcing | queryModifiers: ["events","private dining","buyout"] |
| Tableware, glassware and uniform suppliers | Target omakase and new american for design-conscious venues |
| Hospitality PR and press outreach | Add a press modifier; Resy venues publish these inboxes |
| Chef and front-of-house recruitment | Use owner and contact for decision-maker inboxes |
| Local agency client acquisition | One neighbourhood per run; pitch photography, web or social work |
| CRM enrichment | Match on email, then use fullName to reconcile venue names |
Practical Resy Email Scraper recipes
NYC baseline. location: "New York", countryCode: "US", upscale format keywords, maxEmails: 200.
Resy's index is deepest here, so this is the run most likely to fill a dataset.
Events-intent sweep. Replace the default modifiers with events, private dining, buyout and press.
These are the pages most likely to publish a monitored inbox.
Neighbourhood tour. Six runs, one neighbourhood each in location, identical keywords.
Territory-tagged datasets are far easier for a field team to work than one merged file.
Widen before you deepen. Google caps a single query at roughly 300 results, so more format keywords beat more pages per query.
Raise maxPagesPerQuery last.
Pair for coverage. Run the OpenTable Email Scraper beside this one — the two reservation networks overlap far less than you would expect — and add the Caviar Email Scraper for premium delivery partners in the same metros.
Responsible use, GDPR and CAN-SPAM
An email that identifies a natural person is personal data even when it was published publicly. Public availability is not consent to send. Commercial email into the United States falls under CAN-SPAM; if any recipient is in the EU or UK, the GDPR applies too.
Practical steps that keep a Resy Email Scraper workflow defensible:
- Prefer role addresses (
info@,events@,press@) over addresses naming an individual. - Keep provenance for every lead — the
query,urlandfoundAtfields exist for exactly this. - Give a clear sender identity, a stated purpose and a working opt-out in every message.
- Honour opt-outs immediately and check suppression lists before each follow-up.
- Include a valid physical postal address in commercial email, as CAN-SPAM requires.
- Delete data you are not actively using rather than warehousing scraped lists.
This is operational guidance, not legal advice.
Related Actors
The Resy Email Scraper is one of 35 Actors in a Travel, Hospitality and Food family that all share this engine. For broader US coverage, pair it with the OpenTable Email Scraper and the Toast Restaurant Email Scraper; for Europe, use the TheFork Email Scraper.
| Actor | What it collects |
|---|---|
| Resy Email and Phone Number Scraper | Emails and phone numbers from Resy |
| Resy Phone Number Scraper | Public phone numbers from Resy |
| Airbnb Email Scraper | Public contact emails from Airbnb |
| Booking.com Email Scraper | Public contact emails from Booking.com |
| Caviar Email Scraper | Public contact emails from Caviar |
| ChowNow Email Scraper | Public contact emails from ChowNow |
| Contiki Email Scraper | Public contact emails from Contiki |
| Craigslist Email Scraper | Public contact emails from Craigslist |
| Delivery.com Email Scraper | Public contact emails from Delivery.com |
| DoorDash Email Scraper | Public contact emails from DoorDash |
| EatStreet Email Scraper | Public contact emails from EatStreet |
| G Adventures Email Scraper | Public contact emails from G Adventures |
| GetYourGuide Email Scraper | Public contact emails from GetYourGuide |
| Grubhub Email Scraper | Public contact emails from Grubhub |
| Hostelbookers Email Scraper | Public contact emails from Hostelworld |
| HotelsCombined Email Scraper | Public contact emails from HotelsCombined |
| Intrepid Travel Email Scraper | Public contact emails from Intrepid Travel |
| Just Eat Email Scraper | Public contact emails from Just Eat |
| Klook Email Scraper | Public contact emails from Klook |
| OpenTable Email Scraper | Public contact emails from OpenTable |
| TheFork Email Scraper | Public contact emails from TheFork |
| Toast Restaurant Email Scraper | Public contact emails from Toast |
| TourRadar Email Scraper | Public contact emails from TourRadar |
| Traveloka Email Scraper | Public contact emails from Traveloka |
| Tripadvisor Attractions Email Scraper | Public contact emails from Tripadvisor |
| Tripadvisor Hotels Email Scraper | Public contact emails from Tripadvisor |
| Tripadvisor Restaurants Email Scraper | Public contact emails from Tripadvisor |
| Uber Eats Email Scraper | Public contact emails from Uber Eats |
| Viator Email Scraper | Public contact emails from Viator |
| Wanderlog Email Scraper | Public contact emails from Wanderlog |
| Wego Email Scraper | Public contact emails from Wego |
| Zomato Email Scraper | Public contact emails from Zomato |
| Airbnb Email and Phone Number Scraper | Emails and phone numbers from Airbnb |
| Booking.com Email and Phone Number Scraper | Emails and phone numbers from Booking.com |
| Caviar Email and Phone Number Scraper | Emails and phone numbers from Caviar |
| ChowNow Email and Phone Number Scraper | Emails and phone numbers from ChowNow |
| Contiki Email and Phone Number Scraper | Emails and phone numbers from Contiki |
| Craigslist Email and Phone Number Scraper | Emails and phone numbers from Craigslist |
| Delivery.com Email and Phone Number Scraper | Emails and phone numbers from Delivery.com |
| DoorDash Email and Phone Number Scraper | Emails and phone numbers from DoorDash |
| EatStreet Email and Phone Number Scraper | Emails and phone numbers from EatStreet |
| G Adventures Email and Phone Number Scraper | Emails and phone numbers from G Adventures |
Resy Email Scraper limitations
Read these before planning anything around Resy Email Scraper output.
- Publicly indexed emails only. The Resy Email Scraper finds addresses already visible in Google's index. Anything behind a booking widget, a contact form or a login is unreachable.
- Google's ~300-result cap. A single query returns roughly 300 results at most, which is why
expandQueriesdefaults totrueand why keyword breadth matters more than page depth. possiblyTruncated. Whentrue, Google's snippet ellipsis touched the email and it may be cut off. Verify before sending.profileUrlis a city page, not a venue page. Resy routes venues under a city segment, so the canonical link the Resy Email Scraper can build ishttps://resy.com/cities/{city}. UseaccountNameandfullNameto identify the venue.usernameandprofileUrlcan be empty. They are populated only when Google's result exposes a resolvable path; identity coverage was strong in testing, but a page-level match will still haveusername: null. That is a Google limitation, not a bug.- Narrow market. Resy's footprint is concentrated in major US metros, so smaller cities will return little.
- Apify GOOGLE_SERP proxy required. The Resy Email Scraper cannot run without Apify proxy credentials.
- Free-plan cap. Free Apify plans stop at 100 emails per run. Paid plans are uncapped.
- No guaranteed volume. Results vary with keywords, domains, location and Google's index on the day.
- Not affiliated with Resy. This is an independent tool, not supported, endorsed by or connected to Resy.
Resy Email Scraper FAQ
Common questions about the Resy Email Scraper, its inputs and its output.
How many results should I expect from the Resy Email Scraper?
In a live test, roughly 10 parsed results produced 9 identified venues, 9 profile URLs and 8 unique emails — among the strongest ratios in this family. Total volume still depends on your keywords, domains and location, and no row count is guaranteed.
Does the Resy Email Scraper log into Resy?
No. It never logs in, never calls a Resy API and never opens resy.com in a browser. It reads Google results through the Apify GOOGLE_SERP proxy.
Why is profileUrl a city link rather than a venue link?
Because Resy routes venue pages under a city segment, so the handle Google exposes in its breadcrumb is the city. The venue name lives in accountName and fullName.
Which keywords work best?
Upscale format terms: tasting menu, chef counter, omakase, wine bar, natural wine, cocktail bar, private dining, new american. Pair them with events, press or owner modifiers.
How do I use location for city-level prospecting?
Put a metro or neighbourhood in it — New York, Brooklyn, Los Angeles, Williamsburg — and run one job per territory. Resy is organised by city, so this maps neatly onto how the platform itself is structured.
What should I set countryCode to?
US. Resy's footprint is overwhelmingly American, and a US vantage point gives Google the best chance of surfacing its pages.
Whose emails am I actually finding?
Business inboxes that restaurants publish for events, private dining, press and partnership enquiries. Treat them as business contacts, not consumer data.
Does the Resy Email Scraper verify deliverability?
No. It extracts and normalises what Google indexed. Check rows flagged possiblyTruncated before using them.
How do I get more rows?
Add format keywords, add domains such as @outlook.com and @hotmail.com, run more metros, and keep expandQueries on. Raising maxPagesPerQuery is the least effective lever.
Can I resume an interrupted run?
Yes. State lives in the key-value store keyed by a hash of your input, with saves on Apify's PERSIST_STATE, MIGRATING and ABORTING events.
What happens when Google blocks a request?
Block, CAPTCHA and consent pages are detected rather than treated as empty. Pages get up to three attempts with exponential backoff, and failed queries are re-queued once at the end of the run.
Is scraping Resy contact emails legal?
The Resy Email Scraper only reads publicly indexed Google results. Whether you may then contact those addresses is a separate CAN-SPAM and GDPR question. See the responsible use section and take your own legal advice.
Leave a review
If the Resy Email Scraper saved you time, please leave a star rating and a short review on the Actor page.
Reviews are how other buyers judge whether a tool works, and they tell us which features to build next.
If something did not work, email neurodata.apify@gmail.com instead - bugs get fixed faster than they get complained about.
Support
Questions, a bug, or you need a custom build of the Resy Email Scraper? Contact neurodata.apify@gmail.com.