Amazon Keyword Rank Tracker: Organic & Sponsored
Pricing
from $1.60 / 1,000 search pages
Amazon Keyword Rank Tracker: Organic & Sponsored
Track where your products rank on Amazon search for your keywords: organic and sponsored place, page, who outranks you, and changes since the last run, in 22 marketplaces. Plus each keyword's top results and competition. From $2 per 1,000 pages; compact JSON for AI agents.
Pricing
from $1.60 / 1,000 search pages
Rating
0.0
(0)
Developer
CleanPull
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
9
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Give it keywords and your products (ASINs) and get, for every pair, the product's organic rank, its sponsored (ad) place, the page it shows on, who ranks above it, and what changed since your last run. Every keyword also gets a row describing its results: the top 10, the ads, and the competition (price spread, review depth, Best Seller badges, units bought in the past month). It works in 22 Amazon marketplaces, with each country read from that country. From $2 per 1,000 search pages plus $1 per 1,000 product ranks.
What you can do with it
- "Where does my product rank for my keywords?" Track every keyword and product pair daily, with organic and sponsored places kept apart.
- "Who outranks me?" Each rank row lists the five results directly above your product, with their price, rating and reviews.
- "Tell me when my rank moves." With Changes only, you get only real moves; small reshuffles between reads are filtered out (see below).
- "Is this niche worth entering?" Each keyword row gives the price range of the top 20, their median reviews, how many have under 100 reviews, Best Seller badges and units bought in the past month.
- "Export a search results page." Turn on One row per search result to get every card with its position, ad or organic place, price, rating, reviews and badges.
What makes the ranks right
- Organic and sponsored are counted separately. A product's organic rank counts organic results only, across pages, so ads never push it down. Its sponsored place counts ads only.
position(every card) andslot(Amazon's own slot, with widgets) are given too. - Ads are read from home-network addresses. In tests, Amazon showed no ads at all to datacenter addresses and stopped showing them to a session after a few searches. So each keyword starts on a fresh session through US residential addresses, and a first page without ads is read once more at our cost (first reading only). A keyword that showed no ads on 2 runs in a row is not re-read again for a week; at most 3 re-reads a run that find no ads. If a keyword still shows no ads (some categories rarely do), the row says
adsShown: falserather than reporting "no ad place". - Rank noise is filtered. Deeper results reshuffle by 1 to 3 places between two reads of the same search, up to 8. An organic move counts from 1 place in the top 3 and 2 places in the top 10. Below that it needs 3 places and 25% of the earlier rank (rank 21 needs 6); both are adjustable.
- Milestones need to be clear. Entering or leaving the top 3, the top 10 and page 1 (the organic results on that run's first page) counts when the rank is clearly past the line, comes with a reported move, or is seen two runs in a row. So a product sitting at the line does not flap.
- Ad places are noisier. A sponsored move needs 3 places and half the place, and an ad starting or stopping is reported once two runs in a row agree.
- Baselines move only when a change is reported. Organic and sponsored places keep separate baselines, so a slow drift still shows once it adds up. A baseline is saved only once its row is delivered, so a stop at a limit never loses a change. For steadier numbers, Readings per keyword (up to 3) reports the median rank and its range.
- Short results pages are handled. Some categories show 16 results a page and others 48. Depth is set in organic results, not pages, and pages are followed (up to 7) until it is reached, or until all your products are found.
- Each country is read from that country. Outside the US, pages come through addresses in that country, and every row gives
localView. A page shown as for a visitor abroad is not compared for changes. - Only delivered work is billed. A keyword that could not be read is listed in the run summary with the reason, never charged.
Input
| Field | What it does |
|---|---|
keywords | Search terms, one per line; terms that differ only in case are read once |
asins | Your products: ASINs or product URLs. Optional; without them you get keyword rows only |
marketplace | US, GB (or UK), DE, FR, IT, ES, CA, MX, BR, JP, IN, AU, NL, SE, PL, BE, TR, AE, SA, SG, EG, IE, or a domain |
maxResults, stopWhenFound | Organic depth to scan per keyword (default 48), and whether to stop once all products are found |
sponsored | Record ad places (US: read through residential addresses). Off: organic only, cheaper |
samples | Read each search 1 to 3 times and report the median rank |
resultRows | Also one row per result card |
changesOnly, monitorName, rankChangeMin, rankChangePercent | Only ranks that moved since the last run with this monitor name, and how big a move counts |
providerFallback | Provider fallback: when Amazon refuses a keyword on every proxy, read it through the marketplace data service, never dearer than a direct read (on by default; see below) |
maxRunCostUsd | Max cost per run: a keyword is read only when its worst case fits what is left. For schedules and tasks |
maxItems, fields, proxyConfiguration | Limits, field selection and proxy |
Example inputs
Three products on five keywords, checked daily for rank moves:
{"keywords": ["stainless steel water bottle","insulated water bottle","water bottle with straw","kids water bottle","gym water bottle"],"asins": ["B0BZYCJK89", "B07N2F3JXP", "B0BZYBSRNF"],"changesOnly": true,"monitorName": "bottles"}
The first 100 organic results for a keyword in Germany, one row each:
{"keywords": ["yogamatte"],"marketplace": "DE","maxResults": 100,"resultRows": true,"sponsored": false}
Output
A rank row (real, from a test run):
{"recordType": "rank","keyword": "stainless steel water bottle","marketplace": "US","asin": "B0BZYCJK89","found": true,"organicRank": 1,"organicPage": 1,"position": 5,"slot": 7,"sponsoredRank": null,"title": "Owala FreeSip Stainless Steel Water Bottle 24 oz Denim","price": 29.99,"currency": "USD","rating": 4.6,"reviewCount": 141437,"badges": ["Overall Pick", "Amazon's Choice"],"boughtPastMonth": "20K+ bought in past month","outrankedBy": [],"organicSeen": 45,"adsShown": true,"localView": true,"changes": [],"previousOrganicRank": 1,"firstSeen": false,"url": "https://www.amazon.com/dp/B0BZYCJK89"}
A change looks like { "type": "organic-rank", "from": 9, "to": 4, "delta": 5 }. A milestone looks like { "type": "milestone", "milestone": "entered-top-3", "from": 4, "to": 3 } (also left-top-3, entered-top-10, left-top-10, entered-page-1 and left-page-1). The other types are organic-entered, organic-lost (counted only when the run read as deep as the old rank), sponsored-rank, sponsored-started and sponsored-stopped (compared only when both runs were shown ads). Rank rows also carry sponsoredPage, adPlacements (sponsored video, carousels), rankRange (with several readings) and previousSponsoredRank. With several readings, outrankedBy comes from the reading whose rank is the median, and keyword rows from the first reading.
A keyword row's competition block (real):
{"keyword": "stainless steel water bottle","resultsText": "1-48 of over 30,000 results","organicSeen": 45,"sponsoredSeen": 12,"adsShown": true,"competition": {"topCount": 20,"priceMin": 11.99,"priceMedian": 26.99,"priceMax": 34.99,"reviewsMedian": 12924,"resultsUnder100Reviews": 1,"bestSellerBadges": 7,"boughtPastMonthTotalMin": 138800}}
Keyword rows also hold topResults (the first 10 organic), sponsoredResults (the first 10 ads), adPlacements, pagesRead, resultsPerPage and deliveryLocation. Result rows hold each card's position, organicRank, sponsoredRank, page, slot, price, listPrice, rating, reviewCount, badges, boughtPastMonth, promotion, image and tracked.
Every row has a source: amazon (read from Amazon's pages) or provider (read through the marketplace data service, below).
Dataset views: Ranks, Keywords and Search results. RUN_SUMMARY gives the outcome, pages read, page requests made (pageReads through the page unlocker, directPageReads straight to Amazon, retries included), residential pages, keywords and records read through the marketplace data service, extra reads for ads, keywords without ads, charges, what Amazon answered on each proxy tier (fetching.answers), browser-check steps (wafTokens, wafTokenFailures, wafBrowserBytes, and wafTokensStopped when they stopped), and every keyword that could not be read, with the reason.
When Amazon refuses a keyword
Some marketplaces sometimes answer every address with a bot check. Since October 2026 amazon.fr answers its search with an AWS WAF browser check (HTTP 202, x-amzn-waf-action: challenge), which only a browser running its JavaScript gets past. The first time a run meets it, the actor opens a browser once, for a few seconds, through an address in the marketplace's country; the browser runs the check like a shopper's would, and the pages are then read directly as usual, billed as any direct read. Amazon France and other marketplaces showing a browser check are read directly again. When the check comes back on a later keyword, a new browser step runs (at most one per keyword and 5 a run; your own proxy, when set, is used for it too). A run with less than about 900 MB of memory skips the browser step and says so: 1024 MB, the default, lets the actor pass the check directly; if Amazon asks the browser for a visual CAPTCHA, the actor never solves it: it tries fresh sessions and then higher proxy tiers, and names what it met. A keyword refused that way says so in plain words: "Amazon France is showing a browser check to automated reads; this keyword couldn't be read directly", and its rows carry directBlock: "waf-challenge" ("blocked" for any other refusal, "skipped" for a keyword sent straight to the service because the first keywords were refused, "too-large" for a keyword whose search page was over the size cap for home-network reads, null for a direct read).
A search page bigger than the size cap for home-network reads is our own limit, not a refusal by Amazon: it never counts toward stopping direct reads and is never called a block. A page over the cap, on any page or reading, sends the keyword whole to its fallback: the standard addresses (US with sponsored places: organic ranks only), else the service's page unlocker, else its search records, billed only for the fallback's pages as above; the pages read before it are never billed. Rows say directBlock: "too-large", and a keyword no fallback could read fails as an error, worded as over the size cap.
Provider fallback (providerFallback, on by default) then reads that keyword's search results through CleanPull's marketplace data service, a third-party web data provider, so you still get your ranks. CleanPull holds the account and its key, which never appears in your input, logs or results.
-
Amazon's own pages first: the service first reads the keyword's search pages themselves, through its page unlocker (seconds per page). Those pages go through the same reading as a direct read, so sponsored places, ad placements, the results text and the delivery location are all there, and the rows have
source: "amazon"(withdirectBlocksaying why it was not read directly). Billed exactly as below: one search page per page delivered, with the home-network add-on per page only where a direct read pays it (outside the US, and in the US with sponsored places; never with your own proxy), plus your rows. A page that comes back as anything but a search page is asked once more, and a page after the first that still fails is read once more, keeping the pages before it; if it still is not one, or the read takes over 3 minutes, the keyword goes to the service's search records (the rest of this list). -
Cost to you: never more than a direct read. The service is on us: a keyword read through it is billed one search page per page delivered for it, as a direct read is, with the home-network add-on per page only where a direct read pays it (outside the US, and in the US with sponsored places; never with your own proxy), plus your rank and result rows as usual. The pages are paid only together with the keyword's first rank row. For the service's search records, a page is 48 results, the organic results of a full Amazon page, so never more pages than a direct read of the same results. Its ranks and result rows come from the pages a direct read would have used (up to the page where your products were all found, with Stop when found, or Max results reached). You are never charged because Amazon refused a read.
-
Only complete readings count: the service's results must start at page 1 with no page missing, and carry no error row other than "no results" or pages cancelled past Max results. A keyword with only a few results reads fine. Anything else fails as unread: not charged, no rank rows, nothing marked as dropped, your baseline untouched. A search that really has no results fails the same way through the service, since it cannot be told from one it could not read.
-
Never a drop-out from the service: a product the service's results do not include is reported
found: falsewithabsentFrom: "partial-source", with no organic change, and its last known rank is kept as its baseline (a sponsored place it has is still compared and saved). -
Up to 2,000 records a run go through the service: each refused keyword reserves its Max results records before its job starts, and a reservation is never given back, whatever the job returns (41 keywords at the default 48 results). Keywords past that fail, uncharged, and the run goes on with the rest; the next run starts with the first keyword left out (saved once per run), so over successive runs every keyword is read.
-
Time: 1 to 5 minutes per job. When the first 2 keywords of a run are both refused, the rest go straight to the service, up to 25 keywords a job (only as many as Max rows, the cost limits and the run's allowance allow). A run moved to another server downloads the jobs it already started instead of paying for new ones.
-
Ranks over time: each source keeps its own baseline. A rank read through the service is never compared with one read from Amazon: the first reading from a new source has
changes: []andsourceChanged: true(with Changes only, it delivers nothing), and a return to Amazon compares with the last Amazon reading. -
What it gives: organic places, page, price, rating, reviews, badges and "bought in past month" from its records, compared with your earlier runs like any reading. Not available from it: sponsored places (its records hold organic results only, so
sponsoredRankis empty andadsShownis null), ad placements, the results text and the delivery location;localViewis null on these rows. -
Off: a refused keyword fails, costs nothing, and the run stops after the first 2 keywords are refused.
Pricing
| Event | Free and Bronze | Silver | Gold and above |
|---|---|---|---|
| Search page read | $2.00 | $1.80 | $1.60 |
| Search page from home-network addresses (add-on: US with sponsored places, every marketplace outside the US) | $6.00 | $6.00 | $6.00 |
| Product rank (a delivered rank row) | $1.00 | $0.90 | $0.80 |
| Search result row (with One row per search result) | $0.50 | $0.45 | $0.40 |
Per 1,000. Each run also has a $0.00005 start fee.
- Not charged: extra reads to find a page with ads, pages Amazon refused, and the marketplace data service itself (its page unlocker and its search records) for keywords Amazon refused: those are billed one search page per page delivered, with the add-on only where a direct read pays it, so never more than a direct read.
- Max cost per run (
maxRunCostUsd) counts each keyword's worst case: every page through home-network addresses (for a refused keyword read through the service, every page it can deliver, with the add-on where a direct read pays it). - Readings per keyword multiply the page charges: 3 readings bill 3 times the pages.
- Your own residential proxy (in the Proxy field) is not charged the add-on.
Example: 10 keywords and 3 products checked daily in the US, with sponsored places and one page each, is 10 pages at $8 per 1,000 plus 30 ranks at $1 per 1,000. That is about $0.11 a day, or $3.30 a month. Without sponsored places, the same check costs about $0.05 a day. With Changes only, the pages are still billed, but unchanged ranks are free.
Limits
- Ranks are for a signed-out shopper in the marketplace's country, without a postcode. Delivery-specific ranking and personalisation are not reflected.
- Sponsored places cover ads in the result grid; sponsored brand banners are reported as
adPlacements, not as places. - US results come from varying US locations. Pages are read through residential addresses spread across the US, without a postcode, so a delivery-specific result can differ from what a shopper at one address sees.
- Exact ASIN match only. A product is found by its own ASIN; another variant of the same listing (a parent or sibling ASIN) is not counted as it.
- Search volume is not available: Amazon does not publish it.
- Nothing found: input naming no readable keyword (all longer than 200 characters, an unknown marketplace) ends the run SUCCEEDED with one free
recordType: "unreadable"row giving thereason; nothing is charged. A run near its time limit stops starting keywords, delivers what it read and lists the rest the same way. A run whose every keyword Amazon refused still fails.
Related actors
Other CleanPull actors for marketplace:
- Amazon Product Scraper: Amazon price, Buy Box, every seller's offer and Best Sellers Rank by ASIN.
- Amazon Best Sellers Scraper & Rank Tracker: Amazon Best Sellers, New Releases and Movers & Shakers with rank changes.
- Marketplace Search Scanner: one keyword across Amazon, eBay, Etsy, Walmart and more, with market stats.
- Listing Quality Checker: a 0–100 audit of a product page or Amazon listing, with a fix for each check.
Use it from Claude
The MarketMage plugin runs these actors from a Claude chat.
Found it useful? A rating on the Store helps others find it.
Changelog
- 0.2.x, fix (2026-11-04): review counts written with "mil" (a thousand, as amazon.es shows "(4,0 mil)") are no longer read as millions, and counts with spaces between digit groups (amazon.fr) are read whole. A sponsored result's "Anuncio patrocinado" lead-in (and its French, German, Italian, Dutch, Swedish and Polish forms) is no longer part of its title. Ranks, prices and events unchanged.
- 0.2.x, fewer reads (2026-10-30): a keyword read through the page unlocker whose page 2 or later fails is no longer re-bought whole from the service's search records: that one page is read once more and the pages before it are kept (about 2–3 page requests instead of 48–350 records). The records stay the last resort, billed as before. Keywords that differ only in case ("Air Fryer", "air fryer") are read once, under the spelling given first.
RUN_SUMMARYaddspageReadsanddirectPageReads, and the final status says how many pages were read for how many rows. Prices and events unchanged. - 0.2.x, fix (2026-10-30): large Amazon results pages (amazon.de and others now send pages close to the home-network size limit) no longer fail the keyword: a page over the limit is read whole through the fallback instead, billed only for the pages it delivers. Failure messages now say when a page was over the size limit rather than refused by Amazon.
- 0.2.x, fallback billing (2026-10-27): a keyword Amazon refused and read through the marketplace data service is billed one search page per page delivered for it, as a direct read is (it was one search page whatever it read). The home-network add-on is billed per page only where a direct read pays it (outside the US, and in the US with sponsored places; never with your own proxy), so never more than a direct read; a refused page is never charged. The service's search records are billed in pages of 48 results. Pages are charged only together with the keyword's first rank row, and only once across a platform migration. Max cost per run and the spending limit count every page a fallback read can deliver. Prices and events unchanged.
- 0.2.x (2026-10-26): Amazon France and other marketplaces showing a browser check are read directly again: a short browser step passes the check, then pages are read and billed as before.
RUN_SUMMARYaddswafTokens,wafTokenFailuresandwafBrowserBytes. Default memory is 1 GB (the browser step needs it). - 0.2.x, reliability (2026-10-24): input naming no readable keyword ends SUCCEEDED with a free
unreadablerow saying why, instead of FAILED; a run stops starting keywords before its time limit and ends with what it read, never TIMED-OUT. A run whose every keyword Amazon refused still fails. Prices and events unchanged. - 0.2.x (October 2026): Amazon's AWS WAF browser check (HTTP 202 with
x-amzn-waf-action: challenge, amazon.fr) is named per keyword ("Amazon France is showing a browser check to automated reads") and on rows (directBlock). Provider fallback is on by default, never dearer than a direct read: a refused keyword is billed one search page without the home-network add-on, never the provider events; only complete service readings count; up to 2,000 service records a run, and keywords left out are read first next run. - 0.2.x (2026-10-23): the competition block's
priceMedianandreviewsMedianuse the shared median: for an even count, the mean of the two middle values (it was the lower one).reviewsMedianis rounded to a whole number;priceMediankeeps its cents. - 0.2 (October 2026): keywords Amazon refuses on every proxy tier are read through the marketplace data service (
providerFallback,sourceon every row); failed keywords say what Amazon answered. - 0.1 (October 2026): organic and sponsored ranks per keyword and product in 22 marketplaces, who outranks you, keyword competition, result rows, median readings, rank-move filtering and changes since the last run.