Instacart APIinstacart.com ↗
Access Instacart grocery data via API: find stores by ZIP code, search products with prices and ratings, and retrieve detailed product info across retailers.
What is the Instacart API?
The Instacart API covers 4 endpoints that return grocery store availability, product search results, and product details across US retailers. The search_products endpoint returns fields including price, price_per_unit, stock_status, rating, brand, and size for every matched item. Pair it with get_stores to discover which retailer slugs are active for a given ZIP code before querying inventory.
curl -X GET 'https://api.parse.bot/scraper/ebecec3c-fdc1-4630-86e1-74a57eb1e6b1/get_stores?postal_code=10001' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace instacart-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.instacart_api import Instacart, Store, Product, ProductDetails, ProductNotFound
client = Instacart()
# List available stores for a postal code
for store in client.stores.list(postal_code="10001"):
print(store.name, store.slug, store.delivery)
# Use a constructible Store to search products
costco = client.store(slug="costco")
for product in costco.products.search(query="organic eggs", postal_code="10001"):
print(product.name, product.price, product.available)
# Get detailed product information (retailer_slug pinned from parent store)
details = product.details(postal_code="10001")
print(details.name, details.category, details.in_stock)
Get available grocery stores and retailers for a specific US postal code. Returns a list of stores with their names, slugs, categories, and delivery/pickup availability. Use store slugs from the results to query other endpoints.
| Param | Type | Description |
|---|---|---|
| postal_coderequired | string | US postal/zip code to search for stores (e.g. '10001', '07094', '90210'). Leading zeros are preserved. |
{
"type": "object",
"fields": {
"stores": "array of store objects with shop_id, retailer_id, name, slug, type, categories, logo_url, delivery, and pickup fields",
"postal_code": "string, the postal code that was searched"
},
"sample": {
"data": {
"stores": [
{
"name": "Costco",
"slug": "costco",
"type": "Club/Warehouse Store",
"pickup": false,
"shop_id": "968",
"delivery": true,
"logo_url": "https://www.instacart.com/assets/domains/warehouse/logo/5/65f2304b-908e-4cd0-981d-0d4e4effa8de.png",
"categories": [
"Groceries",
"Wholesale"
],
"retailer_id": "5",
"retailer_location_id": "284"
}
],
"postal_code": "10001"
},
"status": "success"
}
}About the Instacart API
Store and Retailer Discovery
The get_stores endpoint accepts a US postal_code and returns an array of store objects, each with a shop_id, retailer_id, name, slug, type, categories, logo_url, and boolean flags for delivery and pickup availability. The slug field from this response is the primary key for all other endpoints — you pass it as retailer_slug to search products or fetch store details.
Product Search
The search_products endpoint takes a query string, a retailer_slug, and a postal_code. It returns a deduplicated list of product objects, each with id, product_id, name, brand, size, price, price_per_unit, stock_status, available, rating, and rating_co. An optional limit parameter caps how many results come back. Prices and availability are scoped to the specified postal code, so the same product may differ across regions.
Product Details
The get_product_details endpoint takes a product_id (numeric or full items_ prefixed format), a retailer_slug, and an optional postal_code. It returns name, brand, size, price, currency, in_stock, category, rating, images (array of URLs), and a url pointing to the product page on Instacart. This endpoint is the right call when you need richer data beyond what search results expose, such as category classification or multiple product images.
Store Detail Lookup
The get_store_details endpoint returns a single retailer's name, slug, type, shop_id, retailer_id, logo_url, categories, delivery_eta, and service_type for a given postal_code and retailer_slug. The delivery_eta field is nullable — not every retailer exposes an estimated delivery window for every ZIP code.
The Instacart API is a managed, monitored endpoint for instacart.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when instacart.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official instacart.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Compare unit prices across multiple retailers for the same product in a given ZIP code using
price_per_unitfromsearch_products - Build a store-finder tool that surfaces which retailers offer delivery vs. pickup in a neighborhood using the
deliveryandpickupflags fromget_stores - Monitor in-stock status for specific SKUs by polling
get_product_detailsand checking thein_stockfield - Aggregate product ratings across categories by combining
ratingfields fromsearch_productsresults at a given retailer - Display retailer logos, categories, and estimated delivery times in a grocery app using fields from
get_store_details - Identify which retailers carry a specific brand by searching
brandinsearch_productsacross multiple retailer slugs - Feed grocery product images and descriptions into a recipe or meal-planning app using
imagesandcategoryfromget_product_details
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Instacart have an official developer API?+
What does `search_products` return beyond basic name and price?+
brand, size, price, price_per_unit, stock_status, available (boolean), rating, and rating_co. Results are deduplicated by product_id, so you won't see the same item twice in a single response. Pricing and availability are scoped to the postal_code you supply.Is coverage limited to specific US regions or retailer types?+
get_stores response for a rural ZIP code will typically return fewer options than a dense urban one. There is no endpoint for Canadian or international Instacart markets at this time.Does the API return nutritional information or ingredient lists?+
get_product_details endpoint returns category, brand, size, price, images, and rating, but does not expose structured nutritional data or ingredient lists. You can fork this API on Parse and revise it to add an endpoint that returns those fields.