Tracking a few Amazon products sounds simple until you try it:
- The Product Advertising API needs an approved affiliate account with recent sales, and it doesn't return everything on the page.
- Scrape from a server in the wrong country and Amazon shows "cannot be shipped" with no price, or EU prices without VAT, or amazon.de prices in USD.
- "4K+ bought in past month" and Best Sellers Rank only come as text.
- A daily tracking job returns all 200 products every day, even when nothing changed.
I built an Apify Actor for this: Amazon Product Scraper. It reads Amazon's public pages, so there's no Amazon account, cookies or API key. This post shows how to use it as a price tracker from Python and as a daily job in n8n.
The fix for wrong prices: a delivery postcode
Amazon decides the price, currency, VAT and delivery date from the delivery address. Before reading any product, each session sets a postcode in the store's country (New York 10001 on amazon.com, Berlin 10115 on amazon.de), or your own ZIP. Every row has a deliveryLocation field, so you know which address the price is for.
It works in 16 stores: US, Canada, Mexico, UK, Germany, France, Italy, Spain, Netherlands, Belgium, Sweden, Poland, India, Japan, Australia and Singapore.
What you get
One row per product. A real row from a run, shortened:
{
"asin": "B07H4G664R",
"title": "Gruper Yoga Mat Non Slip, Eco Friendly Exercise Mat with Carrying Strap",
"price": 25.19,
"currency": "USD",
"listPrice": 27.99,
"discountPercent": 10,
"rating": 4.4,
"reviewsCount": 10768,
"boughtPastMonth": 4000,
"bestSellersRank": [
{ "rank": 171, "category": "Sports & Outdoors" },
{ "rank": 4, "category": "Yoga Mats" }
],
"mainCategoryRank": 171,
"inStock": true,
"soldBy": "Amazon.com",
"isFulfilledByAmazon": true,
"otherOffers": { "count": 4, "lowestPrice": 15.62 },
"deliveryDate": "Wednesday, November 11",
"deliveryLocation": "New York 10001",
"customersSay": "Customers find the yoga mat to be of great quality, thick enough to provide good cushioning...",
"reviewAspects": [
{ "aspect": "quality", "sentiment": "positive" },
{ "aspect": "non-slip", "sentiment": "positive" }
],
"variantsCount": 14
}
You also get bullet points, the specs table (with UPC/EAN where Amazon shows it), images, all variants with their ASINs, coupons and deal end times. customersSay is Amazon's own AI review summary, which is handy if you want review sentiment without scraping reviews.
Option 1: try it in the browser (2 minutes)
- Open the Actor page and click Try for free.
- Type a search term such as
wireless earbuds, or paste ASINs or Amazon links. Best Sellers, New Releases and Movers & Shakers pages work too. - Pick the Amazon store and click Start. The example (10 products) takes under a minute.
- Download the results as JSON, CSV or Excel.
Option 2: Python
Install the client with pip install apify-client.
Product research (well-rated speakers between $20 and $60 with at least 500 ratings):
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("panix/amazon-product-scraper").call(run_input={
"searchTerms": ["bluetooth speaker"],
"marketplace": "com",
"minPrice": 20, "maxPrice": 60, "minRating": 4.3, "minReviews": 500,
"maxResultsPerSearch": 50,
})
rows = list(client.dataset(run.default_dataset_id).iterate_items())
rows.sort(key=lambda p: p.get("boughtPastMonth") or 0, reverse=True)
for p in rows[:10]:
print(p["asin"], p["price"], p["boughtPastMonth"], p["mainCategoryRank"], p["title"][:60])
Sponsored results are left out by default, so the list is the organic results.
Price tracker for a fixed list of ASINs:
run = client.actor("panix/amazon-product-scraper").call(run_input={
"asins": ["B0BZYCJK89", "B0B6PLG6G2", "B06X9NQ8GX"],
"marketplace": "com",
"trackChanges": True,
"onlyChangedProducts": True,
"monitorName": "my-competitors",
})
for p in client.dataset(run.default_dataset_id).iterate_items():
c = p["changes"]
if c and not c["isNew"]:
print(p["asin"], c["priceBefore"], "->", p["price"], f'({c["priceChangePercent"]}%)')
The Actor stores each product's last price, stock, rating, review count and rank under the tracker name, in a key-value store in your own Apify account. On the next run, changes holds the old values and the change in percent:
"changes": {
"isNew": false, "changed": true,
"priceBefore": 29.99, "priceChange": -4.8, "priceChangePercent": -16.01,
"inStockBefore": true, "mainCategoryRankBefore": 188,
"changedFields": ["price", "reviewsCount", "mainCategoryRank"]
}
With onlyChangedProducts, you only get products whose price or stock changed, plus new ones. Unchanged products are not charged.
Option 3: a daily tracker in n8n
Schedule → HTTP Request → IF → Slack (or email, or Google Sheets)
HTTP Request node:
- Method:
POST - URL:
https://api.apify.com/v2/acts/panix~amazon-product-scraper/run-sync-get-dataset-items - Header:
Authorization: Bearer <YOUR_APIFY_TOKEN> - Body: the price tracker input above.
In the IF node, check {{ $json.changes.priceChangePercent }} is below -10 to get pinged only on real price drops. The sync endpoint waits up to 300 seconds, so keep the ASIN list under about 200 for a sync call. Use the normal async API for bigger lists.
What it costs
Pay per product, no monthly fee:
- $2.00 per 1,000 products with the full product page on Apify's Starter plan ($2.50 on the free plan, $1.50 on Business).
- $0.50 per 1,000 for search-result data only (turn off Read product pages).
- A start fee of $0.001 per run.
- The postcode, variants, review summary and price tracking don't cost extra. Filtered, duplicate, missing and unchanged products are free.
A daily tracker of 200 ASINs where 15 prices changed costs about $0.03. Apify's free plan includes monthly credits, enough to test it on your own products.
Limitations
- There are no full review texts. Amazon only shows review pages to signed-in customers. You get the rating, star breakdown and Amazon's review summary instead.
- amazon.com.br, .ae, .sa, .com.tr and .eg aren't supported yet.
- Amazon search shows a few hundred results per search (often about 300). Use several search terms, category links or Best Sellers lists to get more.
- Search order and sponsored spots change between visits. For monitoring, track a fixed ASIN list instead of a search.
- You're responsible for how you use the data, including Amazon's terms. The Actor isn't affiliated with Amazon.
If a field comes back empty or a store behaves oddly, leave a comment or open an issue on the Actor's Issues tab with the run ID. I read them all.
Top comments (0)