DoorDash Menu Scraper
Pricing
from $1.49 / 1,000 menu items
DoorDash Menu Scraper
Scrape DoorDash chain menus: item name, price, description, and section. Paste a business menu URL or a chain slug. JSON export for menu pricing research.
Pricing
from $1.49 / 1,000 menu items
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
DoorDash chain menu items — name, price, description, and section — from business menu pages. Independent tool, not affiliated with DoorDash.
Scrape a national chain menu when you need item names and the estimated price shown on the business menu. Paste a chain slug or a business menu URL. Each dataset row is one menu item. Location store pages, delivery fees, ETAs, and customer reviews are outside this Actor.
| Chain menus | US grocery store | US weekly ad | EU leaflets |
|---|---|---|---|
| DoorDash Menu Scraper ◄── you are here | Walmart Scraper | Aldi Weekly Ad Scraper | Lidl Weekly Offers Scraper |
When to use
- Build a chain menu database with item name, section, description, and price
- Compare estimated prices across a short list of chains
- Feed a pricing sheet or a research notebook from JSON
Location /store/ links are skipped. Those pages are a different product (one restaurant, local price, delivery fee). This Actor reads the chain business menu.
Key features
- Chain slug or business menu URL
- Item name, section, description, and USD price
- Optional item-name filter
- One row per menu item, deduped inside a section
- HTTP fetch, 256 MB, no browser
Prices on these pages are a national estimate. The same item can cost a different amount at a specific restaurant.
Input
| Field | Required | Description |
|---|---|---|
chains | One of chains or startUrls | Chain slug (chipotle-115) or a business menu URL |
startUrls | One of chains or startUrls | Business menu URLs. Location /store/ links are skipped |
itemContains | No | Case-insensitive filter on the item name |
maxItems | No | Stop after this many rows. Default 40, maximum 2000 |
Input example
{"chains": ["chipotle-115"],"maxItems": 40}
{"startUrls": [{ "url": "https://www.doordash.com/business/chipotle-115/menu/" }],"itemContains": "bowl","maxItems": 20}
Output
| Field | Description |
|---|---|
chainName | Chain name from the menu page |
chainSlug | Business slug |
section | Menu section |
itemName | Item name |
description | Card description, when the page has one |
price | Estimated price in USD |
priceText | Price label from the card |
currency | USD |
menuUrl | Business menu URL |
scrapedAt | UTC time the menu was parsed |
Output example
{"chainName": "Chipotle Mexican Grill","chainSlug": "chipotle-115","section": "Entree","itemName": "Burrito","description": "Your choice of freshly grilled meat or sofritas wrapped in a warm flour tortilla.","price": 11.65,"priceText": "$11.65","currency": "USD","menuUrl": "https://www.doordash.com/business/chipotle-115/menu/","scrapedAt": "2026-09-23T18:00:00+00:00"}
Use cases
- Menu audit — export every item and section for one chain
- Price snapshot — keep the estimated price next to the item name for a weekly check
- Assortment research — filter to bowls, drinks, or another name fragment
Integration examples
Replace APIFY_TOKEN with your Apify token. The Actor name is crawloop/doordash-menu-scraper.
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/doordash-menu-scraper").call({chains: ["chipotle-115"],maxItems: 40,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("crawloop/doordash-menu-scraper").call(run_input={"chains": ["chipotle-115"],"maxItems": 40,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL
curl "https://api.apify.com/v2/acts/crawloop~doordash-menu-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d "{\"chains\":[\"chipotle-115\"],\"maxItems\":40}"
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name.
Example prompts:
- "Run DoorDash Menu Scraper for chipotle-115 and return item name, section, and price as JSON"
- "Scrape the DoorDash business menu for mcdonalds-5579 and list drinks under $4"
- "Pull DoorDash chain menu items for chipotle-115, max 40 rows, and group them by section"
- "Chain DoorDash Menu Scraper for chipotle-115, then Walmart Scraper for the same items in ZIP 10001"
Suite next step
After chain menu prices, run Walmart Scraper for ZIP-local grocery and retail comps. For weekly circulars, use Aldi Weekly Ad Scraper in the US or Lidl Weekly Offers Scraper in Europe.
Related Actors
- DoorDash Menu Scraper ◄── you are here
- Walmart Scraper — ZIP-local Walmart prices and stock
- Aldi Weekly Ad Scraper — ALDI US weekly ad and ALDI Finds
- Lidl Weekly Offers Scraper — Lidl weekly leaflets
FAQ
Does this read a single restaurant's local price?
No. It reads the chain business menu. The price is the estimate on that page, not the checkout price at one address.
Can I paste a /store/ link?
The Actor skips location store URLs and does not open them.
What if the slug is wrong?
A slug that is not a business menu saves no rows for that chain. Other chains in the same run still continue.
How many chains per run?
Up to 15. maxItems caps the combined rows.