DoorDash Scraper - Stores, Menus, Reviews & Leads avatar

DoorDash Scraper - Stores, Menus, Reviews & Leads

Pricing

from $3.30 / 1,000 results

Go to Apify Store
DoorDash Scraper - Stores, Menus, Reviews & Leads

DoorDash Scraper - Stores, Menus, Reviews & Leads

Scrape DoorDash restaurants by US city: store leads (name, rating, cuisines, delivery fee, address, ETA), full menus with item prices, and customer reviews. No login or API key.

Pricing

from $3.30 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

DoorDash Scraper — Restaurants, Menus, Reviews & Restaurant Leads

Scrape restaurants, menus and reviews from DoorDash — the #1 US food‑delivery marketplace — without login or code. This DoorDash scraper turns any US city into a clean list of restaurants (ready‑to‑use leads with ratings, cuisines, delivery fees, ETA, full address and GPS coordinates) and can optionally pull each store's full menu with item prices and its customer reviews. Give it a city, press Start, and scrape DoorDash at scale.

Export every result to JSON, CSV, Excel, or API — no login, no API key, no browser extension.

Built for lead‑generation agencies, restaurant tech & aggregators, market researchers, pricing analysts, data journalists and anyone who needs structured DoorDash data instead of copy‑pasting from the app.


🔎 Why scrape DoorDash?

DoorDash is the largest on‑demand food‑delivery platform in the United States, listing hundreds of thousands of restaurants with ratings, cuisines, delivery economics, menus and recent reviews. That is an extraordinary, constantly‑updating source of restaurant leads, menu/price intelligence and local market data — but there is no public DoorDash API, and the site is US‑only and protected by a Cloudflare challenge, so collecting it by hand is slow and brittle.

Manually opening each city page, scrolling through 50 restaurants, clicking into every store for its menu, address and reviews, then re‑typing it into a spreadsheet does not scale past a handful of stores. A DoorDash scraper does it for you: one input, structured output, repeatable on a schedule. In a verification run this actor pulled 350 de‑duplicated restaurants across 7 major US cities in about 35 seconds (leads‑only), with every core field — name, rating, cuisines, price tier, delivery fee, ETA, address and coordinates — populated on essentially every row.

Common reasons people scrape DoorDash:

  • Restaurant lead generation — build targeted lists of restaurants in any US metro with name, full address, profile URL, rating, review count, cuisines and price tier for sales and outreach.
  • Menu & price intelligence — collect menu items and prices across competitors for pricing strategy, menu research or catalog building.
  • Market & delivery research — compare delivery fees, ETAs, price tiers, cuisine mix and ratings city‑by‑city.
  • Review & reputation analysis — pull the recent customer reviews (text, star rating, date) DoorDash shows per store.
  • Database enrichment — match your own restaurant records to DoorDash coverage, ratings, geo‑coordinates and menus.
  • Market sizing & expansion — count and map restaurants per cuisine or neighborhood before launching a product or service.
  • Investor / industry research — track the local food‑delivery landscape across multiple cities over time.

✨ What this DoorDash scraper does

  • 🏪 Store leads by city — enter one or more US cities as City, ST and get up to ~50 restaurants per city: name, averageRating, numRatings, cuisines, priceTier, deliveryFee, etaMinutes, distance, full address + latitude/longitude, logo, popularItems, plus isSponsored and offersPickup flags.
  • 📋 Full menus (optional) — toggle includeMenu to open each store page and extract every menu item: name, description, numeric price and the original priceDisplay text.
  • ⭐ Reviews (optional) — toggle includeReviews to capture the recent customer reviews on each store page: reviewer, star rating, date and text.
  • 🎯 Direct store URLs — paste specific DoorDash store URLs into storeUrls to scrape exactly the restaurants you want, with or without a city list.
  • 🌎 Any US city — just type New York, NY, Los Angeles, CA, Chicago, IL, etc.
  • 🧾 Clean, analysis‑ready output — one row per store, numeric prices and ratings, de‑duplicated by store ID, with a searchLocation and scrapedAt timestamp on every record.
  • 🔐 Cloudflare handled for you — the actor solves DoorDash's Cloudflare challenge once with a stealth browser over a US residential IP, then reuses that session over fast HTTP. No setup beyond the default US residential proxy.
  • ⚡ Fast & reliable — after a one‑time ~6‑second Cloudflare solve, each city page is read as plain HTTP in 1–2 seconds; a leads‑only pull of 350 stores finishes in well under a minute.
  • 📤 Export anywhere — download as JSON, CSV, Excel, HTML or XML, or pull from the Apify API.

