Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Target API page →
E-commerce & Marketplaces

Target API & Scraper

Target API returns live Target data as clean JSON for target The primary endpoint, search, returns product results including variant tcin, product tcin, position, name and brand.

3 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

Developers reach for it when they need to track product listings, prices, availability, variants and reviews without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Target scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, product_detail, price. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.

Reference

Target's identifiers: TCIN, DPCI, UPC, and the parent-versus-variant split

Target uses three separate numbering systems and the difference between them decides whether a lookup works. The parent-versus-variant split matters just as much: on an apparel product, the row you saw in search is not the page you get back. Measured on 2026-08-27 with searches for 'coffee maker' and 't-shirt', the /c/cpus category, and product 87328557.

IdentifierFormatMeasured
TCINthe A-<id> segment of /p/<slug>/-/A-<id>8 or 10 digits, not fixed: 'coffee maker' returned 22 eight-digit and 2 ten-digit; /c/cpus returned 13 and 11
product_tcin vs variant_tcinthe parent page, and the specific color or size that was listed't-shirt' differed on 24 of 24 rows; 'coffee maker' matched on 19 of 24; /c/cpus matched on 24 of 24. product_detail accepts either
DPCITarget's in-store code, department-class-item3-2-4 digits, e.g. 331-14-4383. Null on a variation parent, present on every one of its 79 variants
barcodethe UPC printed on the box12 digits, e.g. 199592576120. Also null on a variation parent
price on a variation parentthere is not oneprice and list_price are null; price_range carried min 4.20, max 6.00 over 79 of 79 priced variants, with derived_from naming the source
rating_count vs review_countstar ratings versus written reviews3,214 ratings but 666 written reviews; rating_distribution 236/114/198/325/2341 sums back to 3,214
stock on search rowsnot published on that surfacein_stock and availability were null on all 48 rows across keyword and category mode; product_detail has it per variant, 72 of 79 in stock
pagination24 per page, with a floor under how deep you can go'coffee maker': total_results 294, total_results_at_most 312, deepest_offset 288

The slug in a target.com product URL is decorative, so /p/-/A-87328557 resolves. product.requested_tcin echoes what you asked for and product.tcin reports the canonical id, so you can always tell whether you landed on a parent.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/target/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "coffee maker",
    "max_results": 24
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "target",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2356.2,
    "record_count": 24,
    "bytes": 1121148,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "limit_reached",
    "field_sources": {
      "crawler_ua": "every field on this action"
    },
    "fields_not_published": {
      "fields": [
        "in_stock",
        "availability",
        "review_count"
      ],
      "reason": "target.com's search listing does not publish a stock state or a written-review count — the keys are returned as null rather than guessed.",
      "available_in": "product_detail"
    },
    "degraded": false,
    "source": {
      "surface": "target.com server-rendered ItemList (schema.org)",
      "url": "https://www.target.com/s/coffee+maker",
      "upstream_calls": 1,
      "page_size": 24
    },
    "search_mode": "keyword",
    "keyword_match_rate": 1,
    "pagination": {
      "page": 1,
      "page_size": 24,
      "returned": 24,
      "offset": 0,
      "deepest_offset": 288,
      "total_results": 290,
      "total_results_at_most": 312,
      "has_more": true,
      "next_page": 2
    },
    "filters": {
      "applied": [],
      "ignored": [],
      "notes": "target.com publishes no facet vocabulary on this surface, so only filters measured to bite are offered: sort, min_price, max_price."
    },
    "notes": null,
    "charged_credits": 1,
    "version": "1.0.0"
  },
  "data": {
    "products": [
      {
        "variant_tcin": "90116759",
        "product_tcin": "91466170",
        "url": "https://www.target.com/p/keurig-k-mini-go-multicup-reservoir-single-serve-k-cup-pod-coffee-maker-with-strong-brew-button/-/A-91466170",
        "position": 1,
        "name": "Keurig K-Mini Go, Multicup Reservoir Single-Serve K-Cup Pod Coffee Maker with Strong Brew Button",
        "brand": "Keurig",
        "brand_url": "https://www.target.com/b/keurig/-/N-5uvm4",
        "category": "Coffee Makers",
        "image": "https://target.scene7.com/is/image/Target/GUEST_17b87f23-79f3-4bbb-b0a2-98d278f42e6b",
        "price": 69.99,
        "list_price": 88.99,
        "currency": "USD",
        "on_sale": true,
        "in_stock": null,
        "availability": null,
        "rating": 4,
        "rating_count": 2132,
        "review_count": null,
        "offer_type": "sale"
      },
      {
        "variant_tcin": "91863920",
        "product_tcin": "91863920",
        "url": "https://www.target.com/p/mr-coffee-12c-programmable-drip-coffee-maker-stainless-steel-finish/-/A-91863920",
        "position": 2,
        "name": "Mr. Coffee 12-Cup Programmable Coffee Maker Black",
        "brand": "Mr. Coffee",
        "brand_url": "https://www.target.com/b/mr-coffee/-/N-5s76z",
        "category": "Coffee Makers",
        "image": "https://target.scene7.com/is/image/Target/GUEST_fd026130-c56b-41d3-9e88-992fcf06debf",
        "price": 34.99,
        "list_price": 34.99,
        "currency": "USD",
        "on_sale": false,
        "in_stock": null,
        "availability": null,
        "rating": 4.3,
        "rating_count": 996,
        "review_count": null,
        "offer_type": "reg"
      },
      {
        "variant_tcin": "91986267",
        "product_tcin": "91986267",
        "url": "https://www.target.com/p/mr-coffee-5c-switch-drip-coffee-maker-black/-/A-91986267",
        "position": 3,
        "name": "Mr. Coffee 5 Cup Switch Coffee Maker Black: Small Drip Coffee Machine, Electric, Paper Filter, 25 oz Capacity",
        "brand": "Mr. Coffee",
        "brand_url": "https://www.target.com/b/mr-coffee/-/N-5s76z",
        "category": "Coffee Makers",
        "image": "https://target.scene7.com/is/image/Target/GUEST_72ba1da6-01d0-4c2b-ba8f-78ca9fc34a98",
        "price": 21.99,
        "list_price": 21.99,
        "currency": "USD",
        "on_sale": false,
        "in_stock": null,
        "availability": null,
        "rating": 4.5,
        "rating_count": 1185,
        "review_count": null,
        "offer_type": "reg"
      }
    ],
    "related_categories": []
  }
}
Actions

