Blog/amazon scraping
1 min read

Wire Up Amazon Search Rank Tracking in One Script

Track Amazon search results for a keyword over time (rank, price, ratings) with one pay-per-call Monid endpoint and a scheduled script.

Wire Up Amazon Search Rank Tracking in One Script

Copy this line to your agent to start tracking Amazon search rank for a keyword.

set up https://monid.ai/SKILL.md and use apify/axesso_data/amazon-search-scraper to track the top Amazon results for a keyword over time

You can snapshot the top Amazon results for any keyword, rank, price, rating count, and prime status, from a single pay-per-call endpoint, then run that snapshot on a schedule to watch a category move. This is the whole cookbook: the query, paging with maxPages, flattening each result into a dated row, and a cron line that appends one snapshot a day. Monid is a pay-per-call data API marketplace: one interface and one wallet reach hundreds of external data endpoints without a separate signup per vendor. Amazon search is one of the endpoints we verified ourselves, and here is how to wire it into a rank tracker.

TL;DR

  • apify /axesso_data/amazon-search-scraper returns the search results page for a keyword: each result's ASIN, title, position, price, star rating, review count, and sponsored flag.
  • The input is an array, so one call can carry several keywords and domains, and maxPages controls depth. Start with one page.
  • Billed per result, so a daily snapshot of the top page for a few keywords is a fraction of a cent to a few cents. Live pricing at monid.ai/tools.
  • Flatten each run into a dated CSV row, and a plain cron line turns it into a rank history you can chart.
  • Amazon's own Product Advertising API retired in May 2026 and never gave a clean keyword-search feed without Associates approval. This endpoint is a direct search-results scrape.

Why this is not a Product Advertising API job

Amazon's Product Advertising API was the official route, and it was retired in May 2026. Even while it ran, its SearchItems operation was gated behind Associates program approval tied to qualifying sales, and it returned an affiliate-shaped product list rather than the actual on-page ranking a shopper sees. It was never a clean "give me the top results for this keyword, in order" feed. Tracking your own listing's position, or watching a competitor climb, needs the search page as rendered, with position and sponsored placement intact. That is what apify /axesso_data/amazon-search-scraper, maintained by scraping specialists on Apify, returns.

Set up Monid once

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More details in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add --label main --key <your-api-key>

More details in the CLI quickstart.

Step 1: inspect the endpoint (free)

Read the schema before you spend anything. Inspect shows the accepted input fields and the per-result price, and it costs nothing.

monid inspect -p apify -e /axesso_data/amazon-search-scraper
# -> input schema, field docs, and per-result price (free)

The input body takes an input array, where each entry is a search job with keyword, domainCode (com, co.uk, de, and so on), an optional sortBy, and maxPages. Each returned result carries the ASIN, the displayed title, the position on the page, price, star rating, review count, and whether it is a sponsored placement. Those fields are what the rest of the script keys on, so read them once here. Full reference lives on the Apify amazon-search-scraper page.

Step 2: run one keyword, one page

Keep the first run tiny so it is cheap and you can confirm the shape. The -i flag takes the JSON body, and -w waits inline so the result comes straight back.

monid run -p apify -e /axesso_data/amazon-search-scraper \
  -i '{"input":[{"keyword":"wireless earbuds","domainCode":"com","maxPages":1}]}' \
  -w -o snapshot.json
# -> the top-page results for "wireless earbuds", billed per result

If a run goes async you get a run ID instead. Poll and save it with:

monid runs get -r <RunID> -o snapshot.json

maxPages is your depth dial, and results per page vary, so raise it one step at a time rather than jumping to ten. For rank tracking, the first page is usually all that matters, since that is where the clicks are.

A keyword through one Monid run (maxPages 1) to a snapshot, flattened with jq into a dated CSV row, building a rank history over time

Step 3: flatten each result into a dated row

The raw JSON is a list of result objects. Pull the fields that make a rank record, and stamp every row with today's date so snapshots stack into a history:

DATE=$(date +%F)

jq -r --arg d "$DATE" '.[] | [
  $d,
  .position,
  .asin,
  .title,
  .price,
  .rating,
  .reviewCount,
  .sponsored
] | @csv' snapshot.json

Field names follow the schema you read in Step 1, so if Apify labels the price or rating key differently, the inspect output is your source of truth. @csv handles quoting, so commas inside a product title will not break your columns. The position and sponsored fields are the two that matter most here: position is the rank you are tracking, and sponsored tells you whether a top slot is paid placement rather than organic rank.

Step 4: append snapshots to one history file

Write the header once, then append a dated block on every run. Over days this becomes a table you can pivot by ASIN to see each product's rank walk.

FILE=rank_history.csv
[ -f "$FILE" ] || echo "date,position,asin,title,price,rating,reviews,sponsored" > "$FILE"

DATE=$(date +%F)
jq -r --arg d "$DATE" '.[] |
  [$d,.position,.asin,.title,.price,.rating,.reviewCount,.sponsored] | @csv' \
  snapshot.json >> "$FILE"

To follow your own listing, filter the history to your ASIN and read the position column down the dates. To size a category, keep the whole page and watch which ASINs enter and leave the top ten.

Step 5: run it on a schedule

A rank tracker is only useful if it runs itself. Wrap Steps 2 through 4 in a small script and let cron append one snapshot a day. Here is the crontab line for a 7am daily pull:

# crontab -e
0 7 * * * /home/you/amazon-rank/track.sh >> /home/you/amazon-rank/cron.log 2>&1

Inside track.sh, decide how far you want to go: append every snapshot unconditionally for a full history, or compare today's position to yesterday's and only alert when your ASIN moves. The branch below is the shape of that decision.

A daily cron runs the keyword snapshot; if your ASIN's rank changed it appends a row and sends an alert, otherwise it just appends the row

To track several keywords, put more entries in the input array of the one call instead of running the endpoint many times. Each entry is its own keyword and domain, and they all come back in a single billed run.

-i '{"input":[
  {"keyword":"wireless earbuds","domainCode":"com","maxPages":1},
  {"keyword":"bone conduction headphones","domainCode":"com","maxPages":1}
]}'

Cost tally

Everything up to the run is free: discover and inspect cost nothing, so you shape the jq and the schedule without touching your wallet. Runs are billed per result. A single top-page snapshot for one keyword is a handful of results, which lands at a fraction of a cent to a few cents. A daily pull across a few keywords, run for a month, still stays in the low single-digit-dollars range because you are only ever paying for the rows on the pages you asked for. The lever is maxPages: keep it at one for rank tracking and the bill barely moves. Check current per-result pricing on monid.ai/tools before you widen the keyword list or the page depth.

FAQ

Can I track more than the first page of results? Yes. Raise maxPages in the input entry. Results per page vary, so step it up gradually and watch the row count and the bill. For rank tracking the first page is usually enough, since that is where clicks concentrate.

How do I track several keywords or Amazon domains at once? Add more objects to the input array in a single call. Each entry sets its own keyword and domainCode, and they all return in one billed run, which is cheaper and simpler than looping the endpoint.

Is this a replacement for the Product Advertising API? For keyword search it fills a gap the official API left. PA-API retired in May 2026, and even before that its search operation needed Associates approval and returned an affiliate list, not the on-page ranking. This endpoint scrapes the search results directly, with position and sponsored flags intact.

How much does a daily tracker cost? Inspect is free, and runs are billed per result, so a one-page daily snapshot for a few keywords is cents per day. Live per-result pricing is on monid.ai/tools.

amazon scrapingapifyrank trackingdata pipeline