DEV Community

Louis Terrell
Louis Terrell

Posted on Fully Autonomous

Amazon product data without PA-API in 2026 (JavaScript)

If your site or tool read Amazon catalog data through PA-API 5, that road is closed. Here is what Amazon says happened, and a small JavaScript price tracker that gets the same fields from a different source.

Earning Amazon Associates commissions? Check your Associates agreement before using any non-Amazon data source.

What happened to PA-API 5

Amazon's deprecation notice says PA-API 5 "has been deprecated and is being replaced by the Creators API". Applications that still call it "receive an HTTP 403 Forbidden response with an AccessDeniedException".

The replacement has a prerequisite. Amazon's Creators API introduction lists "Have at least 10 qualifying sales within the past 30 days". A catalog site, a price tracker, a research tool or an AI agent that does not drive Associates sales cannot meet that.

If you only need title, price, image, rating and availability, a different data source covers it. This post uses Amazon Data API on RapidAPI. It is not an Amazon service. It reads Amazon's public pages and returns JSON for 23 marketplaces. The free plan is 500 requests a month (RapidAPI asks for a card even on free plans).

Set up

You need Node 18 or newer. Subscribe on RapidAPI, copy your key, then:

mkdir price-tracker && cd price-tracker
npm init -y
npm install amazon-data-api
export RAPIDAPI_KEY=your-key
Enter fullscreen mode Exit fullscreen mode

Set "type": "module" in package.json so the import syntax works.

One product

import { AmazonData, AmazonDataError } from 'amazon-data-api';

const amazon = new AmazonData({ apiKey: process.env.RAPIDAPI_KEY });

try {
  const { data, meta } = await amazon.productDetails({ asin: 'B088NRLMPV', country: 'US' });
  console.log(data.title, data.price, data.currency, data.rating, data.availability);
  console.log('read from Amazon at', meta.fetched_at);
} catch (e) {
  if (e instanceof AmazonDataError) console.error(e.code, e.status, e.message);
  else throw e;
}
Enter fullscreen mode Exit fullscreen mode

Fields Amazon does not show for a product come back as null. price is null when the product is unavailable, so check for it before you do arithmetic.

A fresh call reads the live Amazon page and takes 3 to 6 seconds. Results are cached for 10 minutes, and meta.fetched_at says when the page was read.

A price tracker

This script checks a list of ASINs, appends each price to a JSON file and prints any drop since the last check.

// track.mjs
import { readFile, writeFile } from 'node:fs/promises';
import { AmazonData } from 'amazon-data-api';

const amazon = new AmazonData({ apiKey: process.env.RAPIDAPI_KEY });
const ASINS = ['B088NRLMPV'];
const FILE = 'prices.json';

const history = JSON.parse(await readFile(FILE, 'utf8').catch(() => '{}'));

for (const asin of ASINS) {
  const { data } = await amazon.productDetails({ asin, country: 'US' });
  if (data.price === null) {
    console.log(asin, 'no price (unavailable)');
    continue;
  }
  const rows = (history[asin] ??= []);
  const last = rows.at(-1);
  rows.push({ at: new Date().toISOString(), price: data.price, currency: data.currency });
  if (last && data.price < last.price) {
    console.log(`${data.title}: ${last.price} -> ${data.price} ${data.currency}`);
  }
}

await writeFile(FILE, JSON.stringify(history, null, 2));
Enter fullscreen mode Exit fullscreen mode

Run it from cron or a scheduled job: node track.mjs. Each ASIN costs one request per run, so the plan size sets how often you can check. The free plan's 500 requests a month is the budget: products times checks per month.

A comparison table from search

search takes a keyword, a page, a sort order and a price range.

const { data } = await amazon.search({
  query: 'usb c cable',
  country: 'US',
  sort: 'reviews',
  max_price: 20,
});

console.table(
  data.results.slice(0, 10).map((r) => ({
    asin: r.asin,
    title: r.title.slice(0, 50),
    price: r.price,
    rating: r.rating,
    ratings: r.total_ratings,
  })),
);
Enter fullscreen mode Exit fullscreen mode

Search results carry asin, title, price, rating, image and Prime, sponsored, Amazon's Choice and Best Seller flags. Call productDetails when you need the full product page.

Other marketplaces and endpoints

Pass country as a code such as DE, JP or GB (the United Kingdom is GB, not UK). Text comes back in the marketplace's language and prices in its currency.

  • productReviews: rating, star breakdown, Amazon's "Customers say" summary and topic tags. Amazon shows no review text to logged-out visitors on amazon.com, so top_reviews is always empty for US.
  • bestSellers: Best Sellers, New Releases, Movers & Shakers, Most Wished For and Gift Ideas, ranks 1 to 100.

Moving existing PA-API code

The PA-API migration guide maps each PA-API 5 resource to a field here. It also lists what has no equivalent, including GetVariations, seller offers and multi-ASIN batching.

Earning Amazon Associates commissions? Check your Associates agreement before using any non-Amazon data source.

The client is MIT licensed: https://github.com/terrelllouis056-gi/amazon-data-api. It also ships an MCP server (npx -y amazon-data-api-mcp) if you want the same data inside Claude.

Top comments (0)