# Target Product Scraper (`parsebird/target-product-scraper`) Actor

Scrape Target.com product listings by keyword or search URL: title, TCIN, brand, price, ratings, shipping, images, and promotions. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/target-product-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 products

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Product Scraper

Scrape product listings from [Target.com](https://www.target.com/) search by keyword or search URL and get clean, structured data — prices, TCINs, brands, ratings, images, and promotions — with no Target API key and no browser automation.

<table><tr>
<td style="border-left:4px solid #CC0000;padding:12px 16px;font-weight:600">
Search Target.com by keyword or paste a search URL, sort by relevance or newest, include or exclude sponsored products, and get 20+ structured fields per product — price, comparison price, savings, rating, item type, marketplace flag, images, and promotions — ready for JSON, CSV, or Excel.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Use the Apify actor "parsebird/target-product-scraper" via the ApifyClient. Example (Python): from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/target-product-scraper").call(run_input={"keyword": "coffee maker", "sort_by": "relevance", "results_wanted": 50, "max_pages": 5, "include_sponsored": True}); items = list(client.dataset(run["defaultDatasetId"]).iterate_items()). Key inputs: keyword (string search term) OR startUrl (a https://www.target.com/s?searchTerm=... URL), sort_by ("relevance" or "newest"), results_wanted (integer, default 20), max_pages (integer, default 10, 24 products per page), include_sponsored (boolean, default true), proxyConfiguration (defaults to Apify Proxy UNBLOCKER group, which is required). Output fields per product: position, page, search_keyword, sort_by, tcin, parent_tcin, title, brand, formatted_current_price, current_retail, formatted_current_price_type, formatted_comparison_price, reg_retail, save_percent, rating_average, rating_count, is_marketplace, is_sponsored, item_type, department_id, category_id, buy_url, primary_image_url, alternate_image_urls, promotions, current_page, total_pages, total_results, result_offset, scraped_at. Full API spec: https://apify.com/parsebird/target-product-scraper/api. Get an API token at https://console.apify.com/settings/integrations.
```

### What does Target Product Scraper do?

Target Product Scraper extracts search results from [Target.com](https://www.target.com/) the same way the Target website loads them — from Target's own product data — so you get structured fields instead of text scraped off a rendered page. It is a lightweight **Target.com API alternative**: no reverse-engineering, no headless browser, no login.

🔎 **Two ways to search** — type a keyword and let the actor build the search, or paste a Target search URL (`https://www.target.com/s?searchTerm=...`) and the search term and sort order are read straight from the URL.

↕️ **Sort control** — order results by relevance or by newest, matching Target's own sort options.

📄 **Automatic pagination** — set a `results_wanted` target and the Target scraper pages through results (24 products per page) on its own, de-duplicating listings and stopping at Target's ~1,000-product search ceiling.

🏷️ **Sponsored filtering** — keep or drop sponsored (paid placement) products with a single toggle.

💲 **Rich per-product data** — current price, comparison ("was") price, percent saved, average rating and rating count, item type, department and category IDs, marketplace-seller flag, direct product URL, primary and alternate image URLs, and active promotions.

☁️ **Runs on Apify** — [schedule](https://docs.apify.com/platform/schedules) recurring runs, call it from the [API](https://docs.apify.com/api/v2), connect it to [integrations](https://apify.com/integrations) (Make, Zapier, n8n, Google Sheets, Slack), and export as JSON, CSV, Excel, or XML.

### What data can you extract from Target.com?

| Field | Description |
|-------|-------------|
| `title` | Product name as shown on the Target listing card |
| `tcin` / `parent_tcin` | Target product identifier and its parent (variation) identifier |
| `brand` | Brand name |
| `formatted_current_price` | Displayed price or price range, e.g. `$28.99` |
| `current_retail` | Numeric current price when a single value is available |
| `formatted_comparison_price` / `reg_retail` | "Was" price shown on sale items, and the regular retail number |
| `save_percent` | Percent discount when the product is on sale |
| `rating_average` / `rating_count` | Average star rating and number of ratings (present when the product has reviews) |
| `is_marketplace` | Whether the product is sold by a Target Plus marketplace seller |
| `is_sponsored` | Whether the listing is a sponsored (paid) placement |
| `item_type` | Target's product classification, e.g. `Coffee Makers` |
| `department_id` / `category_id` | Target department and category identifiers |
| `buy_url` | Direct Target product page URL |
| `primary_image_url` / `alternate_image_urls` | Main image URL and additional image URLs |
| `promotions` | Active promotions (BOGO, spend-and-save, Circle offers) when present |
| `position` / `page` | Rank in the result flow and the listing page it came from |
| `total_results` / `total_pages` | Result counts Target reports for the search |
| `scraped_at` | ISO 8601 collection timestamp |

See the [Output example](#output-example) below for the full record shape. Download results in JSON, CSV, Excel, or XML.

### How to scrape Target.com product data

1. Click **Try for free** / **Start** to open the Target Product Scraper.
2. Enter a **Search keyword** (for example `coffee maker`) — or paste a **Start URL** such as `https://www.target.com/s?searchTerm=coffee+maker&sortBy=newest`.
3. Pick a **Sort by** order (relevance or newest) and set **Results wanted** and **Max pages**.
4. Leave **Include sponsored products** on to collect everything, or turn it off for organic results only.
5. Keep the default **Proxy configuration** (Apify Proxy UNBLOCKER group) — it is required to reach Target.
6. Press **Start**. Watch the run log; results stream into the dataset as they are collected.
7. Open the **Storage** tab and export as JSON, CSV, Excel, or XML, or pull them from the [API](https://docs.apify.com/api/v2).

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `keyword` | string | Yes\* | `womens tops` | Search term used to collect products. Provide this or `startUrl`. |
| `startUrl` | string | Yes\* | — | A Target search URL (`https://www.target.com/s?searchTerm=...`). Search term and sort order are read from the URL. |
| `sort_by` | string | No | `relevance` | Result order: `relevance` or `newest`. A sort in `startUrl` wins. |
| `results_wanted` | integer | No | `20` | Maximum number of products to save. Minimum `1`. |
| `max_pages` | integer | No | `10` | Maximum listing pages to process. 24 products per page. Minimum `1`. |
| `include_sponsored` | boolean | No | `true` | Include sponsored (paid placement) products. |
| `proxyConfiguration` | object | No | UNBLOCKER | Apify Proxy settings. The UNBLOCKER group is the default and is required. |

\* Provide either `keyword` or a valid `startUrl`.

#### Input examples

**Basic keyword search** — collect up to 20 products for a Target search term:

```json
{
    "keyword": "womens tops",
    "results_wanted": 20
}
```

**Collection from a Target search URL:**

```json
{
    "startUrl": "https://www.target.com/s?searchTerm=womens+tops",
    "results_wanted": 50,
    "max_pages": 5
}
```

**Newest products without sponsored listings:**

```json
{
    "keyword": "running shoes",
    "sort_by": "newest",
    "results_wanted": 100,
    "max_pages": 10,
    "include_sponsored": false
}
```

### Output example

```json
{
    "position": 2,
    "page": 1,
    "search_keyword": "air fryer",
    "sort_by": "newest",
    "tcin": "95284755",
    "parent_tcin": "95284755",
    "title": "Ninja Double Oven Pro Smart XL Countertop Oven and Air Fryer",
    "brand": "Ninja",
    "formatted_current_price": "$399.99",
    "current_retail": 399.99,
    "formatted_current_price_type": "reg",
    "reg_retail": 399.99,
    "rating_average": 4.75,
    "rating_count": 4,
    "is_marketplace": false,
    "is_sponsored": false,
    "item_type": "Electric Fryers",
    "department_id": 72,
    "category_id": "ncrpx",
    "buy_url": "https://www.target.com/p/ninja-double-oven-pro-smart-xl-countertop-oven-and-air-fryer/-/A-95284755",
    "primary_image_url": "https://target.scene7.com/is/image/Target/GUEST_16615f8a-b2be-4408-8b31-424096ea02f9",
    "alternate_image_urls": [
        "https://target.scene7.com/is/image/Target/GUEST_74561c3f-dad0-48dd-b1f3-f6865d89b265"
    ],
    "promotions": [],
    "current_page": 1,
    "total_pages": 9,
    "total_results": 210,
    "result_offset": 0,
    "scraped_at": "2026-08-26T11:37:07.000Z"
}
```

### Use cases

- 💰 **Price monitoring** — track Target prices, discounts, and "was" prices for a set of keywords on a schedule.
- 📊 **Competitor and market research** — pull a full category's assortment, brands, and price bands from Target search.
- 🧭 **Assortment tracking** — watch which products rank for a keyword, and how sponsored placements shift over time.
- 🛍️ **Catalog and feed building** — collect titles, images, TCINs, and product URLs to seed a product database.
- ⭐ **Review-signal analysis** — combine `rating_average` and `rating_count` to find top-rated products in a niche.
- 🤖 **AI and RAG pipelines** — feed structured Target product data to agents and LLM workflows via the Apify API or [MCP](https://docs.apify.com/platform/integrations/mcp).

### How it works

1. The actor takes your `keyword` (or the `searchTerm` from your `startUrl`) and queries Target.com's own search backend page by page.
2. Requests are routed through the Apify Proxy UNBLOCKER group, which clears Target's anti-bot CAPTCHA wall.
3. Each product in the response is normalized into a flat record, HTML entities are decoded, and sponsored duplicates of organic listings are removed.
4. Records stream into the dataset as they are collected, so partial results are always available.
5. Pagination stops when `results_wanted` is reached, `max_pages` is hit, or Target runs out of results (its search returns roughly 1,000 products per term).

### How much does it cost to scrape Target.com?

This actor uses **pay-per-result** pricing through a single event, `product-scraped`, charged once per product saved to the dataset.

| Plan tier | Price per 1,000 products |
|-----------|--------------------------|
| Free | **$0.90** |
| Bronze / Silver / Gold | **$0.80** |

Collecting 1,000 Target products costs about **$0.80–$0.90** plus a small amount of Apify Proxy and compute usage. Your Apify plan's monthly usage credits apply. Example: `results_wanted: 200` costs roughly **$0.16–$0.18**.

### FAQ

**Do I need a Target API key or a Target account?**
No. The actor reads Target.com's public search data. There is nothing to authenticate.

**Why is a proxy required?**
Target.com is protected by an anti-bot CAPTCHA wall that blocks datacenter and plain residential traffic. The Apify Proxy **UNBLOCKER** group clears the challenge and is set as the default `proxyConfiguration`. Runs without it will fail.

**How many products can I get per keyword?**
Target's search returns roughly 1,000 products (about 50 pages of 24) for a given term, regardless of the reported `total_results`. Use narrower keywords or the `newest` sort to reach different slices of a large category.

**Can I scrape a Target category page?**
Paste the `/s?searchTerm=...` search URL for the category. Pure `/c/` category-browse URLs are converted to a keyword from the URL slug as a best effort.

**Are sponsored products included?**
Yes by default. Set `include_sponsored` to `false` to keep only organic results. Sponsored listings are flagged with `is_sponsored: true`.

**Is shipping availability included?**
Target's search response does not carry per-item stock status, so `shipping_availability` and `scheduled_delivery_availability` are only present when Target exposes them. For live fulfillment data, pass the `buy_url` values to a product-detail scraper.

**Can I schedule recurring runs?**
Yes. Use Apify [Schedules](https://docs.apify.com/platform/schedules) to run the Target scraper hourly, daily, or weekly, and send results to [integrations](https://apify.com/integrations) like Google Sheets, Make, Zapier, or a webhook.

**How do I call it from code?**

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/target-product-scraper").call(run_input={
    "keyword": "coffee maker",
    "sort_by": "relevance",
    "results_wanted": 100,
    "max_pages": 10,
    "include_sponsored": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item.get("formatted_current_price"))
```

JavaScript:

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/target-product-scraper').call({
    keyword: 'coffee maker',
    sort_by: 'relevance',
    results_wanted: 100,
    max_pages: 10,
    include_sponsored: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Something looks wrong or missing.**
Open an issue on the **Issues** tab with the input you used. Feedback is welcome and helps keep the Target Product Scraper reliable.

### Is it legal to scrape Target.com?

Web scraping of publicly available data is legal in most jurisdictions, including the US and EU, when you do not collect personal data or bypass authentication. This actor only reads public Target.com product listings — no login, no personal data. You are responsible for how you use the collected data, including compliance with Target's Terms of Service, applicable laws (GDPR, CCPA), and copyright. See Apify's [guide to the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for background.

### Related Apify actors

- [Trendyol Product Scraper](https://apify.com/parsebird/trendyol-product-scraper) — products, reviews, and Q\&A from Trendyol
- [AliExpress Scraper](https://apify.com/parsebird/aliexpress-scraper) — AliExpress product and pricing data
- [Shopify Products Scraper](https://apify.com/parsebird/shopify-products-scraper) — full product catalogs from any Shopify store
- [MercadoLibre Search Scraper](https://apify.com/parsebird/mercadolibre-search-scraper) — MercadoLibre search results across Latin American marketplaces
- [Hepsiburada Scraper](https://apify.com/parsebird/hepsiburada-scraper) — Hepsiburada products, reviews, and Q\&A

Browse the full [ParseBird actor collection](https://apify.com/parsebird) for more e-commerce and marketplace scrapers.

# Actor input Schema

## `keyword` (type: `string`):

Enter a search term to collect products from Target, for example 'coffee maker' or 'womens tops'. Provide this or a Start URL.

## `startUrl` (type: `string`):

Paste a Target search URL (https://www.target.com/s?searchTerm=...). The search term and sort order are read from the URL. Provide this or a keyword.

## `sort_by` (type: `string`):

Choose the result order applied on Target's own search. A sort order in a Start URL takes precedence.

## `results_wanted` (type: `integer`):

Set the maximum number of products to save. Target's search returns roughly 1,000 products per term.

## `max_pages` (type: `integer`):

Limit how many listing pages to request. Each page holds 24 products.

## `include_sponsored` (type: `boolean`):

Keep sponsored (paid placement) products in the dataset. Turn off to collect organic results only.

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

Target.com is protected by an anti-bot CAPTCHA wall. The Apify Proxy UNBLOCKER group clears it and is used by default; the actor cannot collect data without it.

## Actor input object example

```json
{
  "keyword": "womens tops",
  "sort_by": "relevance",
  "results_wanted": 20,
  "max_pages": 10,
  "include_sponsored": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "keyword": "womens tops",
    "startUrl": "",
    "results_wanted": 20,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {
    "keyword": "womens tops",
    "startUrl": "",
    "results_wanted": 20,
    "max_pages": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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 '{
  "keyword": "womens tops",
  "startUrl": "",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call parsebird/target-product-scraper --silent --output-dataset

```

## MCP server setup

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