# DoorDash Email Scraper (`leads-scraper/doordash-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/doordash-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

### DoorDash Email Scraper

DoorDash Email Scraper collects publicly indexed contact emails connected to DoorDash pages and turns them into a clean, exportable dataset of restaurant leads.

It is built for teams doing restaurant lead generation and restaurant prospecting: POS and online-ordering vendors, food distributors, packaging suppliers, hospitality recruiters and local marketing agencies selling to independent restaurants.

**Read this before you run it.** DoorDash indexes city and cuisine landing pages far more than individual store pages, so most rows carry an email without a store handle.

That is the single most important thing to know about this Actor. You will get the email address and the city or cuisine context around it, but usually not a tidy merchant handle attached to it.

In our own test run of DoorDash Email Scraper, on a sample of about 10 parsed results, only 1 row carried an account identity, only 1 had a profile URL, and 3 unique emails were found.

So set expectations accordingly. DoorDash Email Scraper is a territory-level prospecting tool here, not a merchant-directory builder - you should plan to enrich `accountName` yourself.

If you need higher handle coverage on comparable food-delivery platforms, the [Grubhub Email Scraper](https://apify.com/leads-scraper/grubhub-email-scraper) and the [ChowNow Email Scraper](https://apify.com/neuro-scraper/chownow-email-scraper) returned identities on 8 of 10 parsed results in the same test.

Every email address DoorDash Email Scraper keeps is a business contact address published so diners can arrange catering, large orders and reservations. Treat it as B2B contact data, never as personal data harvesting.

#### What DoorDash Email Scraper collects and why it exists

DoorDash's public footprint in Google is shaped by discovery pages: "pizza delivery in Austin", "best Thai food in Brooklyn", cuisine hubs, city hubs, neighbourhood hubs.

Those pages aggregate many merchants at once, and Google's snippet often surfaces a contact email printed by one of them without printing a store slug alongside it.

That is exactly why DoorDash Email Scraper leans on city-level prospecting and cuisine segmentation instead of handle-based enumeration. The geography is the index, so the geography is the filter.

The upside is that a DoorDash Email Scraper run comes back shaped like a territory. A rep working Chicago gets Chicago food delivery leads, and the cuisine keyword tells them roughly what kind of kitchen they are calling.

The downside is real and we are not hiding it: you will spend time matching emails back to business names. Budget for that enrichment step.

DoorDash Email Scraper does not log in, does not use DoorDash's API, and never opens the DoorDash website. There is no browser, no JavaScript rendering, no authentication and no cookies.

All data comes from publicly indexed Google search results - titles, snippets and site labels - fetched through the Apify GOOGLE\_SERP proxy. This Actor is not affiliated with or endorsed by DoorDash.

### Key features of DoorDash Email Scraper

Everything below is a real capability of DoorDash Email Scraper. Nothing in this table is aspirational.

| Feature | What it does |
|---|---|
| `site:` operator targeting | Every query is scoped to `doordash.com`, so results stay on-platform |
| Query expansion | Base, quoted and `intitle:` phrasings, plus one variant per query modifier; base queries run first |
| Domain filtering | Only emails ending in your `customDomains` are kept |
| Global email deduplication | One row per unique address across every query and every page |
| Obfuscated email decoding | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the `＠` full-width at sign |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does 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 SERP parsing | Locates the `<h3>` and its smallest surrounding block instead of relying on Google CSS class names |
| Whole-page fallback parser | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Concurrency control | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and exponential backoff | Up to 3 attempts per page, with a fresh proxy session per request |
| CAPTCHA detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Failed-query requeue | Blocked or failed queries are retried once at the end of the run |
| Resumable runs | State is stored in the key-value store, keyed by an input hash, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Immediate dataset export | Each lead is pushed as it is found, ready for CSV, JSON or Excel export |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How DoorDash Email Scraper works

DoorDash Email Scraper runs six steps, in order, on every run.

1. **Read input.** Keywords, `location`, email domains and limits are loaded from the input schema.
2. **Build `site:` queries.** Each keyword is combined with each domain and scoped to `doordash.com`, for example `site:doordash.com restaurant catering "@gmail.com" "Chicago"`.
3. **Fetch SERP pages.** Result pages are requested asynchronously through the Apify GOOGLE\_SERP proxy, with proxy rotation and a fresh session per request.
4. **Parse each result block structurally.** DoorDash Email Scraper finds the `<h3>` title and then the smallest block wrapping it, so snippet extraction survives Google layout changes.
5. **Extract emails.** A domain-filtered regex pulls addresses out of the block text, with normalisation and obfuscated email decoding applied first.
6. **Deduplicate and push.** Addresses are deduplicated globally, then each lead is written to the Apify dataset immediately.

Because DoorDash Email Scraper works from Google SERP parsing rather than the platform itself, its ceiling is whatever Google has indexed and chosen to show in a snippet.

That is also why handle coverage is low on this platform specifically. Google is showing city and cuisine pages, and those pages do not carry a store slug in the title.

### Input for DoorDash Email Scraper

These are the nine input fields of DoorDash Email Scraper, with the exact titles and defaults from the Actor's input schema.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["restaurant","takeout"]` | Search terms (niche, job title, industry) |
| `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, GB, DE...) |
| `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 JSON input for DoorDash Email Scraper

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

#### Getting `location` and cuisine keywords right

`location` matters more in DoorDash Email Scraper than in almost any sibling Actor, because DoorDash's indexed pages are literally city- and cuisine-shaped.

The phrase is appended as plain text to every query, so it matches whatever the indexed page actually prints. Pick city names DoorDash publishes.

**Run one city per run.** Use `"Chicago"` or `"Manchester"`, keep each dataset separate, and your rep gets a territory-shaped list instead of a national blob.

**Use the neighbourhood or borough in dense metros.** `"Brooklyn"` and `"Shoreditch"` cut through a saturated city term and surface local restaurant leads a city-wide query buries.

**Pair `location` with `countryCode`** so the search proxy resolves the right Google locale. `"Manchester"` with `GB` and `"Manchester"` with `US` are different searches.

**Widen only when a city underdelivers.** Move up to a state or region if the city returns too little, and accept that the results get less territory-shaped as you do.

**Lean hard on cuisine keywords.** Because cuisine hubs are what DoorDash gets indexed for, `"thai"`, `"sushi"`, `"halal"`, `"bbq"` and `"vegan"` are more productive keywords here than generic terms.

Remember that a city DoorDash does not print on its pages will simply narrow your results to nothing. `location` is a text match, not a geo lookup.

### Output of DoorDash Email Scraper

Every dataset item from DoorDash Email Scraper carries all fourteen fields below, in this order.

| 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 (handle, display name, or e.g. a subreddit) |
| `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/caption snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email - verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example JSON output from DoorDash Email Scraper

The first two rows below are the common shape on this platform: an email plus a city or cuisine context row, with `"username": null` and `"profileUrl": ""`. The third is the rarer row that does carry a store handle.

```json
[
  {
    "network": "DoorDash",
    "keyword": "pizza",
    "query": "site:doordash.com pizza contact \"@gmail.com\" \"Chicago\"",
    "title": "Pizza Delivery in Chicago, IL - Order Online",
    "accountName": "Pizza Delivery in Chicago, IL",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.doordash.com/",
    "description": "Order pizza delivery in Chicago. Catering and large orders: mario.catering@gmail.com",
    "email": "mario.catering@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-14T09:21:44Z"
  },
  {
    "network": "DoorDash",
    "keyword": "thai restaurant",
    "query": "site:doordash.com thai restaurant catering \"@gmail.com\" \"Chicago\"",
    "title": "Best Thai Food Near Me in Chicago - Delivery & Takeout",
    "accountName": "Best Thai Food Near Me in Chicago",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.doordash.com/",
    "description": "Thai delivery and takeout in Chicago. Event catering enquiries: bangkok.house.events@yahoo.com",
    "email": "bangkok.house.events@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-14T09:23:02Z"
  },
  {
    "network": "DoorDash",
    "keyword": "catering",
    "query": "site:doordash.com catering owner \"@gmail.com\" \"Chicago\"",
    "title": "Green Fork Kitchen - Chicago - Menu & Delivery",
    "accountName": "Green Fork Kitchen",
    "fullName": "Green Fork Kitchen",
    "username": "green-fork-kitchen-chicago",
    "profileUrl": "https://www.doordash.com/store/green-fork-kitchen-chicago/",
    "url": "https://www.doordash.com/store/green-fork-kitchen-chicago/",
    "description": "Farm-to-table kitchen in Chicago. Catering and wholesale: greenfork.orders@gmail.com",
    "email": "greenfork.orders@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-14T09:25:17Z"
  }
]
```

Rows one and two are what DoorDash Email Scraper returns most of the time. Row three is the minority case on this platform, and you should not plan a campaign around it.

Feed the dataset into a spreadsheet or a CRM import and the missing handles become obvious immediately. Plan the enrichment pass before you plan the send.

### Use cases for DoorDash Email Scraper

Each of these buyers uses DoorDash Email Scraper for city-level prospecting first and ICP targeting second, because the geography is what the index gives you.

| Buyer | How they use DoorDash Email Scraper |
|---|---|
| POS and online-ordering vendors | Build POS sales leads city by city for restaurant lead generation, then enrich `accountName` before the first touch |
| Food distributors and wholesale suppliers | Pull catering leads by cuisine, since cuisine predicts the ingredient basket |
| Packaging and disposables suppliers | Target high-volume takeout cuisines in one metro at a time |
| Equipment suppliers | Segment by cuisine keyword to match ovens, fryers and cold storage to kitchen type |
| Hospitality recruiters | Assemble local restaurant leads for chef, GM and front-of-house searches; hospitality lead generation in one territory |
| Local marketing and SEO agencies | Work a neighbourhood-shaped list of independent restaurants for B2B restaurant outreach |
| Delivery and logistics integrations | Map merchant contact data across a launch city before a market entry |
| Sales ops teams | Feed the dataset into a CRM import and route it by city and cuisine |

### Example runs with DoorDash Email Scraper

**One city, broad cuisine sweep.** `keywords: ["pizza","sushi","thai","bbq","vegan"]`, `location: "Chicago"`, `countryCode: "US"`, `maxEmails: 300`. This is the recipe DoorDash Email Scraper is best suited to.

**Neighbourhood catering push.** `keywords: ["catering","large order"]`, `location: "Brooklyn"`, `queryModifiers: ["catering","email","owner"]`. Narrower, but the catering leads that come back are usually the highest-intent restaurant marketing leads in the batch.

**UK territory test.** `keywords: ["takeaway","curry"]`, `location: "Manchester"`, `countryCode: "GB"`, `maxEmails: 100`. Run a small cap first to see whether the local index supports the effort.

**Domain-narrowed run.** Set `customDomains: ["@gmail.com"]` only. Independent operators skew heavily toward free mailboxes, so this trims aggregator noise out of a restaurant owner email list.

**Low-volume probe.** `maxEmails: 20`, `maxPagesPerQuery: 10`, `expandQueries: true`. Cheap way to check whether a city is worth a full run before you commit budget.

After any DoorDash Email Scraper run, export the dataset as CSV, JSON or Excel from the Apify console, or pull it through the API for lead enrichment and CRM import.

Stack several single-city runs to build a restaurant contact database over time. Keeping them separate is what makes the output usable for restaurant prospecting.

### Responsible use of DoorDash Email Scraper

These are business contact addresses published for catering, large orders and reservations. Contact them as businesses, about business, and nothing else.

Identify yourself and your company in the first message, and say plainly why you are contacting a business address. Never present the outreach as personal correspondence.

Give a working unsubscribe in every message and honour opt-outs immediately. Keep a record of your lawful basis or legitimate-interest assessment for the list.

Do not send to consumers, and do not use these rows to build profiles of individuals. A restaurant email list is for B2B restaurant outreach only; skip anything that looks like a private address.

GDPR, CAN-SPAM, PECR and local marketing rules all apply to you, not to the tool. This is not legal advice - check your own obligations, and your platform's terms, before you send.

### Limitations of DoorDash Email Scraper

These are the real limits of DoorDash Email Scraper, in order of how much they will affect you.

1. **DoorDash indexes city and cuisine landing pages more than store pages, so most rows carry an email without a store handle.** In our own test run, per about 10 parsed results, 1 row had an account identity, 1 had a profile URL, and 3 unique emails were found. Plan to enrich `accountName` yourself.
2. It only finds emails that are publicly visible in Google's index. Anything Google has not indexed, or does not show in a snippet, is invisible to this Actor.
3. Google caps a single query at roughly 300 results. That cap is the whole reason query expansion exists - leave `expandQueries` on.
4. `possiblyTruncated: true` means Google's snippet ellipsis may have cut the email short. Verify those rows before you send to them.
5. DoorDash Email Scraper requires the Apify GOOGLE\_SERP proxy and cannot run without Apify proxy credentials.
6. Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.
7. `username` and `profileUrl` are only populated when the platform exposes a handle in the Google result; otherwise you get `accountName` and `fullName` with an empty handle. This is a Google limitation, not a bug.
8. Results vary with keywords, domains and location. No volume is guaranteed.

### DoorDash Email Scraper FAQ

#### How many results should I expect?

In our own test run, per a sample of about 10 parsed results, 1 row had an account identity, 1 had a profile URL, and 3 unique emails were found.

That is an observation on one run, not a guarantee. It reflects the fact that DoorDash indexes city and cuisine landing pages more than store pages, so most rows carry an email without a store handle.

Volume varies with your keywords, domains and location.

#### Why is `username` usually `null` on this platform?

Because Google is mostly showing city and cuisine hub pages, which have no store slug in the result. DoorDash Email Scraper reports `null` honestly instead of guessing a handle.

#### Which Actor should I use if I need store handles?

Try the [Grubhub Email Scraper](https://apify.com/leads-scraper/grubhub-email-scraper) or the [ChowNow Email Scraper](https://apify.com/neuro-scraper/chownow-email-scraper) - both returned identities on 8 of 10 parsed results in the same test.

Note that the [Caviar Email Scraper](https://apify.com/neuro-scraper/caviar-email-scraper) runs on DoorDash infrastructure, so it shares many of the same indexed pages and is not an independent second source.

#### Does it log into DoorDash or use the DoorDash API?

No. DoorDash Email Scraper reads publicly indexed Google search results through the Apify GOOGLE\_SERP proxy. It has no browser, no JavaScript rendering, no login and no cookies.

#### Is this Actor affiliated with DoorDash?

No. It is an independent tool and is not endorsed by or associated with DoorDash.

#### What is the best keyword strategy for DoorDash Email Scraper?

Cuisine terms beat generic ones. `"thai"`, `"sushi"`, `"halal"` and `"bbq"` map onto the cuisine hubs DoorDash actually gets indexed for, which is where the emails sit.

#### Can I collect business-domain emails instead of free mailboxes?

Yes. Put any domain into `customDomains` - with or without the leading `@` - and only emails on those domains are kept.

#### How do I export the data?

DoorDash Email Scraper pushes every lead to the dataset as it is found. Export as CSV, JSON or Excel from the Apify console, or fetch it through the Apify API for CRM import.

#### Can I resume an interrupted run?

Yes. Run state is stored in the key-value store, keyed by a hash of your input, and is saved on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Why did a run return fewer emails than `maxEmails`?

Either the index ran dry for your keyword and city combination, or Google's ~300-result cap was hit across your queries. Widen the location, add cuisine keywords, or add domains.

#### Does it handle CAPTCHAs and blocked pages?

Blocked pages, "unusual traffic" interstitials and consent pages are detected and retried with exponential backoff, and failed queries are re-queued once at the end of the run.

#### Is DoorDash Email Scraper legal to use for outreach?

DoorDash Email Scraper collects publicly published business contact addresses. Your outreach obligations under GDPR, CAN-SPAM and local rules are yours - read the responsible use section above and check your own compliance position.

### Related Actors

| Actor | What it collects |
|---|---|
| [DoorDash Email and Phone Number Scraper](https://apify.com/leads-scraper/doordash-email-and-phone-number-scraper) | Emails and phone numbers from DoorDash |
| [DoorDash Phone Number Scraper](https://apify.com/leads-scraper/doordash-phone-number-scraper) | Public phone numbers from DoorDash |
| [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 |
| [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 |
| [Toast Restaurant Email Scraper](https://apify.com/leads-scraper/toast-restaurant-email-scraper) | Public contact emails from Toast |
| [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 |
| [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 |

### Leave a review

If the DoorDash 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.

# Actor input Schema

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

Search terms describing the DoorDash 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 DoorDash.

## `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",
    "takeout"
  ],
  "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 DoorDash 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",
        "takeout"
    ],
    "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/doordash-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",
        "takeout",
    ],
    "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/doordash-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",
    "takeout"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "catering",
    "reservations",
    "owner"
  ]
}' |
apify call leads-scraper/doordash-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/doordash-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/zdw32OspqlDPRGQ5r/builds/9tKweH7heaFNztAyj/openapi.json
