DoorDash Restaurant Scraper avatar

DoorDash Restaurant Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
DoorDash Restaurant Scraper

DoorDash Restaurant Scraper

Extract restaurant info + complete menus from DoorDash store pages like name, address, cuisine, breadcrumbs, FAQ, and full menu sections with item names, descriptions, and prices.

Pricing

from $5.00 / 1,000 results

Rating

5.0

(20)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

20

Bookmarked

4

Total users

1

Monthly active users

14 days ago

Last modified

Share

Extract restaurant info + complete menus from DoorDash store pages — restaurant name, address, city, cuisine breadcrumbs, FAQ, and full menu sections with item names, descriptions, and prices.

Features

  • 16 output fields per restaurant — flat schema with typed defaults (zero nulls)
  • Complete menu extraction — every section + item with name, description, and price
  • FAQ extraction — questions and answers about the restaurant
  • Breadcrumb extraction — cuisine type and neighborhood
  • Cloudflare bypass via Patchright Chromium + RESIDENTIAL US proxy (typically clears in 2–15 seconds)
  • Hardcoded RESIDENTIAL US proxy — required, applied automatically

Input

FieldTypeDescription
storeUrlsArrayDoorDash store URLs (e.g., https://www.doordash.com/store/15034)
maxItemsIntegerMaximum restaurants to scrape (default 10, max 100)

Example Input

{
"storeUrls": [
"https://www.doordash.com/store/15034",
"https://www.doordash.com/store/6422"
],
"maxItems": 10
}

Output

Each restaurant has 16 fields. All fields are always present — empty strings, zero, or empty array as typed defaults, never null.

Identity

FieldTypeDescription
storeIdStringDoorDash store ID (from URL)
storeNameStringRestaurant name
storeUrlStringStore page URL
titleStringPage title
descriptionStringMeta description

Location

FieldTypeDescription
addressStringStreet address
cityStringCity
stateStringState / region code

Categorization

FieldTypeDescription
breadcrumbsArrayPage breadcrumb names (e.g., ["Home", "Boston", "Burgers", "UBURGER"]) — last is restaurant, second-to-last is cuisine
FieldTypeDescription
menuSectionsArraySection names (e.g., ["Salads", "Burgers", "Drinks"])
menuSectionCountIntegerNumber of menu sections
menuItemsArrayFlat list of items: [{section, name, description, price}, ...]
menuItemCountIntegerTotal items across all sections

FAQ

FieldTypeDescription
faqArrayList of {question, answer} pairs from the FAQ section
faqCountIntegerNumber of FAQ entries

Metadata

FieldTypeDescription
scrapedAtStringISO 8601 scrape timestamp

Example Output

{
"storeId": "15034",
"storeName": "UBURGER",
"storeUrl": "https://www.doordash.com/store/15034",
"address": "636 Beacon Street",
"city": "Boston",
"state": "MA",
"breadcrumbs": ["Home", "Boston", "Burgers", "UBURGER"],
"menuSectionCount": 11,
"menuItemCount": 37,
"menuSections": ["Usalads", "Burgers", "Sandwiches", "Sides"],
"menuItems": [
{"section": "Usalads", "name": "Greek Salad", "description": "Romaine lettuce, cherry tomatoes, ...", "price": "$8.50"}
],
"faqCount": 3,
"faq": [
{"question": "How can I order from UBURGER on DoorDash?", "answer": "..."}
],
"scrapedAt": "2026-04-13T05:55:00+00:00"
}

FAQ

Q: Why doesn't this scrape user reviews? DoorDash removed user-facing reviews from store pages and now only shows aggregate ratings via menu items. The reference actor labeled "DoorDash Reviews Scraper" is misleading — there are no individual reviews to extract. This actor instead extracts everything DoorDash actually exposes: menu, address, FAQ, and breadcrumbs.

Q: Why is a RESIDENTIAL proxy required? DoorDash's www.doordash.com/store/* paths are protected by Cloudflare which blocks Apify datacenter IPs with 403 Just a moment.... A real Chrome browser (Patchright) on a US residential IP solves the Cloudflare challenge automatically in 2–15 seconds. The proxy is hardcoded and applied automatically — no configuration needed.

Q: How long does each restaurant take? Roughly 15–25 seconds per restaurant (Cloudflare solve + page load + JSON-LD parse). Limited by the browser session, not by network throughput.

Q: Can I get prices in dollars (not strings)? Prices are kept as strings ("$8.50") because DoorDash sometimes uses ranges or currency symbols. Cast to float in your downstream pipeline if you need numerics: float(price.replace("$", "").split("-")[0]).

Q: Will this work for all DoorDash stores? Yes for restaurants with a published menu schema. About 40% of DoorDash stores don't expose a Menu JSON-LD on their store page (closed restaurants, brand aggregators like ezCater, certain catering platforms). For those stores the scraper still returns full restaurant info, FAQ, breadcrumbs and address — but menuSections and menuItems come back as empty arrays. Convenience-store / grocery URLs (e.g., /store/cvs, /store/walgreens) have a different page structure and may return fewer fields.

Use Cases

  • Restaurant menu intelligence — track competitor pricing across markets
  • Cuisine analysis — group restaurants by breadcrumb cuisine tag
  • Market research — identify chains operating in specific cities
  • Menu engineering — see which items / sections are common across restaurants
  • Lead generation — find independent restaurants by city + cuisine