# Kroger Price Monitor: Price & Stock Change Alerts (`getascraper/kroger-price-monitor`) Actor

Track Kroger.com prices and stock by keyword and store, returning only the rows that changed. Flags price drops, price rises, back-in-stock, and new listings run over run. Built for deal-alert tools, repricing bots, and CPG competitive monitoring.

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

## Pricing

from $3.30 / 1,000 price changes

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Price Monitor: Price & Stock Change Alerts

<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:#FFFFFF;border-radius:0 0 0 8px">
<span style="white-space:nowrap"><a href="https://apify.com/getascraper/kroger-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">🛒 Kroger Scraper</a></span><br>
<span style="color:#57534E;font-size:11px">Full product search, price, and stock in one run</span>
</td>
<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 8px 0">
<span style="white-space:nowrap"><span style="color:#003DA5;text-decoration:none;font-weight:700;font-size:13px">🔔 Kroger Price Monitor</span></span><br>
<span style="color:#003DA5;font-size:11px;font-weight:700">&#10148; You are here</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 change. Know the moment they do.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Track any keyword at your chosen Kroger store on a schedule, and get a row back only when a price actually moves, stock runs out or returns, or a new product shows up.</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">🔔 Change-only alerts</span><br>
<span style="font-size:12px;color:#57534E">No full re-scrape every run, just the rows that actually moved</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">📉 Price drop and rise tracking</span><br>
<span style="font-size:12px;color:#57534E">See the old price, the new price, and the exact percent change</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">📦 Stock status changes</span><br>
<span style="font-size:12px;color:#57534E">Know the moment an item sells out or comes back</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">🆕 New listing detection</span><br>
<span style="font-size:12px;color:#57534E">Catch new products the moment they appear in your search</span>
</td>
</tr>
</table>

### 🔔 What does Kroger Price Monitor do?

