Target Scraper: Product Prices, Deals & Stock Alerts
Pricing
from $1.50 / 1,000 product returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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 switchsearches https://www.target.com/s?searchTerm=air+fryertcins 95046386tcins 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):
| Field | What it is |
|---|---|
tcin, url, title, brand | Target's product id, the product page, name and brand |
price, regularPrice, discountPct, onSale | Current price in US dollars, the price before the sale, percent off, and whether it is a Sale or Clearance price |
rating, reviewCount | Average guest rating out of 5 and number of reviews |
search | Which of your searches found the product (empty for an id lookup) |
availability | With Check stock on: in_stock, limited_stock, out_of_stock, preorder or unavailable for shipping |
storeAvailability, storeId | With a store number: that store's pickup stock |
promo | Promotion text Target attaches to the product, when it has one |
changeType, previousPrice, changePct, lowestPriceSeen, daysSincePrevious | With monitoring on: what changed since the last run |
checkedAt | When 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
- In the Apify Console. Open the actor page and click Start — the
searchesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - 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"]}'
- 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
| query | found | status | tcin | search | url | title | brand | price | regularPrice | discountPct | onSale | rating | reviewCount | availability | stockChecked | checkedAt | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| searches: lego; tcins: 95046386 | true | OK | 95046345 | lego | https://www.target.com/p/lego-minifigures-shrek-series-mystery-box-71053/-/A-95046345 | LEGO Minifigures Shrek Series Mystery Box 71053 | LEGO | 4.99 | 4.99 | 0 | false | 4.2 | 112 | in_stock | true | 2026-10-20T18:38:54.914Z | 2026-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.