DoorDash Menu Scraper avatar

DoorDash Menu Scraper

Pricing

from $1.49 / 1,000 menu items

Go to Apify Store
DoorDash Menu Scraper

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

Andrej Kiva

Maintained by Community

Actor 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 menusUS grocery storeUS weekly adEU leaflets
DoorDash Menu Scraper ◄── you are hereWalmart ScraperAldi Weekly Ad ScraperLidl 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

FieldRequiredDescription
chainsOne of chains or startUrlsChain slug (chipotle-115) or a business menu URL
startUrlsOne of chains or startUrlsBusiness menu URLs. Location /store/ links are skipped
itemContainsNoCase-insensitive filter on the item name
maxItemsNoStop 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

FieldDescription
chainNameChain name from the menu page
chainSlugBusiness slug
sectionMenu section
itemNameItem name
descriptionCard description, when the page has one
priceEstimated price in USD
priceTextPrice label from the card
currencyUSD
menuUrlBusiness menu URL
scrapedAtUTC 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.