DoorDash API endpoint
Searches 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.
/doordash/search/itemsSearches menu items across nearby merchants for a location using the Android mobile guest flow. No DoorDash account, cookie, or caller-supplied DoorDash token is required; the service creates a short-lived guest session for the request.
query (required): dish or item search text, for example pizza.latitude (required): consumer latitude, for example 37.7825.longitude (required): consumer longitude, for example -122.461.tag (optional): cuisine or store tag used to narrow the candidate stores.dashPassOnly (optional): keep only DashPass-eligible stores.asapOnly (optional): keep only stores currently available ASAP.pickupOnly (optional): keep only pickup-enabled stores.maxDistanceMiles (optional): maximum displayed distance in miles.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.
| Field | Filled in, of 80 checked | Values in the sample |
|---|---|---|
| name | 80 | “North Beach Pizza” and 42 other values |
| price | 80 | “$24.15” and 20 other values |
| storeId | 80 | 62,099 to 29,492,187, median 62,100 |
| storeName | 80 | North Beach Pizza (45), Fresco Pizza & Shawarma (21), Himalayan Pizzas and Momo (11) and 1 more |
| distance | 80 | 3.2 mi (23), 1.1 mi (22), 2.3 mi (21) and 2 more |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Dish or item search text | pizza | |
| tag | string | No | Cuisine or store tag used to narrow candidate stores | Pizza | |
| dashPassOnly | boolean | No | Keep only DashPass-eligible stores | false | |
| asapOnly | boolean | No | Keep only stores currently available ASAP | false | |
| pickupOnly | boolean | No | Keep only pickup-enabled stores | false | |
| maxDistanceMiles | number | No | Maximum displayed distance in miles | 5 | |
| latitude | number | Yes | Consumer latitude | 37.7825 | |
| longitude | number | Yes | Consumer longitude | -122.461 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/doordash/search/items?query=pizza&dashPassOnly=true&asapOnly=true&pickupOnly=true&latitude=37.7825&longitude=-122.461" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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 |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
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=pizza&dashPassOnly=true&asapOnly=true&pickupOnly=true&latitude=37.7825&longitude=-122.461" \
-H "x-api-key: $CRAWLORA_API_KEY"