Grocery price and promotion monitoring
Usa los endpoints de Kroger para convertir grocery price and promotion monitoring en solicitudes API repetibles con inputs documentados y respuestas JSON.
Turn Kroger's public grocery data into structured JSON — keyword search and category browse returning priced product cards with unit price, size, SNAP EBT eligibility and low-stock flags, faceted filtering on brand, dietary, flavor, scent, savings and price, bulk product detail for up to 50 items at a time carrying nutrition facts, ingredients, allergens, store-specific price and stock and the full rating histogram, customer reviews, search-refinement chips, digital coupons, and store detail. Credential-free.
Search Kroger groceries with facet filters, get product detail in bulk with nutrition and store pricing, and pull digital coupons as JSON.
Familias de endpoints
6
Parámetros documentados
48
Ejemplos
9
Snapshot en vivo del catálogo
Endpoints activos
9
Métodos
GET
Parámetros obligatorios
17
Referencias de esquema
9
{
"platform": "Kroger",
"endpoint": "kroger-search",
"method": "GET",
"path": "/kroger/search",
"auth": "apiKey"
}Casos de uso
Search Kroger groceries with facet filters, get product detail in bulk with nutrition and store pricing, and pull digital coupons as JSON.
Usa los endpoints de Kroger para convertir grocery price and promotion monitoring en solicitudes API repetibles con inputs documentados y respuestas JSON.
Usa los endpoints de Kroger para convertir product assortment and availability research en solicitudes API repetibles con inputs documentados y respuestas JSON.
Usa los endpoints de Kroger para convertir nutrition and dietary-attribute analysis en solicitudes API repetibles con inputs documentados y respuestas JSON.
Ejecución gestionada
Cada cifra de abajo se lee directamente del catálogo de endpoints en vivo de Kroger — 9 endpoints, 48 parámetros de solicitud documentados y 9 esquemas de respuesta publicados — el mismo catálogo contra el que corren Docs y Playground.
9 documented Kroger endpoints, grouped into 8 request families — Product, Category and Coupons, plus 5 more.
48 request parameters are documented across those Kroger endpoints, 17 of them required — the full input contract is public before you write any integration code.
9 of the 9 Kroger endpoints ship a recorded example response, and 9 carry a documented response schema — you can code against the real JSON before the first request.
Kroger endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
9 hosted MCP tools back the Kroger endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Mapa de cobertura
Estas tarjetas se generan a partir del catálogo de endpoints activo, así que la landing page refleja la misma superficie de API que usan Docs y Playground.
/kroger/product
/kroger/category
/kroger/coupons
/kroger/products
/kroger/related-tags
/kroger/search
Catálogo de endpoints
/kroger/searchSearches Kroger products by keyword and returns normalized product cards (price, unit price, brand, size, stock level) plus the facet groups Kroger offers for the query (brands, nutrition, savings, price range and more). Served from Kroger's own search JSON API with real upstream pagination; if that path is unavailable it falls back to parsing the rendered search page, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.
Notas de la respuesta
- **Filters and sort apply to the `json_api` path only.** When any of them is set and that path fails, the request returns an error instead of falling back to the rendered page — the HTML path cannot honor these filters, so returning its unfiltered results would be wrong. Unfiltered requests still fall back as before. - Each result's `upc` is usable directly as the `upc` query parameter to [`/kroger/product`](kroger-product.md). - For browsing a specific product category instead of keyword search, see [`/kroger/category`](kroger-category.md), which returns results in this same shape. - `total_count` reflects the number of results Kroger's own page reports as loaded, not necessarily every result matching the query — Kroger's search page loads results in batches behind a "Load More Results" control. - `source` reports which upstream path served the response: `json_api` (Kroger's own search API, the primary path) or `html` (the rendered-page fallback, used only when the JSON path is unavailable). - **Pagination is real on the `json_api` path** — it uses Kroger's own page offset/size, and `has_more` reports whether further pages exist. On the `html` fallback `has_more` is always `false` and paging past page 1 remains best-effort. - `facets` lists the refinement groups Kroger offers for the query (brands, nutrition, savings, price range and more), each value with its result count. Only populated on the `json_api` path. - `brand` and `stock_level` are populated on the `json_api` path only; the rendered result cards carry neither. - A missing `query` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "edward & sons", "page": 1, "total_count": 37, "products": [ { "upc": "0004318200391", "url": "https://www.kroger.com/p/edward-sons-not-chick-n-bouillon-cubes/0004318200391?fulfillment=PICKUP&searchType=default_search", "title": "Edward & Sons® Not-Chick'n Bouillon Cubes", "image_url": "https://www.kroger.com/product/images/medium/front/0004318200391", "price": 2.99, "currency": "USD", "unit_price": "$1.20/oz", "size": "2.5 oz", "snap_ebt_eligible": true, "low_stock": false } ] } } ```
Herramienta MCP kroger_search
/kroger/categoryBrowses a Kroger product category and returns normalized product cards plus facet groups, in the same shape as kroger-search. slug and category_id together identify the category (e.g. "pet" and "27" for kroger.com/pl/pet/27). Served from Kroger's own search JSON API using category_id as a taxonomy filter, with real upstream pagination; it falls back to parsing the rendered category page if that path is unavailable, and the source field reports which path answered. Facet filters and sort apply to the JSON path only: when any of them is set, a JSON-path failure returns an error rather than silently falling back to unfiltered results.
Notas de la respuesta
- **Filters and sort apply to the `json_api` path only.** When any of them is set and that path fails, the request returns an error instead of falling back to the rendered page — the HTML path cannot honor these filters, so returning its unfiltered results would be wrong. Unfiltered requests still fall back as before. - Each result's `upc` is usable directly as the `upc` query parameter to [`/kroger/product`](kroger-product.md). - `total_count` is Kroger's own count of matching products on the `json_api` path. On the `html` fallback it reflects only what that page reported as loaded. - `source`, `has_more`, `facets`, `brand` and `stock_level` behave exactly as documented for [`/kroger/search`](kroger-search.md) — the two endpoints share one implementation, with `category_id` sent as a taxonomy filter instead of a keyword query. - **Pagination is real on the `json_api` path**; on the `html` fallback it remains best-effort. - A missing `slug` or `category_id` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "slug": "mushrooms", "category_id": "0611200686", "page": 1, "total_count": 28, "products": [ { "upc": "0001111091487", "url": "https://www.kroger.com/p/sliced-white-mushrooms/0001111091487", "title": "Sliced White Mushrooms", "image_url": "https://www.kroger.com/product/images/medium/front/0001111091487", "price": 2.39, "currency": "USD", "size": "8 oz", "snap_ebt_eligible": true, "low_stock": false } ] } } ```
Herramienta MCP kroger_category
/kroger/productsReturns full normalized detail for up to 50 Kroger products in one call, from Kroger's own product API. Carries materially more than kroger-product: a nutrition-facts panel with ingredients, allergens and dietary flags; store-specific price and stock level; a full star-rating histogram; the merchandising hierarchy; and every image perspective. location_id scopes price and stock to one store.
Notas de la respuesta
- `price` reflects one store's regular price. `amount`/`currency` are the parsed form of Kroger's own `"USD 2.19"` price strings, with the display string kept in `display` and the unit price in `unit_price_text`. `seller_id`/`seller_name` identify the seller (Kroger itself, or a marketplace seller). - `inventory.stock_level` is Kroger's own coarse label (e.g. `HIGH`) and is passed through as-is rather than mapped to a fixed set. - `nutrition` is omitted entirely for products Kroger publishes no nutrition data for (non-food items). - Products the upstream returns with no usable identity are dropped rather than surfaced as blank entries, so `count` can be lower than the number of UPCs requested. Example response: ```json { "code": 200, "msg": "OK", "data": { "location_id": "03500917", "count": 1, "products": [ { "upc": "0007465324996", "name": "Jack's Pull-Apart Supreme Pizza Sticks", "brand": "Jack's", "size": "8 Ounces", "country_of_origin": "UNITED STATES", "url": "https://www.kroger.com/p/-/0007465324996", "image_url": "https://www.kroger.com/product/images/xlarge/front/0007465324996", "categories": ["Frozen"], "category": { "department": "FROZEN GROCERY", "commodity": "FROZEN HANDHELDS & SNACKS", "sub_commodity": "POCKETS" }, "alcohol": false, "price": { "amount": 2.19, "currency": "USD", "display": "$2.19", "unit_price_text": "$0.27/oz", "location_id": "03500917", "seller_id": "KR001", "seller_name": "Kroger" }, "inventory": {"location_id": "03500917", "available": 9, "stock_level": "HIGH"}, "rating": {"average": 4.35, "count": 101, "five_stars": 64, "four_stars": 21, "three_stars": 8, "two_stars": 3, "one_star": 5}, "nutrition": { "serving_size": "2 Sticks (113 g)", "servings_per_container": "2.0", "allergens": "Contains Wheat and Their Derivatives,Eggs and their derivates,Soybean", "organic": false, "non_gmo": false, "gluten_free": false, "kosher": false, "facts": [ {"name": "Sodium", "value": "620", "unit": "mg", "daily_value": "27"} ] } } ] } } ```
Herramienta MCP kroger_products
/kroger/productReturns normalized product detail for one Kroger item: title, description, image, brand, category trail, price/availability, and rating, sourced from the product page's own schema.org structured data.
Notas de la respuesta
- `offer.availability` is one of `in_stock`, `out_of_stock`, `limited_availability`, `preorder`, `discontinued`, `sold_out`, or `unknown`. - `brand`, `image_url`, `categories`, `offer`, `rating_value`, and `rating_count` are omitted when Kroger's own page does not carry them for a given product. - This endpoint does not support store-specific pricing — Kroger's product page has no confirmed store-selection query parameter; price/availability reflect Kroger's default/anonymous session for the item. - A `upc` that does not resolve to a real product returns `404`. - A missing `upc` returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "upc": "0064519402151", "url": "https://www.kroger.com/p/-/0064519402151", "title": "Bobbo SE3880240 Watermelon Gordo Birdhouse, 1", "description": "Songbird Essentials adds color whimsy to any garden with our beautifully detailed wooden Bird Houses...", "image_url": "https://www.kroger.com/product/images/medium/front/0064519402151", "categories": ["Pet", "Bird Care"], "offer": { "price": 35.02, "currency": "USD", "availability": "in_stock" } } } ```
Herramienta MCP kroger_product
/kroger/product/reviewsReturns one page of a Kroger product's customer reviews -- review text, star rating, recommendation flag, helpful-vote counts, and customer photo URLs -- alongside the product's full star histogram. Customer display names are deliberately not returned.
Notas de la respuesta
- Customer display names are deliberately **not** returned. This endpoint surfaces review content and its metrics only. - `rating` is the whole product's star histogram, not just the current page's — it stays constant across pages. - `photos` carries customer-submitted review images, one entry per available size. - A product with no reviews returns an empty `reviews` list with `total_count: 0` — a success, not an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "upc": "0007120200411", "page": 1, "page_size": 16, "average_rating": 4.64, "total_count": 293, "rating": {"average": 4.64, "count": 293, "five_stars": 225, "four_stars": 47, "three_stars": 0, "two_stars": 0, "one_star": 7}, "reviews": [ { "id": "25562ac4-cf25-5ea3-a77c-461c4269540e", "rating": 4, "text": "I really enjoyed this product! The flavor is vibrant and tropical.", "submitted_at": "2025-02-05T17:30:35.000Z", "recommended": false, "featured": false, "ratings_only": false, "helpful_vote_count": 0, "not_helpful_vote_count": 0, "photos": [ {"url": "https://photos-us.bazaarvoice.com/photo/2/…", "size": "medium"} ] } ] } } ```
Herramienta MCP kroger_product_reviews
/kroger/related-tagsReturns the search-refinement chips Kroger shows above its own results for a query (e.g. "chips ahoy" returns "chewy", "chunky", "thins"). Each tag carries the full follow-on query it maps to, so results feed straight back into kroger-search.
Notas de la respuesta
- `query` on each tag is the complete search string to run next, not just the tag appended — use it directly as `/kroger/search`'s `query`. - `position` is Kroger's own display order, preserved as returned. - `source` is Kroger's own provenance label for the tag (e.g. `CURATED`), passed through rather than constrained to a fixed set. - A query with no refinements returns an empty `related_tags` list — a success, not an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "chips ahoy", "location_id": "03500917", "count": 3, "related_tags": [ {"tag": "chewy", "query": "chips ahoy chewy", "position": 0, "source": "CURATED"}, {"tag": "chunky", "query": "chips ahoy chunky", "position": 1, "source": "CURATED"}, {"tag": "mini", "query": "chips ahoy mini", "position": 2, "source": "CURATED"} ] } } ```
Herramienta MCP kroger_related_tags
/kroger/couponsReturns a page of Kroger's public digital coupons: savings value, requirement text and quantity, brand, categories, redemption modalities, promotional tags, image, and start/end/expiry dates. Optionally narrow to one product (upc) or brand. This is the anonymous public coupon catalog -- per-account clipping state is not returned.
Notas de la respuesta
- This is the anonymous public coupon catalog. Per-account clipping state (whether a signed-in shopper already added a coupon to their card) is **not** returned. - `value` and `savings` are the coupon's monetary value in dollars; `requirement_quantity` is how many qualifying items must be purchased. - `modalities` lists where the coupon can be redeemed (e.g. `PICKUP`, `DELIVERY`, `IN_STORE`). - `start_date`/`end_date` are the display window; `expiration_date` is the hard expiry, which is usually later. Example response: ```json { "code": 200, "msg": "OK", "data": { "location_id": "03500917", "page": 1, "page_size": 50, "count": 1, "coupons": [ { "id": "3899866", "kroger_coupon_number": "800000011934", "title": "Save $1.00 on 2", "short_description": "SAVE $1.00 on 2 Pillsbury Refrigerated and Frozen Products", "display_description": "Pillsbury Refrigerated and Frozen Products", "requirement_description": "when you buy TWO (2) Pillsbury Refrigerated or Frozen Baked Goods Products, any flavor/variety", "requirement_quantity": 2, "brand": "Pillsbury", "value": 1, "savings": 1, "type": "STANDARD", "status": "unclipped", "image_url": "https://cdnws.softcoin.com/mediaCache/ecoupon_4918801.jpg", "categories": ["Bakery", "Frozen", "Breakfast"], "modalities": ["PICKUP", "DELIVERY", "IN_STORE"], "savings_tags": [{"name": "General Savings", "display_name": "General Savings"}], "redemptions_allowed": 1, "total_downloads": 1107980, "start_date": "2025-03-01T05:00:00Z", "end_date": "2025-04-01T03:59:59Z", "expiration_date": "2025-04-15T03:59:59Z" } ] } } ```
Herramienta MCP kroger_coupons
/kroger/storeReturns one Kroger store's public detail: postal address, geographic coordinates, phone number, displayed opening hours (including any daily break hours), and whether it has a drive-thru. store_id is the same store/location id kroger-products and kroger-suggest accept.
Notas de la respuesta
- `hours` rows use Kroger's own day groupings (e.g. `Mon - Fri`), not one row per weekday. `break_hours` carries any daily closure window (Kroger publishes these for pharmacy counters). - `is_today` marks the row covering the current day in the store's own timezone, as Kroger computes it. - Only shopper-facing fields are returned. Kroger's upstream payload also carries an internal operational block (EDI flags, processing times, internal facility codes); that is deliberately not surfaced. - An unknown `store_id` returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "store_id": "01600531", "name": "Waterville", "brand": "KROGER", "phone": "(419) 878-1040", "open_text": "Open Until 8 PM", "address": { "address_lines": ["8730 Waterville Swanton Rd"], "city": "Waterville", "state": "OH", "postal_code": "43566", "country": "US" }, "location": {"latitude": 41.509023, "longitude": -83.75036}, "hours": [ {"days": "Sun", "hours": "10:00 AM - 5:00 PM", "is_today": false}, {"days": "Mon - Fri", "hours": "8:00 AM - 8:00 PM", "is_today": true} ], "break_hours": [{"days": "Sun - Sat", "hours": "1:00 PM - 1:30 PM", "is_today": true}], "has_drive_thru": true } } ```
Herramienta MCP kroger_store
/kroger/suggestReturns Kroger's own search-box suggestions for a (possibly empty) query, sourced directly from Kroger's public suggestions API rather than the rendered search page. An empty query returns Kroger's default "trending" shopping shortcuts instead of an error. location_id scopes results to one Kroger store and defaults to a confirmed-working store id when omitted.
Notas de la respuesta
- Each item in `suggestions` has a `type` — `SUGGESTION` for a term suggestion, `TRENDING` for a default shopping shortcut shown when `query` is omitted — passed through from Kroger's own API rather than validated against a fixed list, so a future third type still surfaces. - `spelling_correction` is set only when `query` returned zero suggestions and Kroger judged it a likely typo (e.g. `Marble cake` → `maple cake`); it is omitted otherwise. - A genuinely empty `suggestions` list (with or without `spelling_correction`) is a normal, successful response — not an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "rin", "location_id": "03500917", "suggestions": [ {"type": "SUGGESTION", "value": "onion ring"}, {"type": "SUGGESTION", "value": "pork rind"}, {"type": "SUGGESTION", "value": "white castle chicken ring"}, {"type": "SUGGESTION", "value": "rinse aid"}, {"type": "SUGGESTION", "value": "frozen onion ring"} ] } } ```
Herramienta MCP kroger_suggest
APIs relacionadas
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
Cómo hacer scraping de Kroger
Crawlora's Kroger endpoints return normalized public Kroger data as JSON with one API key — no Kroger account required. Filters and sort are the one thing to watch: they apply on the JSON path only, so a filtered request and an unfiltered one are not reading the same upstream.
The search endpoint takes a query and a one-based page and returns normalized product cards with price, unit price, size, SNAP EBT eligibility, and a low-stock flag. Facet filters — brands, nutrition and dietary values, flavor, scent, savings, and a price range — take facet display names verbatim from a previous response's own facets, because Kroger filters on the display name rather than a slug. price_max is required to filter on price at all.
The category endpoint browses a Kroger category page and returns cards in the same shape as search, reusing the identical parser since category and search pages share Kroger's product-grid template. It needs both the category's URL slug and its numeric taxonomy id — the last two segments of a category page URL — because a placeholder slug is not confirmed to work here the way it is on product pages.
There are two product paths and they carry materially different depth. The single-product endpoint reads a product page's schema.org structured data: title, description, image, brand, category trail, price, availability, and rating. The bulk endpoint reads Kroger's own product API for up to 50 products at once and adds a nutrition-facts panel with ingredients, allergens and dietary flags, store-specific price and stock level, the full star histogram, the merchandising hierarchy, and every image perspective.
The product-reviews endpoint returns one page of a product's customer reviews from Kroger's own reviews API alongside its complete star histogram. The related-tags endpoint returns the refinement chips Kroger shows above its own results for a query — for chips ahoy it returns chewy, chunky, thins — each carrying the full follow-on query it maps to, so the chips feed straight back into search.
The coupons endpoint returns a page of Kroger's public digital coupons with savings value, requirement text and quantity, brand, categories, redemption modalities, promotional tags, imagery, and validity dates, optionally narrowed to one UPC, brand, or store. The store endpoint returns one store's postal address, coordinates, phone number, displayed opening hours, and drive-thru availability.
Preguntas frecuentes
Search products by keyword or browse a category for priced cards, enrich them through the bulk product endpoint for nutrition and store-specific pricing, then read customer reviews, refinement chips, digital coupons, and store detail — all return structured JSON with one API key.
Filters and sort apply to the JSON path only. They are also value-sensitive: a filter takes the facet display name verbatim from a previous response's own facets, not a slug, and multiple values within one filter are OR-ed together. Filtering on price additionally requires price_max — supplying price_min alone returns a 400.
Depth and source. The single-product endpoint reads a product page's schema.org structured data — title, description, image, brand, category trail, price, availability, rating. The bulk endpoint reads Kroger's own product API for up to 50 products in one call and adds nutrition facts with ingredients and allergens, store-specific price and stock level, the full rating histogram, the merchandising hierarchy, and every image perspective.
Yes — the coupons endpoint pages through Kroger's public digital coupons with each one's savings value, requirement text and quantity, brand, categories, redemption modalities, promotional tags, image, and validity dates. It can be narrowed to a single product by UPC, to one brand, or to a specific store id.
Yes — every product card returned by search and category browse carries a SNAP EBT eligibility flag alongside price, unit price, size, and a low-stock indicator. SNAP EBT Eligible is also a confirmed value for the more-options facet filter, so you can restrict a whole result set to eligible items.