# Target Scraper 🎯 Products, Prices, Stock, Images & UPC (`bovi/target-products`) Actor

Scrape **Target.com** products by keyword, category or product URL. Returns title, price, sale price, rating, reviews, brand, availability, UPC, description — and **images that actually populate**. Search & URL modes, reliable access, per-product pricing.

- **URL**: https://apify.com/bovi/target-products.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.81 / 1,000 product scrapeds

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

## Target.com Scraper | $2.90/1K — Products, Prices, Images & UPC

For e-commerce analysts tracking Target.com prices, dropshippers building catalogs, and data teams that need **product images that actually populate** — not the empty `[]` arrays most Target scrapers ship.

**Pricing: $0.0029 per product ($2.90/1,000 products)** — one flat per-product rate. No proxy key, no API key, no add-on fees.

Scrape **Target.com** products by keyword search, category page, or direct product URL. Every product comes back as a flat JSON row with price, sale detection, full image set, UPC, rating and reviews — reliable residential access built in.

### What you get per product

| Field | Description |
|---|---|
| `tcin` | Target's internal product ID (TCIN) |
| `title` | Product title |
| `brand` | Brand name |
| `price` | Current price (USD) |
| `regular_price` | Regular (pre-sale) price |
| `on_sale` | `true` when current price is below regular — instant deal detection |
| `rating` | Average star rating |
| `review_count` | Number of customer reviews |
| `primary_image` | Main product image URL |
| `alternate_images` | **Full image set** — every scene7 image URL for the product (typically 15–21 images), where most scrapers return an empty list |
| `availability` | Stock / availability status |
| `upc` | UPC barcode (with detail fetch on) |
| `description` | Full product description (with detail fetch on) |
| `bullets` | Bullet-point specs / highlights (with detail fetch on) |
| `url` | Canonical Target.com product URL |
| `parse_confidence` | Per-row quality score 0.0–1.0 — catch site changes before they break your pipeline |
| `scraped_at` | ISO 8601 run timestamp |

### Why this scraper

- **Images that populate.** The headline edge: a complete `alternate_images` set (real scene7 CDN URLs, ~15–21 per product) where competing Target scrapers ship `[]`. If you build catalogs or feeds, this is the difference between usable and useless.
- **Sale detection.** `on_sale` plus `regular_price` vs `price` — find every markdown without diffing snapshots yourself.
- **Full detail.** UPC, bullet specs and description from the product detail page (toggle `fetchDetails`).
- **Reliable access, no keys.** Runs on Apify residential proxy and rides Target's own product API — no buyer proxy key, no buyer API key, nothing to configure.
- **`parse_confidence` on every row** — a quality signal no commodity Target scraper exposes.

### Input

