# Toast Restaurant Email Scraper (`leads-scraper/toast-restaurant-email-scraper`) Actor

Toast Restaurant Email Scraper SD - Toast Restaurant Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Toast results by keyword, location and email domain - Toast email extractor.

- **URL**: https://apify.com/leads-scraper/toast-restaurant-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Toast Restaurant Email Scraper

The Toast Restaurant Email Scraper collects publicly indexed contact emails connected to `toasttab.com`, the online-ordering domain used by restaurants running Toast point-of-sale.
It builds Google queries with the `site:toasttab.com` operator, fetches them through the Apify GOOGLE\_SERP proxy, and extracts emails from the result blocks.
No login, no browser, no Toast API — only what Google has already published in its index.

**Start with the honest part.** Toast online-ordering pages are mostly excluded from search engines, so most rows carry an email without a restaurant handle.
Ordering pages are transactional, and transactional pages are routinely kept out of the index — which caps how much venue context this Actor can recover.

The measured evidence bears that out. In a live test run, roughly 10 parsed results produced 6 unique emails but only 2 rows with a usable restaurant identity and 1 resolvable profile URL.
Email density is respectable; account context is thin.

What makes the Toast Restaurant Email Scraper interesting is not volume but signal.
Every `toasttab.com` page is a technographic fact: that restaurant runs Toast. For anyone selling into or against that stack, the domain itself is the qualifier.

#### What one run of the Toast Restaurant Email Scraper produces

Each dataset row is one unique email plus whatever context Google printed around it.
You get the raw title, an account label where one exists, a cleaned snippet, the exact query used and a truncation flag.
The Toast Restaurant 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 Toast Restaurant 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 Toast Restaurant Email Scraper and push results straight into your CRM.

### How the Toast Restaurant Email Scraper works: SERP parsing, not an API

The Toast Restaurant Email Scraper runs the same six steps on every query it builds.

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator, for example `site:toasttab.com restaurant "@gmail.com" catering "Boston"`.
3. It fetches result pages through the Apify GOOGLE\_SERP proxy using async `aiohttp` requests.
4. It parses each result block structurally — locating the `<h3>` and the smallest surrounding block — rather than by CSS class name.
5. It extracts emails with a domain-filtered regex and normalises obfuscated forms.
6. It deduplicates globally and pushes each lead to the dataset immediately.

There is no browser, no JavaScript rendering, no authentication and no cookies.
The Toast Restaurant Email Scraper never signs into Toast and never requests pages from Toast's own servers.
Everything it returns was already public in Google's search index — and on this domain, that public surface is deliberately narrow.

### Technographic prospecting with the Toast Restaurant Email Scraper

This is the angle that makes the Actor worth running despite the thin identity coverage.
A `toasttab.com` URL is evidence of a technology choice, not just a restaurant listing.

| Who benefits | Why the Toast signal matters |
|---|---|
| Competing POS and payments vendors | A known incumbent, a known contract cycle, a known migration pitch |
| Online-ordering and direct-ordering platforms | Restaurants already sold on digital ordering |
| Loyalty, gift card and CRM vendors | An installed base that integrates with third-party tools |
| Delivery integration and menu-sync providers | Operators with an existing digital menu to sync |
| Restaurant accounting and payroll software | Businesses at a scale that justifies a full POS |
| Hospitality consultants and agencies | A qualified list of digitally-mature independents |

Combine that with `location` and you have a territory list of restaurants running a specific stack.
That is a sharper starting point than a generic restaurant directory, even at low volume.

#### City-level prospecting with `location`

`location` is the most valuable field in the Toast Restaurant Email Scraper, because it is the only reliable geographic signal you get on an identity-thin platform.
It appends a quoted phrase to every query, so you can build one dataset per market rather than one undifferentiated national file.

Useful values are US metros where independent restaurants cluster: `Boston`, `New York`, `Chicago`, `Austin`, `Denver`, `Nashville`, `Portland`, `Atlanta`.
Neighbourhood phrases such as `South End` or `East Austin` narrow further when you want a walkable route.

Leave `location` empty for one exploratory run, then narrow.
Because most rows have no venue handle, capturing geography at query time is often the only way to segment the dataset afterwards.

#### Keyword and modifier suggestions

