Target Product Scraper - Pricing, Reviews, Inventory
Pricing
from $2.50 / 1,000 target product scrapeds
Target Product Scraper - Pricing, Reviews, Inventory
Scrape Target.com products, prices, UPCs, ratings, reviews, images, categories, and optional store-level inventory using Target’s RedSky API. Search by keyword or enrich TCINs/product URLs. Fast no-browser scraper with sale prices, PDP details, and shipping/pickup availability.
Pricing
from $2.50 / 1,000 target product scrapeds
Rating
0.0
(0)
Developer
Elliot Padfield
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Target Product Scraper - Prices, UPCs & Inventory
Scrape Target.com product search results, prices, sale prices, UPC barcodes, ratings, reviews, images, descriptions, category data, and optional store-level availability from Target's RedSky API.
This Actor is built for price monitoring, retail analytics, UPC enrichment, MAP compliance, affiliate catalogs, deal discovery, and SKU-level competitor research. It uses raw HTTPS requests to Target's RedSky API through Apify Residential Proxy, so it is much faster and cheaper than browser-driven Target scrapers.
What this Target scraper does
- Searches Target.com by keyword
- Enriches exact Target product URLs or TCINs
- Pulls current price, regular price, sale price, and discount percentage
- Extracts product title, TCIN, DPCI, brand, image URLs, bullets, and descriptions
- Fetches UPC barcodes and fuller PDP metadata when product detail enrichment is enabled
- Optionally fetches local shipping and pickup availability for a store, ZIP, and state
- Deduplicates TCINs across multiple keywords and records all matching keywords
- Uses Target RedSky endpoints directly, with no browser rendering
- Uses Apify Residential Proxy automatically
- Retries Target 429s, 5xxs, proxy failures, and RedSky captcha-block responses
Why use RedSky instead of a browser?
Target's website is a React storefront backed by RedSky JSON endpoints. The browser page is just the expensive way to get to the same product data. This Actor calls the same backend data surface directly, which means:
- Faster runs: one search request returns up to 24 products
- Lower memory: no Chromium instance
- Cleaner data: structured product JSON instead of fragile DOM selectors
- Better coverage: prices, reviews, UPCs, images, categories, and availability signals are exposed as fields
Input examples
Basic keyword search
{"searchQueries": ["wireless headphones", "coffee maker"],"maxProductsPerQuery": 50}
Pull UPCs, descriptions, and category data
{"searchQueries": ["running shoes"],"maxProductsPerQuery": 25,"includeProductDetails": true}
Check local availability
{"searchQueries": ["lego"],"maxProductsPerQuery": 100,"storeId": "3991","zip": "10001","state": "NY","includeProductDetails": true,"includeFulfillment": true}
Enrich specific Target products
{"productUrls": ["https://www.target.com/p/-/A-86696921"],"tcins": ["54191097"],"includeProductDetails": true,"includeFulfillment": true}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["wireless headphones"] | Target.com search keywords to scrape. |
queries | string[] | none | Alias for searchQueries. |
productUrls | string[] | none | Target product URLs. The Actor extracts TCINs automatically. |
tcins | string[] | none | Target Content Item Numbers to enrich directly. |
maxProductsPerQuery | integer | 100 | Maximum search products per keyword. Target returns 24 products per page. |
maxProducts | integer | none | Alias for maxProductsPerQuery, supported for compatibility with other Target scraper inputs. |
storeId | string | "3991" | Target store ID used for local pricing and fulfillment context. |
zip | string | "10001" | ZIP code for optional fulfillment checks. |
state | string | "NY" | Two-letter state code for optional fulfillment checks. |
includeProductDetails | boolean | true | Fetch PDP RedSky data for UPC, descriptions, bullets, and richer metadata. |
fetchProductDetails | boolean | none | Alias for includeProductDetails, supported for compatibility with other Target scraper inputs. |
includeFulfillment | boolean | false | Fetch store-level shipping and pickup availability per product. |
includeRawData | boolean | false | Attach raw RedSky fragments for debugging or custom parsing. |
dedupeProducts | boolean | true | Save one row per TCIN across all sources and collect all matched keywords. |
maxConcurrency | integer | 8 | Concurrent product detail and fulfillment requests. |
requestDelayMs | integer | 500 | Base retry delay in milliseconds. |
maxRetries | integer | 4 | Retries for transient failures and RedSky blocks. |
redskyApiKey | string | blank | Optional override. Leave blank for automatic key scrape plus fallback. |
Output fields
Product identity
| Field | Description |
|---|---|
title | Product title from Target. |
tcin | Target Content Item Number. |
dpci | Target DPCI when available. |
upc | UPC barcode from PDP enrichment when available. |
brand | Product brand. |
url | Target product URL. |
sourceType | search, tcin, or productUrl. |
sourceValue | Keyword, TCIN, or URL that produced the row. |
searchKeyword | First search keyword that discovered the product. |
searchKeywords | All matching keywords when dedupe is enabled. |
searchRank | Rank within the search result page sequence. |
searchPage | Search page number. |
Pricing
| Field | Description |
|---|---|
price | Current retail price. |
regularPrice | Regular non-sale price when Target exposes it. |
salePrice | Sale price when discounted. |
saveAmount | Dollar discount. |
savePercent | Percentage discount. |
formattedPrice | Display price string. |
formattedRegularPrice | Display regular price string. |
formattedSalePrice | Display sale price string. |
Ratings and media
| Field | Description |
|---|---|
rating | Average star rating. |
reviewCount | Number of reviews. |
imageUrl | Primary Target image URL. |
alternateImages | Additional Target image URLs. |
PDP enrichment
| Field | Description |
|---|---|
description | Short cleaned product description. |
bulletDescriptions | Product bullet/spec list. |
fullDescription | Fuller cleaned PDP description when exposed. |
category | Category label. |
categoryId | Category identifier. |
categoryBreadcrumbs | Breadcrumb path when exposed. |
isMarketplace | Whether the product appears to be marketplace sold. |
sellerName | Seller name when exposed. |
Availability enrichment
| Field | Description |
|---|---|
availabilityStatus | Shipping or pickup status from fulfillment data. |
inStock | Whether shipping or pickup appears in stock. |
shippingAvailable | Whether shipping is in stock. |
pickupAvailable | Whether pickup is in stock. |
shippingQuantity | Available-to-promise quantity when exposed. |
storeId | Store ID used for the run. |
zip | ZIP used for fulfillment checks. |
state | State used for fulfillment checks. |
Output example
{"title": "Sony WH-1000XM5 Wireless Noise Canceling Headphones","tcin": "86696921","dpci": "008-07-1234","upc": "027242923782","brand": "Sony","url": "https://www.target.com/p/-/A-86696921","searchKeyword": "wireless headphones","searchKeywords": ["wireless headphones", "noise cancelling headphones"],"searchRank": 1,"searchPage": 1,"sourceType": "search","sourceValue": "wireless headphones","price": 269.99,"regularPrice": 399.99,"salePrice": 269.99,"saveAmount": 130,"savePercent": 32.5,"formattedPrice": "$269.99","rating": 4.7,"reviewCount": 1842,"imageUrl": "https://target.scene7.com/is/image/Target/GUEST_abc123","alternateImages": ["https://target.scene7.com/is/image/Target/GUEST_def456"],"description": "Industry-leading noise cancellation | 30-hour battery life","bulletDescriptions": ["Industry-leading noise cancellation with Auto NC Optimizer","30-hour battery life with quick charging"],"category": "Headphones","categoryBreadcrumbs": "Electronics > Headphones > Wireless Headphones","availabilityStatus": "IN_STOCK","inStock": true,"shippingAvailable": true,"pickupAvailable": false,"shippingQuantity": 4,"storeId": "3991","zip": "10001","state": "NY","scrapedAt": "2026-05-31T22:00:00.000Z"}
Performance notes
- Search runs use
plp_search_v2, 24 products per request. - PDP enrichment uses
pdp_client_v1, one extra request per product. - Fulfillment enrichment uses
product_fulfillment_and_variation_hierarchy_v1, one extra request per product. - Keep
includeFulfillmentoff for broad catalog runs where inventory is not needed. - Keep
dedupeProductson for multi-keyword monitoring to avoid paying twice for the same TCIN.
Comparison
| Feature | This Actor | Basic RedSky Target scrapers | Browser-based Target scrapers | Generic retail scrapers |
|---|---|---|---|---|
| Search by keyword | Yes | Yes | Usually | Usually |
| Product URL and TCIN enrichment | Yes | Usually no | Usually | Sometimes |
| RedSky API engine | Yes | Yes | No | Mixed |
| No browser required | Yes | Yes | No | Mixed |
| UPC support | Yes, via PDP enrichment | Sometimes | Rare | Rare |
| Regular vs sale price split | Yes | Yes | Partial | Partial |
| Ratings and review counts | Yes | Yes | Usually | Sometimes |
| Category breadcrumbs | Yes, when exposed by PDP | Yes | Rare | Rare |
| Store-level price context | Yes | Yes | Sometimes | Sometimes |
| Store-level fulfillment checks | Yes, optional per TCIN | Usually no | Sometimes, slow | Usually no |
| Multi-keyword dedupe | Yes | Usually no | Usually no | Usually no |
| Raw response debugging | Optional | Usually no | No | No |
| RedSky key override | Yes | Usually no | Not applicable | Usually no |
The main difference is that this Actor is built as a production catalog tool, not only a keyword scraper. It supports the competitor-style keyword workflow, but also accepts exact product URLs and TCINs, can check fulfillment, dedupes repeated TCINs across keywords, and exposes compatibility aliases for maxProducts and fetchProductDetails.
Pricing
This Actor is designed for pay-per-result pricing. One saved Target product row counts as one result. Failed requests, skipped duplicate TCINs, and enrichment failures that do not produce a dataset row should not count as saved results.
For broad monitoring runs, disable includeFulfillment unless you need inventory. PDP enrichment is the right default for catalog-quality output because it unlocks UPCs, fuller descriptions, and category data.
Code examples
From the Apify API
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~target-products-prices-inventory-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["wireless headphones"],"maxProducts": 25,"storeId": "3991","fetchProductDetails": true}'
From Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("YOUR_USERNAME/target-products-prices-inventory-scraper").call(run_input={"searchQueries": ["coffee maker", "espresso machine"],"maxProductsPerQuery": 50,"includeProductDetails": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item.get("price"), item.get("upc"))
From Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('YOUR_USERNAME/target-products-prices-inventory-scraper').call({searchQueries: ['gaming monitor'],maxProducts: 40,storeId: '3991',fetchProductDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.table(items.map((item) => ({title: item.title,price: item.price,upc: item.upc,rating: item.rating,})));
Reliability notes
Target can captcha-block direct datacenter and home IP requests to RedSky. This Actor forces Apify Residential Proxy and classifies RedSky captcha JSON as retryable. If Target rotates its RedSky API key, the Actor first tries to scrape a fresh key from public Target pages. You can also pass redskyApiKey explicitly if you have a known-good key from browser recon.
If a product detail or fulfillment call fails, the Actor keeps the search result row and logs the enrichment failure instead of discarding the product. Failed search pages stop that keyword only; other keywords and TCINs continue.
FAQ
Do I need a Target account?
No. The Actor reads public Target product/search data exposed to guest shoppers through RedSky. RedCard member pricing and authenticated account-only data are not supported.
How do I find my Target store ID?
Open Target.com, choose a store, then inspect the URL or Network tab for store_id. Common examples include 3991, 1375, 2775, and 1462.
Does this scrape individual reviews?
No. It returns aggregate rating and review count. Individual review extraction would need a separate reviews endpoint workflow.
Does this support category URLs?
Not directly. Use a category-specific keyword such as women's running shoes, or pass exact product URLs/TCINs when you already know the catalog items.
Is this legal?
This Actor is intended for public product, price, and availability information visible to ordinary Target shoppers. Review Target's terms and get legal advice for your specific use case.
Use cases
- Price monitoring for Target SKUs
- UPC enrichment for catalog matching
- MAP compliance checks
- Sale and markdown tracking
- Affiliate product feeds
- Retail competitor intelligence
- Local inventory checks by store
- Building historical Target pricing datasets
Migration from other Target scrapers
The common competitor input below works here too:
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~target-products-prices-inventory-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["lego"],"maxProducts": 50,"storeId": "3991","fetchProductDetails": true}'
You can then add this Actor's extra options, such as includeFulfillment, productUrls, tcins, dedupeProducts, and includeRawData, when you need a richer workflow.
Changelog
- v1.0.0 - Initial RedSky-based Target scraper with keyword search, TCIN/product URL enrichment, PDP details, UPCs, ratings, pricing, images, category data, optional fulfillment, Apify schemas, and compatibility aliases.