# Walgreens Stock Checker: Store Inventory, Pokemon & Restocks (`s_actors/walgreens-stock-checker`) Actor

Check Walgreens stock at stores near any ZIP code: exact units in each store, in stock or sold out, distance, price, deals and online stock. Search by keyword, link, product ID or UPC. Scheduled runs return back-in-stock and Pokemon restock alerts.

- **URL**: https://apify.com/s_actors/walgreens-stock-checker.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.78 / 1,000 product at a stores

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Walgreens Stock Checker: Store Inventory, Pokemon & Restock Alerts

**Check Walgreens stock at stores near any ZIP code, with the exact number of units in each store.** For every product you get the stores that carry it, nearest first: **units on hand**, in stock or sold out, store address, distance, phone and hours, plus the price, deals and online stock. Search by keyword (`pokemon trading card game`, `nee doh`), walgreens.com search or category link, product link, product ID or UPC; check stores by **ZIP code** (up to 72 nearest stores each) or by **store number**.

Scheduled runs with **Only report changes** become **Walgreens restock alerts**: a row only when a store gets a product back, gets more units (a restock), sells out, the price changes, or a **new product appears in your search** (a new Pokemon card drop).

Use cases: track products & prices, get deal & restock alerts, build market datasets of Walgreens store stock. No login, no browser: a **Walgreens inventory API** that returns clean JSON, CSV or Excel.

#### What makes it different

| | |
| --- | --- |
| 🔢 **Exact units per store** | Not just "in stock": the number of units each store has (`storeStock`: 8, 34, 0), the same count Walgreens uses for "pick up in store" |
| 🏬 **Every store near you at once** | Up to 72 nearest stores per ZIP code and product, in one row each, nearest first, with distance in miles; or exact stores by number |
| 🃏 **In-store only products** | Pokemon cards and other "Not available online" items are still found and checked in stores, where they actually sell |
| 🔔 **Restock and drop alerts** | `back_in_stock`, `restocked` (more units than last run), `out_of_stock`, `price_drop`, `new_item`, with restock history and the usual restock weekday of each store |
| 💲 **Price and deals** | Sale and regular price, unit price, "Buy 1, Get 1 50% OFF" style deals, rewards offers, online stock |
| 🔎 **Clean search** | Walgreens replaces words it does not know with other products; rows without any word of your search are dropped, so you pay only for matches |

#### Example

