# Target Reviews Scraper (`shahidirfan/target-reviews-scraper`) Actor

Scrape Target product reviews at scale with ratings, customer feedback, and detailed insights. Extract structured data with automatic pagination and filtering. Ideal for market research, sentiment analysis, and competitive intelligence. Get actionable consumer insights instantly.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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 Product Reviews Scraper

Extract detailed guest ratings and reviews from a single Target product page. Collect review text, star ratings, reviewer signals, media links, and aggregate rating metrics in a clean dataset ready for analysis and automation.

---

### Features

- **Single-product focus** - Collect review data for one Target product URL or TCIN per run.
- **Deep review coverage** - Capture title, text, rating, author nickname, badges, votes, timestamps, and media links.
- **Auto key resolution** - Automatically resolves the review endpoint key from the product page configuration.
- **Reliable pagination** - Collect reviews page by page until the requested result limit is reached.
- **Null-free output** - Empty and null fields are removed from each dataset item.

---

### Use Cases

#### Product Quality Audits
Track recurring complaints and positive themes across review text to spot fit, quality, or durability issues quickly.

#### Voice of Customer Dashboards
Build structured datasets for BI tools and monitor rating shifts, recommendation rate changes, and review volume trends.

#### Merchandising Decisions
Compare customer sentiment and review momentum before promoting products in campaigns or seasonal assortments.

#### Competitive Content Analysis
Analyze review language, image usage, and verified buyer behavior across products in the same category.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `productUrl` | String | No | Example prefill | Target product URL containing `/A-<TCIN>`. |
| `productId` | String | No | Example prefill | Optional TCIN override (takes precedence over URL parsing). |
| `results_wanted` | Integer | No | `20` | Maximum number of reviews to collect. |
| `proxyConfiguration` | Object | No | Disabled | Proxy settings for reliability. |

---

### Output Data

Each dataset item can include:

| Field | Type | Description |
|---|---|---|
| `product_id` | String | Product TCIN used for the run. |
| `product_url` | String | Product URL for the review source. |
| `review_id` | String | Unique review identifier. |
| `rating` | Integer | Star rating value. |
| `title` | String | Review title. |
| `text` | String | Full review text. |
| `author_nickname` | String | Public reviewer nickname. |
| `is_verified` | Boolean | Verified purchaser signal. |
| `is_recommended` | Boolean | Whether reviewer recommends the product. |
| `photos` | Array | Review photo URLs when available. |
| `videos` | Array | Review video URLs when available. |
| `feedback_helpful` | Integer | Helpful votes count. |
| `feedback_unhelpful` | Integer | Unhelpful votes count. |
| `submitted_at` | String | Original submission timestamp. |
| `modified_at` | String | Last modification timestamp. |
| `statistics_average_rating` | Number | Product average rating at scrape time. |
| `statistics_rating_count` | Integer | Product total rating count. |
| `statistics_review_count` | Integer | Product total review count. |
| `statistics_rating_distribution` | Object | Distribution of rating counts by star level. |
| `page` | Integer | Source page index for the review. |
| `position` | Integer | Sequential output position in the run. |
| `scraped_at` | String | Timestamp when this record was saved. |

---

### Usage Examples

#### Collect All Reviews From Product URL

