# Target Scraper: Prices, Store Stock, Promotions & Tracking (`zaiq/target-scraper`) Actor

Target.com (US) search results, category and product pages: price, regular price, sale type, promotions, rating, brand, TCIN, UPC, and the units in stock at stores near any ZIP. Every run shows what changed since your last one. No account needed.

- **URL**: https://apify.com/zaiq/target-scraper.md
- **Developed by:** [Zaiq](https://apify.com/zaiq) (community)
- **Categories:** E-commerce, Marketing, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 search results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Target Scraper: prices, store stock, promotions and price tracking (target.com)

[![Target Scraper: Prices, Store Stock, Promotions & Tracking](https://api.apify.com/v2/key-value-stores/4VJNANhwKgqPpXtAi/records/hero-target-scraper.jpg?v=2)](https://api.apify.com/v2/key-value-stores/4VJNANhwKgqPpXtAi/records/film-retail-price-tracking.mp4)

**[Watch the 22-second film: price tracking](https://api.apify.com/v2/key-value-stores/4VJNANhwKgqPpXtAi/records/film-retail-price-tracking.mp4)**

Get **Target.com (US) data without an account**: **search results and category pages** with **price, regular price, sale type, promotions, rating, brand, TCIN, DPCI and the sponsored flag**, priced for **the store or ZIP you choose**; **full product pages** with **review count, UPC, description, highlights, specifications and return policy**; and **store stock**, with **the units available and pickup status at the stores near any ZIP**.

**Try it in a minute:** the form is filled in. Press Start and you get 24 real results for about $0.06.

Built for **price monitoring**, **store stock and restock checks**, **competitor and MAP checks**, **promotion tracking** and **catalogue data**.

**Run it again and see what changed:** every product is compared with your last run, with nothing to set up and at no extra cost. Schedule it daily and filter on `priceStatus` for a price-drop feed.

### What you get

| Field | What it holds |
|---|---|
| Search and category results | `tcin`, `title`, `brand`, `price`, `priceMax`, `regularPrice`, `priceType`, `onSale`, `formattedPrice`, `promotions`, `rating`, `ratingCount`, `sponsored`, `dpci`, `image`, `url`, `storeId`, `rank` |
| Product pages | `tcin`, `title`, `brand`, `price`, `regularPrice`, `promotions`, `rating`, `ratingCount`, `reviews`, `recommendedPercent`, `ratingBreakdown`, `upc`, `dpci`, `category`, `description`, `highlights`, `specifications`, `returnPolicy`, `images`, `url` |
| Store stock | `tcin`, `title`, `storeId`, `storeName`, `address`, `city`, `state`, `postalCode`, `distanceMiles`, `unitsAvailable`, `inStore`, `pickup`, `curbside`, `pickupDate`, `url`, `zipCode` |
| Price tracking, on every product row | `previousPrice`, `priceChange`, `priceChangePercent`, `priceStatus` (`first-seen`, `unchanged`, `dropped`, `raised`, `no-price`), `firstSeenAt` |

### What people use it for

- **Price monitoring:** track prices and sale prices for any search, category or list of products, every day
- **Store stock checks:** the units available at each store near a ZIP, for restock alerts and local availability
- **Promotion tracking:** see which products carry a promotion, and what it says
- **Store price checks:** compare the same products across Target stores by changing the store ID
- **Assortment and search share:** which products and brands rank for a search, and which are sponsored
- **Catalogue data:** UPCs, TCINs, DPCIs, specifications and images for product feeds
- **Review signals:** average rating, review count, recommendation rate and star breakdown

### How to use it

1. Enter **searches** or paste **Target search or category links**, and choose an order.
2. Add a **store ID** for that store's prices, and turn on **Open every search result** if you want UPCs and ratings.
3. Click **Start**. Schedule it daily for price tracking.

### Input

| Field | Example | Notes |
|---|---|---|
| Searches | `air fryer` | Words, or target.com search and category links |
| Results per search | `24` | Up to 1,200 |
| Sort | Relevance | Price low/high, best sellers, newest, highest rated |
| Target store ID | empty | Prices come from this store |
| ZIP code | empty | Prices from the nearest store; center of the stock check |
| Include sponsored results | off | Keep paid listings, flagged |
| Products | `https://www.target.com/p/.../-/A-<tcin>` | Links or TCINs |
| Open every search result | off | Read each result's product page too |
| Check store stock | off | Units and pickup status per store near your ZIP |
| Stores to check per product | `5` | Up to 20 |
| Stock only for product links | off | No product page row, only store stock |
| Track price changes | on | Compares every product with your last run; free |
| Tracking list name | empty | Optional: separate lists keep separate histories |

### Output

Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):

```json
{
  "kind": "search-result",
  "tcin": "12345678",
  "title": "Sample Brand 6-Quart Air Fryer, Black",
  "brand": "Sample Brand",
  "price": 59.99,
  "regularPrice": 79.99,
  "priceType": "sale",
  "formattedPrice": "$59.99",
  "currency": "USD",
  "promotions": [
    "Save 20% on small appliances"
  ],
  "sponsored": false,
  "dpci": "072-05-0000",
  "url": "https://www.target.com/p/sample-air-fryer/-/A-12345678",
  "storeId": "3991",
  "search": "air fryer",
  "rank": 1,
  "onSale": true
}
```

A record named `SUMMARY` in the run's key-value store says what each input returned, with any notes (for example an account that does not exist), what was charged and how much traffic the run used.

### Pricing

- **$0.0025 per search result**
- **$0.006 per product page**, read in full
- **$0.0015 per store-stock row** (one product at one store)
- Products that don't exist and refused pages are free

What typical jobs cost at the list price:

| Job | Cost |
|---|---|
| 1,000 search results | $2.50 |
| 100 full product pages | $0.60 |
| Daily price check of 200 products for a month | $15 |
| Stock of 100 products at 5 stores | $0.75 |

On Apify's Scale and Business plans the per-event prices are lower (Store discounts). Set **Maximum cost per run** and the Actor stops cleanly when it is reached: you never pay more than that.

### Tips

- For restock alerts, give product links, a ZIP code, **Check store stock** and **Stock only for product links**, and schedule it hourly. `unitsAvailable` is the count Target's own Find in Store can promise.
- Schedule a daily run and filter on `priceStatus` = `dropped` for a price-drop feed. The run's summary lists the biggest moves.
- For price tracking, search and category results are the cheap way: they carry price, regular price and promotions. Open product pages only when you need UPCs, ratings or specifications.
- A TCIN is the number after /A- in a target.com product link; paste either.
- Prices can differ by store. Run the same list with several store IDs to compare them.

### Use it through the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zaiq/target-scraper").call(run_input={"searches": ["air fryer"], "maxResultsPerSearch": 24})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row)
```

**JavaScript**

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zaiq/target-scraper').call({"searches": ["air fryer"], "maxResultsPerSearch": 24});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**HTTP (one call, results back)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/zaiq~target-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"searches": ["air fryer"], "maxResultsPerSearch": 24}'
```

### Integrations and schedules

- **Schedules:** run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- **Make, Zapier, n8n, Google Sheets, Slack, Airtable:** connect it through Apify's integrations, or send each finished run to a **webhook**.
- **Datasets:** results stay in the run's dataset; export them or read them by API whenever you need them.

### Use it with AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "the 100 cheapest air fryers on Target with their regular prices and promotions". AI agents can also pay for runs directly through Apify's agentic payments.

### Limits

- Target.com (US) only.
- Ratings and UPCs come with product pages, not search results.
- Target shows at most 1,200 results for a search; split broad searches into narrower ones.
- If an address is refused the Actor tries another and never solves a check. Pages it could not read are listed in SUMMARY and not charged.

### FAQ

**How does price tracking work?**

Each run compares every product with your last run and adds the previous price, the change and a status. It keeps one small key-value store in your Apify account and costs nothing extra. Run one list at a time, and turn it off with `trackPrices: false`.

**How accurate is store stock?**

`unitsAvailable` is the number Target's own Find in Store shows it can promise at that store right now. A shelf count can differ.

**Do I need a Target account?**

No. Everything is what a signed-out shopper sees on target.com.

**Can I get one store's prices?**

Yes: set the store ID. Every row says which store it was priced for.

**Can I scrape a whole category?**

Yes: paste the category link (it ends in /N-...). Each one returns up to 1,200 results.

**What does it cost to run?**

Only the events above; there is no monthly fee.

### Related Actors from Zaiq

- [walmart-scraper](https://apify.com/zaiq/walmart-scraper): the same products on Walmart
- [sams-club-scraper](https://apify.com/zaiq/sams-club-scraper): club prices at Sam's Club
- [amazon-product-scraper](https://apify.com/zaiq/amazon-product-scraper): the same products on Amazon, in 23 stores

### Support

Questions, a site that changed, or a field you need? Open an issue on this Actor's **Issues** tab: we answer there, usually within a day.

***

Also found as: target scraper, target api, target product scraper, target price tracker, target.com scraper, target store prices, target promotions scraper, tcin lookup.

# Actor input Schema

## `searches` (type: `array`):

What to search Target for, one per line, or target.com search and category links.

## `maxResultsPerSearch` (type: `integer`):

Target shows 24 products a page, up to 1,200 for a search.

## `sort` (type: `string`):

Order of the search results.

## `storeId` (type: `string`):

Prices come from this store. Empty uses the store nearest your ZIP code, or store 3991.

## `zipCode` (type: `string`):

A five-digit US ZIP, for example 55401. Prices come from the nearest store unless you give a Store ID, and store stock is checked around it.

## `includeSponsored` (type: `boolean`):

Keep paid listings in the results (they are flagged).

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

Target product links (target.com/p/.../-/A-...) or TCINs, one per line, read in full.

## `openProducts` (type: `boolean`):

Also read each result's product page ($0.006 each).

## `checkStock` (type: `boolean`):

For every product, the units available and the in-store, pickup and curbside status at stores near your ZIP code. Charged per store checked.

## `stockStores` (type: `integer`):

How many of the stores nearest your ZIP code.

## `stockOnly` (type: `boolean`):

For the Products list above, return only the store stock rows, not the product page. The cheapest way to watch stock of known products.

## `trackPrices` (type: `boolean`):

Compare every product with your last run: previous price, change and whether it is new. Free. Keeps one small key-value store in your Apify account.

## `trackingName` (type: `string`):

Optional. Letters, numbers and hyphens. Give separate lists their own history, for example one per client.

## Actor input object example

```json
{
  "searches": [
    "air fryer"
  ],
  "maxResultsPerSearch": 24,
  "sort": "relevance",
  "includeSponsored": false,
  "openProducts": false,
  "checkStock": false,
  "stockStores": 5,
  "stockOnly": false,
  "trackPrices": true
}
```

# Actor output Schema

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

Dataset: the results.

## `summary` (type: `string`):

What each input returned, and notes.

# 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 = {
    "searches": [
        "air fryer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaiq/target-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 = { "searches": ["air fryer"] }

# Run the Actor and wait for it to finish
run = client.actor("zaiq/target-scraper").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 '{
  "searches": [
    "air fryer"
  ]
}' |
apify call zaiq/target-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zaiq/target-scraper"
        }
    }
}
```

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/dEzT9A2YhJgPqee0m/builds/pNHWMa7Aq0W5T4kzN/openapi.json
