Kroger API

The shelf price, sale, stock and aisle of any product at any Kroger-family store

Kroger prices are set per store, so this API always answers for one store.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Kroger endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
K
/kroger/v1

3 active endpoints, on 2 and 3 credit tiers.

  • POST/kroger/v1/stores
  • POST/kroger/v1/search
  • POST/kroger/v1/product

What Kroger endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

stores

2 cr

Kroger-family stores near a US ZIP code (up to 50, nearest first) or one store by location_id.

required
—
optional
zip, location_id, banner, include_fuel

search

3 cr

Search one Kroger-family store's catalogue.

required
query
optional
location_id, zip, banner, brand, on_sale, nutrition

product

3 cr

One product at one Kroger-family store by UPC.

required
—
optional
upc, url, location_id, zip, banner

Every parameter, every allowed value →

Kroger API

5 of 3 endpoints, ready to run

View docs ↗

Milk prices and stock at one Cincinnati Kroger

3 credits1 required · 1 optional
POST/kroger/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Kroger API works

Kroger is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 491 engines.

02
Call
POST /kroger/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

From a ZIP code to a priced, stocked shopping list

Pick the store, search its catalogue, then read the products that matter in full.

01stores?zip=45202
GET/kroger/v1/stores?zip=45202

Nearby grocery stores, nearest first, with location_id, banner, address, hours and ways to shop.

02search?query=milk&location_id=01400929
GET/kroger/v1/search?query=milk&location_id=01400929

The first 24 products with regular and sale price, multi-buy deals, unit price, stock count, aisle and a sponsored flag, plus Kroger's own total.

03product?upc=0001111041700&location_id=01400929
GET/kroger/v1/product?upc=0001111041700&location_id=01400929

The same store price plus every aisle location, nutrition panel, ingredients, allergens and all images.

A dated, store-specific price and stock feed for Kroger-family products, with deals, aisle locations and nutrition.

request
curl -X POST https://api.reefapi.com/kroger/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"milk","location_id":"01400929"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "kroger",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

What a Kroger field actually contains

Fields that read differently from how they look. Every row was measured against live Kroger pages on 2026-10-14.

FieldWhat it holds
upcKroger's 13-digit product number without check digit (0001111041700). Pass it unchanged to product; a printed 12-digit UPC-A or a 14-digit GTIN with a valid check digit is converted. Search to product returned the same UPC and the same prices on 14 of 14 products.
regular_price, sale_priceThe shelf price at the store in `store`, in US dollars. sale_price is only set when it is really below the regular price; discount_pct is computed from the two. On 143 products across 6 searches the price matched the price Kroger prints on its own product card 141 times; the other 2 were bananas, whose card shows a per-pound price.
multibuyDeals that need more than one unit: quantity, total, per_unit and the deal text. "10 For $12.00" means 1.20 each. On a "Buy 3 For $15.00" deal Kroger's single price stays the regular one, so must_buy is true and sale_price stays empty.
price_is_estimate, weight_priceProduce and meat sold by weight: the price is Kroger's "about $1.45 each" estimate and weight_price holds the real price per pound ($0.69/lb).
available_to_sell, stock_levelThe store's sellable count as Kroger publishes it (for example 195) and its level: HIGH, LOW or TEMPORARILY_OUT_OF_STOCK. Kroger does not publish a count for every product: filled on 183 of 240 rows, never on beer, rarely on soda.
aisleWhere the product sits in that store: aisle name and number, side, bay and shelf. product lists every location when there are several. Filled on 238 of 240 rows.
sponsoredTrue on paid placements Kroger mixes into the results: 46 of 240 rows, between 0 and 9 per search.
totalKroger's own count of matches at that store. It stops at 1,000 (total_is_capped), and one call returns the first 24 results.

The same product costs different amounts in different stores: a gallon of Kroger 2% milk was $2.99 in a Cincinnati store and $3.19 in Rolla, Missouri, at the same minute, and the number of matching products differed too (929 against 603 for "milk"). Always pass the store you care about; the response names the store it priced.

Kroger coverage, measured

