Track Amazon Bestseller-Oriented Search Results (2026)
Monitor Amazon's bestseller-sorted keyword results using product position, monthly-bought signals, ratings, reviews, and incremental changes.

Thirdwatch's Amazon Product Scraper can request Amazon's bestseller-oriented sort for category keywords, then return structured placement and demand-proxy fields across 19 marketplaces. It is designed for repeat search-shelf research—not official BSR extraction.
▶ Skip the setup: Run the bestseller-and-review movement Task on Apify →
What “bestseller tracking” means here
Set sortBy to bestSellers and provide category-specific keywords such as robot vacuum or mechanical keyboard. Amazon returns a bestseller-oriented search order. The Actor captures each result's ASIN, page, position, monthly-bought label, price, rating, review count, sponsored status, Prime flag when displayed, and badge.
This is not the same as Amazon's /Best-Sellers/zgbs hierarchy or the official Best Sellers Rank shown on product-detail pages. If your analysis requires the literal category leaderboard or numeric BSR, choose a source built for those pages.
Configure an incremental category monitor
{
"queries": [
"wireless headphones",
"robot vacuum",
"air fryer",
"mechanical keyboard"
],
"country": "us",
"category": "all",
"sortBy": "bestSellers",
"maxResults": 200,
"monitorMode": "all-changes",
"monitorStoreName": "amazon-bestseller-keywords-us"
}The first run emits a baseline. Later runs emit new ASINs and rows with available price, rating, or review-count changes. position is included on every returned row, but position-only changes do not currently trigger an all-changes event. If position movement itself is the primary signal, use monitorMode: "off" and retain full snapshots.
Pull a full weekly snapshot
import datetime
import json
import os
import pathlib
import requests
response = requests.post(
"https://api.apify.com/v2/acts/thirdwatch~amazon-product-scraper/run-sync-get-dataset-items",
params={"token": os.environ["APIFY_TOKEN"]},
json={
"queries": ["robot vacuum", "air fryer", "mechanical keyboard"],
"country": "us",
"sortBy": "bestSellers",
"maxResults": 200,
"monitorMode": "off",
},
timeout=3600,
)
response.raise_for_status()
week = datetime.date.today().strftime("%G-W%V")
pathlib.Path(f"amazon-search-{week}.json").write_text(
json.dumps(response.json(), indent=2)
)maxResults is the total run cap, not a per-query target. The Actor currently visits at most seven pages per query. Use focused runs when you need balanced category samples.
Calculate review and placement movement
import pandas as pd
previous = pd.read_json("amazon-search-2026-W28.json")
current = pd.read_json("amazon-search-2026-W29.json")
key = ["asin", "domain", "searchString"]
joined = current.merge(previous, on=key, suffixes=("", "_prev"))
joined["reviews_delta"] = (
joined["reviews_count_value"] - joined["reviews_count_value_prev"]
)
joined["position_delta"] = joined["position"] - joined["position_prev"]
signals = joined[
(joined["is_sponsored"].fillna(False) == False)
& (joined["reviews_delta"] > 0)
& (joined["rating_value"] >= 4.0)
].sort_values(["reviews_delta", "position_delta"], ascending=[False, True])
print(signals[[
"title", "monthly_bought", "reviews_delta",
"position_prev", "position", "price_value"
]].head(25))Review growth is a lagging proxy for purchase activity, and the monthly-bought field is a bucketed lower bound. Combine them with placement, rating, and sponsored status instead of labeling any one threshold a guaranteed “rising bestseller.”
Sample output
{
"title": "Cordless Robot Vacuum and Mop",
"asin": "B0ABC12345",
"price_value": 179.99,
"rating_value": 4.4,
"reviews_count_value": 8421,
"monthly_bought": "1K+ bought in past month",
"monthly_bought_value": 1000,
"is_prime": true,
"is_sponsored": false,
"badge": "Amazon's Choice",
"page": 1,
"position": 6,
"domain": "amazon.com",
"searchString": "robot vacuum",
"scraped_at": "2026-07-20T08:15:00+00:00"
}Avoid false conclusions
positionis captured search placement, not official BSR.bestSellersis a search sort, not the literal Amazon Best Sellers page.- A newly visible product may reflect ranking churn, personalization, availability, or sponsored insertion—not necessarily a new launch.
monthly_bought_valueis the lower edge of a public bucket such as1K+, not exact sales.- Prime may be absent because Amazon omitted the label from that search card.
- Compare the same query, country, sort, filters, and sample size every time.
Related Amazon workflows
- Scrape Amazon products for price monitoring
- Build an Amazon product-research tool
- Monitor Amazon competitor prices and ratings
- The complete guide to scraping e-commerce data
Run the Amazon Product Scraper on Apify or start with the preconfigured movement-tracking Task.
Frequently asked questions
Does this scrape Amazon's literal Best Sellers pages or official BSR?
No. It applies Amazon's bestseller-oriented sort to keyword search results. It does not accept Best Sellers page URLs as queries and does not return official product-detail Best Sellers Rank.
What signals can identify momentum?
Use new ASIN appearance, search-position movement, monthly-bought buckets, review-count growth, rating stability, sponsored status, and price changes together. None is a precise sales estimate on its own.
How often should I refresh?
Weekly is a useful default for category research; daily is better during launches or seasonal events. Native all-changes mode makes repeat runs incremental.
Can I compare marketplaces?
Yes. The Actor supports 19 marketplaces. Run one stable monitor per country and key results by `(asin, domain)` because price, reviews, and search placement vary by marketplace.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.