Amazon Product Scraper — Keyword Rank, ASINs and Prices avatar

Amazon Product Scraper — Keyword Rank, ASINs and Prices

Pricing

Pay per usage

Go to Apify Store
Amazon Product Scraper — Keyword Rank, ASINs and Prices

Amazon Product Scraper — Keyword Rank, ASINs and Prices

"Amazon Product Scraper extracts product data with precision. Capture titles, prices, images, reviews, ratings, variations, and seller details fast. Ideal for market research, price tracking, and e-commerce insights with clean, structured JSON output

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

3 days ago

Last modified

Share

Amazon Scraper — Keyword Rank Tracking, ASINs and Prices

Amazon Product Scraper With Keyword Rank Tracking pastes into any Amazon search-results URL and returns every ranked result with its position on that page: absoluteRank, organicRank, sponsoredRank, placementType (organic or sponsored) and searchPage, alongside the full product record — title, asin, price, stars, reviewsCount, brand, inStock. Give it a list of your own ASINs in trackAsins and it reports exactly where each one sits in the results for that keyword, or confirms it isn't ranking at all. Built for Amazon SEO teams tracking organic position, PPC managers separating ad placements from earned rank, and brand teams monitoring competitor visibility over time.

What is Amazon Product Scraper With Keyword Rank Tracking?

It's an Apify Actor that scrapes Amazon's live search-results pages and turns them into a ranked, structured dataset — one row per search result, with its exact position and whether that position was paid for. No Amazon account or login is required; everything returned is visible to any anonymous visitor on the search page.

  • Discovery is by search URL — paste an amazon.com/s?k=... URL (or any Amazon domain) and the Actor walks its result pages; product /dp/ URLs are also accepted for one-off lookups without rank context
  • Every ranked result carries a continuous rank counter across pages: absolute position, organic-only position, and sponsored-only position, computed independently of each other
  • trackAsins narrows the run to specific ASINs and reports their rank for the keyword — or an explicit "not found" row if they don't appear at all
  • organicRankOnly drops sponsored placements from the output while still counting them internally, so organic rank stays accurate either way
  • Full product detail (price, stars, reviews, seller, variants, delivery info) is fetched for every ranked result by default, or you can turn it off for a lighter, faster rank-only pull
  • Export as JSON, CSV, Excel, or read the dataset through the Apify API

What data can I extract with Amazon Product Scraper With Keyword Rank Tracking?

Every search result becomes one dataset row combining rank-tracking fields with full product detail. The 16 columns below are the default dataset view; the full row carries substantially more.

FieldExample ValueUse Case
asinB09B8V1LZ3Unique product identifier, the join key across runs
title"Wireless Earbuds Bluetooth 5.3..."Listing headline as shown in search
searchKeywordwireless earbudsThe keyword this rank was measured against
absoluteRank14Position counting every tile, sponsored and organic together
organicRank9Position counting only non-sponsored tiles
sponsoredRanknullPosition counting only sponsored tiles (null on organic rows)
placementType"organic""organic" or "sponsored" — the reliable placement flag on every row
isTrackedtrueWhether this ASIN was in your trackAsins list
searchPage2Which result page this rank was found on
urlhttps://www.amazon.com/dp/B09B8V1LZ3Direct product link
price{"value": 29.99, "currency": "$"}Current listed price
stars4.6Average star rating
reviewsCount18420Total review count
brand"Anker"Brand/manufacturer name
thumbnailImagehttps://m.media-amazon.com/images/...Listing thumbnail URL
inStocktrueAvailability flag

Keyword-rank fields — the core of this Actor

absoluteRank, organicRank and sponsoredRank are three independent counters that walk the search results page by page: absoluteRank increments on every tile, organicRank only on non-sponsored tiles, sponsoredRank only on sponsored tiles. A result gets exactly one of organicRank/sponsoredRank populated — the other is null — and placementType states which. searchPage records which page of results the tile was found on, so a rank of "14th overall, page 2" is fully reconstructible. Every row also carries a nested keywordRank object (keyword, asin, page, absoluteRank, organicRank, sponsoredRank, isSponsored, placementType, isTracked) that repeats these values in one self-contained record, useful when you're extracting just the rank payload downstream.

