DoorDash API endpoint
Use Crawlora's DoorDash dish & item search API to extract supported public DoorDash data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/doordash/search/itemsSearches menu items across nearby merchants from the Android mobile guest experience. Nearby candidate stores are selected first, then their menus are read and every item whose name or description matches the query is returned with its parent store. At most five proximity-ranked stores are inspected per request, and a store whose menu cannot be read is skipped, so results are best-effort across that candidate set. An empty result array means no candidate store menu matched, not that no nearby merchant sells the item. No DoorDash account or caller-supplied token is required. Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Dish or item search text | ||
| tag | string | No | Cuisine or store tag used to narrow candidate stores | ||
| dashPassOnly | boolean | No | Keep only DashPass-eligible stores | ||
| asapOnly | boolean | No | Keep only stores currently available ASAP | ||
| pickupOnly | boolean | No | Keep only pickup-enabled stores | ||
| maxDistanceMiles | number | No | Maximum displayed distance in miles | ||
| latitude | number | Yes | Consumer latitude | ||
| longitude | number | Yes | Consumer longitude | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/doordash/search/items?query=coffee&dashPassOnly=true&asapOnly=true&pickupOnly=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
The query first selects nearby candidate stores, then each of those stores' menus is read and every item whose name or description contains the query text is returned with its parent store's identity and distance. Because candidate stores come from the same upstream-capped catalog that backs `/doordash/search`, at most five stores are inspected per request, ranked by proximity. A store whose menu cannot be read is skipped rather than failing the request, so results are best-effort across the candidate set. An empty `results` array means no nearby candidate store's menu matched the query; it is not evidence that no merchant nearby sells the item. `itemId` is not populated: DoorDash's anonymous menu surface exposes no stable per-item identifier. Use `name` together with `storeId` against `/doordash/store/{store_id}/item/{item_id}`. Missing required parameters return `400`. Example response: ```json {"code":200,"msg":"OK","data":{"query":"duck","results":[{"name":"Roasted Duck","description":"With duck sauce","price":"$22.99","storeId":"26282644","storeName":"Eats","distance":"1.2 mi"}]}} ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
{
"code": 200,
"msg": "OK",
"data": {
"query": "duck",
"results": [
{
"name": "Roasted Duck",
"description": "With duck sauce",
"price": "$22.99",
"storeId": "26282644",
"storeName": "Eats",
"distance": "1.2 mi"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/doordash.searchItemsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | doordash.SearchItemsResponse | No | ||||
| data.query | string | No | ||||
| data.results | array | No | ||||
| data.results[].description | string | No | ||||
| data.results[].distance | string | No | ||||
| data.results[].itemId | string | No | ||||
| data.results[].name | string | No | ||||
| data.results[].price | string | No | ||||
| data.results[].storeId | string | No | ||||
| data.results[].storeName | string | No | ||||
| msg | string | No | OK |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/doordash/search/items?query=coffee&dashPassOnly=true&asapOnly=true&pickupOnly=true" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms