Target Scraping: Prices and Stock by Store, ZIP Code and TCIN
Target sets price and stock per store, so a Target scraper sets the store first and reads the product second. ProxyField's Web Scraping API is designed to do both in one rendered request per TCIN and ZIP: $2.00 per 1,000 successful results, or $0.002 per check, and $1.00 per 1,000 ($0.001 per check) from 10,000 results in one purchase. It is in development, through Contact sales, and returns the page, not parsed Target fields. To run your own scraper now, US residential proxies start with the Easy Trial: 1 GB for $2.95.
Through the sales team on our 24/7 live chat
| Fetch | Entry | Volume, from |
|---|---|---|
| HTTP | $0.50 | $0.20 |
| JS rendering | $2.00 | $1.00 |
Billed on successful results only.
- Find the TCIN: the number after
A-in the product URL;https://www.target.com/p/-/A-<TCIN>opens the product. - Set the store: select "Edit store", enter the 5-digit ZIP code and select "Find stores", as Target's help describes.
- Read the result: the price and the pickup status for that store, and the list of nearby stores that have the item in stock.
The ZIP sets the store, not the IP: ProxyField targets exit IPs by country, region and city, not by ZIP code.
At a glance
| Item | Web Scraping API (in development) | Your own scraper on ProxyField proxies |
|---|---|---|
| Price | $0.50 per 1,000 successful results over HTTP, from $0.20; $2.00 with JS rendering, from $1.00 | $2.95/GB for 1 GB, down to $1.95/GB from 1,000 GB |
| Volume price from | 10,000 successful results in one purchase | 1,000 GB in one purchase |
| Store or ZIP | Browser actions on Target's store selector, session_id for one exit IP | Your own browser steps, a sticky session per ZIP |
| US coverage | Exit IPs in the US (country: us) | 61.2M+ US residential IPs, all 50 states, 2,800+ cities |
| What you get | The page as HTML, Markdown, text or JSON, plus action results | Whatever your browser reads |
| Start | Contact sales | Easy Trial: 1 GB for $2.95 |
Prices and stock for one store or ZIP code
Price and stock depend on the store Target has set for the visitor. A product can be in stock for pickup at one store and sold out at the next, and the in-store price can differ from the online price. Target's product page has a store selector for this: "Edit store", a ZIP code or city and state, "Find stores", and a list of the stores in that area that have the item in stock (Target help). A scraper does the same steps.
Read moreShow less
The store comes from Target's store setting, not from the IP: ProxyField targets exit IPs by country, region (state) and city, not by ZIP code. An IP in the same city as the store keeps the visit consistent (logic).
With the Web Scraping API (the API's design)
One rendered request per TCIN and ZIP. The actions open the store selector, type the ZIP, search, and return the store list; content is the page with the price. session_id keeps one exit IP for up to 10 minutes, so a batch of TCINs for one ZIP looks like one shopper. All parameters: API documentation.
# The request the Web Scraping API takes (in development; access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.target.com/p/-/A-<TCIN>",
"render": true,
"country": "us",
"session_id": "target-55403",
"output": "json",
"actions": [
{"type": "evaluate", "script": "[...document.querySelectorAll(\"button\")].find(b => /edit store/i.test(b.textContent))?.click()"},
{"type": "wait_for", "selector": "[role=dialog] input", "timeout_ms": 10000},
{"type": "fill", "selector": "[role=dialog] input", "value": "55403"},
{"type": "evaluate", "script": "[...document.querySelectorAll(\"[role=dialog] button\")].find(b => /find stores/i.test(b.textContent))?.click()"},
{"type": "wait", "ms": 3000},
{"type": "evaluate", "script": "document.querySelector(\"[role=dialog]\")?.innerText"}
]
}'Example response (shortened):
{
"metadata": {"id": "req_883b236480c4346d", "api": "web_scrape", "status": "success", "billed": true},
"status_code": 200,
"final_url": "https://www.target.com/p/<name>/-/A-<TCIN>",
"content": "<!DOCTYPE html><html lang=\"en-US\">…</html>",
"actions_log": [
{"type": "evaluate", "ok": true},
{"type": "wait_for", "ok": true},
{"type": "fill", "ok": true},
{"type": "evaluate", "ok": true},
{"type": "wait", "ok": true},
{"type": "evaluate", "ok": true, "result": "<the store list text Target shows for 55403>"}
]
}The button labels are the ones in Target's help article; the selectors and scripts must be tested on the live page, because Target changes its markup. Each request is one successful result at the JS price.
With your own scraper (Python and Playwright)
The same steps in Playwright, through a ProxyField sticky residential IP in the store's city. It sets the ZIP before it reads anything, then prints the TCIN, the price and the store list for each product.
import re
from playwright.sync_api import sync_playwright
TCINS = ["<TCIN>", "<TCIN>"] # the number after A- in each product URL
ZIP = "55403" # Minneapolis
PROXY = {"server": "http://gate.proxyfield.io:7000",
"username": "<login>-country-us-region-minnesota-city-<city>-session-zip55403-ttl-1800",
"password": "<password>"}
PRICE = re.compile(r"\$\d[\d,]*\.\d{2}")
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY)
context = browser.new_context(locale="en-US", timezone_id="America/Chicago")
page = context.new_page()
for tcin in TCINS:
page.goto(f"https://www.target.com/p/-/A-{tcin}", wait_until="domcontentloaded", timeout=90000)
# Labels from Target's help article; check the locators on a live page first
page.get_by_role("button", name=re.compile("edit store", re.I)).first.click()
dialog = page.get_by_role("dialog")
dialog.get_by_role("textbox").first.fill(ZIP)
dialog.get_by_role("button", name=re.compile("find stores", re.I)).click()
page.wait_for_timeout(3000)
stores = dialog.inner_text()
page.keyboard.press("Escape")
page.get_by_text(PRICE).first.wait_for(timeout=30000)
price = PRICE.search(page.inner_text("body"))
print(tcin, ZIP, price.group(0) if price else None, stores[:300].replace("\n", " | "))
browser.close()-
Collect TCINs from search or category pages.
-
For each ZIP you track, open one sticky session in that city (
-session-<id>-ttl-<seconds>, 30 to 129,600 seconds). -
Set the store, then read price, sale price, pickup and shipping status for each TCIN.
-
Store each check with TCIN, ZIP, store, price, status and time, and repeat on a schedule.
Stock at several stores near a ZIP
Target's store list answers it in one step: after "Find stores", the dialog lists the stores in that area that have the item in stock. So one rendered request per TCIN and ZIP returns every store Target lists there, in the actions_log result above or in your own script's stores text: $0.002 per TCIN and ZIP at $2.00 per 1,000, or $0.001 from 10,000 results in one purchase.
| Workload (30-day month) | Results a month | JS at $2.00 | JS at $1.00 |
|---|---|---|---|
| 200 TCINs × 1 ZIP area, daily | 6,000 | $12 | $6 |
| 200 TCINs × 10 ZIP areas, daily | 60,000 | $120 | $60 |
| 1,000 TCINs × 5 ZIP areas, daily | 150,000 | $300 | $150 |
The $1.00 column needs 10,000 successful results or more in one purchase.
Target data you can collect
Target scraping means reading the product, price and stock data that Target.com shows a shopper who is not signed in. The Web Scraping API is designed to fetch a Target URL and return the page; your code takes the fields out. ProxyField sells no separate Target API with pre-parsed fields.
| Target page | Example URL | What the public page shows |
|---|---|---|
| Product page | target.com/p/<name>/-/A-<TCIN> | Title, brand, price, regular price and sale price, promotions, variants, stock for shipping, pickup and same-day delivery, rating, review count, specifications |
| Search results | target.com/s?searchTerm=<query> | Products in ranking order, prices, sponsored flags, ratings |
| Category pages | target.com/c/<name>/-/N-<id> | Products in a department, prices, deals |
| Reviews | on the product page | Star rating, review text, date, verified purchase flag |
| Store pages | target.com/sl/<store-name>/<store-id>, such as target.com/sl/minneapolis-nicollet-mall/1375 | Store name, address, hours |
What you do not get: anything behind a Target account, such as orders, Target Circle offers that need sign-in, or registry lists. ProxyField's acceptable use policy forbids accessing data behind logins you are not entitled to. The API returns the page itself as HTML, Markdown or plain text, or a JSON envelope with the status code, the final URL, the headers, the cookies, the content and the action results; it has no parsed Target fields, so your parser reads them.
TCINs
Every Target product has a TCIN, Target's item number, at the end of its URL after A-: in target.com/p/<name>/-/A-12345678, the TCIN is 12345678. Store it as the product's key: it stays the same when the title changes and links one product across search, category and product pages. The short form https://www.target.com/p/-/A-<TCIN> opens a product by its TCIN; if it doesn't resolve for a product, take the full URL from search.
Target.com sells in the US only, so fetch it as a US shopper. ProxyField has 61.2M+ residential IPs in the United States, in all 50 states and 2,800+ cities, so your scraper can browse from the city of the stores it checks. In the Web Scraping API, country sets the country the request comes from (the exit IP), as a two-letter code such as us; the countries it accepts: the proxy pool's 195+ countries.
Target's APIs or scraping?
As far as Target's public pages show, it offers no public product, price or stock API for developers. For a handful of products, check them by hand on Target.com with "Edit store". For hundreds of TCINs across stores, a program reads the public pages, within Target's terms (below).
Search and category pages
Search and category pages don't need a store step for rankings. Send the URL with plain HTTP or JS rendering; the request body is url, render (false for plain HTTP, true for JS rendering), country and output (html, markdown, text or json), with your API key in an Authorization: Bearer <api_key> header. wait_for takes a CSS selector to wait for, with rendering.
# The request the Web Scraping API takes (in development; access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.target.com/s?searchTerm=coffee+maker", "render": true, "country": "us", "output": "json"}'Pricing: from $0.20 per 1,000 Target pages
Plain HTTP costs $0.50 per 1,000 successful results, from $0.20 at volume: test a sample of product pages to see whether the fields you need are in the HTML before scripts run. The store selector needs a browser, and so do fields filled in by scripts after the page loads; JS rendering costs $2.00 per 1,000, from $1.00. The volume price starts at 10,000 successful results in one purchase.
| Workload (30-day month) | Pages a month | HTTP at $0.50 | HTTP at $0.20 | JS at $2.00 | JS at $1.00 |
|---|---|---|---|---|---|
| 3,000 products, price daily | 90,000 | $45 | $18 | $180 | $90 |
| 200 products × 10 stores, stock daily | 60,000 | $30 | $12 | $120 | $60 |
| 100 search terms, first 2 result pages, daily | 6,000 | $3 | $1.20 | $12 | $6 |
- Billed a page Target answered with a 2xx status; a target's 404 or 410, and a sign-in page the site serves with a 200 status, also count as billed results.
- Not billed blocked requests, timeouts, errors on our side and our internal retries on new IPs. Every response says whether it was billed.
- Payment the same crypto balance as proxies, which never expires; no subscription or monthly fee. All prices: pricing.
- Availability in development; contact sales through the sales team on our 24/7 live chat.
Through the sales team on our 24/7 live chat
Why Target is hard to scrape
Three things make Target harder than a static store. Prices and stock depend on the store, so a scraper has to set and hold one. Much of the page is filled in by scripts, so plain HTML can lack the price. And Target's bot protection answers fast, repetitive or datacenter traffic with a challenge or block page instead of the product. A real browser for the store step and the script-filled parts, a low rate per IP, US residential IPs and one sticky session per ZIP reduce blocks. With the Web Scraping API you pay only for successful results.
Proxy settings for your own Target scraper
Access opens once the payment is confirmed; the gateway, credentials or allowlist are in your account.
| Setting | Value |
|---|---|
| Gateway | gate.proxyfield.io:7000, HTTP, HTTPS and SOCKS5 on the same port |
| US city | <login>-country-us-region-minnesota-city-<city> (lowercase, underscores: city-new_york) |
| Sticky session per ZIP | -session-<id>-ttl-<seconds>: 30 s to 36 h, 20 minutes by default |
| Rotation | leave out -session: a new IP on every request |
| Price | $2.95/GB for 1 GB, from $1.95/GB at volume, no subscription; traffic never expires, all purchases are final |
A full line: gate.proxyfield.io:7000:<login>-country-us-region-minnesota-city-<city>-session-zip55403-ttl-1800:<password>, with <city> taken from the city list in your dashboard. More on Playwright.
What teams use Target data for
- Price monitoring daily prices, sale prices and promotions on your own or competing products, per store.
- Stock and availability where a product can be picked up or shipped, by store and ZIP.
- Search and shelf position where your products rank for a keyword, sponsored or organic.
- Retail price comparison the same item at Target, Walmart and Costco.
- Review analysis ratings and complaints by product.
For prices across many stores, see price scraping and the ecommerce scraper.
Target's terms and the law
Target's Terms & Conditions list among "Unlawful or Prohibited Uses" to "make any use of data extraction, scraping, mining or other data gathering tools" and any commercial collection of product listings, so scraping Target breaches its terms, separate from whether it breaks a law. Prices, stock and ratings are facts; product photos, descriptions and review texts can be protected by copyright, so store facts and short excerpts. Target also notes that availability changes quickly and isn't guaranteed, so a scraped "in stock" is an estimate at the time of the check. The full answer, including what Target's robots.txt closes to crawlers, is in Is It Legal to Scrape eBay, Walmart, Zillow and Other Marketplaces?.
ProxyField's rule for every site: public pages only, and follow the site's terms.
ProxyField's acceptable use policy allows price monitoring and collecting public web data, and forbids fraud, including fake accounts or engagement, and accessing data behind logins you are not entitled to. This is not legal advice.
More scrapers
- Walmart scraper, Costco scraper and Best Buy scraper: other US retailers on the same Web Scraping API.
- Amazon scraper API: Amazon product and search pages, $0.60 per 1,000 successful results, from $0.30.
- Google SERP API: the Google results page as JSON, $1.20 per 1,000 successful results, from $0.80.
- All scrapers: scrapers.
Target Scraping FAQ
24/7 support by live chat, including help with setup and integration.
What is a Target scraper API?
ProxyField's Web Scraping API, in development and available through Contact sales, is designed to return public Target product, search and category pages for $0.50 per 1,000 successful results over plain HTTP, from $0.20, or $2.00 per 1,000 with JS rendering. In general, a Target scraper API takes a Target URL and returns the page, so you get prices and stock without running browsers and proxies yourself.
How do I scrape Target prices and stock for one store or ZIP code by TCIN?
Open https://www.target.com/p/-/A-<TCIN>, select "Edit store", enter the ZIP code and select "Find stores", then read the price and the pickup status; the store list shows which stores near that ZIP have the item. In ProxyField's Web Scraping API design these steps are browser actions in one rendered request per TCIN and ZIP at $2.00 per 1,000 successful results ($0.002 per check, $0.001 from 10,000 results in one purchase); on your own scraper, run them in Playwright through a sticky US residential IP in the store's city.
How do I check stock at several stores near a ZIP code?
Use Target's store list: after "Find stores" for a ZIP, it shows which stores in that area have the item in stock, so one rendered page per TCIN per ZIP area covers them. For 200 TCINs in 10 ZIP areas checked daily, that is 60,000 rendered results a month: $120 at $2.00 per 1,000, or $60 at the volume price.
What is Target scraping?
Collecting public data from Target.com by program: product titles, prices, sale prices, stock by store, ratings and search rankings. It is mostly used for price and availability monitoring.
How much does it cost to scrape Target?
On ProxyField's Web Scraping API, a daily price check of 3,000 Target products is 90,000 pages a month: $45 over plain HTTP, $18 at the volume price, or $180 with JS rendering. You pay only for successful results, and the volume price starts at 10,000 results in one purchase.
How do I scrape Target data?
Collect product URLs and their TCINs from search or category pages, set the store by ZIP code on the product page, and read price, stock and rating once the page has loaded. Keep the rate low per IP, or send the URLs to a scraping API.
How do I scrape Target prices?
Fix the store first, because Target's price and sale price can depend on it, then open each product page and read the current, regular and sale price. Store each price with the TCIN, store and time of the check.
What Target pages can I scrape?
Public product pages, search results, category pages, the reviews on product pages and store pages such as target.com/sl/<store-name>/<store-id>. Pages behind a Target account, such as orders and registries, are out of scope.
Why is Target hard to scrape?
Prices and stock depend on the store, much of the page is filled in by scripts, and bot protection blocks fast or datacenter traffic. A real browser that sets the store, a sticky session per ZIP and a low rate per residential IP handle all three.
Does Target use captcha?
Target's bot protection answers traffic it judges automated with a challenge or block page instead of the product. Ordinary shoppers rarely see one; scrapers that go fast from one IP see them often, so pace requests and rotate residential IPs.
Show 12 more questionsShow fewer questions
Does Target have a public API?
Not for product, price or stock data, as far as Target's public pages show. For a few products, check them by hand with "Edit store" and a ZIP code; for many, a program reads the public pages within Target's terms.
Can I scrape Target reviews?
Yes: the reviews on a product page show the rating, text, date and verified purchase flag, and they load with the page's scripts. Store ratings and short excerpts rather than republishing full review texts.
Can a Target scraper report exact in-store inventory?
It reports what Target.com shows for a store, such as in stock, limited stock or out of stock for pickup. Target itself says availability changes quickly and isn't guaranteed, so treat it as availability at the time of the check, not a shelf count.
Can I scrape Target for a specific city?
Yes: set the store by its ZIP code on the page so prices and stock are those of that city, and browse from an IP in the same city. ProxyField residential proxies target the state and city, across all 50 US states.
Can I scrape Target from outside the US?
Target.com sells in the US only, so fetch it through US residential IPs as a US shopper. ProxyField has 61.2M+ residential IPs in the United States.
Do I need a Target account to scrape Target?
No. Product, search, category and store pages are public, and a scraper should not sign in. Offers or lists that need a Target account are out of scope.
How do I scrape Target with Python?
Use Playwright or Selenium in Python to open the product page through a US proxy, set the store by ZIP, wait for the price and read it; requests alone gets the HTML before scripts fill in store prices. Read the price from the rendered page, as the script on this page does.
Can I track Target price history with a scraper?
Yes: check the same TCINs for the same store at the same time each day and store every price with its date. Over weeks, that gives you regular prices, sale periods and their depth.
Can recurring Target scraping jobs be scheduled?
Yes: run your scraper from cron or a workflow tool at a fixed hour, or call a scraping API on a schedule, so prices are comparable day to day. Alert on runs that return far fewer products than usual.
How do I export Target scraper data to Excel or CSV?
Write one row per product and check, with TCIN, title, price, sale price, stock, store, ZIP and time, to a CSV file, which Excel opens directly. For daily history, write the same rows to a database and export what you need.
What is a TCIN?
TCIN is Target's item number for a product, shown at the end of the product URL after A- and in the product details. Use it as the key for every price and stock record.
Do Target's terms permit web scraping?
No: Target's Terms & Conditions list "data extraction, scraping, mining or other data gathering tools" among prohibited uses, so scraping breaches its terms even for public pages. Whether it breaks a law is a separate question; this is not legal advice.
Related pages
Collect Target pages with the Web Scraping API
Billed on successful results only. Contact sales for the Web Scraping API and the volume you need, or run your own scraper on residential proxies. 24/7 live chat helps with setup and integration.