Whole Foods API
Whole Foods Market product data as structured JSON, priced at the store you choose: search, categories and deals with regular, sale and Prime member prices, the weekly sales flyer, product detail with nutrition and the online price, and a store locator by ZIP.
50 free credits on signup. No card, no Whole Foods account.
{ "data": { "query": "milk", "category": null, "store_id": "10160", "sort": "relevance", "on_sale": false, "diet": null, "offset": 0, "limit": 60, "total_results": 504, "count": 60, "products": [ { "position": 1, "asin": "B078WVT2BC", "slug": "elmhurst-unsweetened-hazelnut-milked-32-fz-b078wvt2bc", "name": "Unsweetened Hazelnut Milked, 32 FZ", "brand": "Elmhurst", "image": "https://m.media-amazon.com/images/S/assets.wholefoodsmarket.com/PIE/product/41Z7pgsEWEL.jpg", "regular_price": 7.29, "sale_price": null, "sale_quantity": null, "prime_price": null, "prime_quantity": null, "sale_start_date": null, "sale_end_date": null, "price_unit": null, "on_sale": false, "is_local": true, "store_id": "10160", "url": "https://www.wholefoodsmarket.com/grocery/product/elmhurst-unsweetened-hazelnut-milked-32-fz-b078wvt2bc" }, { "position": 2, "asin": "B082VVT75S", "slug": "elmhurst-unsweetened-oat-milk-32-fz-b082vvt75s", "name": "Unsweetened Oat Milk, 32 FZ", "brand": "Elmhurst", "image": "https://m.media-amazon.com/images/S/assets.wholefoodsmarket.com/PIE/product/41W8VdoCfGL.jpg", "regular_price": 7.29, "sale_price": null, "sale_quantity": null, "prime_price": null, "prime_quantity": null, "sale_start_date": null, "sale_end_date": null, "price_unit": null, "on_sale": false, "is_local": true, "store_id": "10160", "url": "https://www.wholefoodsmarket.com/grocery/product/elmhurst-unsweetened-oat-milk-32-fz-b082vvt75s" } ] }, "response_time": 853}Live call against the real endpoint at store 10160 (Columbus Circle, New York), in-store prices. 3 free runs, then it's your own key.
What is the Scavio Whole Foods API?
The Scavio Whole Foods API is a REST API that returns Whole Foods Market data as structured JSON for the store you pick. Whole Foods has no public product API. Its 7 POST endpoints cover search, categories, deals, the weekly flyer, product detail with nutrition, and store lookup, at 1 credit per call.
- 7
- endpoints, all live in production
- 1
- credit per call, every endpoint
- 3
- prices per item: regular, sale and Prime
The Whole Foods data buyers actually need
What it costs at one store, what is on sale this week, and what the Prime price is.
Store-level shelf prices
POST /api/v1/wholefoods/searchSearch Whole Foods at the store you pick: each result has that store's regular price, sale price and Prime member price in dollars. Our Columbus Circle capture priced Elmhurst Unsweetened Hazelnut Milked, 32 FZ, at $7.29.
Every sale item, with Prime prices
POST /api/v1/wholefoods/dealsAll on-sale items at one store with sale start and end dates and multi-buys spelled out: Boulder Canyon chips were $4.69 each, 3 for $12.23 on sale and 3 for $11.01 with Prime. Store 10160 had 2,022 items on sale.
The weekly sales flyer
POST /api/v1/wholefoods/sales-flyerThe store's current flyer as JSON: 45 promotions at Columbus Circle, such as Organic Honeycrisp Apples at $3.99/lb, $3.32/lb on sale, $2.99/lb with Prime, each with the ASINs it covers.
Shelf price vs online price
POST /api/v1/wholefoods/productProduct detail returns the store's in-store price and its online delivery and pickup price as separate blocks, plus ingredients and nutrition facts. The same hazelnut milk was $7.29 on the shelf and $7.49 online.
All 7 Whole Foods API endpoints
Every route is a POST, returns JSON, and takes the same API key. 1 credit per successful call.
| Endpoint | Returns | Credits |
|---|---|---|
Search/api/v1/wholefoods/search | Search at one store, up to 60 per page: the store's regular, sale and Prime member price with sale dates, ASIN, brand, image, on-sale and local flags, plus category, featured and diet facets | 1 |
Category/api/v1/wholefoods/category | Browse one category (or the whole store) at one store with six sorts and on-sale and diet filters: breadcrumb, total results and the same in-store prices per product | 1 |
Deals/api/v1/wholefoods/deals | Every item on sale at one store, store-wide or in one category: regular, sale and Prime price, multi-buy quantities and sale start and end dates | 1 |
Product detail/api/v1/wholefoods/product | One product by ASIN, URL or slug: ingredients, nutrition facts, diets, SNAP EBT eligibility and images, plus the store's in-store price and its online price as separate blocks | 1 |
Store locator/api/v1/wholefoods/stores | Stores near a ZIP, nearest first: store_id, address, phone, coordinates, distance in miles and seven days of in-store and pickup hours | 1 |
Store details/api/v1/wholefoods/store | One store by id: name, status, Prime eligibility, opening date, address, coordinates, time zone and its store page and flyer URLs | 1 |
Weekly sales flyer/api/v1/wholefoods/sales-flyer | The store's current weekly flyer: each promotion's product, brand, terms, regular, sale and Prime price as printed, dates, rank and the ASINs it covers | 1 |
50 free credits on signup covers 50 Whole Foods calls. See plans
Find a store, then search and price it
The stores call turns a ZIP into store ids; search returns that store's regular, sale and Prime prices. The response on the right is a real capture.
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# Nearest Whole Foods stores to a ZIP - 1 credit
stores = client.whole_foods.stores(zip="10019")["data"]["stores"]
store_id = stores[0]["store_id"]
# Search at that store: regular, sale and Prime prices - 1 credit
res = client.whole_foods.search(query="milk", store_id=store_id)["data"]
for p in res["products"]:
print(p["asin"], p["name"], p["regular_price"], p["sale_price"], p["prime_price"])
# Shelf price vs online price for one product - 1 credit
p = client.whole_foods.product(asin=res["products"][0]["asin"], store_id=store_id)["data"]
print(p["in_store"], p["online"]){
"data": {
"query": "milk",
"category": null,
"store_id": "10160",
"sort": "relevance",
"on_sale": false,
"diet": null,
"offset": 0,
"limit": 60,
"total_results": 504,
"count": 60,
"products": [
{
"position": 1,
"asin": "B078WVT2BC",
"slug": "elmhurst-unsweetened-hazelnut-milked-32-fz-b078wvt2bc",
"name": "Unsweetened Hazelnut Milked, 32 FZ",
"brand": "Elmhurst",
"image": "https://m.media-amazon.com/images/S/assets.wholefoodsmarket.com/PIE/product/41Z7pgsEWEL.jpg",
"regular_price": 7.29,
"sale_price": null,
"sale_quantity": null,
"prime_price": null,
"prime_quantity": null,
"sale_start_date": null,
"sale_end_date": null,
"price_unit": null,
"on_sale": false,
"is_local": true,
"store_id": "10160",
"url": "https://www.wholefoodsmarket.com/grocery/product/elmhurst-unsweetened-hazelnut-milked-32-fz-b078wvt2bc"
},
{
"position": 2,
"asin": "B082VVT75S",
"slug": "elmhurst-unsweetened-oat-milk-32-fz-b082vvt75s",
"name": "Unsweetened Oat Milk, 32 FZ",
"brand": "Elmhurst",
"image": "https://m.media-amazon.com/images/S/assets.wholefoodsmarket.com/PIE/product/41W8VdoCfGL.jpg",
"regular_price": 7.29,
"sale_price": null,
"sale_quantity": null,
"prime_price": null,
"prime_quantity": null,
"sale_start_date": null,
"sale_end_date": null,
"price_unit": null,
"on_sale": false,
"is_local": true,
"store_id": "10160",
"url": "https://www.wholefoodsmarket.com/grocery/product/elmhurst-unsweetened-oat-milk-32-fz-b082vvt75s"
}
]
},
"response_time": 853
}Why not the official Whole Foods API?
Whole Foods Market has no public product API. Its official data exchange is supplier EDI only.
Whole Foods, without an API
- No public product API or self-serve developer key
- The official data channel is supplier EDI only
- Prices are set per store, with separate regular, sale and Prime member prices
- Shelf and online prices for the same item can differ
Scavio Whole Foods API
- One API key, issued at signup, with no Whole Foods or Amazon account
- Any store's regular, sale and Prime prices by store_id
- Every sale item and the weekly flyer per store
- In-store and online price as separate, labelled fields
- Same JSON envelope as every other Scavio platform
Scavio returns publicly available data only, and never signs in as a Whole Foods or Amazon customer.
What developers build with it
Grocery price comparison
Put Whole Foods shelf prices next to Kroger, HEB, ALDI and Walmart for the same basket, store by store, on one API key.
search + Kroger + HEB + ALDIPrime deal trackers
Track every sale item at a store with its regular, sale and Prime member price and sale end date, and alert when a product goes on sale.
deals + search (on_sale)Weekly flyer apps
Turn each store's weekly sales flyer into structured promotions with dates, terms and the ASINs they cover.
sales-flyer + productNutrition and diet filters
Filter by vegan, gluten-free, organic, dairy-free or vegetarian, then read ingredients, nutrition facts and SNAP EBT eligibility.
search (diet) + productIn-store vs online pricing research
Compare the shelf price with the delivery and pickup price for the same item at the same store, across stores and regions.
product (in_store vs online)How to get Whole Foods data as JSON
- 1
Get an API key
Sign up for a Scavio account and copy your key from the dashboard. You get 50 credits free on signup, with no card required and no Amazon or Whole Foods account.
- 2
Pick a store
Send {"zip": "10019"} to https://api.scavio.dev/api/v1/wholefoods/stores with an Authorization: Bearer header. Each store comes back with its 5-digit store_id, address, distance and hours.
- 3
Search and price at that store
Pass the store_id with a query to /api/v1/wholefoods/search, or to deals and sales-flyer for that store's sales. Use a result's asin with /api/v1/wholefoods/product for nutrition and the online price.
Whole Foods API FAQ
Does Whole Foods have a public API?
+
No. Whole Foods Market has no public product API; its official data exchange is supplier EDI only. The Scavio Whole Foods API fills that gap with 7 POST endpoints that return wholefoodsmarket.com data as JSON: search, category, deals, product, store locator, store details and the weekly sales flyer.
What is the Scavio Whole Foods API?
+
It is a REST API that returns public Whole Foods Market product, price, store and flyer data as structured JSON, priced at the store you choose. Every endpoint costs 1 credit per call.
Are Whole Foods prices the same at every store?
+
No. Whole Foods prices are set per store, so search, category and deals are priced at one store: pass a 5-digit store_id, or the API uses store 10145 (Lamar, Austin TX). In our capture at store 10160 (Columbus Circle, New York), Elmhurst Unsweetened Hazelnut Milked, 32 FZ, was $7.29.
Does it return Prime member prices?
+
Yes. Every product row carries regular_price, sale_price and prime_price, the Prime member price, with sale_start_date and sale_end_date. sale_price and prime_price are null when the store has no sale or Prime price on the item.
How are multi-buy deals shown?
+
As a total plus a quantity. sale_price 12.23 with sale_quantity 3 means 3 for $12.23; prime_quantity works the same way for prime_price. price_unit lb means the price is per pound.
Why do the in-store and online prices differ?
+
Whole Foods prices the shelf and online orders separately. The product endpoint returns both for one store as separately labelled blocks: in_store (shelf regular, sale and Prime price) and online (delivery and pickup price, unit price and availability). In our capture the same hazelnut milk was $7.29 on the shelf and $7.49 online.
How do I find a Whole Foods store_id?
+
POST a ZIP code to /api/v1/wholefoods/stores. It returns stores nearest first within 15 miles, widening to 50, each with store_id, name, address, phone, coordinates, distance and seven days of hours. ZIP 10019 returned 29 stores, the nearest 0.42 miles away.
Can I get the Whole Foods weekly sales flyer?
+
Yes. /api/v1/wholefoods/sales-flyer returns a store's current flyer: each promotion's product, brand, headline, terms, regular, sale and Prime price, start and end dates, rank and the ASINs it covers. Flyer prices are text as printed, such as "$3.99/lb" or "44% off". For numeric sale prices, use deals.
Does the API return stock levels?
+
No. Whole Foods does not publish per-store unit counts, so there is no quantity or stock level. A product appears in search, category and deals when that store's catalog carries it, and the product endpoint's online.availability is the online offer's status.
Does it return ratings, reviews or UPCs?
+
No. Whole Foods shows no product ratings, reviews or UPCs, so the API returns none. The product id is the ASIN, which every search result carries.
Can I get ingredients and nutrition facts?
+
Yes, from /api/v1/wholefoods/product: ingredients, a nutrition panel with calories, serving size and every nutrient with its daily value, diets such as vegan or gluten_free, SNAP EBT eligibility and images.
How can I sort and filter results?
+
Search sorts by relevance (the default) or price, ascending or descending, and nothing else. Category and deals add featured, popular and brand A-Z or Z-A. All three filter by diet (vegan, gluten-free, organic, dairy-free, vegetarian), and search and category also take on_sale. Up to 60 products per page; page with offset.
What are the limitations?
+
Prices are per store, so results are only as local as the store_id you pass (default 10145, Austin TX). In-store and online prices can differ. There are no ratings, reviews, UPCs or per-store unit counts, only presence in the store's catalog. Search sorts only by relevance or price. Flyer prices are display text. The product id is the ASIN.
How much does a Whole Foods request cost?
+
Every Whole Foods endpoint costs 1 credit per successful call. Errors such as an unknown product, store or category (404) or a temporary outage (502) are not charged. New accounts get 50 free credits on signup, one time, with no card required. Paid plans start at $30 per month for 7,000 credits.
How fresh is the data?
+
Every request fetches live from Whole Foods Market at the moment you call it, and nothing is cached. Each response carries fetched_at, the time the data was retrieved.
Is using Whole Foods data legal?
+
Scavio returns publicly available Whole Foods Market product data and does not access accounts or order history. You remain responsible for how you use the data, including compliance with Whole Foods' terms. Talk to your own counsel for your specific use case.
Explore more of Scavio
Whole Foods API docs
All 7 endpoints with params and real responses.
Kroger API
Grocery prices and promos across Kroger banners.
HEB API
Grocery prices by store, nutrition facts, SNAP eligibility and store finder.
ALDI API
ALDI US store prices, stock and aisle, ingredients and allergens.
Amazon API
Search, product detail by ASIN and every seller offer.
Walmart API
Search, product, reviews and store-level pricing.
Costco API
Warehouse prices and stock, the coupon book and clearance.
Target API
Search, categories, detail and reviews.
Try the Whole Foods API free
50 free credits on signup, no card. Your first request is a POST with a product name and a store id in it.