# Kroger Scraper: Product Prices, Stock & Search (`getascraper/kroger-scraper`) Actor

Search Kroger.com by keyword and store to get live product data. Extract price, unit price, stock level, brand, size, and images per store location. Built for price-comparison apps, grocery deal trackers, and CPG brand monitoring. No login required.

- **URL**: https://apify.com/getascraper/kroger-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 72.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.30 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🛒 Kroger Scraper: Product Prices, Stock & Search

<table width="100%">
<tr>
<td colspan="4" style="padding:14px 18px;background:#F0F4FA;border-top:3px solid #003DA5;border-left:1px solid #C7D6EC;border-right:1px solid #C7D6EC;border-radius:8px 8px 0 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">Two ways to watch Kroger.com, pick the one that matches your job.</span> <span style="font-size:15px;color:#57534E">Pull the full catalog once, or get pinged only when something changes.</span>
</td>
</tr>
<tr>
<td colspan="4" style="padding:10px 14px;background:#003DA5;border-left:1px solid #C7D6EC;border-right:1px solid #C7D6EC">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">KROGER SUITE</span>
<span style="color:#CFE0F5;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Product search and price monitoring for Kroger.com</span>
</td>
</tr>
<tr>
<td style="padding:10px 12px;border-left:1px solid #C7D6EC;border-bottom:1px solid #C7D6EC;vertical-align:top;width:50%;background:#F0F4FA;border-radius:0 0 0 8px">
<span style="white-space:nowrap"><span style="color:#003DA5;text-decoration:none;font-weight:700;font-size:13px">🛒 Kroger Scraper</span></span><br>
<span style="color:#003DA5;font-size:11px;font-weight:700">&#10148; You are here</span>
</td>
<td style="padding:10px 12px;border-left:1px solid #C7D6EC;border-bottom:1px solid #C7D6EC;vertical-align:top;width:50%;background:#FFFFFF;border-radius:0 0 8px 0">
<span style="white-space:nowrap"><a href="https://apify.com/getascraper/kroger-price-monitor" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">🔔 Kroger Price Monitor</a></span><br>
<span style="color:#57534E;font-size:11px">Get a row back only when a price or stock status changes</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0F4FA;border:1px solid #C7D6EC;border-top:4px solid #003DA5;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Kroger prices and stock, with the actual store recorded</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search Kroger.com and collect its initial product batch with real price, unit price, stock data, and Kroger's observed store ID.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D6EC;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#002d7a">🏪 Store-level accuracy</span><br>
<span style="font-size:12px;color:#57534E">Prices and stock tied to one real Kroger store, not a national average</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D6EC;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#002d7a">💵 Real unit pricing</span><br>
<span style="font-size:12px;color:#57534E">Price per ounce or per count, the same numbers Kroger shows shoppers</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D6EC;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#002d7a">📦 Live stock status</span><br>
<span style="font-size:12px;color:#57534E">See what is actually on the shelf before you plan around it</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D6EC;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#002d7a">🥗 Full product detail</span><br>
<span style="font-size:12px;color:#57534E">Brand, size, dietary tags, and images land in the same row</span>
</td>
</tr>
</table>

### 🔍 What does Kroger Scraper do?

