Target Scraper - Products, Prices and EAN Barcodes
Pricing
from $1.00 / 1,000 run start fees
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
7 days ago
Last modified
Categories
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-5xtf4limit: 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
| Field | Type | Default |
|---|---|---|
category_url | Target category page | laptops category |
product_urls | list of product pages | — |
detail | fetch each product page for EAN and description | false |
limit | 1-2000 | 96 |
retries | 1-6 | 3 |
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
pricepertcin. 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
brandand count. - Review mining.
ratingandrating_countper 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.