Input: products `prod6340511` (Pokemon Trading Card Game), `300451101` (Pokemon Sleeping Pikachu Plush 18"), ZIP `60601` (Chicago Loop), radius 20 miles, **Only in stock**. Real run, 10 Oct 2026:

| Product | Store | Miles | Units | Online |
| --- | --- | --- | --- | --- |
| Pokemon Trading Card Game | 757 N Michigan Ave, Chicago | 1.46 | 8 | not available online |
| Pokemon Trading Card Game | 740 W Diversey Pkwy, Chicago | 4.27 | 34 | not available online |
| Pokemon Trading Card Game | 3646 N Broadway St, Chicago | 5.27 | 16 | not available online |
| Pokemon Sleeping Pikachu Plush | 342 E Illinois St, Chicago | 1.02 | 3 | in stock, $29.99 |
| Pokemon Sleeping Pikachu Plush | 410 N Michigan Ave, Chicago | 1.10 | 4 | in stock, $29.99 |

The Pokemon Trading Card Game was sold out online, yet 9 of 48 Chicago stores had it: 174 units in total. The Pikachu plush was in 59 stores (191 units).

#### Input

| Field | What it does |
| --- | --- |
| **What to do** | *Search products* (keywords or links) or *Check products* (links, IDs or UPCs) |
| **Keywords or search links** | e.g. `pokemon trading card game`, `nee doh`, `covid test`, a walgreens.com search link, or a category link (`…/ID=20001439-tier3`, `…/N=360545`) |
| **Product links, IDs or UPCs** | walgreens.com product links (`…/ID=prod6340511-product`), the ID from the link (`prod6340511`, `300451101`) or the UPC |
| **ZIP codes** | Stores around each ZIP code. Empty with no store numbers = online stock only |
| **Store numbers** | Exact stores, e.g. `9438` (the end of a walgreens.com store link `…/id=9438`) |
| **Radius (miles)**, **Stores per ZIP code** | 10 miles and 10 stores by default; up to 100 miles and 72 stores |
| **Max products per search** | Up to 1 000 products per keyword (70 per Walgreens page) |
| **Only in stock**, **Minimum units in store**, **Maximum price** | Filters: you pay only for returned rows |
| **Only report changes**, **Monitor name** | Restock and drop alerts for scheduled runs |

#### Output

| Field | Example |
| --- | --- |
| `title`, `brand`, `size`, `productId`, `upc`, `image`, `url` | Pokemon Trading Card Game, Pokemon, 1 set, prod6340511, 9771253010 |
| `storeStock`, `storeStatus`, `inStockAtStore` | 34, in_stock, true (`out_of_stock`, `not_carried`, `contact_store`) |
| `storeNumber`, `storeAddress`, `storeCity`, `storeState`, `storeZip` | 178, 740 W Diversey Pkwy, Chicago, IL, 60614 |
| `distanceMiles`, `storePhone`, `storeHours`, `storeUrl` | 4.27, (773) 929-1097, 7AM-12AM, walgreens.com store page |
| `price`, `regularPrice`, `unitPrice`, `deal`, `rewards`, `pricedPerStore` | 3.99; 19.99 → 18.00 on sale; $1.33/oz; Buy 1, Get 1 50% OFF |
| `onlineStatus`, `onlineInStock`, `onlineNote` | out_of_stock, false, Not available online |
| `productType`, `clearance`, `rating`, `reviewsCount` | Trading Cards, false, 3.0, 489 |
| `zip`, `query`, `queryType` | 60601, the search or product the row came from |
| `change`, `changes`, `previousStock`, `previousPrice` | back_in_stock, 0 → 5 (monitoring) |
| `restocksSeen`, `lastRestockAt`, `usualRestockDay` | 3, 2026-10-09T13:10:00Z, Thursday (2 of 3) (monitoring) |

Without ZIP codes or store numbers, each row is one product with its online stock and price. A product sold near none of your ZIP codes comes once with `storeStatus: not_carried_nearby` (free). An unknown product ID returns a row with `error`.

#### Pricing

Pay per event: **$0.001** per run and **$0.00098** per returned row (a product at a store, or a product online). Apify Scale plan: 10% less on rows, Business plan and above: 20% less.

| Example | Cost |
| --- | --- |
| 10 products of a search at 10 stores near one ZIP | ~$0.10 |
| 1 product at all 72 stores near a big-city ZIP | ~$0.07 |
| Restock alert: 5 products near 2 ZIPs every 30 minutes, nothing changed | $0.001 per run (~$1.44 a month) |

#### FAQ

**How do I check Walgreens stock near me?** Put your ZIP code into **ZIP codes** and the product name into **Keywords** (or a product link into *Check products*). Each row is one nearby store with the units it has.

**Does it show the exact number of units?** Yes. `storeStock` is the unit count Walgreens keeps for each store (the site shows "In stock" from it). It is the system count, not a shelf scan: 1-2 units can already be gone when you arrive.

**How do I get Walgreens Pokemon restock alerts?** Search `pokemon trading card game` (or use the Trading Cards category link) near your ZIP codes with **Only report changes** on, save it as a task and schedule it every 15-30 minutes. Restocks come as `back_in_stock` or `restocked`, new products as `new_item`; connect email, Slack or [Google Sheets](https://apify.com/s_actors/google-sheets-import-export) in Integrations.

**Why do Pokemon cards show no price?** Walgreens prices them per store ("Priced Per Store") and does not publish that price online; `pricedPerStore` is `true` and `price` is empty. The **Maximum price** filter keeps these rows.

**What does `not_carried` mean?** The store has no record of the product: it does not sell it. `out_of_stock` means the store sells it but has 0 units now.

**Can I check prescription drug stock at the pharmacy?** No. Walgreens does not publish pharmacy stock; over-the-counter products (medicine, tests, vitamins) are covered like any other product.

**Is Walgreens online stock accurate?** `onlineStatus` is the shipping stock walgreens.com shows at the time of the run; "Not available online" products are sold only in stores, which is why store stock matters.

#### Tips

- Rows = products × stores, so start with a few stores per ZIP and **Only in stock**.
- Search terms: write brand names as walgreens.com does (`nee doh`). Walgreens swaps unknown words for other products; the actor drops those rows.
- For a watchlist, use *Check products* with product links: the same products every run, no search noise.
- Use a separate **Monitor name** for each scheduled task.

#### Limits

- US Walgreens stores only (walgreens.com).
- Up to 72 stores per ZIP code and product (Walgreens' own limit); use several ZIP codes for a wider area.
- Store prices of "Priced Per Store" products are not published online.

#### Ready-made tasks

| Task | What it does |
| --- | --- |
| [Walgreens Pokemon Stock Checker: Units at Every Store Near You](https://apify.com/s_actors/walgreens-stock-checker/examples/walgreens-pokemon-stock-checker) | Pokemon cards and toys at the Walgreens stores near your ZIP, with units per store |

#### Related

- [CVS Stock Checker: units and aisle by store](https://apify.com/s_actors/cvs-stock-checker)
- [Target Scraper: store stock with units](https://apify.com/s_actors/target-scraper)
- [Walmart Restock Tracker](https://apify.com/s_actors/walmart-restock-tracker)
- [Best Buy Stock Checker: in-store inventory by ZIP](https://apify.com/s_actors/best-buy-stock-checker)
- [Sam's Club Stock Checker](https://apify.com/s_actors/sams-club-stock-checker)
- [GameStop Inventory Checker](https://apify.com/s_actors/gamestop-inventory-checker)
- [Home Depot inventory and clearance](https://apify.com/s_actors/home-depot-scraper)
- [IKEA Stock Checker](https://apify.com/s_actors/ikea-stock-checker)
- [Barnes & Noble Stock Checker: books, LEGO and Funko by store](https://apify.com/s_actors/barnes-noble-stock-checker)
- [Dollar General Stock Checker: exact units by store](https://apify.com/s_actors/dollar-general-stock-checker)

#### For AI agents and API

```json
{
    "mode": "products",
    "products": ["prod6340511", "https://www.walgreens.com/store/c/x/ID=300451101-product"],
    "zipCodes": ["60601", "10001"],
    "maxStoresPerZip": 20,
    "onlyInStock": true,
    "onlyChanges": true,
    "monitorName": "pokemon-restock"
}
```

Each row is one product at one store with `storeStock` (units), `storeStatus`, `distanceMiles` and the store address; without `zipCodes` and `storeNumbers` each row is one product online.

# Actor input Schema

## `mode` (type: `string`):

Search: keywords or walgreens.com search / category links, every product found with its stock in stores near your ZIP codes. Check products: exact products by link, product ID or UPC (best for a back-in-stock watchlist).

## `keywords` (type: `array`):

Search mode: what to search on Walgreens, one per line (e.g. "pokemon trading card game", "needoh", "covid test"), or a walgreens.com search link or category link (…/N=<number> or …/ID=<number>-tier3).

## `products` (type: `array`):

Check products mode: walgreens.com product links (…/ID=prod6340511-product or …/ID=300451101-product), the product ID from the link, or the UPC, one per line.

## `zipCodes` (type: `array`):

US ZIP codes to check stores around, one per line: the nearest stores within "Radius" are checked (up to "Stores per ZIP code"). Empty and no store numbers = online stock only.

## `storeNumbers` (type: `array`):

Exact Walgreens stores to check, one per line: the store number (e.g. 9438, the end of a walgreens.com store link …/id=9438). A store that does not carry the product is returned as "not_carried".

## `radiusMiles` (type: `integer`):

How far from each ZIP code to look for stores.

## `maxStoresPerZip` (type: `integer`):

For each ZIP code and product: how many of the nearest stores that carry it to return (Walgreens gives up to 72).

## `maxProductsPerSearch` (type: `integer`):

Search mode: how many products to take from each keyword or link, in Walgreens' order.

## `onlyInStock` (type: `boolean`):

Return only rows where the store has the product (or, without stores, where it is in stock online).

## `minUnits` (type: `integer`):

Return only stores with at least this many units. Empty = any.

## `maxPrice` (type: `integer`):

Return only products at or below this price in USD. Products priced per store (e.g. Pokemon cards) have no online price and are always kept. Empty = any price.

## `onlyChanges` (type: `boolean`):

For scheduled runs. The first run saves stock and prices; later runs return only what changed: back in stock at a store, restocked (more units than last time), sold out, price drops and increases, and new products or stores in your searches (e.g. a new Pokemon card drop). Each row also carries the restocks this monitor has seen and the usual restock weekday. You pay only for the changes returned.

## `monitorName` (type: `string`):

Separate monitors keep separate memory. Use a different name for each scheduled task.

## `maxConcurrency` (type: `integer`):

How many requests run at the same time.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "pokemon trading card game"
  ],
  "products": [
    "https://www.walgreens.com/store/c/pokemon-trading-card-game/ID=prod6340511-product"
  ],
  "zipCodes": [
    "60601"
  ],
  "radiusMiles": 10,
  "maxStoresPerZip": 10,
  "maxProductsPerSearch": 10,
  "onlyInStock": false,
  "onlyChanges": false,
  "monitorName": "default",
  "maxConcurrency": 6
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per product and store: exact units, status, distance, price.

## `changes` (type: `string`):

Monitoring: back in stock, restocked, sold out, price changes, new products and stores.

## `details` (type: `string`):

Prices, deals, online stock, identifiers, rating.

## `stores` (type: `string`):

Store address, phone, hours and link for each row.

## `all` (type: `string`):

Every field of every row.

# 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 = {
    "keywords": [
        "pokemon trading card game"
    ],
    "products": [
        "https://www.walgreens.com/store/c/pokemon-trading-card-game/ID=prod6340511-product"
    ],
    "zipCodes": [
        "60601"
    ],
    "maxProductsPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/walgreens-stock-checker").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 = {
    "keywords": ["pokemon trading card game"],
    "products": ["https://www.walgreens.com/store/c/pokemon-trading-card-game/ID=prod6340511-product"],
    "zipCodes": ["60601"],
    "maxProductsPerSearch": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/walgreens-stock-checker").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "pokemon trading card game"
  ],
  "products": [
    "https://www.walgreens.com/store/c/pokemon-trading-card-game/ID=prod6340511-product"
  ],
  "zipCodes": [
    "60601"
  ],
  "maxProductsPerSearch": 10
}' |
apify call s_actors/walgreens-stock-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/walgreens-stock-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dPcCt5gx5cauusvXu/builds/8ih0r5bCkM6rFDxIN/openapi.json
