# Target Product Scraper - $0.90 / 1000 Products (`scrapeunblocker/target-product-scraper`) Actor

Scrape Target product pages by TCIN or link: online price and sale, rating split, description, highlights, specifications, images, every colour / size variant with its own price and stock, shipping dates and pickup stock at a store you choose. No login. $0.90 per 1000 products.

- **URL**: https://apify.com/scrapeunblocker/target-product-scraper.md
- **Developed by:** [Scrapeunblocker](https://apify.com/scrapeunblocker) (community)
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 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 Product Scraper

Scrape **Target product pages** as clean JSON by **TCIN or product link**: the online price and sale price with savings, promotions, the rating with its 1-5 star split, review and question counts, the description, highlights, **specifications**, images and category path, **every colour / size variant** with its own TCIN, price and shipping / store availability, plus **shipping dates** to your ZIP code and **pickup status, stock quantity and aisle** at a Target store you choose. No Target account or API key.

### Features

- **TCIN or link input** - `52580270` or `https://www.target.com/p/.../-/A-52580270` (a `?preselect=` variant in the link is honoured).
- **Variants** - every colour / size with its own TCIN, price, link, image and availability.
- **Store and ZIP** - pickup status, quantity and aisle at `storeId`; shipping dates to `zip`.
- **Full product sheet** - description, highlights, specifications, images, DPCI, UPC, package dimensions.

### Use cases

- **Price and sale monitoring** per item and per variant.
- **Store stock checks** - pickup availability and quantity at a chosen store.
- **Catalogue building** - specifications, highlights and images for every variant.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `products` | array | `52580270` (example) | Target TCINs or product links. |
| `storeId` | string | `1375` | Store for pickup status, stock and aisle. |
| `zip` | string | `55403` | US ZIP code for shipping dates. |
| `concurrency` | integer | `3` | Products processed at the same time (1-5). |

```json
{ "products": ["52580270", "https://www.target.com/p/-/A-95251826?preselect=95216448"], "storeId": "1375", "zip": "55403" }
```

### Output

One dataset item per product:

```json
{
  "input": "52580270",
  "tcin": "52580270",
  "title": "Hamilton Beach 12 Cup Programmable Coffee Maker Black 46290: Drip Coffee Machine, Nonstick Hot Plate, Brew Pause",
  "brand": "Hamilton Beach",
  "price": 27.99,
  "formattedPrice": "$27.99",
  "currency": "USD",
  "rating": 4.19,
  "ratingCount": 2688,
  "reviewCount": 1335,
  "categories": ["Kitchen & Dining", "Kitchen Appliances", "Coffee & Espresso Makers", "Drip Coffee Makers"],
  "variants": [],
  "fulfillment": {
    "shippingStatus": "IN_STOCK",
    "shippingMinDate": "2026-10-31",
    "store": { "storeId": "1375", "storeName": "Mpls Nicollet Mall", "pickupStatus": "IN_STOCK", "quantity": 6, "aisle": "L 53" }
  },
  "url": "https://www.target.com/p/hamilton-beach-12-cup-programmable-coffee-maker-black-46290/-/A-52580270"
}
```

Products that could not be read (unknown TCIN, blocked or failed) are **not billed**: they are listed with the reason in the `ERRORS` record of the run's key-value store.

### Pricing

**$0.90 per 1,000 products.** You pay only for products in the dataset.

### Powered by ScrapeUnblocker

The actor calls the [ScrapeUnblocker](https://www.scrapeunblocker.com) Target product plugin (`/marketplace/target-product`), which reads Target's own product data and handles bot protection and retries. For whole categories use the [Target Category Scraper](https://apify.com/scrapeunblocker/target-category-scraper); for keyword search the [Target Search Scraper](https://apify.com/scrapeunblocker/target-search-scraper).

# Actor input Schema

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

Target products to read: a TCIN (e.g. 52580270) or a target.com product link (.../-/A-52580270; a ?preselect= variant in the link is honoured). One dataset item per product.

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

Target store whose pickup status, stock quantity and aisle are reported, e.g. 1375. Empty = store 1375 (Minneapolis).

## `zip` (type: `string`):

US ZIP code shipping dates are quoted for, e.g. 10001. Empty = 55403.

## `concurrency` (type: `integer`):

How many inputs are processed at the same time (1-5).

## Actor input object example

```json
{
  "products": [
    "52580270"
  ],
  "concurrency": 3
}
```

# Actor output Schema

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

One item per product with the input it came from: price, variants, fulfillment, specifications, images

## `errors` (type: `string`):

Inputs that returned no product (unknown id, not sold there, blocked or failed), with the reason (not billed)

# 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 = {
    "products": [
        "52580270"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeunblocker/target-product-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/kah4AbPNdd5UUNizk/builds/lPfVZ0Y1wVEYKqCDv/openapi.json