The shipped defaults are `restaurant` and `cafe`, with `email`, `contact`, `catering`, `reservations` and `owner` as modifiers.
On an ordering domain, `reservations` is weak — swap it for ordering-intent language.

| Keyword | Why it works on toasttab.com |
|---|---|
| `catering` | The highest-value page type; catering pages publish a real inbox |
| `brewery` | Taprooms and breweries are a large Toast cohort |
| `pizzeria` | Independent operators with heavy online ordering |
| `taqueria` | Fast-casual independents |
| `bakery` | Order-ahead businesses with a business address |
| `food truck` | Owner-operated, and the owner's inbox is often the only contact |
| `coffee` | Cafes and roasters running order-ahead |

Better modifiers here: `catering`, `contact`, `email`, `order online`, `owner`.

### Toast Restaurant Email Scraper features

Everything listed below is implemented in the Toast Restaurant 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 |

### Toast Restaurant Email Scraper input fields

These are the exact input fields the Toast Restaurant Email Scraper accepts, with the defaults it ships with.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["restaurant","cafe"]` | 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 Toast Restaurant Email Scraper input

```json
{
  "keywords": ["catering", "brewery", "pizzeria"],
  "location": "Boston",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com", "@hotmail.com"],
  "maxEmails": 200,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "catering", "order online", "owner"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Toast Restaurant Email Scraper output fields

Every dataset item the Toast Restaurant 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 Toast Restaurant Email Scraper output

```json
[
  {
    "network": "Toast",
    "keyword": "catering",
    "query": "site:toasttab.com catering \"@gmail.com\" contact \"Boston\"",
    "title": "Catering - Fox & Feather | Order Online",
    "accountName": "Fox & Feather",
    "fullName": "Fox & Feather",
    "username": "fox-and-feather-boston",
    "profileUrl": "https://www.toasttab.com/fox-and-feather-boston",
    "url": "https://www.toasttab.com/fox-and-feather-boston",
    "description": "Drop-off catering across Greater Boston. Enquiries: foxfeather.catering@gmail.com",
    "email": "foxfeather.catering@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T15:02:44Z"
  },
  {
    "network": "Toast",
    "keyword": "brewery",
    "query": "site:toasttab.com brewery \"@outlook.com\" order online \"Boston\"",
    "title": "Order Online | Taproom Menu",
    "accountName": "",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Taproom pickup and growler fills. Events: taproom.events.bos@outlook.com",
    "email": "taproom.events.bos@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T15:04:58Z"
  },
  {
    "network": "Toast",
    "keyword": "pizzeria",
    "query": "site:toasttab.com pizzeria \"@gmail.com\" owner \"Boston\"",
    "title": "Order Online",
    "accountName": "",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Neapolitan pizza, North End. Wholesale and franchise: northend.pizza.co@gmail.com",
    "email": "northend.pizza.co@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T15:06:12Z"
  }
]
```

Two of the three rows have `username: null` and an empty `profileUrl`, which is representative of this platform.
Toast online-ordering pages are mostly excluded from search engines, so most rows carry an email without a restaurant handle — and generic titles like "Order Online" give the parser nothing to work with.

Where a handle does resolve, the canonical link the Toast Restaurant Email Scraper builds is `https://www.toasttab.com/{restaurant-slug}`.

#### What a measured Toast Restaurant Email Scraper run looked like

Per roughly 10 parsed results in a live test: 2 rows with a usable identity, 1 resolvable profile URL, 6 unique emails.
That is the weakest identity rate of the restaurant Actors in this family, paired with a decent email yield.

Plan your workflow around the address, not the name.
Deduplicate on `email`, segment on `location` and `keyword`, and enrich restaurant names from another source if you need them.

### Restaurant lead generation use cases for the Toast Restaurant Email Scraper

Here is where the Toast Restaurant Email Scraper fits into real B2B prospecting and competitive research.

| Use case | How to configure it |
|---|---|
| POS displacement campaigns | One metro per run; every row is a confirmed Toast user |
| Online-ordering platform sales | `keywords: ["catering","pizzeria"]` with an `order online` modifier |
| Loyalty and gift card vendors | Target `coffee` and `bakery`, the highest-frequency formats |
| Menu-sync and delivery integrations | `keywords: ["restaurant","taqueria"]` per city |
| Catering and events suppliers | `keywords: ["catering"]` — the richest page type for real inboxes |
| Beverage and brewery supply | `keywords: ["brewery"]` with `contact` and `events` modifiers |
| Restaurant accounting and payroll software | Digitally-mature independents, filtered by metro |
| Hospitality agencies and consultants | One neighbourhood per run; pitch ordering-page optimisation |
| Technographic market research | Compare row counts per city to estimate Toast penetration |
| CRM enrichment | Match on `email`, then tag the account as a Toast user |

### Practical Toast Restaurant Email Scraper recipes

**Catering-first run.** `keywords: ["catering"]`, four mail domains, one metro, `maxEmails: 200`.
Catering pages are the most likely `toasttab.com` pages to publish a monitored business inbox.

**Email-first workflow.** Because identity coverage is low, treat the dataset as an address list with metadata rather than a venue directory.
Deduplicate on `email` and use `keyword`, `query` and `location` as your segmentation.

**Metro sweep.** Eight runs, one city each in `location`, identical keywords.
This is the only practical way to produce territory-tagged output on an identity-thin platform.

**Widen before you deepen.** More keywords and domains beat more pages per query, because Google caps a single query at roughly 300 results.
Raise `maxPagesPerQuery` last.

**Pair for identity.** Run the [OpenTable Email Scraper](https://apify.com/neuro-scraper/opentable-email-scraper) or [Resy Email Scraper](https://apify.com/leads-scraper/resy-email-scraper) over the same cities — both resolve venue names far more reliably, so they make good enrichment partners for a Toast-derived list.

### 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 Toast Restaurant Email Scraper workflow defensible:

- Prefer role addresses (`info@`, `catering@`, `orders@`) over addresses naming an individual.
- Keep provenance for every lead — the `query`, `url` and `foundAt` fields exist for exactly this.
- Give a clear sender identity, a stated purpose and a working opt-out in every message.
- Include a valid physical postal address in commercial email, as CAN-SPAM requires.
- Honour opt-outs immediately and check suppression lists before each follow-up.
- Delete data you are not actively using rather than warehousing scraped lists.

This is operational guidance, not legal advice.

### Related Actors

The Toast Restaurant Email Scraper is one of 35 Actors in a Travel, Hospitality and Food family that all share this engine.
For stronger venue identity over the same US cities, pair it with the [Resy Email Scraper](https://apify.com/leads-scraper/resy-email-scraper) and [OpenTable Email Scraper](https://apify.com/neuro-scraper/opentable-email-scraper); for delivery-first operators, add the [DoorDash Email Scraper](https://apify.com/leads-scraper/doordash-email-scraper).

| Actor | What it collects |
|---|---|
| [Airbnb Email Scraper](https://apify.com/leads-scraper/airbnb-email-scraper) | Public contact emails from Airbnb |
| [Booking.com Email Scraper](https://apify.com/leads-scraper/booking-com-email-scraper) | Public contact emails from Booking.com |
| [Caviar Email Scraper](https://apify.com/neuro-scraper/caviar-email-scraper) | Public contact emails from Caviar |
| [ChowNow Email Scraper](https://apify.com/neuro-scraper/chownow-email-scraper) | Public contact emails from ChowNow |
| [Contiki Email Scraper](https://apify.com/neuro-scraper/contiki-email-scraper) | Public contact emails from Contiki |
| [Craigslist Email Scraper](https://apify.com/leads-scraper/craigslist-email-scraper) | Public contact emails from Craigslist |
| [Delivery.com Email Scraper](https://apify.com/neuro-scraper/delivery-com-email-scraper) | Public contact emails from Delivery.com |
| [DoorDash Email Scraper](https://apify.com/leads-scraper/doordash-email-scraper) | Public contact emails from DoorDash |
| [EatStreet Email Scraper](https://apify.com/neuro-scraper/eatstreet-email-scraper) | Public contact emails from EatStreet |
| [G Adventures Email Scraper](https://apify.com/neuro-scraper/g-adventures-email-scraper) | Public contact emails from G Adventures |
| [GetYourGuide Email Scraper](https://apify.com/leads-scraper/getyourguide-email-scraper) | Public contact emails from GetYourGuide |
| [Grubhub Email Scraper](https://apify.com/leads-scraper/grubhub-email-scraper) | Public contact emails from Grubhub |
| [Hostelbookers Email Scraper](https://apify.com/leads-scraper/hostelbookers-email-scraper) | Public contact emails from Hostelworld |
| [HotelsCombined Email Scraper](https://apify.com/neuro-scraper/hotelscombined-email-scraper) | Public contact emails from HotelsCombined |
| [Intrepid Travel Email Scraper](https://apify.com/neuro-scraper/intrepid-travel-email-scraper) | Public contact emails from Intrepid Travel |
| [Just Eat Email Scraper](https://apify.com/leads-scraper/just-eat-email-scraper) | Public contact emails from Just Eat |
| [Klook Email Scraper](https://apify.com/neuro-scraper/klook-email-scraper) | Public contact emails from Klook |
| [OpenTable Email Scraper](https://apify.com/neuro-scraper/opentable-email-scraper) | Public contact emails from OpenTable |
| [Resy Email Scraper](https://apify.com/leads-scraper/resy-email-scraper) | Public contact emails from Resy |
| [TheFork Email Scraper](https://apify.com/leads-scraper/thefork-email-scraper) | Public contact emails from TheFork |
| [TourRadar Email Scraper](https://apify.com/leads-scraper/tourradar-email-scraper) | Public contact emails from TourRadar |
| [Traveloka Email Scraper](https://apify.com/leads-scraper/traveloka-email-scraper) | Public contact emails from Traveloka |
| [Tripadvisor Attractions Email Scraper](https://apify.com/leads-scraper/tripadvisor-attractions-email-scraper) | Public contact emails from Tripadvisor |
| [Tripadvisor Hotels Email Scraper](https://apify.com/leads-scraper/tripadvisor-hotels-email-scraper) | Public contact emails from Tripadvisor |
| [Tripadvisor Restaurants Email Scraper](https://apify.com/leads-scraper/tripadvisor-restaurants-email-scraper) | Public contact emails from Tripadvisor |
| [Uber Eats Email Scraper](https://apify.com/leads-scraper/uber-eats-email-scraper) | Public contact emails from Uber Eats |
| [Viator Email Scraper](https://apify.com/leads-scraper/viator-email-scraper) | Public contact emails from Viator |
| [Wanderlog Email Scraper](https://apify.com/leads-scraper/wanderlog-email-scraper) | Public contact emails from Wanderlog |
| [Wego Email Scraper](https://apify.com/leads-scraper/wego-email-scraper) | Public contact emails from Wego |
| [Zomato Email Scraper](https://apify.com/leads-scraper/zomato-email-scraper) | Public contact emails from Zomato |
| [Airbnb Email and Phone Number Scraper](https://apify.com/leads-scraper/airbnb-email-and-phone-number-scraper) | Emails and phone numbers from Airbnb |
| [Booking.com Email and Phone Number Scraper](https://apify.com/leads-scraper/booking-com-email-and-phone-number-scraper) | Emails and phone numbers from Booking.com |
| [Caviar Email and Phone Number Scraper](https://apify.com/neuro-scraper/caviar-email-and-phone-number-scraper) | Emails and phone numbers from Caviar |
| [ChowNow Email and Phone Number Scraper](https://apify.com/neuro-scraper/chownow-email-and-phone-number-scraper) | Emails and phone numbers from ChowNow |
| [Contiki Email and Phone Number Scraper](https://apify.com/neuro-scraper/contiki-email-and-phone-number-scraper) | Emails and phone numbers from Contiki |
| [Craigslist Email and Phone Number Scraper](https://apify.com/leads-scraper/craigslist-email-and-phone-number-scraper) | Emails and phone numbers from Craigslist |
| [Delivery.com Email and Phone Number Scraper](https://apify.com/neuro-scraper/delivery-com-email-and-phone-number-scraper) | Emails and phone numbers from Delivery.com |
| [DoorDash Email and Phone Number Scraper](https://apify.com/leads-scraper/doordash-email-and-phone-number-scraper) | Emails and phone numbers from DoorDash |
| [EatStreet Email and Phone Number Scraper](https://apify.com/neuro-scraper/eatstreet-email-and-phone-number-scraper) | Emails and phone numbers from EatStreet |
| [G Adventures Email and Phone Number Scraper](https://apify.com/neuro-scraper/g-adventures-email-and-phone-number-scraper) | Emails and phone numbers from G Adventures |
| [Grubhub Email and Phone Number Scraper](https://apify.com/neuro-scraper/grubhub-email-and-phone-number-scraper) | Emails and phone numbers from Grubhub |
| [Hostelworld Email and Phone Number Scraper](https://apify.com/neuro-scraper/hostelbookers-email-and-phone-number-scraper) | Emails and phone numbers from Hostelworld |

### Toast Restaurant Email Scraper limitations

Read these before planning anything around Toast Restaurant Email Scraper output.

- **Toast online-ordering pages are mostly excluded from search engines, so most rows carry an email without a restaurant handle.** This is the defining limitation of the Toast Restaurant Email Scraper, and it caps both volume and context.
- **Very weak account identity.** In a live test only about 2 of 10 parsed results carried a usable `accountName`, and just 1 resolved to a profile URL.
- **Publicly indexed emails only.** The Toast Restaurant Email Scraper finds addresses already visible in Google's index. Anything inside the ordering flow or the Toast back office is unreachable.
- **Google's ~300-result cap.** A single query returns roughly 300 results at most, which is why `expandQueries` defaults to `true`.
- **`possiblyTruncated`.** When `true`, Google's snippet ellipsis touched the email and it may be cut off. Verify before sending.
- **`username` and `profileUrl` are usually empty.** Generic "Order Online" titles give the parser nothing to resolve. Where a handle does exist, the link is `https://www.toasttab.com/{slug}`. That is a Google and platform limitation, not a bug.
- **Apify GOOGLE\_SERP proxy required.** The Toast Restaurant 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 Toast.** This is an independent tool, not supported, endorsed by or connected to Toast, Inc.

### Toast Restaurant Email Scraper FAQ

Common questions about the Toast Restaurant Email Scraper, its inputs and its output.

#### How many results should I expect from the Toast Restaurant Email Scraper?

In a live test, roughly 10 parsed results produced 6 unique emails but only 2 identified restaurants and 1 profile URL. Expect moderate email density and very thin account context. Total volume depends on your keywords, domains and `location`, and no row count is guaranteed.

#### Why do so few rows have a restaurant name?

Because Toast online-ordering pages are mostly excluded from search engines, so most rows carry an email without a restaurant handle. Google often prints a generic "Order Online" title with nothing for the parser to resolve.

#### Does the Toast Restaurant Email Scraper log into Toast?

No. It never logs in, never calls a Toast API and never opens toasttab.com in a browser. It reads Google results through the Apify GOOGLE\_SERP proxy.

#### What is the point if identity is that weak?

The technographic signal. Every `toasttab.com` page confirms that a restaurant runs Toast, which is a strong qualifier for POS competitors, online-ordering platforms and loyalty vendors even before you know the venue name.

#### Which keywords work best?

`catering` first — catering pages publish real inboxes. Then `brewery`, `pizzeria`, `taqueria`, `bakery`, `coffee` and `food truck`. Swap the `reservations` modifier for `order online`.

#### How do I use `location` for city-level prospecting?

Put a metro or neighbourhood in it — `Boston`, `Austin`, `South End` — and run one job per territory. On an identity-thin platform this is usually your only reliable geographic segmentation.

#### Whose emails am I actually finding?

Business inboxes published on ordering and catering pages: catering coordinators, events contacts and owner addresses. Treat them as business contacts, not consumer data.

#### Does the Toast Restaurant 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 mail domains, use catering and ordering-intent keywords, run more cities, 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 Toast contact emails legal?

The Toast Restaurant 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 Toast Restaurant 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 Toast Restaurant Email Scraper? Contact **<neurodata.apify@gmail.com>**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Toast accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Toast.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "restaurant",
    "cafe"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "catering",
    "reservations",
    "owner"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Toast Restaurant Email Scraper, stored in the run's default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "restaurant",
        "cafe"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "catering",
        "reservations",
        "owner"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/toast-restaurant-email-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [
        "restaurant",
        "cafe",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "catering",
        "reservations",
        "owner",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/toast-restaurant-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "restaurant",
    "cafe"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "catering",
    "reservations",
    "owner"
  ]
}' |
apify call leads-scraper/toast-restaurant-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/toast-restaurant-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vdY2C9iYIdLEO9aKe/builds/ca6uElA4DUKibrRH8/openapi.json