What the Target API does

ActionDescriptionConcrete use caseKey params
searchFind products on target.com (US). Give a free-text `query` ('coffee maker', 'lego star wars', 'nike running shoes') to run Target's own site search, or a `category` path ('/c/cpus/-/N-01vhh', '/b/apple/-/N-5y3ej') to browse a Target category or brand page. Every product comes back with BOTH of Target's ids — the parent product id and the specific colour/size id — plus the name, brand, category, image, current price, the crossed-out list price when it is on sale, the star rating and rating count, and the product URL. Narrow with `sort`, `min_price` and `max_price`; page with `page` and `max_results`.Pricing teams call search to find products on target.com (US).query, category, page, max_results, sort, ...
product_detailGet one Target product in full, by Target's own id or by its target.com URL. One call returns the UPC barcode, the shipping weight and package dimensions with Target's own units, the complete image gallery, the entire colour/size variant matrix with each variant's own price, list price, stock status, barcode, weight, dimensions, image and native Target id, the specification table parsed into name/value pairs, the brand, the category breadcrumb path, the current price and availability, the star rating with its full 1-5 distribution and Target's secondary ratings, the customer review photos, and the customer reviews inline.Marketplace operators call product_detail to get one Target product in full, by Target's own id or by its target.com URL.tcin, url, reviews, include_price
priceLive price and stock for ONE Target product — the cheap way to refresh products you already hold, without paying for the whole product page. Pass the `tcin` search gave you (either `product_tcin` or `variant_tcin`) or a target.com product `url`. A specific colour/size id returns THAT variant's own price and stock; a parent id of a colour/size family returns every variant's price and stock in `variants[]` (Target prices the variants, not the family, so the top-level `price` is null there and `price_range` gives the min/max over the variants).Catalog enrichment teams call price to get live price and stock for ONE Target product.tcin, url
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/target/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"coffee maker","max_results":24}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.target.search with {"query":"coffee maker","max_results":24}.
Use cases

Who uses this API and why

  • Pricing teams use Target to find products on target.com (US).
  • Marketplace operators use Target to get one Target product in full, by Target's own id or by its target.com URL.
  • Catalog enrichment teams use Target to get live price and stock for ONE Target product.
FAQ

Questions developers ask before integrating

Is a Target TCIN always 8 digits?

No, and a fixed-width column for it will bite you. A search for 'coffee maker' returned 22 eight-digit TCINs and 2 ten-digit ones, and browsing /c/cpus returned 13 eight-digit and 11 ten-digit. Treat the TCIN as a string of digits with no fixed length. It is the A- segment of a target.com product URL.

Why does every Target search row carry two ids?

Because product_tcin is the parent product page and variant_tcin is the exact color and size Target put in that grid slot, and on some categories they are never the same. All 24 rows of a 't-shirt' search had different ids, while all 24 rows of the /c/cpus category had identical ones. Collapsing them into a single id would silently re-key half your catalogue, so both are returned. product_detail accepts either and resolves to the parent.

What is DPCI and why is it null on the product I looked up?

DPCI is Target's in-store item code, formatted as department-class-item in 3-2-4 digits, like 331-14-4383. It identifies a physical item, so it exists per variant and not for a variation parent. On a measured t-shirt the parent's dpci and barcode were both null while all 79 variants carried both. Read them from variants[].

Why is price null on a product I know has a price?

Because you asked for a variation parent, and target.com publishes no single figure for one. You get price_range instead, which reported min 4.20 and max 6.00 with priced_variants 79 of 79 and a derived_from field naming where those numbers came from. is_variant_parent tells you to expect this before you look at the price.

