Target Scraper - Products, Prices and EAN Barcodes avatar

Target Scraper - Products, Prices and EAN Barcodes

Pricing

from $1.00 / 1,000 run start fees

Go to Apify Store
Target Scraper - Products, Prices and EAN Barcodes

Target Scraper - Products, Prices and EAN Barcodes

Scrape Target.com category listings and product pages. Returns name, brand, price, availability, rating and image, and with product detail on, the EAN barcode (gtin13) and full description. Reads the JSON-LD Target publishes for search engines.

Pricing

from $1.00 / 1,000 run start fees

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 days ago

Last modified

Share

Target Scraper

Scrape Target.com category listings and product pages. Name, brand, price, availability, rating and image from any category, and with product detail turned on, the EAN barcode and the full description.

Where the catalogue comes from

Target publishes its catalogue as JSON-LD, the structured feed the site maintains for indexing. This Actor reads that, which is a documented, stable structure that survives redesigns which break CSS selectors.

It also means a page arriving without that feed is an incomplete response, not an empty category. The Actor retries and then says so explicitly, because "this category has no products" is a confident wrong answer and the run would otherwise look successful.

The EAN is the reason to turn on detail

The listing gives you everything you need for a price feed: name, brand, category, price, currency, rating, image, and the product URL. 24 per page, paginated automatically.

The product page adds gtin13, which is the EAN barcode. That is an exact join key against any other catalogue, so it is what lets you line Target's assortment up against a supplier list, a competitor's prices, or the Open Food Facts data in the sibling Actor.

Detail costs one extra request per product, so it is off by default. When it is off, gtin13 comes back null and the run summary says why rather than letting you conclude the products have no barcode.

Not every product has one. Target publishes gtin13 for most branded goods and omits it for own-brand and some bundles. Those rows return null, never a guessed value.

Two ways in

By category:

category_url: https://www.target.com/c/laptops-home-office-electronics/-/N-5xtf4
limit: 96

Pagination uses Target's own ?Nao=<offset> in steps of 24 and stops when a page returns fewer than a full set.

By product URL:

product_urls: ["https://www.target.com/p/.../-/A-1012123457"]

Product URLs always fetch detail, so EAN and description are always populated on that path.

Fields

  • Identity: name, tcin (Target's own id, taken from the URL), identifier, gtin13
  • Brand: brand, brand_url
  • Commercial: price, currency, availability
  • Social proof: rating, rating_count, review_count_on_page
  • Content: description, image, category
  • Provenance: url, enriched

enriched tells you whether the product page was actually fetched for that row, so you always know whether a null EAN means "no barcode published" or "we did not look".

Input reference

FieldTypeDefault
category_urlTarget category pagelaptops category
product_urlslist of product pages—
detailfetch each product page for EAN and descriptionfalse
limit1-200096
retries1-63

Give a category URL or a list of product URLs. A non-Target URL is rejected with a message rather than fetched.

Typical uses

  • Price monitoring. Run a category on a schedule and track price per tcin. Availability comes along with it, so you see stockouts too.
  • Assortment comparison. Turn on detail, join on gtin13, and compare Target's range and pricing against another retailer's on exact barcode matches rather than fuzzy name matching.
  • Brand share of shelf. Group a category by brand and count.
  • Review mining. rating and rating_count per product, at category scale.

Notes on behaviour

Requests are paced with a short randomised delay between listing pages and between detail fetches. Target has not rate-limited this pattern in testing, but the pacing is there because a listing walk plus per-product detail is a lot of requests and hammering it would end the access for everyone.

The crawler agent used here is the one that measured as working; if that path ever closes it is a one-line change in client and the Actor will report the stub rather than pretending the catalogue is empty.

Prices are US dollars from the US site. Target does not operate the same catalogue outside the US, so there is no country parameter to set.

Finding a category URL

Target category URLs look like https://www.target.com/c/<slug>/-/N-<code>. The quickest way to get one is to browse to the category in your own browser and copy the address. The N- code is the category identifier and is what the Actor paginates against.

Facets work too. Target encodes filters into the same path, so a URL like .../c/laptops-home-office-electronics/sale/-/N-5xtf4Z5tdv0 scrapes only the sale items in that category, and the Actor handles it exactly like any other listing. That is usually easier than filtering the output afterwards, because the facet is applied before pagination and you spend fewer requests.

What this Actor does not do

No search results. Target's search pages behave differently from category pages and did not yield the same JSON-LD in testing. Use a category or a facet URL instead.

No stock levels per store. Availability comes back as InStock or OutOfStock for the online catalogue. Target does publish per-store inventory in its own app, but not in the page data this Actor reads, and inventing a number there would be worse than returning nothing.

No historical prices. Every run is a snapshot. Schedule the Actor and keep the runs if you want a price history; the tcin field is stable and is the key to join snapshots on.