Product and targeting fields

price, listPrice, stars, starsBreakdown, reviewsCount, inStock, bestsellerRanks and isAmazonChoice are the fields that tell you whether a ranked result is actually strong or just visible. brand, breadCrumbs, variantAsins and categoryPageData are what you filter and group on — by manufacturer, by category path, or by parent/variant relationship — when you're scanning a keyword's results for a specific competitor set.

How does Amazon Product Scraper With Keyword Rank Tracking differ from the official Amazon API?

Amazon's Product Advertising API (PA-API) is built around item lookup — SearchItems and GetItems return product data for a keyword or a list of ASINs — not search-rank measurement. It does not expose a "where does ASIN X sit on page N of today's live search results for keyword Y" answer, and it has no field for organic-vs-sponsored placement, because PA-API results are not the same ordering shown to a shopper on amazon.com. That gap — not a rate limit — is why a keyword-rank tracker has to read the actual search-results page.

FeatureAmazon Product Advertising APIThis Actor
Search-rank position (organic/sponsored, per page)Not exposedabsoluteRank, organicRank, sponsoredRank, searchPage
Sponsored vs organic distinctionNot exposedplacementType on every row
Access requirementAmazon Associates account with API credentialsApify account only, no Amazon account
Track specific ASINs across a keyword's resultsNot supportedtrackAsins
Full product detail alongside rankAvailable via item lookup, no rank context✅ Same row
Multi-marketplaceRegion-specific API endpointsAny Amazon domain, one input field

Why doesn't Amazon's own API expose search rank?

PA-API is designed for affiliate product lookups — pulling detail for ASINs you already know, or a keyword-matched item list for a storefront — not for reproducing the live search-results page a shopper actually sees, ad placements included. There is no PA-API operation that answers "what position does my ASIN hold in today's organic results for this keyword," because that ordering is a rendering of the public search page, not a catalog query. This Actor covers that gap by requesting the same search-results URL a shopper would load and reading rank directly off the page, page by page, with sponsored and organic counted separately.

Use PA-API when you already have Associates access and only need catalog data for known ASINs. Use this Actor when the question is rank position — where a product sits in the results for a keyword, today, organic or paid.

How to use data extracted from Amazon Product Scraper With Keyword Rank Tracking?

🎯 Amazon SEO teams

Set trackAsins to your product line and run the same searchUrls weekly. organicRank per keyword becomes your position-tracking series; a rising number or a missing row (an uncharged "not found" record) tells you a listing dropped before a sales dip shows up. Cross-reference against bestsellerRanks and stars to see whether a rank change tracks a review or pricing event.

📈 PPC and ad managers

Leave organicRankOnly off and read placementType per row to separate what you paid for from what you earned. Compare sponsoredRank against organicRank for the same ASIN across keywords to see whether ad spend is buying position you'd already hold organically, or covering a real organic gap.

🔬 Market research and competitive intelligence

Run without trackAsins to rank every result on a keyword's page, then group by brand and placementType to map who owns the top organic slots versus who's buying sponsored placement for that term. Repeat across a keyword list to build a category-level share-of-shelf view.

🤖 AI agents and automated pipelines

Because every row is typed JSON with a stable rank schema, an agent can be given a keyword and a target ASIN and asked "did we move up or down this week" without any HTML parsing on the agent's side. Feed title, price, stars and placementType into a competitive-monitoring tool call, or into a RAG index for a merchandising assistant.

⬇️ Input

All 19 parameters are optional — no field is required by the schema.

