A reverse-ASIN export is a list of candidates, not a copy of a competitor's private search terms or conversion report. A useful developer workflow keeps estimates and observations labeled, removes unsupported claims, then hands a small test list to the seller.
Define the evidence boundary
Select a few genuinely comparable ASINs in the same marketplace, product type, and price tier. Record their visible listing language and a dated export from a reverse-ASIN provider. Your own Brand Analytics and Ads reports are a third, first-party evidence layer; do not silently merge those with third-party estimates.
The following Node.js example operates on a synthetic JSON export, not a claimed Nexscope response shape. An adapter for your actual provider should map its documented fields into asin, term, estimatedRank, and source before this stage.
// research.mjs — run with Node.js; replace synthetic records with a validated adapter.
const rows = [
{ asin: 'EXAMPLE-A', term: 'insulated bottle', estimatedRank: 12, source: 'provider-export' },
{ asin: 'EXAMPLE-B', term: 'Insulated bottle', estimatedRank: 18, source: 'provider-export' },
{ asin: 'EXAMPLE-C', term: 'bottle with straw', estimatedRank: null, source: 'provider-export' },
];
const ownTerms = new Set(['insulated bottle']); // seller-owned listing/ads inventory
const supportedClaims = new Set(['insulated bottle']); // verified product facts
const normalize = s => s.toLowerCase().trim().replace(/\s+/g, ' ');
const groups = new Map();
for (const row of rows) {
if (!row.asin || !row.term || !row.source) continue;
const term = normalize(row.term);
if (!groups.has(term)) groups.set(term, { term, asins: new Set(), ranks: [], sources: new Set() });
const item = groups.get(term);
item.asins.add(row.asin);
item.sources.add(row.source);
if (Number.isFinite(row.estimatedRank)) item.ranks.push(row.estimatedRank);
}
const queue = [...groups.values()].map(item => ({
term: item.term,
competitorCount: item.asins.size,
estimateCount: item.ranks.length,
alreadyCovered: ownTerms.has(item.term),
productFactVerified: supportedClaims.has(item.term),
evidenceSource: [...item.sources].join(', '),
})).sort((a, b) => b.competitorCount - a.competitorCount);
console.table(queue);
The productFactVerified gate is intentionally strict. In a real catalog, use a reviewed attribute mapping, not exact string equality; leave ambiguous terms on hold. Never promote a keyword merely because several competitors appear for it. Keep modifiers such as "with straw," size, and intended user separate when they change the shopping intent.
Route each candidate to a decision
For a verified generic term, compare the competitor consensus with your listing, backend terms, PPC targets, and tracked positions. A missing phrase with first-party clicks or orders can be a controlled copy or exact-match test. A term supported only by estimates belongs in a small research queue. An unsupported product claim is excluded. Competitor trademarks require separate policy and legal review, not automatic insertion into copy.
Export a decision record containing marketplace, comparable ASIN set, source name, retrieval time, original metric label, normalized term, product-fact check, owner, destination, and next review date. That provenance is more valuable than a single opaque opportunity score.
For a production adapter, Nexscope Amazon Data API offers product and keyword research endpoints; inspect the specific endpoint schema before mapping fields. Seller-owned clicks, orders, and conversion remain in the seller's own Amazon reports.
Next step: Explore Nexscope Amazon Data API →
Adapted from How to Find Amazon Competitor Keywords for Better Sales. Disclosure: Drafted and fact-checked with AI tools. The example records are fictional.

Top comments (0)