```json
{
	"productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
	"results_wanted": 61
}
````

#### Collect By Product ID

```json
{
	"productId": "94913194",
	"results_wanted": 20
}
```

#### Collect With Proxy Configuration

```json
{
	"productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
	"results_wanted": 40,
	"proxyConfiguration": {
		"useApifyProxy": true,
		"apifyProxyGroups": ["RESIDENTIAL"]
	}
}
```

***

### Sample Output

```json
{
	"product_id": "94913194",
	"product_url": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
	"position": 1,
	"page": 0,
	"review_id": "1d44b330-317a-4e69-829a-ef7b9fb39a2d",
	"rating": 5,
	"title": "Great top",
	"text": "Love this tank top. It fits perfectly and feels great.",
	"author_nickname": "Christina",
	"is_recommended": true,
	"is_verified": false,
	"feedback_helpful": 0,
	"submitted_at": "2026-04-05T16:09:21+05:00",
	"statistics_average_rating": 3.56,
	"statistics_rating_count": 101,
	"statistics_review_count": 61,
	"scraped_at": "2026-04-07T10:00:00.000Z"
}
```

***

### Tips For Best Results

#### Start With Default Limits

Use the default values first to validate data quality quickly, then expand review volume after confirming output.

#### Use Target Product URLs

Provide full product URLs with `/A-<TCIN>` to avoid ID ambiguity and reduce setup errors.

#### Segment Review Runs

Use multiple runs with different product IDs and result limits to build larger review datasets safely.

#### Use Proxy For Stability

For larger runs or scheduled workflows, enable residential proxy settings for consistent collection.

***

### Integrations

- **Google Sheets** - Share review datasets with non-technical teams.
- **Airtable** - Build searchable review intelligence tables.
- **Make** - Trigger downstream workflows after each run.
- **Zapier** - Send review updates into CRM and support tools.
- **Webhooks** - Stream fresh review data to custom systems.

#### Export Formats

- **JSON** - Data engineering and API workflows
- **CSV** - Spreadsheet analysis
- **Excel** - Reporting and presentations
- **XML** - Legacy system integrations

***

### Frequently Asked Questions

#### Can I scrape by product ID only?

Yes. Set `productId` and run without a URL.

#### How do I fetch all reviews?

Set `results_wanted` to a value higher than expected review count. The actor paginates until it reaches the limit or runs out of pages.

#### Why do some fields appear on some reviews only?

Review content varies by reviewer activity. The actor saves only fields that are present and non-empty.

#### Can I filter to only high ratings?

No. This version collects all available ratings in source order.

#### Does this include review photos?

Yes. When available, photo URLs are included in the `photos` field.

***

### Support

For issues or feature requests, use Apify Console support channels.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection and analysis. You are responsible for using the data in compliance with applicable terms and laws.

# Actor input Schema

## `productUrl` (type: `string`):

Target product URL. The actor extracts the TCIN from /A-<TCIN>.

## `productId` (type: `string`):

Optional TCIN. If provided, this is used directly and overrides URL parsing.

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

Maximum number of reviews to save.

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

Proxy settings for reliable requests.

## Actor input object example

```json
{
  "productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
  "productId": "94913194",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
    "productId": "94913194",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/target-reviews-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 = {
    "productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
    "productId": "94913194",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/target-reviews-scraper").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 '{
  "productUrl": "https://www.target.com/p/women-s-slim-fit-modern-ribbed-button-front-tank-top-a-new-day/-/A-94913194",
  "productId": "94913194",
  "results_wanted": 20
}' |
apify call shahidirfan/target-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Target Reviews Scraper",
        "description": "Scrape Target product reviews at scale with ratings, customer feedback, and detailed insights. Extract structured data with automatic pagination and filtering. Ideal for market research, sentiment analysis, and competitive intelligence. Get actionable consumer insights instantly.",
        "version": "1.0",
        "x-build-id": "WsffCybmOsF9QOSqD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~target-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-target-reviews-scraper",
                "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/shahidirfan~target-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-target-reviews-scraper",
                "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/shahidirfan~target-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-target-reviews-scraper",
                "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": {
                    "productUrl": {
                        "title": "Product URL",
                        "type": "string",
                        "description": "Target product URL. The actor extracts the TCIN from /A-<TCIN>."
                    },
                    "productId": {
                        "title": "Product ID (TCIN)",
                        "type": "string",
                        "description": "Optional TCIN. If provided, this is used directly and overrides URL parsing."
                    },
                    "results_wanted": {
                        "title": "Maximum Number of Reviews",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to save.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for reliable requests.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