Kroger Scraper searches [Kroger.com](https://www.kroger.com) for any keyword, from "milk" to a specific brand name, and returns a clean row for products in Kroger's initial result batch. Each row carries the price, unit price, current stock level, brand, package size, and product image, all verified against the Kroger store location you pick.

Kroger prices and stock change store by store and day by day, so a single national price list is never accurate enough for real decisions. This Actor pulls live numbers straight from the store you choose, run on demand or on a schedule through the Apify platform.

Need to track changes over time instead of a one-off pull? Pair this with [Kroger Price Monitor](https://apify.com/getascraper/kroger-price-monitor), which watches the same keywords and store and returns a row only when a price or stock status actually changes.

### 🧑‍💼 Why use Kroger Scraper?

**CPG brands and agencies** track how their products are priced and stocked across Kroger stores, without opening a browser tab for every location.

**Grocery price comparison tools** pull live Kroger prices to show shoppers where to save, store by store.

**Market researchers** watch category prices over time to measure grocery inflation with real numbers, not survey estimates.

**Price intelligence platforms** add Kroger, one of the largest US grocery chains, to a wider retail monitoring feed.

Kroger.com is protected by strong bot defenses, so most scraping tools either fail outright or fall back to slow, unreliable browser automation. This Actor handles that layer for you and hands back a ready-to-use dataset.

### 🚀 How to use Kroger Scraper

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F0F4FA;border:1px solid #C7D6EC;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#003DA5;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your store</span><br>
<span style="font-size:12px;color:#57534E">Enter the Kroger store ID you expect to monitor.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F4FA;border:1px solid #C7D6EC;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#003DA5;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your keywords</span><br>
<span style="font-size:12px;color:#57534E">List the products or categories you want priced.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F4FA;border:1px solid #C7D6EC;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#003DA5;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get a clean table</span><br>
<span style="font-size:12px;color:#57534E">Price, stock, and product detail land in your dataset, ready to export.</span>
</td>
</tr>
</table>

1. Open Kroger Scraper on the Apify platform and click **Try for free** or **Start**.
2. Find your store's ID from the [Kroger store locator](https://www.krogerstorelocator.com/) or by picking a store on kroger.com and checking the page URL. Paste it into **Store location ID**. Each output row preserves the store ID Kroger actually served, so a response is never relabelled as another store.
3. Add one or more search terms, such as "eggs" or "cocoa pebbles", under **Search terms**.
4. Set a **Max items** limit if you want to cap the run, or set it to 0 for no global cap. A search currently collects Kroger's initial product batch rather than every page of a large search.
5. Click **Start** and download your results as JSON, CSV, or Excel once the run finishes.

You can also schedule this Actor to run daily or weekly, so your price and stock data stays current without any manual work.

### ⚙️ Input

| Field               | Type             | Required | Description                                                                                                                                |
| ------------------- | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Search terms        | array of strings | Yes      | Keywords to search on Kroger.com, one verified search per keyword; maximum 25 terms per run.                                               |
| Store location ID   | string           | No       | Store ID you expect to monitor. The returned `storeLocationId` always comes from Kroger's response, never from a fallback label.           |
| Max items           | integer          | No       | Maximum number of products across all search terms. Set to 0 for no global cap; it does not paginate beyond Kroger's initial result batch. |
| Proxy configuration | object           | No       | Proxy used to reach Kroger.com. Residential is the default and recommended setting.                                                        |

### 📤 Output

Every run produces one row per matching product. Example:

```json
{
    "productId": "00011110401014",
    "title": "Kroger® Vitamin D Whole Milk Gallon",
    "brand": "Kroger",
    "category": "Dairy",
    "price": 3.39,
    "priceFormatted": "$3.39",
    "unitPrice": "$0.03/fl oz",
    "inStock": true,
    "stockLevel": "HIGH",
    "size": "1 gal",
    "dietaryInfo": ["Vegetarian", "Kosher", "Pescatarian"],
    "image": "https://www.kroger.com/product/images/xlarge/back/0001111040101",
    "sellerName": "Kroger",
    "storeLocationId": "01600803",
    "upc": "00011110401014",
    "query": "milk",
    "scrapedAt": "2026-07-08T06:19:39.364Z"
}
```

You can download the dataset in JSON, CSV, Excel, HTML, or XML from the Apify platform, or pull it through the API into your own pipeline.

### 📋 Data table

| Field           | Type    | Description                                                    |
| --------------- | ------- | -------------------------------------------------------------- |
| title           | string  | Product name as shown on Kroger.com.                           |
| brand           | string  | Brand name.                                                    |
| category        | string  | Department or category, such as Dairy or Bakery.               |
| price           | number  | Numeric regular price in USD.                                  |
| priceFormatted  | string  | Display-formatted price, such as "$3.39".                      |
| unitPrice       | string  | Price per unit, such as "$0.03/fl oz".                         |
| inStock         | boolean | Whether the product is currently in stock at the chosen store. |
| stockLevel      | string  | Inventory level label, such as HIGH, LOW, or OUT\_OF\_STOCK.     |
| size            | string  | Package size, such as "1 gal" or "11 oz".                      |
| dietaryInfo     | array   | Dietary tags, such as Vegetarian, Gluten Free, or Kosher.      |
| image           | string  | Product image URL.                                             |
| sellerName      | string  | Seller of record, usually Kroger.                              |
| storeLocationId | string  | Store location ID this price and stock reading applies to.     |
| upc             | string  | UPC or GTIN-14 barcode.                                        |
| query           | string  | The search keyword that produced this row.                     |
| scrapedAt       | string  | Timestamp of when the item was collected.                      |

Fields that are not available for a given product are left out of that row rather than filled with a placeholder, so every value in your dataset is real.

### 💰 Pricing

Kroger Scraper uses pay-per-event pricing: `$0.01000` when a run starts and `$0.01000` for each verified Kroger search, plus the Product event for each product returned. Retries, blocked attempts, malformed responses, and partial responses are not chargeable. A verified empty search is charged once as a completed search; an unverified empty response fails visibly instead.

### ⭐ Enjoying Kroger Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F0F4FA;border:1px solid #C7D6EC;border-left:5px solid #003DA5;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this Actor is saving you hours of manual price checks, tell us about it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other CPG teams and researchers find this Actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#003DA5;border:1px solid #C7D6EC;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/kroger-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips for better runs

- Use specific search terms, such as "whole wheat bread" instead of "bread", to keep results tightly matched to what you need.
- Start with a small Max items limit for exploratory runs. Set it to 0 only when you want the full initial batch from each search; broader searches may have additional Kroger pages that are not collected yet.
- Schedule the Actor to run daily or weekly to build a price and stock history over time.
- If you track multiple stores, run the Actor once per store location ID, either as separate tasks or a schedule.

### ❓ FAQ

**Does this Actor work for any Kroger store location?**
Prices and stock are store-specific on Kroger.com. Provide the store ID you expect to monitor, then use the returned `storeLocationId` to verify the store Kroger actually served. The Actor never labels data as your requested store when Kroger returns a different one.

**Why do some rows have missing fields, like stock level?**
Kroger does not return every field for every product. Rather than guess or fill in a placeholder, this Actor leaves those fields out of the row so your data stays accurate.

**Can I search for a whole category instead of one keyword?**
Yes. Broader terms such as "cereal" or "yogurt" work the same way as specific product names, but the Actor currently returns Kroger's initial result batch rather than every page of a large search.

**Is this legal?**
This Actor only reads public product listings that are visible to any shopper on Kroger.com. It does not access accounts, place orders, or collect personal data. Review Kroger's terms of service if you plan to use the data commercially at scale.

Found an issue or want a feature added? Open a ticket from the Issues tab on this Actor's page, or reach out for a custom version built around your exact workflow.

### 🔗 Other actors

- [Kroger Price Monitor](https://apify.com/getascraper/kroger-price-monitor) ↗ - watches Kroger keywords and store locations, returning a row only when price or stock changes.
- [Rakuten Price Monitor](https://apify.com/getascraper/rakuten-jp-price-monitor) ↗ - tracks price and stock changes on Rakuten Ichiba in Japan.
- [Falabella Price Monitor](https://apify.com/getascraper/falabella-price-monitor) ↗ - alerts on price changes across Falabella's Chile, Peru, and Colombia stores.
- [Coles Australia Scraper](https://apify.com/getascraper/coles-scraper) ↗ - pulls live grocery prices, weekly specials, and stock levels from Coles.
- [eMAG Price Monitor](https://apify.com/getascraper/emag-price-monitor) ↗ - monitors price changes on Romania's eMAG marketplace.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search for on Kroger.com, e.g. "milk", "eggs", or "cocoa pebbles". One verified search is run per keyword; use at most 25 terms per run.

## `storeLocationId` (type: `string`):

The Kroger store ID you expect to monitor. Prices and inventory are store-specific; every output row retains Kroger's observed source store ID so a response is never relabelled as another store. Find IDs through the Kroger store locator. Defaults to a store used during actor testing.

## `maxItems` (type: `integer`):

Maximum number of products to return across all search terms. Set to 0 for no global cap. Each Kroger search currently returns its initial product batch; this setting does not request every page of a large result set.

## `proxyConfiguration` (type: `object`):

Proxy used to reach Kroger.com. Kroger runs Akamai Bot Manager. Cloud testing showed Apify's datacenter proxy pool gets blocked on essentially every request, while US Residential proxy reliably gets through, so Residential is the default here.

## Actor input object example

```json
{
  "searchTerms": [
    "milk"
  ],
  "storeLocationId": "02100537",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "milk"
    ],
    "storeLocationId": "02100537",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/kroger-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["milk"],
    "storeLocationId": "02100537",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/kroger-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "milk"
  ],
  "storeLocationId": "02100537",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call getascraper/kroger-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=getascraper/kroger-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/X9txth8ORDzNIfrsw/builds/uWLb9wI2uZgVgwpgV/openapi.json