Kroger Price Monitor searches [Kroger.com](https://www.kroger.com) for the keywords you give it, at the store you choose, on the schedule you set. Every run compares what it finds against the last run and tags each product as new, price dropped, price rose, back in stock, out of stock, or unchanged.

By default it only returns the rows that changed, so your dataset stays small and your alerts stay relevant. You can also switch to a full snapshot on every run if you want a complete picture alongside the change flags.

This is the recurring companion to [Kroger Scraper](https://apify.com/getascraper/kroger-scraper), which pulls the full catalog for a keyword in one pass. Use that Actor for a first full pull, then point this one at the same keywords and store to watch for changes going forward.

### 🧑‍💼 Why use Kroger Price Monitor?

**CPG brand teams and category managers** confirm their products are priced and promoted correctly at Kroger, without opening a browser tab every morning to check.

**Competitive intelligence analysts and alternative-data teams** feed real Kroger price moves into their models, only the changes, not a full re-scrape every time.

**Grocery savings apps and price-comparison tools** alert shoppers to real price drops the moment Kroger's own numbers change, instead of re-checking every product on every run.

Kroger.com runs strong bot defenses, so most scraping tools either get blocked outright or fall back to slow, unreliable browser automation. This Actor handles that layer for you and hands back a dataset built specifically for change detection.

### 🚀 How to use Kroger Price Monitor

<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 and keywords</span><br>
<span style="font-size:12px;color:#57534E">Enter your Kroger store ID and the products you want to track.</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">Run it on a schedule</span><br>
<span style="font-size:12px;color:#57534E">Set the Actor to run daily or weekly on the Apify platform.</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 only what changed</span><br>
<span style="font-size:12px;color:#57534E">Each run returns just the products that moved since last time.</span>
</td>
</tr>
</table>

1. Open Kroger Price Monitor 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**.
3. Add one or more search terms, such as "milk" or "eggs", under **Search keywords**.
4. Leave **Only emit changed products** on to get change alerts only, or turn it off for a full snapshot every run.
5. Click **Start**, then schedule the Actor to run daily or weekly so your alerts keep working without any manual effort.

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `searchTerms` | array of strings | Yes | Keywords to monitor on Kroger.com, such as "milk" or "eggs". One search runs per keyword per scheduled run. |
| `storeLocationId` | string | No | The Kroger store ID whose prices and stock you want to track. Find yours from the Kroger store locator or from the page URL after picking a store on kroger.com. Defaults to a sample store. |
| `onlyChanged` | boolean | No | When enabled, only products whose price or stock status changed since the last run are returned. Disable for a full snapshot every run. Defaults to true. |
| `maxItems` | integer | No | Hard cap on total rows returned across all keywords. Set to 0 for unlimited. Defaults to 100. |
| `proxyConfiguration` | object | No | Proxy used to reach Kroger.com. Residential is the default and recommended setting for reliable access. |

### 📤 Output

Every run produces one row per product that matches your criteria. Example of a changed row:

```json
{
  "query": "eggs",
  "productId": "00011110609038",
  "title": "Kroger® Grade A Large White Eggs",
  "brand": "Kroger",
  "category": "Dairy",
  "price": 1.19,
  "priceFormatted": "$1.19",
  "inStock": true,
  "stockLevel": "HIGH",
  "image": "https://www.kroger.com/product/images/xlarge/front/0001111060903",
  "storeLocationId": "02100537",
  "changeType": "PRICE_DROP",
  "oldPrice": 1.59,
  "priceDelta": -0.4,
  "priceDeltaPct": -25.16,
  "isChanged": true,
  "scrapedAt": "2026-07-08T06:31:46.674Z"
}
````

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 |
| --- | --- | --- |
| query | string | The search keyword that produced this row. |
| productId | string | UPC or GTIN-14 barcode, used as the stable product identifier. |
| 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 | Current numeric price in USD. |
| priceFormatted | string | Display-formatted price, such as "$1.19". |
| 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. |
| image | string | Product image URL. |
| storeLocationId | string | Store location ID this price and stock reading applies to. |
| changeType | string | One of NEW, PRICE\_DROP, PRICE\_RISE, BACK\_IN\_STOCK, OUT\_OF\_STOCK, or UNCHANGED. |
| oldPrice | number | The price recorded on the previous run, present only on changed rows. |
| priceDelta | number | The dollar difference between old and new price, present only on price changes. |
| priceDeltaPct | number | The percent difference between old and new price, present only on price changes. |
| oldInStock | boolean | The stock status recorded on the previous run, present only on stock changes. |
| isChanged | boolean | True if this row represents any kind of change since the last run. |
| scrapedAt | string | Timestamp of when the item was collected. |

Fields that are not available for a given product, or that only apply to changed rows, are left out rather than filled with a placeholder, so every value in your dataset is real.

### 💰 Pricing

Kroger Price Monitor is pay per result. You only pay for the rows actually returned, and an empty run, meaning nothing changed since last time, costs nothing. There is no subscription and no minimum spend.

### ⭐ Enjoying Kroger Price Monitor?

<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 catching price changes before you would have noticed them, 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 price trackers 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-price-monitor/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

- Run [Kroger Scraper](https://apify.com/getascraper/kroger-scraper) once first to see the full catalog for your keywords, then point this Actor at the same keywords and store to start tracking changes.
- Use specific search terms, such as "whole wheat bread" instead of "bread", so change alerts stay tightly focused on what you actually track.
- Turn off **Only emit changed products** for your first run against a new keyword or store, so you can confirm the baseline before switching to change-only alerts.
- Schedule the Actor to run daily for fast-moving categories, or weekly for slower ones, to control how often you get pinged.
- If you track multiple stores, run the Actor separately per store location ID, either as separate tasks or schedules.

### ❓ FAQ

##### Does this Actor get blocked by Kroger?

Kroger runs strong bot defenses. This Actor routes through premium residential proxies and retries automatically, so occasional blocked attempts on a single keyword are retried before being reported, rather than silently failing your run.

##### How does it know what changed since last time?

The Actor keeps its own private record of the last known price and stock status for every product it has seen, separate from your run's dataset. Each new run compares fresh data against that record before deciding what counts as changed.

##### Does it extract private account or personal data?

No. This Actor only reads public product listings that are visible to any shopper on Kroger.com. It does not log in, access accounts, place orders, or collect personal data.

##### How fresh is the price and stock data?

Every run reads live prices and stock directly from Kroger.com at the moment it runs. There is no cached or delayed data, so what you see reflects the store's current listing.

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.

# Actor input Schema

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

Keywords to monitor on Kroger.com, e.g. "milk", "eggs". One search is run per keyword per scheduled run.

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

The Kroger store ID whose prices and stock you want to track. Find yours at kroger.com: use the store locator (or the store picker in the top-left of the site) to select your store, then check the store's page URL or details for its numeric location ID. Defaults to a sample store.

## `onlyChanged` (type: `boolean`):

When enabled, only products whose price or stock status changed since the last run are returned. Disable to get a full snapshot every run.

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

Hard cap on total rows returned across all keywords. 0 = unlimited.

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

US residential proxy is required. Kroger.com runs Akamai Bot Manager; a live cloud test confirmed datacenter proxy is reliably blocked while residential proxy clears it on the first attempt. Residential proxy is mandatory, not a cost-optimization choice.

## Actor input object example

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

# Actor output Schema

## `dataset` (type: `string`):

No description

## `keyValueStore` (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 = {
    "storeLocationId": "02100537",
    "onlyChanged": true,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/kroger-price-monitor").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 = {
    "storeLocationId": "02100537",
    "onlyChanged": True,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/kroger-price-monitor").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 '{
  "storeLocationId": "02100537",
  "onlyChanged": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call getascraper/kroger-price-monitor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kroger Price Monitor: Price & Stock Change Alerts",
        "description": "Track Kroger.com prices and stock by keyword and store, returning only the rows that changed. Flags price drops, price rises, back-in-stock, and new listings run over run. Built for deal-alert tools, repricing bots, and CPG competitive monitoring.",
        "version": "0.1",
        "x-build-id": "Z5X90qmbjashGdMQm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/getascraper~kroger-price-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-getascraper-kroger-price-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/getascraper~kroger-price-monitor/runs": {
            "post": {
                "operationId": "runs-sync-getascraper-kroger-price-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/getascraper~kroger-price-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-getascraper-kroger-price-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to monitor on Kroger.com, e.g. \"milk\", \"eggs\". One search is run per keyword per scheduled run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "storeLocationId": {
                        "title": "Store location ID",
                        "type": "string",
                        "description": "The Kroger store ID whose prices and stock you want to track. Find yours at kroger.com: use the store locator (or the store picker in the top-left of the site) to select your store, then check the store's page URL or details for its numeric location ID. Defaults to a sample store.",
                        "default": "02100537"
                    },
                    "onlyChanged": {
                        "title": "Only emit changed products",
                        "type": "boolean",
                        "description": "When enabled, only products whose price or stock status changed since the last run are returned. Disable to get a full snapshot every run.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on total rows returned across all keywords. 0 = unlimited.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "US residential proxy is required. Kroger.com runs Akamai Bot Manager; a live cloud test confirmed datacenter proxy is reliably blocked while residential proxy clears it on the first attempt. Residential proxy is mandatory, not a cost-optimization choice.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