Why is stock always null on Target search results?

The search surface does not publish it. Across 48 measured rows in both keyword and category mode, in_stock and availability were null on every one - null meaning unknown, not false meaning out of stock. product_detail does carry it per variant: the measured t-shirt had 72 of 79 variants in stock and the other 7 marked OutOfStock.

Why is rating_count so much larger than review_count?

They count different things. rating_count is everyone who left stars, review_count is the subset who also wrote something - a measured product had 3,214 ratings and 666 written reviews. rating_distribution breaks the ratings out by star as 236, 114, 198, 325 and 2,341, which sums back to 3,214, so you can check the arithmetic yourself. recommended_percentage and secondary_ratings for comfort, quality, sizing and style come alongside.

Does asking for more Target reviews cost more?

No. The reviews are already inside the two pages the call fetches, so the reviews parameter only trims the response, and setting it to 0 saves bytes rather than requests. The parameter's ceiling is 12, but the page often holds fewer: a measured product reported reviews.available_on_page 8. The rating, the distribution and the review photos come back regardless.

What is total_results_at_most in the pagination block?

It is the honest upper bound for when Target's own count and its own paging disagree. On 'coffee maker' total_results was 294 while total_results_at_most was 312 and deepest_offset was 288, meaning Target claims 294 matches but will not page you past offset 288. Use total_results for reporting and deepest_offset to decide when to stop crawling.

What is the Target API?

Target API is a ReefAPI endpoint group for target It returns live JSON through POST requests under /target/v1.

Is the Target API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Target calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Target login or account?

No login to Target is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Target data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Target API use?

Target actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Target from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call target actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / target

Target

Target

base /target/v13 endpoints
post/target/v1/product_detail3 credits

Get one Target product in full, by Target's own id or by its target.com URL. One call returns the UPC barcode, the shipping weight and package dimensions with Target's own units, the complete image gallery, the entire colour/size variant matrix with each variant's own price, list price, stock status, barcode, weight, dimensions, image and native Target id, the specification table parsed into name/value pairs, the brand, the category breadcrumb path, the current price and availability, the star rating with its full 1-5 distribution and Target's secondary ratings, the customer review photos, and the customer reviews inline.

ParameterAllowed / rangeDescription
tcinoptional—Target's own product id (a 'TCIN'), exactly as `search` returns it — e.g. '87328557'. BOTH ids a search row gives you work: pass `product_tcin` (the parent product) or `variant_tcin` (one specific colour/size) and you get the same product back, because target.com resolves a variant id to its parent page. The response echoes what you asked for in `product.requested_tcin` and always reports the canonical parent in `product.tcin`. Provide `tcin`, or a product `url`.
urloptional—A full target.com product URL — an alternative to `tcin`. The slug is decorative: only the `A-<id>` part is read, so `/p/-/A-87328557` works too.
reviews = 8optional0–12How many written customer reviews to inline with the product (0-12). This costs NO extra request — the reviews are already in the two pages this call fetches, so 0 saves you nothing but response size. The star rating, the rating count, the full 1-5 star distribution, the recommended percentage, Target's secondary ratings (comfort / quality / sizing / style, where the category has them) and the customer review photos always come back regardless of this value. Target itself only puts a limited number of review bodies on a product page, so `reviews.available_on_page` tells you how many there really were — asking for more than that is not an error, you simply get what exists.
include_price = trueoptional—Whether to fetch the price, the availability and the per-variant price/stock matrix (default true). These live on a different target.com surface from the barcode, weight, dimensions, specs, images and reviews, so getting them costs ONE extra upstream request of roughly 0.7-1.0 MB. Set false when you only need the catalogue facts — it roughly halves the bytes and the latency of this call, and everything else is unchanged. `meta.route` and `meta.field_sources` always state which surfaces actually answered.
Try in playground →
post/target/v1/price1 credit

Live price and stock for ONE Target product — the cheap way to refresh products you already hold, without paying for the whole product page. Pass the `tcin` search gave you (either `product_tcin` or `variant_tcin`) or a target.com product `url`. A specific colour/size id returns THAT variant's own price and stock; a parent id of a colour/size family returns every variant's price and stock in `variants[]` (Target prices the variants, not the family, so the top-level `price` is null there and `price_range` gives the min/max over the variants).

ParameterAllowed / rangeDescription
tcinoptional—Target's own product id (a 'TCIN'), exactly as `search` returns it — e.g. '87328557'. BOTH ids a search row gives you work: pass `product_tcin` (the parent product) or `variant_tcin` (one specific colour/size) and you get the same product back, because target.com resolves a variant id to its parent page. The response echoes what you asked for in `product.requested_tcin` and always reports the canonical parent in `product.tcin`. Provide `tcin`, or a product `url`.
urloptional—A full target.com product URL — an alternative to `tcin`. The slug is decorative: only the `A-<id>` part is read, so `/p/-/A-87328557` works too.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.