Every number below was read from live Kroger responses on 2026-10-14, in two consecutive runs of 53 calls each.

Banners

Kroger, Ralphs, Fred Meyer, King Soopers, Fry's, Smith's, QFC, Harris Teeter, Dillons, Baker's, City Market, Gerbes, JayC, Pay Less, Mariano's, Metro Market, Pick 'n Save, Foods Co and Food 4 Less: 19 banners, all answering in the same format.

Filters that bite

"milk" at one Cincinnati store: 929 products → brand Kroger 66, on sale 342, organic 88, gluten free 391.

Field fill

On 240 search rows across 10 categories: UPC, title, size, image, department and ways to shop 240/240; regular price 238; aisle 238; brand 229; unit price 216 (by-weight produce has a per-pound price instead); stock count 183; sale price 91; dietary tags 91.

Price accuracy

The price matched Kroger's own product card on 141 of 143 products; the crossed-out regular price on 140 of 143 (3 cards show it one cent lower than Kroger's price record).

Same store, any day

With the store fixed, four separate reads of the same 24 products gave identical prices and stock.

Limits

One store per call; the first 24 results per search, no paging or sorting; total stops at 1,000; no digital coupons; stock count not published for every product.

What people build with Kroger

The jobs this data is most often used for.

3

endpoints

2/3

credits per call

01

Track the shelf price and sale price of a basket of UPCs at the stores you care about, week by week.

02

Compare one product's price across Kroger, Ralphs, Fred Meyer and King Soopers stores in different cities.

03

Monitor which brands run sales and multi-buy deals, and when those deals end.

04

Build store-aware shopping lists with aisle, shelf and stock level for each item.

What Kroger data costs

The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 491 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/kroger/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"milk","location_id":"01400929"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/kroger/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "milk",
  "location_id": "01400929"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Kroger.

Get a free key →
Do I need a Kroger account or loyalty card?▾

No. Everything is read logged out, and the prices are the ones Kroger shows a visitor who picked that store, sale prices included.

How do I choose the store?▾

Call stores with a ZIP code and pass a location_id to search or product, or pass zip directly and the nearest grocery store is used and returned in store. For ZIP 45202 the source listed 50 locations, 18 of them grocery stores; fuel centers are left out unless include_fuel=true.

Does it cover Ralphs, Fred Meyer, King Soopers and the other banners?▾

Yes, 19 banners in total. A store id of any banner works, and the store block tells you which banner it is. On 2026-10-14 a Ralphs store in Los Angeles matched 856 products for "milk", a King Soopers store in Denver 924.

Which filters are there?▾

brand, on_sale and nutrition, each checked against the unfiltered count at the same store in the same run: "milk" 929, brand Kroger 66, on sale 342, organic 88, gluten free 391. brand is case-sensitive at Kroger: use the spelling from a row's brand.

Can I page through all results or sort by price?▾

No. One search returns the first 24 results in Kroger's own order, with the total count. Narrow with a more specific query or the filters to reach other products.

Do you return digital coupons?▾

No. Coupons are not part of what Kroger shows logged out. Sale and multi-buy prices are returned; the on_sale filter covers everything Kroger marks as a saving.

How fresh is the data?▾

Every call reads Kroger live; nothing is cached. In our two runs a search took 4.3 and 5.4 seconds at the median, a product 3.0 and 3.1 seconds, a store lookup 1.0 and 1.7 seconds.

Is the nutrition label included?▾

Yes, on product: serving size, servings per container, each nutrient with its value and unit, ingredients and allergens, as Kroger publishes them.

What is the Kroger API?▾

Kroger API is a ReefAPI endpoint group for store-level shelf prices, sales, multi-buy deals, stock and aisle for kroger and its 18 us grocery banners. It returns live JSON through POST requests under /kroger/v1.

Is the Kroger API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. Kroger calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Kroger login or account?▾

No login to Kroger is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Kroger data?▾

The page example is captured from a live stores call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Kroger API use?▾

Kroger actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Kroger from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call kroger actions with the same key, credit pool and JSON envelope used by normal REST requests.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 490 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-14.