Kroger
Kroger regular and sale price, stock at one store, rating and review count, by UPC, about 29,000 UPCs per credit. Search by keyword, about 400,000 results per credit. Prices are those of one store, and the answer says which.
Kroger regular and sale price, stock at one store, rating and review count, by UPC, about 29,000 UPCs per credit. Search by keyword, about 400,000 results per credit. Prices are those of one store, and the answer says which.
At a glance
Property | Value |
|---|---|
|
|
Item id | The 13-digit UPC at the end of a Kroger product link, |
Marketplaces | Live: |
Tier |
|
Ids per call | 25. Each UPC is looked up on its own. |
Typical call | 5–30 s for 25 UPCs |
Search |
|
Prices belong to one store
Kroger prices each product for a store, and the store is the one Kroger picks for the request, near where the request is served from. Every answer reports it as kroger.store (locationId, banner, city, state). Two calls can be priced at two different stores, and so can differ. You cannot choose the store: a search can take a zip that steers the request to that area, which picks the region, not an exact store, so read kroger.store for the one that was priced.
Lookups cost more than search
A UPC lookup is a request of its own, so it costs more per product than most stores: about 29,000 per credit, against about 400,000 per credit for search results. To get prices for many products, search is the cheaper way (24 products per request, with price, stock and rating included). Keep UPC lookups for the products you already know.
Search returns 24 results and has no paging or sort
A search returns the 24 best matches. page and sort are refused. total_results is Kroger's own count for the query (it stops at 1,000). To see further, add brand with the exact brand name as a result's brand writes it (Horizon Organic; capital letters matter): each brand is another 24. A brand that matches nothing is an empty list.
Example
- cURL
- Python
- Node.js
curl -X POST "https://api.scrapelyserp.com/v1/products" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"platform":"kroger","ids":["0001600012254","0000000094011"]}'import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.post(
"https://api.scrapelyserp.com/v1/products",
headers=HEADERS,
json={"platform": "kroger", "ids": ["0001600012254", "0000000094011"]},
timeout=30,
)
r.raise_for_status()
data = r.json()
for p in data["results"]:
k = p.get("kroger") or {}
print(p["id"], p["status"], (p.get("price") or {}).get("amount"), (k.get("store") or {}).get("locationId"))const res = await fetch('https://api.scrapelyserp.com/v1/products', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ platform: 'kroger', ids: ['0001600012254', '0000000094011'] }),
signal: AbortSignal.timeout(30_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
for (const p of data.results) console.log(p.id, p.status, p.price?.amount, p.kroger?.store?.locationId);Full reference → POST /v1/products
Kroger fields
Besides the common fields, each result carries a kroger object.
Field | Description |
|---|---|
| The regular price of one unit, in dollars, at the store. |
| A sale at the store: |
|
|
| Kroger's own price-per-unit text ( |
|
|
| Kroger's pickup flag at the store. Delivery and in-store flags are not reported. |
| The store's stock level as Kroger writes it ( |
| Kroger's own average rating and number of reviews; |
| The brand ( |
| The store priced: |
| The product link and the front picture. See the note on links below. |
Not given | Nutrition, descriptions, shelf locations, coupons, and delivery prices. |
Product links
The url is the link Kroger gives for the product (…/p/<name>/<UPC>). Kroger's own pages block automated requests, so we did not open them: check a link in a browser.
Statuses on Kroger
not_found: Kroger lists no such UPC at the store that answered. A product that one store does not stock can be found when asked again from another.unavailable: no usable answer after retries. Not charged; ask again.