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

CVS scraper and stock checker: exact units in each CVS store near any ZIP code or city, the aisle and shelf, pickup and same-day units, price and online stock. Search by keyword, link or product ID. Scheduled runs return back-in-stock and Pokemon restock alerts.

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

## Pricing

from $1.99 / 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

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

**Check CVS stock at stores near any ZIP code or city, with the exact number of units in each store and the aisle where it sits.** For every product you get the nearby stores, nearest first: **units on hand**, in stock or sold out, **aisle, section and shelf**, units ready for pickup and same-day delivery, store address, distance, phone and hours, plus the price and online stock. Search by keyword (`pokemon tcg`, `nee doh`, `covid test`), cvs.com search link, product link or product ID; check stores by **ZIP code or city** (up to 50 nearest stores each) or by **store number**.

Scheduled runs with **Only report changes** become **CVS 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 CVS store stock. No login, no browser: a **CVS scraper** and **CVS 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`: 4, 12, 57), the count CVS uses for "in stock at this store" |
| 🧭 **Aisle and shelf** | Where the store keeps it: `Aisle 1, section A, shelf 0`, plus the shelf capacity, so you walk straight to it |
| 🏬 **Every store near you at once** | Up to 50 nearest stores per ZIP code or city in one run, nearest first, with distance, hours and phone; or exact stores by number |
| 🃏 **In-store only products** | Pokemon cards and other "in store only" items are checked in stores, where they actually sell (they are always sold out online) |
| 🔔 **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 |
| 🔎 **Clean search** | CVS fills searches with other products (`needoh` returns 3 NeeDoh toys and 53 other squishies); rows without your words are dropped, so you pay only for matches |

#### Example

Input: keyword `pokemon tcg`, ZIP `10001` (Manhattan), 10 nearest stores. Real run, 10 Oct 2026, 13 requests, 100 rows:

| Product | Store | Miles | Units | Aisle | Price |
| --- | --- | --- | --- | --- | --- |
| Pokémon TCG Mega Evolution Foil Booster Pack | 5 Penn Plaza, New York | 0.27 | 1 | Aisle 1, section B, shelf 1 | $5.99 |
| Pokémon TCG Mega Evolution Battle Deck | 750 Avenue of Americas, New York | 0.32 | 4 | Aisle 1, section A, shelf 0 | $14.99 |
| Pokémon TCG 30th Anniversary Mini Tin | 750 Avenue of Americas, New York | 0.32 | 12 | Aisle 1, section B, shelf 0 | $12.99 |
| Pokémon TCG Mega Evolution Booster Pack | 500 7th Ave, New York | 0.41 | 49 | | $6.99 |
| Pokémon TCG Mega Evolution Foil Booster Pack | 420 Fifth Ave, New York | 0.60 | 57 | Aisle 50, section B, shelf 1 | $5.99 |

All 10 Pokemon TCG products were sold out online, yet the 10 stores nearest to 10001 had 178 units in 18 product-store pairs.

#### Input

| Field | What it does |
| --- | --- |
| **What to do** | *Search products* (keywords or links) or *Check products* (links or IDs) |
| **Keywords or search links** | e.g. `pokemon tcg`, `nee doh`, `covid test`, or a cvs.com search link (`…/search?searchTerm=pokemon`) |
| **Product links or IDs** | cvs.com product links (`…-prodid-605681`) or the ID from the link (`605681`) |
| **ZIP codes or cities** | `10001` or `Chicago, IL`. Empty with no store numbers = online stock only |
| **Store numbers** | Exact stores, e.g. `2671` or a cvs.com store link (`…/storeid=2671`) |
| **Radius (miles)**, **Stores per ZIP code** | 25 miles and 10 stores by default; up to 100 miles and 50 stores |
| **Max products per search** | Up to 1 000 products per keyword (100 per CVS 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`, `variant`, `variantsCount`, `size`, `productId`, `skuId`, `image`, `url` | Pokémon TCG Mega Evolution Battle Deck, Pokemon, 605681 |
| `storeStock`, `storeStatus`, `inStockAtStore` | 4, in_stock, true |
| `aisle`, `shelfCapacity` | Aisle 1, section A, shelf 0; 2 |
| `pickupUnits`, `sameDayUnits` | units ready for store pickup and same-day delivery |
| `storeNumber`, `storeAddress`, `storeCity`, `storeState`, `storeZip` | 2671, 750 Avenue Of Americas, New York, NY, 10010 |
| `distanceMiles`, `storePhone`, `storeHours`, `storeUrl`, `latitude`, `longitude` | 0.32, (646) 336-8388, 7:00 AM-12:00 AM daily, cvs.com store page |
| `price`, `regularPrice`, `deal` | 14.99; regular price when on sale; promo text |
| `inStoreOnly`, `onlineStatus`, `onlineUnits`, `maxPerOrder`, `newProduct` | true, out_of_stock, 0, 15, true |
| `rating`, `reviewsCount` | 4.5, 120 |
| `near`, `query`, `queryType` | 10001, the search or product the row came from |
| `change`, `changes`, `previousStock`, `previousPrice` | back_in_stock, 0 → 4 (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. An unknown product ID, or a ZIP code with no CVS store nearby, returns a row with `error` (free).

#### Pricing

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

| Example | Cost |
| --- | --- |
| 10 products of a search at the 10 stores nearest to one ZIP | ~$0.25 |
| 1 product at the 50 stores near a big-city ZIP | ~$0.13 |
| 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 CVS stock near me?** Put your ZIP code into **ZIP codes or cities** and the product name into **Keywords** (or a product link into *Check products*). Each row is one nearby store with the units it has and the aisle.

**Does it show the exact number of units?** Yes. `storeStock` is the unit count CVS 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.

**Where does CVS keep Pokemon cards?** It depends on the store: `aisle` shows it per store (often near the registers, `Aisle 1`). Stores without a set shelf for the item leave it empty.

**How do I get CVS Pokemon restock alerts?** Search `pokemon tcg` 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.

**Is CVS online stock the same as store stock?** No. Pokemon cards and many toys are "in store only" (`inStoreOnly: true`): always sold out online while stores have them. `onlineStatus` is the shipping stock, `storeStock` the store's.

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

**Is this a BrickSeek alternative for CVS?** Yes for stock: exact units per store near a ZIP code, plus the aisle, without an account.

#### Tips

- Rows = products × stores, so start with a few stores and **Only in stock**.
- One search covers all its products at a store in one request: searching `pokemon tcg` near a ZIP is faster than listing the products one by one.
- 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 CVS stores only (cvs.com); CVS pharmacy counters inside Target stores are skipped (no CVS shelves).
- Up to 50 stores per ZIP code or city; use several for a wider area.
- For products with shades or sizes, CVS publishes store stock for the main variant only (`variant`, `variantsCount` show which one and how many there are).
- Products CVS does not list on cvs.com at all cannot be checked.

#### Ready-made tasks

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

#### Related

- [Walgreens Stock Checker](https://apify.com/s_actors/walgreens-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)
- [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": ["605681", "https://www.cvs.com/shop/x-prodid-804830"],
    "zipCodes": ["10001", "Chicago, IL"],
    "maxStoresPerZip": 20,
    "onlyInStock": true,
    "onlyChanges": true,
    "monitorName": "pokemon-restock"
}
```

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

# Actor input Schema

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

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

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

Search mode: what to search on CVS, one per line (e.g. "pokemon tcg", "nee doh", "covid test"), or a cvs.com search link (…/search?searchTerm=pokemon).

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

Check products mode: cvs.com product links (…-prodid-605681) or the product ID from the link (605681), one per line.

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

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

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

Exact CVS stores to check, one per line: the store number (e.g. 2671) or a cvs.com store link (…/storeid=2671).

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

How far from each ZIP code or city to look for stores.

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

For each ZIP code or city: how many of the nearest stores to check (up to 50). CVS pharmacy counters inside Target stores are skipped (no CVS shelves).

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

Search mode: how many products to take from each keyword or link, in the order of cvs.com.

## `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. 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 tcg"
  ],
  "products": [
    "https://www.cvs.com/shop/pok-mon-tcg-mega-evolution-battle-deck-assorted-packs-prodid-605681"
  ],
  "zipCodes": [
    "10001"
  ],
  "radiusMiles": 25,
  "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, aisle, 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, pickup and same-day units, aisle 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 tcg"
    ],
    "products": [
        "https://www.cvs.com/shop/pok-mon-tcg-mega-evolution-battle-deck-assorted-packs-prodid-605681"
    ],
    "zipCodes": [
        "10001"
    ],
    "maxProductsPerSearch": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/cvs-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 tcg"],
    "products": ["https://www.cvs.com/shop/pok-mon-tcg-mega-evolution-battle-deck-assorted-packs-prodid-605681"],
    "zipCodes": ["10001"],
    "maxProductsPerSearch": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/cvs-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 tcg"
  ],
  "products": [
    "https://www.cvs.com/shop/pok-mon-tcg-mega-evolution-battle-deck-assorted-packs-prodid-605681"
  ],
  "zipCodes": [
    "10001"
  ],
  "maxProductsPerSearch": 10
}' |
apify call s_actors/cvs-stock-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/cvs-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/lapbni7OZUwkaJMoB/builds/zONw5QOeq9zfAnyk1/openapi.json
