Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Target.com Product Scraper icon

Target.com Product Scraper

Scrape Target.com by keyword, category or product link. TCIN, price, promotions, rating, shipping and store pickup stock, images and URL. No API key.

19 runs on Apify $0.00078 per product ($0.78 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, startUrls, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00078 per product = $0.78 per 1,000

You are charged forWhenPrice
Product returnedOne product returned in the dataset. Similarity fallbacks, diagnostics and the labelled sample row are not charged.$0.00078

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsWhat to look up on target.com, one per line — "air fryer", "lego", "paper towels". Each term is searched separately and every product it returns becomes a row.array
startUrlsPaste Target pages instead of typing terms. Search pages (https://www.target.com/s?searchTerm=air+fryer), category and brand pages (…/-/N-5xtg6) and single product pages (…/-/A-92084780) all work, mixed together. Product links always come back with the full description.array
maxItemsHard cap on products returned across everything above. You pay per product, so this is what bounds the bill. Target stops any one search or category at 1,227 products.integer
zipCodeA five-digit US postcode, for example 55403. Sets prices and pickup stock to the nearest Target store. Leave it empty to get the prices target.com shows an online shopper who has not chosen a store.string
includeAvailabilityLook up whether each product ships, is sold out, and — when a postcode is set — whether it is on the shelf for pickup. Costs one extra request per 30 products.boolean
includeFullDetailFetch each product's own page data for the long description and the star-by-star review breakdown. This is one extra request per product, so a 500-product run takes noticeably longer. Product links pasted into "Target URLs" always get this regardless.boolean

What you get

A structured dataset — each result includes fields like:

titlebrandpriceregularPriceonSalesavingsPercentratingreviewCountonlineAvailabilitypickupAvailabilitypromotionsprimaryImagetcinurl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Target.com Product Scraper

Pulls product data out of Target, the US retailer, as structured rows.

Type a search term, paste a category link, or paste a single product link. You get one row per product: TCIN, title, brand, the price Target is showing right now, whether it is marked down, any promotion attached to it, star rating and review count, whether it ships, whether it is on the shelf at a store you name, the image set, and the product URL.

No account, no API key, no cookies to paste. You put in words or links, you get rows.

A real row

This came back from a live run, trimmed only where the image list repeats:

{
  "tcin": "92084780",
  "title": "Gourmia Digital 3qt Air Fryer with Guided Cooking Prompts Black/Stainless Steel Finish",
  "brand": "Gourmia",
  "url": "https://www.target.com/p/digital-3qt-air-fryer-with-guided-cooking-prompts-black-stainless-steel-finish/-/A-92084780",
  "price": 39.99,
  "formattedPrice": "$39.99",
  "regularPrice": 39.99,
  "comparisonPrice": null,
  "onSale": false,
  "savingsAmount": null,
  "savingsPercent": null,
  "unitPrice": null,
  "unitPriceSuffix": null,
  "priceType": "reg",
  "priceNote": null,
  "pricedAtStoreId": "3991",
  "promotions": [],
  "rating": 4.18,
  "reviewCount": 471,
  "onlineAvailability": "IN_STOCK",
  "soldOut": false,
  "outOfStockInAllStores": false,
  "pickupAvailability": "IN_STOCK",
  "pickupStoreId": "1375",
  "pickupStoreName": "Mpls Nicollet Mall",
  "pickupQuantity": 6,
  "scheduledDeliveryAvailability": "IN_STOCK",
  "shipsBy": "2026-09-21",
  "primaryImage": "https://target.scene7.com/is/image/Target/GUEST_6ec22cbf-b531-4468-86ce-f0194548211b",
  "images": ["https://target.scene7.com/is/image/Target/GUEST_6ec22cbf-b531-4468-86ce-f0194548211b", "..."],
  "dpci": "072-04-6561",
  "upc": null,
  "itemType": "Electric Fryers",
  "departmentId": "72",
  "classId": "4",
  "categoryId": "ncrpx",
  "highlights": [
    "3-quart air fryer can cook for one or a few",
    "8 One-Touch Cooking Functions eliminate guesswork"
  ],
  "specifications": [
    "Dimensions (Overall): 10.47 Inches (H) x 11.46 Inches (W) x 8.98 Inches (D)",
    "Capacity (Volume): 3 Quart"
  ],
  "description": null,
  "ratingDistribution": null,
  "searchTerm": "air fryer",
  "position": 1,
  "scrapedAt": "2026-09-19T20:14:02.115Z"
}

A sale row looks like this instead. onSale flips, and the old price and the saving come with it:

{
  "price": 2.69,
  "formattedPrice": "$2.69",
  "regularPrice": 2.69,
  "comparisonPrice": 2.99,
  "onSale": true,
  "savingsAmount": 0.3,
  "savingsPercent": 10,
  "unitPrice": "$0.36",
  "unitPriceSuffix": "/ounce",
  "promotions": [
    {
      "message": "Buy 1 get 1 50% off M&M's, Reese's & more candy",
      "promotionId": "941468854",
      "type": "BOGO",
      "thresholdType": "quantity",
      "thresholdValue": 1,
      "rewardType": "PercentageOff",
      "rewardValue": 50
    }
  ]
}

Input

Three ways in, and you can mix them in one run.

{
  "searchTerms": ["air fryer", "paper towels"],
  "maxItems": 200
}
{
  "startUrls": [
    "https://www.target.com/c/air-fryers-kitchen-appliances/-/N-5xtg6",
    "https://www.target.com/b/gourmia/-/N-qhfwe",
    "https://www.target.com/p/-/A-92084780"
  ],
  "maxItems": 100
}

Add a postcode and the prices and the pickup stock change to a real shop instead of Target's online default:

{
  "searchTerms": ["milk", "bread"],
  "zipCode": "55403",
  "maxItems": 50
}
FieldWhat it does
searchTermsOne search per line. Every product the search returns becomes a row.
startUrlsTarget search, category, brand or product links. Product links always come back with the long description.
maxItemsHard cap on rows across everything above. This is what bounds the bill.
zipCodeFive-digit US postcode. Prices and pickup stock come from the nearest store.
includeAvailabilityOn by default. Stock for every row. One extra request per 30 products.
includeFullDetailOff by default. Long description and the star-by-star review split, at one extra request per product.
proxyConfigurationLeave it alone unless you need a specific network.

Pickup stock needs a postcode

Without zipCode you get Target's online view: onlineAvailability, soldOut, scheduledDeliveryAvailability and shipsBy are filled, and the three pickup fields come back null. That is not a gap in the data, it is Target answering as a shopper who has not picked a store.

Set zipCode and the run resolves the nearest shop once, then pickupAvailability, pickupStoreId, pickupStoreName and pickupQuantity fill in, pickupQuantity being the number of units that store says it has. Prices move too: pricedAtStoreId changes from 3991, Target's online store number, to the real shop's, and grocery prices in particular are not the same in both.

How many products you can get

Target stops any single search or category at 1,227 products: 1,199 as a starting offset plus a final page of 28. That is its limit, not the scraper's. If you need deeper coverage of a big category, split it: search the sub-categories separately, or narrow the term.

maxItems goes up to 2,000 across a whole run, so several searches in one go can exceed 1,227 in total.

Pricing

You are charged per product row. Nothing else bills.

  • Sample rows and diagnostic rows are free. If you start a run with nothing filled in, you get one

row explaining what to put where, and it costs nothing.

  • A term Target stocks nothing for writes a free diagnostic row. See below, because this one is

worth understanding.

  • A product link that Target no longer recognises writes a free diagnostic row.
  • A run that is refused and retried still costs nothing beyond the products it actually delivered.

maxItems is the ceiling on the bill, so set it to what you are willing to pay for.

Searching for something Target does not sell

Target never answers a search with "no matches". Ask it for "uranium hexafluoride" and it returns HTTP 200, a page of 28 products, and a total of 206, none of which have anything to do with the question. Handing those over would bill you for noise, so the first page of every keyword search is checked against the words you searched for, and if essentially none of the results mention any of them you get a free diagnostic row instead of 28 charges.

The check was calibrated on 66 real shopping terms and 12 that Target stocks nothing for. None of the 66 real terms was rejected, including awkward ones like "bed sheets", where the products are all titled "Sheet Set", and "sous vide immersion circulator". It is deliberately loose in the other direction: a term like "aircraft turbine blade" gets through, because Target genuinely sells things with "blade" in the title and dropping a real result is worse than passing on a weak one.

Category and brand links skip this check entirely, since there is no query to compare against.

What this does not do

Worth reading before you buy.

  • Review text. You get the star average, the review count, and with includeFullDetail the

count at each star. The written reviews themselves are a different data set and are not here.

  • Stock at more than one store. Pickup stock is for the single nearest store to the postcode

you gave. Asking "which of these 40 shops has it" is a different job.

  • Variants as separate rows. A shirt in six colours is one row, the one Target shows in the

listing. Sizes and colours are not expanded.

  • Anything behind a sign-in. Circle member pricing, your order history, cart behaviour. None

of that is reachable and none of it is attempted.

  • Non-US Target. This is target.com. Target Australia is a different company entirely.
  • upc on listing rows. The barcode only exists on the product's own page data, so it is

filled when includeFullDetail is on or when you pasted a product link, and null otherwise. Same for description and ratingDistribution.

  • Sponsored placements. Paid ad slots inside Target's search results are skipped. You get the

catalogue, not the ads. If you specifically want to study ad placements, this is the wrong tool.

Things that will trip you up

Target's prices move. The price in a row is what target.com was showing at scrapedAt, for the store in pricedAtStoreId. Two runs an hour apart can honestly disagree.

regularPrice is not always the "before" price. When something is marked down, Target puts the old price in comparisonPrice and leaves regularPrice equal to the current one. Read onSale first, then comparisonPrice.

A category link is a node id. https://www.target.com/c/anything/-/N-5xtg6: the 5xtg6 at the end is what matters and the words before it are decoration. Brand pages use the same shape, so /b/gourmia/-/N-qhfwe works too.

Searching a very broad word is slower than it looks. "shoes" has tens of thousands of matches and pages 28 at a time, so a 1,000-row run is 36 requests. maxItems is your friend.

FAQ

Does this need a Target account or an API key? No. Nothing is logged in, nothing is stored, and there is no key to obtain.

Can I scrape a whole category? Up to 1,227 products of it, which is Target's own ceiling. Beyond that, split the category.

Can I get prices for my local store? Yes. Set zipCode. The run finds the nearest shop and prices against it. Grocery and seasonal items are where you see the difference most.

How do I monitor a fixed list of products? Put their product links in startUrls and schedule the run. Each link returns one row with the full description, price, promotion and stock. TCINs are stable, so the rows line up run to run.

What is a TCIN? Target's own product number: the digits after A- in a product URL. It is the id you want as a join key. dpci is Target's internal shelf number and is useful in stores; upc is the manufacturer's barcode, when Target publishes one.

Why is pickupQuantity sometimes null while pickupAvailability says IN_STOCK? Target does not publish a unit count for every item. The status is the reliable field; the count is a bonus when it is there.

Does it get blocked? It handles refusals itself: a refused request is retried on a different route, and if a search genuinely cannot be completed you get a free diagnostic row saying so rather than a silent empty result. Measured on 24 varied searches on 2026-09-19, every one returned products.

What happens if I give it a bad URL? A free diagnostic row naming the URL and showing the three shapes that do work. The run carries on with everything else and exits normally.

I searched something and got a diagnostic row instead of products. Why? Target had nothing matching and answered with unrelated items, so they were left out rather than billed to you. The row carries the term and a relevance score. If you think it was wrong, a category or brand link fetches the same products with no check applied.

Output fields

FieldNotes
tcinTarget's product number. The join key.
title, brand, urlurl is Target's own canonical link for the product.
price, formattedPrice, regularPrice, comparisonPricecomparisonPrice is the "was" price on a markdown.
onSale, savingsAmount, savingsPercentFilled when Target is showing a was/now price.
unitPrice, unitPriceSuffixGrocery and household items, e.g. $0.36 /ounce.
priceType, priceNote, pricedAtStoreIdWhich store the price is for. 3991 means online.
promotions[]message, promotionId, type, thresholdType, thresholdValue, rewardType, rewardValue.
rating, reviewCountStar average and how many reviews it is from.
ratingDistributionCounts per star. Needs includeFullDetail or a pasted product link.
onlineAvailability, soldOut, outOfStockInAllStoresShipping view.
pickupAvailability, pickupStoreId, pickupStoreName, pickupQuantityNeeds zipCode.
scheduledDeliveryAvailability, shipsBySame-day delivery status and the latest ship date.
primaryImage, images[]Full-resolution image URLs.
dpci, upcShelf number and barcode. upc needs full detail.
itemType, departmentId, classId, categoryIdTarget's own classification.
highlights[], specifications[]The bullets from the product page, with the markup stripped.
descriptionThe long copy. Needs full detail.
searchTerm, position, scrapedAtWhich search produced the row, where it ranked, and when.

Rows that are not products carry _sample: true or _diagnostic: true and charged: false, so you can filter them out with one check.