DoorDash API endpoint
Searches the Android mobile guest catalog for pickup restaurants near a location and supports optional result filters. No DoorDash account or caller-supplied token is required.
/doordash/searchQuery parameters:
query (required): restaurant, cuisine, or dish text, up to 200 characters.latitude and longitude (required): consumer location.tag: exact cuisine or store tag, compared case-insensitively.dashPassOnly: keep only DashPass-eligible stores.asapOnly: keep only stores currently available ASAP.pickupOnly: keep only pickup-enabled stores.maxDistanceMiles: maximum displayed distance from 0 through 100 miles.This endpoint is backed by DoorDash's own anonymous mobile autocomplete experience, so it behaves like a type-ahead lookup rather than a full catalog search: results are ranked by proximity to the supplied coordinate and capped by the upstream at roughly five stores per query. It is not paginated and is not a comprehensive listing — a store missing from the response is not evidence that the store is absent from DoorDash.
Results are not pickup-only. The upstream request is made in a pickup context, but the response routinely includes stores whose pickupAvailable is false (verified live: a starbucks query returned five stores, four of them pickupAvailable: false). Pass pickupOnly=true to restrict the response to pickup-capable stores — the same query with that filter returned one store. Do not assume the unfiltered result set is pickup-capable.
It returns store IDs, names, links, images, tags, availability flags, distance, and address data. An empty results array is a valid no-match response, and for a brand name it usually means that merchant is genuinely not in DoorDash's autocomplete index near that coordinate rather than that the query shape failed — brand-name queries do work (chipotle and starbucks both return their locations).
| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| storeId | 5 | 62,099 to 29,492,187, median 233,565 |
| name | 5 | “North Beach Pizza” and 3 other values |
| type | 5 | store in all 5 |
| url | 5 | doordash.com |
| coverImageUrl | 5 | img.cdn4dd.com |
| squareImageUrl | 5 | img.cdn4dd.com |
| tags | 5 | median 6 entries |
| asapAvailable | 5 | true in 5 of 5 |
| pickupAvailable | 5 | true in 5 of 5 |
| dashPassEligible | 5 | true in 5 of 5 |
| distance | 5 | “1.1 mi” and 4 other values |
| address | 5 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Restaurant, cuisine, or dish query | pizza | |
| latitude | number | Yes | Consumer latitude | 37.7825 | |
| longitude | number | Yes | Consumer longitude | -122.461 | |
| tag | string | No | Exact cuisine or store tag, case-insensitive | Pizza | |
| 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, from 0 to 100 | 5 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/doordash/search?query=pizza&latitude=37.7825&longitude=-122.461&dashPassOnly=true&asapOnly=true&pickupOnly=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "pizza",
"results": [
{
"storeId": "123",
"name": "Pizza Place",
"url": "https://www.doordash.com/store/pizza-place-123/",
"tags": [
"Pizza"
],
"asapAvailable": true,
"pickupAvailable": true,
"dashPassEligible": true,
"distance": "1.2 mi",
"address": {
"city": "San Francisco",
"region": "CA"
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/doordash.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | doordash.SearchResponse | No | ||||
| data.query | string | No | ||||
| data.results | array | No | ||||
| data.results[].address | doordash.SearchAddress | No | ||||
| data.results[].address.city | string | No | ||||
| data.results[].address.displayAddress | string | No | ||||
| data.results[].address.latitude | number | No | ||||
| data.results[].address.longitude | number | No | ||||
| data.results[].address.region | string | No | ||||
| data.results[].address.street | string | No | ||||
| data.results[].asapAvailable | boolean | No | ||||
| data.results[].coverImageUrl | string | No | ||||
| data.results[].dashPassEligible | boolean | No | ||||
| data.results[].distance | string | No | ||||
| data.results[].name | string | No | ||||
| data.results[].pickupAvailable | boolean | No | ||||
| data.results[].squareImageUrl | string | No | ||||
| data.results[].storeId | string | No | ||||
| data.results[].tags | array | No | ||||
| data.results[].type | string | No | ||||
| data.results[].url | 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?query=pizza&latitude=37.7825&longitude=-122.461&dashPassOnly=true&asapOnly=true&pickupOnly=true" \
-H "x-api-key: $CRAWLORA_API_KEY"