Target Scraper: Product Prices, Deals & Stock Alerts avatar

Target Scraper: Product Prices, Deals & Stock Alerts

Pricing

from $1.50 / 1,000 product returneds

Go to Apify Store
Target Scraper: Product Prices, Deals & Stock Alerts

Target Scraper: Product Prices, Deals & Stock Alerts

Target scraper for prices, sale prices and stock: search target.com by keyword or look up products by TCIN. One row per product with price, regular price, discount, rating and stock. Monitor price drops, new sales and back-in-stock with Discord, Slack or Telegram alerts. No login or API key.

Pricing

from $1.50 / 1,000 product returneds

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Search target.com by keyword or look up products by their Target id (TCIN) and get one clean row per product: current price, regular price, discount, on-sale flag, rating, review count and, if you ask for it, online and in-store stock. Turn monitoring on and the actor remembers every product between runs, so it can tell you about price drops, products that just went on sale and products that are back in stock, and post those alerts to Discord, Slack, Telegram or an n8n / Make webhook.

It reads the same public product data Target's own website shows every visitor. No login, no cookies and no API key of yours are involved.

Who uses this

  • Price trackers and deal channels that post Target price drops and clearance finds to Discord, Slack or Telegram.
  • Retail-arbitrage resellers who need Target's current and regular price for a list of products or a keyword, with the discount worked out.
  • Agencies and n8n / Make / Clay builders who need Target prices inside a workflow without writing a scraper.

Try it in 30 seconds

Press Start with the pre-filled input. It searches Target for "lego" and returns the first 24 products:

{ "searches": ["lego"], "maxProducts": 24 }

Other inputs, one per line:

searches nintendo switch
searches https://www.target.com/s?searchTerm=air+fryer
tcins 95046386
tcins https://www.target.com/p/lego-speed-champions-the-fast-and-the-furious-toyota-supra-mk4-77260/-/A-95046386

What you get

One row per product (pay per product delivered; a search or id that finds nothing costs nothing):

FieldWhat it is
tcin, url, title, brandTarget's product id, the product page, name and brand
price, regularPrice, discountPct, onSaleCurrent price in US dollars, the price before the sale, percent off, and whether it is a Sale or Clearance price
rating, reviewCountAverage guest rating out of 5 and number of reviews
searchWhich of your searches found the product (empty for an id lookup)
availabilityWith Check stock on: in_stock, limited_stock, out_of_stock, preorder or unavailable for shipping
storeAvailability, storeIdWith a store number: that store's pickup stock
promoPromotion text Target attaches to the product, when it has one
changeType, previousPrice, changePct, lowestPriceSeen, daysSincePreviousWith monitoring on: what changed since the last run
checkedAtWhen the reading was taken

A product that appears in two of your searches is returned and billed once.

Example: on-sale products, price-drop alerts to Discord

Run this daily as a scheduled task. The first run saves a baseline; from then on each run returns the products that changed and posts every price drop of 10% or more to your channel:

{
"searches": ["lego", "nintendo switch"],
"maxProducts": 48,
"onSaleOnly": true,
"deltaMode": true,
"deltaName": "target-deals",
"alertOn": "price-drop",
"minPriceDropPct": 10,
"alertOnChangeOnly": true,
"notifyUrl": "https://discord.com/api/webhooks/<your webhook>"
}

onSaleOnly is applied after the fetch, so the actor still remembers the products that are not on sale yet and can tell you the day one goes on sale ("alertOn": "new-on-sale"). Alerts are sent only for products that were billed, and a failed message never fails the run (the row's notifyErrors says why).

Example runs

Deal hunters who want Target's toy clearance. Change searches.

{"searches": ["toys"], "maxProducts": 100, "onSaleOnly": true}

Resellers pricing a shortlist. Change tcins.

{"tcins": ["<TCIN 1>", "<TCIN 2>", "<TCIN 3>"]}

Shoppers waiting for a restock. Change tcins.

{"tcins": ["<TCIN>"], "checkStock": true, "deltaMode": true, "deltaName": "switch", "alertOn": "back-in-stock", "alertOnChangeOnly": true, "notifyUrl": "<webhook>"}

Limits, stated plainly

  • Prices are online prices. Target prices in the searches did not change with the store in our checks, so there is no store input for prices. A store number only changes the stock answer.
  • Stock is opt-in and costs a request per product. Search results carry no stock. Check stock adds one request per product (about one second each) and is billed per product under its own price. A search lists only products Target can sell, so to be told when a sold-out product is back, put its TCIN under Product ids and turn monitoring on.
  • Products without a price are skipped. Target shows some products as "see price in cart"; they have no price to report, so they are not rows and are not billed.
  • Up to 200 products per search, 25 searches and 200 product ids per run. Target answers 28 products per page and ends a search well before 1,000 results. The run stops cleanly after about 9 minutes and says which lines it did not reach (free rows).
  • A nonsense keyword is not an error on Target's side. It answers with unrelated fallback products. The actor compares the first page with your keyword and returns a free NOT_FOUND row instead of billing unrelated products.
  • One request per second. The actor follows the site's own one-second crawl delay, so a long run is slow by design.
  • Product data only. No images are stored, no reviews text, no seller or personal data, and nothing from an account, cart or checkout.
  • Product returned: $3 per 1,000 products
  • Stock check: $1.2 per 1,000 products

Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

How to use

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~target-product-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"searches":["lego"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"searches": [
"lego"
]
}

One search per line: plain keywords such as "lego" or "nintendo switch", or a search link copied from target.com. Add product ids or product links below to look up single products. No login required. Accepted formats: lego, nintendo switch, https://www.target.com/s?searchTerm=air+fryer.

Sample output

queryfoundstatustcinsearchurltitlebrandpriceregularPricediscountPctonSaleratingreviewCountavailabilitystockCheckedcheckedAtscrapedAt
searches: lego; tcins: 95046386trueOK95046345legohttps://www.target.com/p/lego-minifigures-shrek-series-mystery-box-71053/-/A-95046345LEGO Minifigures Shrek Series Mystery Box 71053LEGO4.994.990false4.2112in_stocktrue2026-10-20T18:38:54.914Z2026-10-20T18:38:54.872Z

A line that found nothing comes back as a row with "found": false and is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~target-product-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"searches":["lego"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~target-product-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["lego"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~target-product-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Target Scraper: Product Prices & Stock Alerts" — the agent will find and run this actor.

FAQ

Is this the official Target API? No. It reads the public JSON that target.com's own pages load, the same data you see in the browser.

Do I need a Target account or key? No. The actor reads the public key that every target.com page contains at the start of each run.

What happens if Target blocks the run? The line comes back as a free BLOCKED row with the HTTP status. Nothing is billed for it.

Can I get prices for one local store? Target's own prices did not differ between the online store and a physical store in our checks, so prices are not store-specific here. Add a store number to get that store's pickup stock.

Where does the alert state live? In a named key-value store in your own Apify account (target-product-lookup-delta), one record per watchlist name, capped at 20,000 products.