Amazon Ranked Keywords Analyzer avatar

Amazon Ranked Keywords Analyzer

Pricing

from $0.17 / 1,000 results

Go to Apify Store
Amazon Ranked Keywords Analyzer

Amazon Ranked Keywords Analyzer

Discover What Keywords Your Products Rank For on Amazon Instantly find all the search keywords an Amazon product ranks for — along with search volume, ranking positions, and competitive insights. Perfect for product research, competitor analysis, and Amazon SEO optimization.

Pricing

from $0.17 / 1,000 results

Rating

0.0

(0)

Developer

wang wei

wang wei

Maintained by Community

Actor stats

1

Bookmarked

25

Total users

3

Monthly active users

7 days ago

Last modified

Share

Amazon Ranked Keywords Analyzer — find every keyword your product ranks for

Discover all the search keywords an Amazon ASIN ranks for, along with monthly search volume, ranking positions, ratings, pricing, badges (Best Seller / Amazon's Choice), and competitive metrics. Cursor-paginates upstream results via numeric offset (up to 1,000 keywords per run).

Why Use This Actor

ProblemHow This Actor Solves It
Need to know what keywords an ASIN ranks for?Run the Actor with the ASIN — get the full list of ranked keywords in one shot.
Need more than 100 keywords?Set limit up to 1,000 (paid tier, upstream cap). To go beyond, run again with offset set to the previous run's _nextOffset.
Tracking multiple products?Pass up to 10 ASINs in one run (comma or newline separated).
Need competitive context?Each keyword row includes rank position, the SERP item's title/price/rating/badges, and the SERP URL for manual inspection.

What You Get

For every ranked keyword you receive:

  • Keyword: text, monthly searchVolume, keywordLastUpdated
  • Ranking: rankGroup, rankAbsolute, position (left/right), serpItemType (organic vs paid)
  • SERP Item: domain, title, url, asin, imageUrl, priceFrom/priceTo, currency
  • Signals: isBestSeller, isAmazonChoice, rating/ratingMax/ratingVotes, boughtPastMonth, specialOffers
  • Context: seResultsCount (competing results count), checkUrl (the search that returned this row), serpItemTypes, deliveryInfo
  • Provenance: query (echo), totalCount, nextOffset (for pagination)

Quick Start

1. Run with Example Input

{
"asin": "B0C2JXSHSK",
"marketplace": "United States",
"language": "English",
"limit": 100
}

Returns up to 100 ranked keywords for that ASIN on Amazon US. Free users are capped at 100 per ASIN per run — see Pricing & Limits below.

2. Export Your Results

  • Open the run in Apify Console.
  • Click the Dataset tab → Export → JSON / CSV / Excel.
  • Or fetch the API: GET https://api.apify.com/v2/acts/<ACTOR_ID>/runs/<RUN_ID>/dataset/items

Input Reference

Top-Level Structure

{
"asin": "B0C2JXSHSK\nB08N5WRWNW",
"marketplace": "United States",
"language": "English",
"limit": 100,
"offset": 0,
"ignore_synonyms": false
}

asin — Amazon ASINs

RequiredTypeDefaultDescription
Nostring (textarea)B0C2JXSHSK (test ASIN)One or more ASINs, separated by commas or newlines. Up to 10 per run.

Examples:

B0C2JXSHSK
B08N5WRWNW
B09G3HRMVB

marketplace — Amazon Marketplace

RequiredTypeDefaultDescription
NoselectUnited StatesAmazon marketplace. Currently only US is supported by the upstream API — other markets return Invalid Field: 'location_code'.

language — Result Language

RequiredTypeDefaultDescription
NoselectEnglishLanguage for keyword data. Only English is currently wired up.

limit — Keyword Limit (per ASIN)

RequiredTypeDefaultMinMaxDescription
Nointeger10011000 (paid tier) / 100 (free tier)How many keywords to retrieve per ASIN. Free-tier users are silently capped at 100 per ASIN per run — see Pricing & Limits.

offset — Pagination Offset

RequiredTypeDefaultDescription
Nointeger0Skip the first N keywords. To paginate: first run returns up to limit keywords with nextOffset on each row. Second run sets offset to that value to get the next batch.

ignore_synonyms — Ignore Synonyms

RequiredTypeDefaultDescription
NobooleanfalseIf true, the upstream API skips highly similar keyword variants and returns only core keywords.

Output Reference

Keyword Object — one row per ranked keyword

FieldTypeDescription
keywordstringThe search keyword the ASIN ranks for.
searchVolumenumberMonthly search volume.
keywordLastUpdatedstring|nullISO timestamp of last keyword data update.
serpItemTypestring|nullamazon_serp (organic) or amazon_paid (sponsored).
serpItemTypesstring[]All SERP types this keyword returns.
rankGroupnumberRanking position group.
rankAbsolutenumberAbsolute ranking position.
positionstring|nullleft or right placement.
domainstringAlways www.amazon.com for Amazon results.
titlestringSERP item title.
urlstringSERP item URL.
asinstringThe ASIN of the SERP item.
imageUrlstring|nullProduct image URL.
priceFromnumber|nullLowest price in the price range.
priceTonumber|nullHighest price (null for fixed-price items).
currencystringCurrency code, e.g. USD.
isBestSellerbooleanBest Seller badge flag.
isAmazonChoicebooleanAmazon's Choice badge flag.
ratingnumberProduct rating (0–5).
ratingMaxnumberMaximum rating value (always 5).
ratingVotesnumberTotal ratings count.
boughtPastMonthnumber|nullEstimated units bought in the past month.
deliveryInfoobject|nullDelivery info (free shipping, Prime, etc).
specialOffersstring|nullSpecial offer text.
seResultsCountnumberTotal competing results for this keyword on Amazon.
serpLastUpdatedstring|nullLast SERP data update.
serpPreviousUpdatedstring|nullPrevious SERP data update.
checkUrlstring|nullThe Amazon search URL that produced this row.
queryobjectEcho of the input that produced this row (asin, marketplace, language, etc).
totalCountnumberTotal keywords upstream found for this ASIN.
nextOffsetnumber|nullPass this into the next run's offset to fetch the next batch. null when exhausted.

Run Summary

Stored under the SUMMARY key in the default key-value store. The summary now includes a tier block so free vs. paid users can see exactly what gates applied to their run:

{
"ok": true,
"query": {
"asins": ["B0C2JXSHSK"],
"marketplace": "United States",
"locationCode": 2840,
"language": "English",
"languageCode": "en",
"limit": 100,
"limitRequested": 500,
"limitCapped": true,
"offset": 0,
"ignoreSynonyms": false
},
"tier": {
"kind": "free",
"rowsPerAsinCeiling": 100,
"freeDailyRunLimit": 5,
"freeDailyRunsUsed": 2
},
"perAsin": {
"B0C2JXSHSK": { "totalCount": 5005, "collected": 100, "hasMore": true }
},
"result": { "totalCollected": 100, "rowsReturned": 100 },
"errors": [],
"apiRequests": 1,
"completedAt": "2026-07-21T08:00:00.000Z"
}

limitCapped: true means the user-requested limit was higher than the per-tier ceiling and was silently lowered — see the tier block for the exact number. To unlock the full 1,000 per ASIN, switch on pay-per-event pricing in the Actor's Pricing tab.

Pagination — How It Works

Each ASIN returns up to limit keywords (default 100, free tier ceiling 100, paid tier ceiling 1,000). To paginate:

Run 1: offset=0100 keywords (1-100), nextOffset on rows = 100
Run 2: offset=100100 keywords (101-200), nextOffset on rows = 200
Run 3: offset=200100 keywords (201-300), nextOffset on rows = 300
...

When nextOffset is null, the upstream has no more results for this ASIN.

For paid users who want more than 1,000 keywords:

Run 1: offset=0, limit=10001000 keywords (1-1000), nextOffset on rows = 1000
Run 2: offset=1000, limit=10001000 keywords (1001-2000), nextOffset on rows = 2000
...

Upstream cap: limit is capped at 1000 per request (paid tier only). The Amazon Labs endpoint does not impose a hard offset + limit ceiling (unlike some other DataForSEO endpoints) — verified up to offset=9900.

Marketplace Coverage

The upstream DataForSEO Labs Amazon endpoint supports 4 marketplaces, each with a fixed list of Amazon-supported languages:

MarketplaceLocation CodeAmazon-Supported Languages
United States2840English, Spanish
Egypt2818Arabic
Saudi Arabia2682Arabic
United Arab Emirates2784Arabic

Combining a marketplace with a non-supported language returns Invalid Field: 'language_code' (e.g. United States + Arabic). The Actor auto-falls-back to the marketplace's first Amazon-supported language when the user-supplied language is unsupported for the chosen marketplace.

If the upstream gains more locations, they'll be added to src/constants.js and the input schema in a single release.

Pricing & Limits

The Actor uses Apify's Pay per event pricing model. There is no separate monthly subscription. Every gate is enforced in src/lib/billing.js:

Free tierPaid tier (pay-per-event on)
Runs per day5 (KV-scoped counter, resets at UTC midnight)Unlimited
Keywords per ASIN per run1001,000 (upstream hard cap)
ASINs per run1010
Upstream DataForSEO chargesOne row at keyword-result
Silent cappinglimit > 100 → capped to 100 + limitCapped: true in SUMMARYlimit > 1000 → capped to 1000 + limitCapped: true in SUMMARY
tier.kind in SUMMARY"free""paid"

How free-tier detection works

The Actor reads Apify's APIFY_USER_IS_PAYING environment variable, which is automatically set to 1 when the user has pay-per-event pricing turned on for the Actor, and 0 (or unset) otherwise. There is no manual toggle.

How capping works

When a free user submits limit higher than 100:

  1. The Actor logs a warning at run start (visible in the run log).
  2. The requested value is recorded in query.limitRequested.
  3. The applied value is recorded in query.limit.
  4. query.limitCapped is set to true in SUMMARY.

The dataset rows themselves are unchanged — only the count of returned rows is reduced.

How Pay per event works

Once you turn on pay-per-event pricing for the Actor (Apify Console → Actor → Pricing tab), every keyword row the Actor pushes to the dataset triggers one keyword-result event billed by Apify. The Actor never charges for runs that hit an error before producing rows.

FAQ

Q: Why are all rows in my old runs empty/null? A: If you ran the previous version (v0.1.x), it read the wrong upstream fields (items[i].keyword_info, items[i].serp_item) — those nested paths don't exist, so rows came out as null. v1.2 fixes the parser. Re-run the Actor to get real data.

Q: Why only 4 marketplaces? A: That's all the upstream DataForSEO Labs Amazon endpoint currently exposes (verified against /dataforseo_labs/locations_and_languages — Amazon's available_sources field only marks these 4 as Amazon-supported). The endpoint docs say the same: https://docs.dataforseo.com/v3/dataforseo_labs/amazon/ranked_keywords/live/

