Site scraper

Target Scraping: Prices and Stock by Store, ZIP Code and TCIN

HTTP $0.50JS rendering $2.00 per 1,000 results or your own scraper from $1.95/GB

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.

Web Scraping API per 1,000 successful results
Web Scraping API prices per 1,000 successful results
FetchEntryVolume, from
HTTP$0.50$0.20
JS rendering$2.00$1.00

Billed on successful results only.

Your own scraper on residential proxies
from $1.95/GB Easy Trial: 1 GB for $2.95
gate.proxyfield.io:7000
  1. Find the TCIN: the number after A- in the product URL; https://www.target.com/p/-/A-<TCIN> opens the product.
  2. Set the store: select "Edit store", enter the 5-digit ZIP code and select "Find stores", as Target's help describes.
  3. 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.

Data

At a glance

ItemWeb 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 from10,000 successful results in one purchase1,000 GB in one purchase
Store or ZIPBrowser actions on Target's store selector, session_id for one exit IPYour own browser steps, a sticky session per ZIP
US coverageExit IPs in the US (country: us)61.2M+ US residential IPs, all 50 states, 2,800+ cities
What you getThe page as HTML, Markdown, text or JSON, plus action resultsWhatever your browser reads
StartContact salesEasy 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.

Shell
# 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):

JSON
{
  "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.

Python
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()
  1. Collect TCINs from search or category pages.

  2. For each ZIP you track, open one sticky session in that city (-session-<id>-ttl-<seconds>, 30 to 129,600 seconds).

  3. Set the store, then read price, sale price, pickup and shipping status for each TCIN.

  4. 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 monthJS at $2.00JS at $1.00
200 TCINs × 1 ZIP area, daily6,000$12$6
200 TCINs × 10 ZIP areas, daily60,000$120$60
1,000 TCINs × 5 ZIP areas, daily150,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 pageExample URLWhat the public page shows
Product pagetarget.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 resultstarget.com/s?searchTerm=<query>Products in ranking order, prices, sponsored flags, ratings
Category pagestarget.com/c/<name>/-/N-<id>Products in a department, prices, deals
Reviewson the product pageStar rating, review text, date, verified purchase flag
Store pagestarget.com/sl/<store-name>/<store-id>, such as target.com/sl/minneapolis-nicollet-mall/1375Store 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.

Compare

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.

Shell
# 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

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)
Workload (30-day month), Pages a month, HTTP at $0.50, HTTP at $0.20, JS at $2.00, JS at $1.00
Workload (30-day month)Pages a monthHTTP at $0.50HTTP at $0.20JS at $2.00JS at $1.00
3,000 products, price daily90,000$45$18$180$90
200 products × 10 stores, stock daily60,000$30$12$120$60
100 search terms, first 2 result pages, daily6,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

Good to know

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.

SettingValue
Gatewaygate.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
Rotationleave 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.

Use cases

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.

More scrapers

More scrapers

FAQ

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.

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.