Instacart API endpoint
Finds Instacart retailer storefronts (grocery stores, warehouse clubs, and other partner retailers) serving a US postal code, each with the identifiers needed to look up its items and search suggestions. Public data sourced from Instacart's own store-discovery API.
/instacart/storesQuery parameters:
postal_code (required) — US postal/ZIP code to search near.Notable response behavior:
shop_id, store_slug (the store's slug field), and
retailer_location_id from a result are the values
GET /instacart/item and
GET /instacart/search need.accepts_ebt, saver_store, and delivery_eta are best-effort
enrichment fetched after the base store list. A failure fetching either
does not fail the request — those fields are simply omitted for the
affected stores.| Field | Filled in, of 136 checked | Values in the sample |
|---|---|---|
| shop_id | 136 | |
| retailer_location_id | 136 | |
| retailer_id | 136 | |
| name | 136 | “Safeway” and 122 other values |
| slug | 136 | |
| retailer_type | 136 | “Grocery - Traditional” and 31 other values |
| service_type | 136 | delivery (123), pickup (13) |
| logo_url | 136 | instacart.com |
| accepts_ebt | 25 | true in 25 of 25 |
| delivery_eta | 131 | “25 min” and 19 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| postal_code | string | Yes | US postal/ZIP code to search near | 94105 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/instacart/stores?postal_code=94105" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"postal_code": "94105",
"stores": [
{
"shop_id": "9501",
"retailer_location_id": "53",
"retailer_id": "1",
"name": "Safeway",
"slug": "safeway",
"retailer_type": "Grocery - Traditional",
"service_type": "delivery",
"logo_url": "https://www.instacart.com/assets/domains/warehouse/logo/1/3b7ef435-1d5a-463e-ae62-e4fa2aaab32b.png",
"accepts_ebt": true,
"delivery_eta": "By 4:45am"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/instacart.storesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | instacart.StoreSearchResponse | No | ||||
| data.postal_code | string | No | ||||
| data.stores | array | No | ||||
| data.stores[].accepts_ebt | boolean | No | AcceptsEBT, SaverStore, and DeliveryETA are best-effort enrichment: separate upstream calls (ShopTags, GetAccurateVisitorRetailerEtas) made after the base store list, matched back by shop/retailer id. A failure fetching either leaves these fields at their zero value rather than failing the whole Stores response -- see Service.Stores. | |||
| data.stores[].delivery_eta | string | No | ||||
| data.stores[].logo_url | string | No | ||||
| data.stores[].name | string | No | ||||
| data.stores[].retailer_id | string | No | ||||
| data.stores[].retailer_location_id | string | No | ||||
| data.stores[].retailer_type | string | No | ||||
| data.stores[].saver_store | boolean | No | ||||
| data.stores[].service_type | string | No | ||||
| data.stores[].shop_id | string | No | ||||
| data.stores[].slug | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/instacart/stores?postal_code=94105" \
-H "x-api-key: $CRAWLORA_API_KEY"