Q: Can I use Arabic in the United States marketplace? A: No. Each marketplace has a fixed set of Amazon-supported languages. United States only accepts English and Spanish. If you submit a non-supported pairing (e.g. United States + Arabic), the Actor falls back to the marketplace's first supported language (English in this case).

Q: Can I get more than 1000 keywords per ASIN? A: Yes — use offset pagination. Run 1 with offset=0, limit=1000, run 2 with offset=1000, limit=1000, etc. Paid tier only — free tier stops at 100 per ASIN per run.

Q: Why is my run returning only 100 rows even though I set limit=500? A: You're on the free tier. The Actor silently caps keywords-per-ASIN at 100 per run for free users. To retrieve up to 1,000 keywords per ASIN per run, open the Actor's Pricing tab in Apify Console and turn on pay-per-event billing — paid users are charged per row and have no keyword cap. Check the run SUMMARY for tier.kind and query.limitCapped to confirm.

Q: Why is my run failing with "Free tier limit reached" after only a few runs? A: Free tier is capped at 5 runs per day (the counter lives in the Actor's KV store and resets at UTC midnight). To lift the daily cap and the per-run keyword cap in one go, switch on pay-per-event billing for the Actor.

Q: How does ignore_synonyms work? A: It tells the upstream API to deduplicate highly similar keyword variants (e.g. "running shoes" vs "running shoe"). Useful for getting core keyword counts, not the long-tail.

Support

License

MIT License — free to use and modify.