```json
{
  "searchQueries": ["coffee maker", "airpods"],
  "urls": ["https://www.target.com/p/-/A-12345678"],
  "maxItems": 60,
  "fetchDetails": true,
  "storeId": "3991",
  "zip": "10001"
}
````

| Parameter | Default | Description |
|---|---|---|
| `searchQueries` | — | Keywords to search on Target.com (one product list per query) |
| `urls` | — | Product, category, or search URLs (product URLs return full detail; category/search are paginated) |
| `maxItems` | 60 | Max products per query/URL (0 = unlimited up to the page cap) |
| `fetchDetails` | `true` | Enrich each product with description, bullet specs and UPC (one extra request per product) |
| `storeId` | blank | Target store number for price + in-store availability |
| `zip` | `10001` | US ZIP for delivery/pricing context |
| `proxyConfiguration` | RESIDENTIAL | Apify residential proxy (recommended — datacenter IPs are rate-limited by Target) |

### Pricing example

| Run | Products | Cost |
|---|---|---|
| Trial (1 query, 60-cap default) | 60 | $0.17 |
| 1,000 products | 1,000 | $2.90 |
| 10,000 products | 10,000 | $29.00 |

Pay per result — you are charged once per product delivered to the dataset. Blocked or empty queries are not charged. The buyer's Apify account pays for proxy/platform compute.

### Output sample

```json
{
  "tcin": "12345678",
  "title": "Keurig K-Classic Single Serve Coffee Maker",
  "brand": "Keurig",
  "price": 169.99,
  "regular_price": 219.99,
  "on_sale": true,
  "rating": 4.44,
  "review_count": 2012,
  "primary_image": "https://target.scene7.com/is/image/Target/GUEST_xxxx",
  "alternate_images": [
    "https://target.scene7.com/is/image/Target/GUEST_aaaa",
    "https://target.scene7.com/is/image/Target/GUEST_bbbb"
  ],
  "availability": "in_stock",
  "upc": "611247373767",
  "url": "https://www.target.com/p/-/A-12345678",
  "parse_confidence": 1.0,
  "scraped_at": "2026-06-14T10:00:00+00:00"
}
```

### Use cases

- **Price & promo monitoring** — track Target prices and catch every `on_sale` markdown.
- **Catalog / feed building** — full image sets + specs + UPC ready to drop into a storefront or marketplace feed.
- **Competitive intelligence** — brand, rating and review-count benchmarking across a category.
- **Dropshipping** — product data with real images, no manual copy-paste.

### FAQ

**Do I need an API key or proxy key?**
No. Reliable residential access is built in and Target's product API is reached for you. You only configure the standard Apify proxy (residential is the default and recommended).

**Why are images better here?**
Most Target scrapers read the search-list payload only, which omits the full gallery. This actor resolves each product's complete scene7 image set, so `alternate_images` is actually populated.

**What formats can I export?**
JSON, CSV, Excel, or JSONL — from the Apify dataset UI or REST API.

**What if a product is out of stock?**
It is still returned with `availability` reflecting its status; `rating`/`review_count` may be empty for products with no reviews (real data, not a parse miss).

### Integrations

Built for e-commerce analysts, dropshippers, and catalog teams extracting Target.com product data with prices, images and UPC — the JSON/dataset output drops into the tools you already run, no glue code:

- **n8n / Make / Zapier** — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, your database) with no code: [n8n](https://docs.apify.com/platform/integrations/n8n), [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier).
- **Webhooks** — fire your own endpoint the moment a run finishes ([docs](https://docs.apify.com/platform/integrations/webhooks)).
- **MCP server** — expose this actor as a tool to Claude, Cursor, or any [MCP client](https://mcp.apify.com) so an AI agent can pull Target product data mid-conversation ([guide](https://blog.apify.com/how-to-use-mcp/)).
- **API & SDKs** — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.

See all [Apify integrations](https://apify.com/integrations).

### Legal & compliance

This actor collects only **publicly visible** Target.com product data — the same information any visitor sees while browsing the site without logging in. It does not access private or authenticated content and stores no personal data. Use it in accordance with Target's Terms of Service and applicable regulations; the operator is responsible for ensuring their use case complies. Not affiliated with or endorsed by Target Brands, Inc.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Target.com (e.g. 'coffee maker', 'airpods', 'lego'). One product list is scraped per query. Leave empty if you only pass URLs.

## `urls` (type: `array`):

Target.com URLs. Product pages (/p/...-A-12345678), category pages (/c/...-N-abcde), or search pages (/s?searchTerm=...). Product URLs are fetched directly with full detail; category/search URLs are paginated.

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

Maximum products to return for each search query or category/search URL. 0 = unlimited (up to the page cap). Product URLs always return that single product.

## `fetchProductDetails` (type: `boolean`):

When on, each product is enriched with its detail page: full description, bullet specs, UPC and availability. Adds one request per product. Turn off for faster, list-only results.

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

Target store number used to resolve price and in-store availability (e.g. '3991'). Find it in the store URL on target.com/sl/. Leave blank for a default always-stocked store.

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

US ZIP code for delivery/pricing context. Defaults to 10001 (New York).

## `apiKey` (type: `string`):

Optional. Target's public web API key is built in; only set this if Target rotates it and the actor hasn't been updated yet.

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

Proxy settings. Default: Apify RESIDENTIAL — strongly recommended (datacenter IPs are rate-limited by Target's edge). Buyers pay proxy usage via Apify platform compute.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee maker"
  ],
  "urls": [],
  "maxProductsPerSearch": 60,
  "fetchProductDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset of product rows (tcin, title, brand, price, regular\_price, on\_sale, rating, review\_count, primary\_image, images, availability, upc, description, url, scraped\_at, parse\_confidence).

# 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 = {
    "searchQueries": [
        "coffee maker"
    ],
    "urls": [],
    "maxProductsPerSearch": 60
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/target-products").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 = {
    "searchQueries": ["coffee maker"],
    "urls": [],
    "maxProductsPerSearch": 60,
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/target-products").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 '{
  "searchQueries": [
    "coffee maker"
  ],
  "urls": [],
  "maxProductsPerSearch": 60
}' |
apify call bovi/target-products --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Target Scraper 🎯 Products, Prices, Stock, Images & UPC",
        "description": "Scrape **Target.com** products by keyword, category or product URL. Returns title, price, sale price, rating, reviews, brand, availability, UPC, description — and **images that actually populate**. Search & URL modes, reliable access, per-product pricing.",
        "version": "0.1",
        "x-build-id": "wBxfFSKFJxfanOwHg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/bovi~target-products/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-bovi-target-products",
                "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/bovi~target-products/runs": {
            "post": {
                "operationId": "runs-sync-bovi-target-products",
                "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/bovi~target-products/run-sync": {
            "post": {
                "operationId": "run-sync-bovi-target-products",
                "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": {
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords to search on Target.com (e.g. 'coffee maker', 'airpods', 'lego'). One product list is scraped per query. Leave empty if you only pass URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "urls": {
                        "title": "Target URLs",
                        "type": "array",
                        "description": "Target.com URLs. Product pages (/p/...-A-12345678), category pages (/c/...-N-abcde), or search pages (/s?searchTerm=...). Product URLs are fetched directly with full detail; category/search URLs are paginated.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxProductsPerSearch": {
                        "title": "Max products per query/URL",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum products to return for each search query or category/search URL. 0 = unlimited (up to the page cap). Product URLs always return that single product.",
                        "default": 60
                    },
                    "fetchProductDetails": {
                        "title": "Fetch product details",
                        "type": "boolean",
                        "description": "When on, each product is enriched with its detail page: full description, bullet specs, UPC and availability. Adds one request per product. Turn off for faster, list-only results.",
                        "default": true
                    },
                    "storeId": {
                        "title": "Store ID (pricing/availability)",
                        "type": "string",
                        "description": "Target store number used to resolve price and in-store availability (e.g. '3991'). Find it in the store URL on target.com/sl/. Leave blank for a default always-stocked store."
                    },
                    "zipCode": {
                        "title": "ZIP code",
                        "type": "string",
                        "description": "US ZIP code for delivery/pricing context. Defaults to 10001 (New York)."
                    },
                    "apiKey": {
                        "title": "API key (optional override)",
                        "type": "string",
                        "description": "Optional. Target's public web API key is built in; only set this if Target rotates it and the actor hasn't been updated yet."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Default: Apify RESIDENTIAL — strongly recommended (datacenter IPs are rate-limited by Target's edge). Buyers pay proxy usage via Apify platform compute.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