🎯 Use cases

  • Sales & lead‑gen teams building restaurant prospect lists (POS, delivery, marketing, insurance, supply) for a city or region.
  • Restaurant‑tech & aggregators enriching their catalogs with DoorDash ratings, cuisines, menus and geo‑coordinates.
  • Pricing & category managers benchmarking menu prices and delivery fees against competitors.
  • Market researchers & analysts sizing the food‑delivery market by cuisine, price tier or neighborhood.
  • Agencies & consultants delivering local‑market reports to restaurant clients.
  • Data journalists analyzing delivery economics, ratings or cuisine trends across US cities.
  • Ghost‑kitchen & franchise operators scouting demand and competition before opening in a new area.
  • Reputation / review analysts monitoring the recent reviews surfaced on store pages.

📥 Input

Enter at least one US city (or one or more store URLs). Everything else is optional.

FieldTypeDescription
locationarray of stringsUS cities as City, ST (e.g. New York, NY). Each returns up to ~50 restaurants. Leave empty (with no store URLs) to run a small New York demo.
storeUrlsarray of stringsOptional. Specific DoorDash store URLs (e.g. https://www.doordash.com/store/.../) to scrape directly. Works with or without the city list.
includeMenubooleanAlso scrape each store's full menu (item names, descriptions, prices). One extra request per store. Default false.
includeReviewsbooleanAlso scrape each store's customer reviews (reviewer, rating, date, text). Shares the request with menus if both are on. Default false.
maxStoresintegerMaximum stores to save across all cities (default 50). Raise it to pull multiple cities in one run.
proxyConfigurationobjectUS residential proxy required — DoorDash is US‑only + Cloudflare‑protected. Defaults to Apify Residential (US).

Example input

{
"location": ["New York, NY", "Los Angeles, CA", "Chicago, IL"],
"storeUrls": [],
"includeMenu": false,
"includeReviews": false,
"maxStores": 150,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Tip: Start with menus/reviews off to grab store leads for a whole city fast and cheap. Turn them on for a shortlist — each adds one page fetch per store (menus and reviews share the same fetch).


📤 Output

One row per store. Numbers are real numbers, prices are normalized, and records are de‑duplicated by storeId. Menu and reviews are populated only when their toggles are enabled — on a leads‑only run menu and reviews are null.

Example record (leads‑only, from a fresh run)

{
"storeId": "39641643",
"name": "Big Wong Restaurant",
"url": "https://www.doordash.com/store/big-wong-restaurant-new-york-39641643/",
"averageRating": 4.6,
"numRatings": 364,
"numRatingsDisplay": "300+",
"cuisines": ["Cantonese", "Chinese"],
"priceTier": 1,
"deliveryFee": "$0 delivery fee",
"etaMinutes": 33,
"distance": "0.9 mi",
"address": "67 Mott St, New York, NY 10013, USA",
"streetAddress": "67 Mott St",
"city": "New York",
"state": "NY",
"zipCode": null,
"latitude": 40.7161869853735,
"longitude": -73.99824502877891,
"logo": "https://img.cdn4dd.com/.../header.png",
"isSponsored": false,
"offersPickup": false,
"tags": [],
"popularItems": ["Combination of any 2 items over rice", "Pork & Shrimp Shu Mai", "Salted Pork with Thousand Year Egg"],
"phone": null,
"menu": null,
"reviews": null,
"searchLocation": "New York, NY",
"scrapedAt": "2026-11-02T00:21:31.216Z"
}

When includeMenu / includeReviews are enabled, the same record additionally carries:

{
"menu": [
{ "id": "41262867532", "name": "Fried Homemade Wonton (10pcs)", "description": "Crispy wontons with shrimp & pork…", "price": 10.95, "priceDisplay": "2 for $10.95" },
{ "id": "41262867999", "name": "Sliced Peking Duck (half)", "description": "Served with pancakes and scallions…", "price": 39.95, "priceDisplay": "$39.95" }
],
"reviews": [
{ "reviewer": "Amy L", "rating": 5, "date": "2026-06-19T14:47:08.482Z", "text": "The quality of the duck got a lot better…" }
]
}

Field reference

FieldDescription
storeIdDoorDash store ID (used for de‑duplication).
nameRestaurant name.
urlDoorDash store profile URL.
averageRatingAverage star rating (number).
numRatingsNumber of ratings (number, e.g. 364, 42874).
numRatingsDisplayRating count as DoorDash shows it (e.g. 300+, 42k+).
cuisinesArray of cuisine/category labels (e.g. ["Cantonese", "Chinese"]).
priceTierPrice tier 1–4 (= $–$$$$).
deliveryFeeDelivery fee as displayed (e.g. $0 delivery fee).
etaMinutesEstimated delivery time in minutes.
distanceDistance from the search location (e.g. 0.9 mi).
addressFull printable address — includes the ZIP code (e.g. 67 Mott St, New York, NY 10013, USA).
streetAddressStreet line only (present when available).
city / stateCity and state.
zipCodeSeparate ZIP field — DoorDash does not expose it on city‑list objects, so it is usually null; the ZIP is still inside address.
latitude / longitudeStore geo‑coordinates (number).
logoStore logo / header image URL.
isSponsoredtrue if the listing is a sponsored/ad placement.
offersPickuptrue if the store offers pickup.
tagsStore badges DoorDash shows (e.g. Top Rated) — an array, present when the listing has them (often empty on current city feeds).
popularItemsNames of popular menu items — present when DoorDash surfaces them (≈90% of city‑list rows).
phoneStore phone — present on some store pages when includeMenu/includeReviews reach them.
menuArray of { id, name, description, price, priceDisplay } — populated when includeMenu is on, otherwise null.
reviewsArray of { reviewer, rating, date, text } — populated when includeReviews is on, otherwise null.
searchLocationThe input city (or storeUrls) this record came from.
scrapedAtISO timestamp of the scrape.

Coverage notes (from a fresh 350‑store run). Core fields — storeId, name, url, averageRating, numRatings, cuisines, priceTier, deliveryFee, etaMinutes, distance, address, city, state, latitude, longitude, logo, isSponsored, offersPickup — populated on 100% of rows, with streetAddress at ~99% and popularItems at ~91%. tags, zipCode and phone are present when available — DoorDash doesn't attach badges, a separate ZIP, or a phone number to every city‑list store (the ZIP is still inside address). Prices are the store's current displayed prices (some shown as "2 for $X" — price is the dollar amount, priceDisplay keeps the original text). DoorDash shows only a handful of recent reviews per store page; the actor returns those.


🔁 Pagination & scale

Each DoorDash city page (/food-delivery/{city}-restaurants/) embeds its full restaurant list — up to ~50 restaurants per city — in a single Next.js document, so the actor reads them all in one request (there is no numbered "next page" to click on a city page). To scale beyond one city, add more cities to location and/or paste specific storeUrls: the actor iterates every input, de‑duplicates by storeId, and keeps going until it reaches your maxStores cap. In the verification run, 10 cities with maxStores: 350 returned exactly 350 unique stores (0 duplicates) — 50 from each of the first 7 cities, then it stopped the instant the cap was hit. Ten cities ≈ up to ~500 de‑duplicated stores, fifty cities ≈ thousands — you control the total with maxStores. When menus/reviews are enabled, each store adds one extra page fetch; leave them off for the fastest, cheapest city‑wide lead pulls.


⚙️ How to use

  1. Open the actor on Apify Console.
  2. Enter one or more US cities in location (e.g. New York, NY) — or paste DoorDash store URLs in storeUrls.
  3. (Optional) Turn on includeMenu and/or includeReviews for a shortlist.
  4. Set maxStores (raise it to pull several cities at once) and keep the default US residential proxy.
  5. Press Start, then download results as JSON, CSV, Excel, HTML or XML — or fetch them from the Apify API.
  6. Automate it: schedule runs (hourly/daily/weekly) and pipe output to Make, Zapier, Google Sheets or a webhook to keep a live DoorDash dataset.

💡 Tips

  • Leads first, enrichment later. Run a city with menus/reviews off to pull ~50 leads in seconds, then re‑run a shortlist of storeUrls with includeMenu on.
  • Menus and reviews share one fetch — enabling both costs the same page load as enabling one.
  • Use City, ST format. The actor slugifies your input into DoorDash's city URL; Los Angeles, CA works, a vague LA may not.
  • Scale by stacking cities. Add every metro you care about to location and raise maxStores — the actor de‑dupes by storeId automatically, so overlapping cities won't double‑count a restaurant.
  • Keep the US residential proxy. DoorDash blocks datacenter and non‑US traffic; the default proxy is required for the Cloudflare clearance to hold.
  • priceDisplay vs price. Use price for math and priceDisplay when you need the exact on‑screen text (e.g. "2 for $10.95").
  • Need the ZIP? It's embedded in the full address string even though the standalone zipCode field is usually null.

❓ FAQ

Is scraping DoorDash legal? This actor collects publicly available restaurant, menu and review information shown on DoorDash store and city pages. Scraping public data is generally permissible, but you are responsible for complying with DoorDash's Terms of Service and applicable laws (including privacy/CCPA and anti‑spam rules when contacting businesses). Use the output responsibly.

Do I need a DoorDash account, login or API key? No. There is no public DoorDash API — this scraper needs no account, login or key. Enter a city and run.

How many restaurants can I get, and how fast? About 50 restaurants per city, in seconds for leads‑only. A fresh verification run returned 350 de‑duplicated stores across 7 cities in ~35 seconds. Add more cities or store URLs and raise maxStores for more — a run can return hundreds to thousands of de‑duplicated stores.

Do I need a proxy? Yes — a US residential proxy (the default). DoorDash is US‑only and Cloudflare‑protected; the actor solves the challenge once (~6 seconds) with a stealth browser over a US residential IP and reuses that session over fast HTTP.

What export formats are supported? JSON, CSV, Excel, HTML and XML, plus the Apify API and dataset webhooks.

Can I get menus and reviews too? Yes — toggle includeMenu and/or includeReviews. Both read the same store page, so enabling both costs the same as one. On a leads‑only run menu and reviews stay null.

Why only a few reviews per store? DoorDash displays a handful of recent reviews on each store page; the actor returns those.

Can I scrape specific restaurants? Yes — paste their DoorDash URLs into storeUrls. This works with or without a city list, and the actor de‑dupes them against the city results by storeId.

How fresh is the data? Every record is scraped live when you run the actor and stamped with scrapedAt. Schedule runs to keep a continuously updated DoorDash dataset.

Can I filter by cuisine or price? The actor returns the full ~50‑store city feed with cuisines and priceTier on each row, so you can filter the output in your own tool, spreadsheet or dataset view.



Ready to scrape DoorDash?

Enter a US city, press Start, and export your DoorDash restaurants, menus, reviews and leads to JSON, CSV, Excel or API.


This actor collects publicly available restaurant, menu and review information. Use it responsibly and in line with DoorDash's Terms of Service and applicable laws (including privacy/CCPA and anti‑spam rules when contacting businesses). You are responsible for how you use the output.