ParameterRequiredTypeDefault / ConstraintsDescription
searchUrlsNoarrayOne or more Amazon search-results URLs to rank-track, e.g. https://www.amazon.com/s?k=wireless+earbuds. Product /dp/ URLs are also accepted (full detail, no search rank). Use a different Amazon domain to track another marketplace. Also accepts the legacy key categoryOrProductUrls.
maxResultsPerKeywordNointegerdefault 10; minimum 0How deep down the search results to rank per keyword. Also accepts the legacy key maxItemsPerStartUrl.
trackAsinsNoarrayYour ASINs (e.g. B09B8V1LZ3). When set, only these products are returned per search URL, each with its rank. A tracked ASIN absent from the results is still reported as an uncharged "not found" row. Leave empty to rank every result on the page.
organicRankOnlyNobooleandefault falseExcludes sponsored/ad placements from the output entirely. Organic rank is always computed with sponsored slots removed regardless of this toggle — it only drops the paid rows from what's returned.
languageNostring (enum)Amazon site language. One of cs, da, de, en, es, fr, nl, pl, pt, sv, tr, he, ar, mrta, hi, bn, ta, te, kn, ml, ko, zh_CN, zh_TW, ja. If the domain doesn't support the chosen language, the domain's default is used.
proxyCountryNostring (enum)default AUTO_SELECT_PROXY_COUNTRYProxy country for geo-relevant results. Accepts AUTO_SELECT_PROXY_COUNTRY (matches the Amazon domain automatically), NO_PROXY, or any of roughly 240 ISO country codes.
maxSearchPagesPerStartUrlNointegerdefault 9999; minimum 1How many search-results pages to walk per keyword. Rank is continuous across pages; each row records its searchPage. Stops at whichever of this and maxResultsPerKeyword is hit first.
maxProductVariantsAsSeparateResultsNointegerminimum 0Maximum product variants per product to output as their own separate rows, beyond the summary already in variantDetails.
maxOffersNointegerdefault 0; minimum 0Maximum offers to scrape per product (the buy-box and other sellers listed for that ASIN).
scrapeSellersNobooleandefault falseExtracts further seller detail for the featured offer, and for every offer's seller when combined with maxOffers.
ensureLoadedProductDescriptionFieldsNobooleandefault falseForces a full reload of seller-editable description fields (description, aPlusContent, attributes, etc.) that Amazon sometimes withholds as a blocking measure.
useCaptchaSolverNobooleandefault falseAutomatically solves captchas Amazon throws. Works well only on the .com domain; even there, solving a captcha means Amazon withholds attributes, manufacturer attributes and bestsellerRanks on that request.
scrapeProductVariantPricesNobooleandefault falseExtracts the price of every product variant.
scrapeProductDetailsNobooleandefault trueIf enabled, every ranked result is opened and its full product detail is returned alongside the rank fields. If disabled, only lightweight search-tile data (title, price, stars, rank) is returned — faster for pure rank tracking across many keywords.
maxConcurrentRequestsNointegerdefault 10; minimum 1; maximum 20Number of concurrent product page requests.
countryCodeNostring (enum)Country code to use as the delivery location. Accepts any of roughly 200 ISO country codes.
zipCodeNostringZip code to use as the delivery location, for more precise targeting in larger countries.
locationDeliverableRoutesNoarray (enum items)default ["PRODUCT", "SEARCH", "OFFERS"]Which page types the delivery-location settings apply to.
proxyConfigurationNoobjectprefilled {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Apify proxy settings. Residential is recommended for fewer blocks.

Example input

{
"searchUrls": ["https://www.amazon.com/s?k=wireless+earbuds"],
"maxResultsPerKeyword": 30,
"trackAsins": ["B09B8V1LZ3", "B0863TXGM3"],
"organicRankOnly": false,
"maxSearchPagesPerStartUrl": 5,
"scrapeProductDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Common pitfall: maxResultsPerKeyword sets how many results get ranked (depth into the page), not how many rows you'll receive if you've also set trackAsins or organicRankOnly — those filter which of the ranked results actually get pushed to the dataset. If your tracked ASIN sits at position 40 but maxResultsPerKeyword is 10, it will never be reached and comes back as a "not found" row even though it does rank on the live page.

⬆️ Output

Typed, normalized JSON, one row per ranked search result (or per tracked-but-missing ASIN). Rows stream to the dataset live as each one completes. Export as JSON, CSV or Excel, or read the dataset through the Apify API.

With scrapeProductDetails at its default (true), a full row carries the rank-tracking fields plus every field the base product parser returns — around 60 keys total. With scrapeProductDetails: false, rows are the lighter search-tile shape only (asin, title, url, thumbnailImage, price, stars, reviewsCount, isSponsored, categoryPageData, plus the rank fields) — no brand, no inStock, no seller or description data, because the product page is never opened.

Example output — full-detail row (default)

{
"title": "SanDisk 1TB Extreme microSDXC UHS-I Memory Card with Adapter",
"url": "https://www.amazon.com/dp/B09X7MPX8L",
"asin": "B09X7MPX8L",
"originalAsin": "B09X7MPX8L",
"price": { "value": 145.5, "currency": "$" },
"inStock": true,
"inStockText": "Only 8 left in stock - order soon.",
"listPrice": { "value": 299.99, "currency": "$" },
"brand": "SanDisk",
"author": null,
"shippingPrice": null,
"stars": 4.8,
"starsBreakdown": { "5star": 0.86, "4star": 0.09, "3star": 0.02, "2star": 0.01, "1star": 0.01 },
"reviewsCount": 36704,
"answeredQuestions": 151,
"breadCrumbs": "Electronics › Computers & Accessories › Memory Cards › Micro SD Cards",
"videosCount": 0,
"visitStoreLink": null,
"thumbnailImage": "https://m.media-amazon.com/images/I/716kSUlHouL.jpg",
"galleryThumbnails": [],
"highResolutionImages": [],
"importantInformation": null,
"sustainabilityFeatures": null,
"description": null,
"features": ["Save time with card offload speeds of up to 190MB/s..."],
"attributes": [],
"productOverview": [],
"variantAsins": [],
"variantDetails": [],
"reviewsLink": "/product-reviews/B09X7MPX8L?reviewerType=all_reviews",
"hasReviews": true,
"delivery": "Thursday, January 26",
"fastestDelivery": "Sunday, January 22",
"returnPolicy": "Eligible for Return, Refund or Replacement within 30 days of receipt",
"support": "Free Amazon tech support included",
"variantAttributes": [],
"manufacturerAttributes": [],
"seller": { "id": "A210SJF12S88M5", "url": "/gp/help/seller/...", "name": "Direct Suppliers US", "businessName": null, "phone": null, "address": null },
"bestsellerRanks": null,
"isAmazonChoice": false,
"amazonChoiceText": null,
"bookDescription": null,
"priceRange": null,
"aPlusContent": null,
"brandStory": null,
"productComparison": null,
"aiReviewsSummary": null,
"monthlyPurchaseVolume": null,
"productPageReviews": [],
"productPageReviewsFromOtherCountries": [],
"locationText": "Select your address",
"loadedCountryCode": "US",
"offers": [],
"unNormalizedProductUrl": "https://www.amazon.com/s?k=micro+sd+card",
"categoryPageData": { "pageNumber": 1, "saleSummary": null, "isSponsored": false, "bestsellerBadge": null, "productPosition": 14 },
"input": "https://www.amazon.com/s?k=micro+sd+card",
"searchKeyword": "micro sd card",
"searchPage": 2,
"absoluteRank": 14,
"organicRank": 9,
"sponsoredRank": null,
"placementType": "organic",
"isTracked": true,
"keywordRank": {
"keyword": "micro sd card",
"asin": "B09X7MPX8L",
"page": 2,
"absoluteRank": 14,
"organicRank": 9,
"sponsoredRank": null,
"isSponsored": false,
"placementType": "organic",
"isTracked": true
}
}

Example output — tracked ASIN not found

Set trackAsins and a listed ASIN doesn't appear anywhere in the ranked results, this uncharged accounting row is pushed instead:

{
"asin": "B0XXXXXXXX",
"title": null,
"url": null,
"rowType": "tracked_not_found",
"found": false,
"searchKeyword": "micro sd card",
"searchPage": null,
"absoluteRank": null,
"organicRank": null,
"sponsoredRank": null,
"placementType": null,
"isTracked": true,
"keywordRank": null
}

Only these accounting rows carry rowType and found — every normal ranked-result row omits both keys entirely rather than setting them to null. Filter them out of billing/analysis with "rowType" not in row (or row.get("rowType") != "tracked_not_found").

When scrapeProductVariantPrices is enabled, matched rows also carry a priceVariants array (asin, url, price per variant); the key is omitted, not set to null, on every row where that option is off.

How do you filter and target specific search results?

searchUrls vs trackAsins. Without trackAsins, every result down to maxResultsPerKeyword is ranked and returned — use this to see the full competitive picture for a keyword. Set trackAsins to narrow the output to only your own products, each stamped with its rank; anything not found comes back as an explicit "not found" row rather than silently disappearing.

Organic vs sponsored. organicRankOnly strips sponsored placements from the output while placementType still labels every remaining row. Leave it off when you need to know how much of page 1 is paid.

Depth control. maxResultsPerKeyword caps how many ranked results get processed; maxSearchPagesPerStartUrl caps how many pages get walked to reach that depth. Whichever limit is hit first stops the run for that keyword — set both deliberately if you're tracking a product that ranks deep.

Detail vs speed. scrapeProductDetails: false skips opening the product page for every ranked result, returning only the lightweight search-tile shape — useful when you're tracking hundreds of keyword/ASIN pairs and only need the rank number, not the full listing.

Three real input examples:

{ "searchUrls": ["https://www.amazon.com/s?k=yoga+mat"], "trackAsins": ["B08XYZ1234"], "maxResultsPerKeyword": 50, "maxSearchPagesPerStartUrl": 5 }

Track one ASIN up to 50 results deep across 5 pages for "yoga mat."

{ "searchUrls": ["https://www.amazon.co.uk/s?k=protein+powder"], "organicRankOnly": true, "maxResultsPerKeyword": 20 }

Rank the top 20 organic-only results on Amazon UK, ads excluded.

{ "searchUrls": ["https://www.amazon.com/s?k=phone+case"], "scrapeProductDetails": false, "maxResultsPerKeyword": 100 }

Fast rank-only sweep of 100 results, no product-detail fetch.

▶️ Want to try other Amazon scrapers?

Scraper NameWhat it extracts
Amazon ASIN Scraper & Seller ListingEvery merchant competing on a listing — offers, buy box winner, hijacker check
Amazon Brand Research ScraperBrand-level product research on Amazon
Amazon Today's Deals Scraper & Affiliate Link BuilderAmazon deals with ready-to-use affiliate links
Ahrefs Scraper — Competitor ComparisonKeyword and ranking research for web domains
Moz SEO Health ScorerComposite SEO health score from Moz signals

How to extract Amazon data programmatically

Amazon Product Scraper With Keyword Rank Tracking runs on Apify. Start it from the Apify Console, or call it through the Apify API — one authenticated request, structured JSON back.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/amazon-product-scraper-with-keyword-rank-tracking").call(run_input={
"searchUrls": ["https://www.amazon.com/s?k=wireless+earbuds"],
"trackAsins": ["B09B8V1LZ3"],
"maxResultsPerKeyword": 30,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("rowType") == "tracked_not_found":
print(row["asin"], "not ranked for", row["searchKeyword"])
else:
print(row["asin"], row["placementType"], row["organicRank"], row["sponsoredRank"])

Export to spreadsheets or CRM

Export the dataset as CSV directly from the Apify Console or API, and map asin, searchKeyword, organicRank, sponsoredRank, placementType and price.value into a rank-tracking sheet or dashboard tool. Scheduling a daily or weekly run through Apify Scheduler turns this into a recurring rank-history feed without writing any code.

Yes. Amazon search-result rankings and product listings are public business and product data — visible to anyone browsing amazon.com without logging in, and they exist to be discovered by shoppers. This is not personal data, so GDPR and equivalent personal-data regimes do not attach to it the way they would to a scraper of individual profiles.

What does apply is Amazon's terms of service and, in some jurisdictions, database-rights or unfair-competition rules covering systematic reuse of a compiled catalogue. Consult legal counsel for commercial applications involving bulk storage or republishing of Amazon data.

❓ FAQ

What if a tracked ASIN doesn't appear in the search results for that keyword?

It's still reported — as an uncharged row with rowType: "tracked_not_found", found: false, and all rank fields set to null. This tells you the product dropped off the ranked results for that keyword rather than leaving a silent gap in your data. Only these accounting rows carry rowType/found; normal ranked rows omit both keys.

Can I get full product data along with the rank position?

Yes, by default. scrapeProductDetails defaults to true, so every ranked result also carries price, stars, reviews, seller, delivery and the rest of the product fields in the same row. Turn it off for a faster, rank-only pull when you're tracking many keywords and don't need the full listing.

How accurate is the rank position?

The Actor reports rank exactly as it reads it off Amazon's live search-results page at request time. Amazon's search rankings shift continuously — by time of day, personalization signals, and Amazon's own algorithm — so a rank captured now can differ from a rank captured an hour later. Re-run on a schedule if you need a trend rather than a single snapshot.

How many results can I get per run?

maxResultsPerKeyword (default 10, minimum 0) sets how deep the rank counter goes per search URL. maxSearchPagesPerStartUrl (default 9999, minimum 1) caps how many result pages get walked to reach that depth — whichever limit is hit first stops that keyword. Pagination also stops early after three consecutive empty or failed pages, regardless of either setting, since Amazon's own search-results pagination for a plain keyword doesn't run indefinitely.

How does organicRankOnly and trackAsins work together?

trackAsins narrows which ranked results get returned; organicRankOnly removes sponsored placements from what's returned. Both can be set together — track only your own ASINs and only see their organic position, with sponsored rows for those ASINs dropped from output while still counted in the internal rank walk.

Does Amazon Product Scraper With Keyword Rank Tracking work with Claude, ChatGPT and AI agent frameworks?

Yes, as a standard HTTP endpoint through the Apify API — any agent framework that can make a request (LangChain, CrewAI, n8n, a custom tool definition) can call it and get typed JSON back with no parsing step.

How does this Actor compare to other Amazon scrapers?

Checked on the Apify Store on 2026-07-25: junglee/Amazon-crawler and junglee/free-amazon-product-scraper extract Amazon product data from category and product URLs with a large, well-established user base, but neither documents keyword-rank tracking, sponsored-vs-organic separation, or an ASIN-tracking mode — their READMEs describe category/product scraping and a "7 pages Amazon limitation" for search terms. opspilot.cc/amazon-ranked-keywords-analyzer is the closest on rank data — it returns rankGroup, rankAbsolute and serpItemType (organic/paid) per keyword — but it's built on a third-party ranked-keywords index limited to four marketplaces (United States, Egypt, Saudi Arabia, UAE) rather than a live scrape of the search-results page, and doesn't merge full product detail into the same row. This Actor reads Amazon's live search results directly on any Amazon domain, computes three independent rank counters (absolute, organic, sponsored) per page, and returns full product detail in the same row by default.

Can I use this Actor without an Amazon API key or developer account?

Yes. No Amazon account, API key, or Associates enrollment is required — only your Apify account and, optionally, Apify's residential proxy (prefilled in proxyConfiguration) for fewer blocks.

Conclusion

Amazon Product Scraper With Keyword Rank Tracking turns any Amazon search-results page into a structured, ranked dataset — organic and sponsored positions computed separately, full product detail attached by default, and your own ASINs tracked explicitly with an honest "not found" row when they drop out. It's built for anyone who needs to answer "where do I rank" rather than just "what's on this page." Start a run from the Apify Console or call it through the Apify API with your searchUrls and trackAsins.