Amazon price tracking agent skill for Claude Code and agents

This skill collects public Amazon product prices, ratings, availability and product details through an Apify Actor. Choose it when an agent needs ASIN lookups, marketplace comparisons or repeatable product snapshots for price tracking.

Folder on GitHub Run on Apify

The skill connects instructions and a runner script to the Amazon Multi-Domain Product Price & Detail Scraper Actor. It accepts product URLs, ASINs and discovery inputs, with options for marketplace, display currency and delivery location.

Install

  1. Copy the folder amazon-multi-domain-product-price-and-detail-scraper from GitHub, or save the three files below into it.

  2. Place it in ~/.claude/skills/amazon-multi-domain-product-price-and-detail-scraper/ for Claude Code, or ~/.agents/skills/amazon-multi-domain-product-price-and-detail-scraper/ for Codex and other skill-aware agents.

  3. Export APIFY_TOKEN, start the agent and ask for the job in plain words; the description tells the agent when to use the skill.

  4. Or let the skills CLI place the Actor's SKILL.md for your agent: npx skills add https://recipeforagents.com --skill amazon-multi-domain-product-price-and-detail (the SKILL.md only; the runner script comes from the GitHub folder).

SKILL.mdamazon-multi-domain-product-price-and-detail-scraper/SKILL.md

---
name: amazon-multi-domain-product-price-and-detail-scraper
description: "Pull pricing, ratings, seller, variant and technical detail for Amazon products by URL or ASIN, across 21 country domains, with optional delivery postal-code targeting. Output fields: title, asin, price, stars, reviewsCount and more, as JSON rows. Use it for requests like \"Amazon price tracking\", \"Amazon product scraper\", \"ASIN price lookup\", or a CSV/JSON export of public Amazon data."
---

# Amazon Multi-Domain Product Price & Detail Scraper

Pull pricing, ratings, seller, variant and technical detail for Amazon products by URL or ASIN, across 21 country domains, with optional delivery postal-code targeting.

- Actor: https://apify.com/nimbryxo-studio/amazon-multi-domain-product-price-and-detail (ID `nimbryxo-studio~amazon-multi-domain-product-price-and-detail`)
- n8n workflow for the same Actor: https://github.com/bolvein-firex/scraping-n8n-workflows/blob/main/docs/amazon-multi-domain-product-price-and-detail-scraper.md
- Example input: `references/example-input.json`
- Input schema: `references/input-schema.json`
- Output fields: `references/output-fields.json`

Short video breakdown:
- [The buy box moved while you slept](https://www.youtube.com/shorts/SqsDoB0jyD8)

## When to use

Use this skill when the user wants:

- Amazon price tracking
- Amazon product scraper
- ASIN price lookup
- a repeatable export of public Amazon data as CSV or JSON

Do not use it for private, login-protected or paywalled data.

## What it returns

One JSON row per result. Columns from the Actor's dataset schema:

- `title`: Product Title
- `asin`: ASIN
- `price`: Price
- `stars`: Rating
- `reviewsCount`: Reviews
- `inStock`: In Stock
- `brand`: Brand
- `url`: URL

All 9 declared fields: `references/output-fields.json`.

## Inputs

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `productUrls` | array | no | [] | Amazon product URLs to scrape. Any mix of the 21 supported country domains is allowed, e.g. `https://www.amazon.com/dp/B0B8PD8TTP.` |
| `asins` | array | no | [] | Bare 10-character Amazon ASINs. Builds /dp/{ASIN} URLs on the selected marketplace, or on every domain listed in `domains` for cross-marketplace runs. |
| `searchTerms` | array | no | [] | Keyword queries to run on Amazon search pages. Price/rating/deal/condition/sort filters are applied as URL parameters. |
| `searchUrls` | array | no | [] | Full Amazon search URLs to pass through, including your own `i=`, `rh=`, `low-price`, and `s=` parameters. Pagination is added automatically. |
| `bestsellerUrls` | array | no | [] | Amazon bestseller /zgbs/ or /gp/bestsellers/ list URLs. Returns the ranked product cards, optionally enriched with product-detail fields. |
| `marketplace` | string | no | auto | Marketplace used for bare ASINs and keyword search terms. `auto` uses the first product URL's domain, or amazon.com. |
| `domains` | array | no | [] | Optional list of marketplaces (e.g. amazon.com, amazon.de) to run bare ASINs and search terms across. Leave empty to use `marketplace` only. |
| `language` | string | no | auto | Page language. `auto` uses the marketplace's own default. Explicit values set `?language=` and the matching Accept-Language header. |
| `currency` | string | no | auto | ISO currency for the displayed price. `auto` uses the marketplace currency. Note: Amazon converts display currency; it is not guaranteed local retail pricing. |
| `deliveryCountry` | string | no | auto | Optional country hint. When `postalCode` is empty, a representative local ZIP for that country is used. A country alone is not sent to Amazon. |
| `postalCode` | string | no |  | Local ZIP/postal code for the delivery location. The actor validates it against the marketplace format and skips the location change if it does not match. |
| `minPrice` | number | no |  | Minimum price for discovery (search) results. Leave empty for no lower bound. |
| `maxPrice` | number | no |  | Maximum price for discovery (search) results. Leave empty for no upper bound. |
| `minRating` | string | no | any | Minimum star rating for discovery results. `4` is the live-validated 4+ stars filter; lower values are best effort. |

17 more optional fields on the Actor's Input tab.

Example (`references/example-input.json`):

```json
{
  "searchTerms": [
    "wireless earbuds"
  ],
  "marketplace": "amazon.com",
  "maxItems": 25,
  "includeDetails": true,
  "dealsOnly": false
}
```

The input passes the Actor's input schema (checked at every publish). First run: `maxItems` = 25, small enough for the 300-second sync wait; raise it once the rows look right.

## Run it

Set `APIFY_TOKEN`, then call the synchronous endpoint for small and medium runs (it waits up to 300 seconds):

```bash
curl -s -X POST "https://api.apify.com/v2/acts/nimbryxo-studio~amazon-multi-domain-product-price-and-detail/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @references/example-input.json > output.json
```

Or with Node 18+: `node scripts/run.mjs [input.json]`.

For large runs, start an async run and read its dataset when it finishes:

```bash
RUN=$(curl -s -X POST "https://api.apify.com/v2/acts/nimbryxo-studio~amazon-multi-domain-product-price-and-detail/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d @references/example-input.json)
RUN_ID=$(echo "$RUN" | jq -r '.data.id'); DATASET=$(echo "$RUN" | jq -r '.data.defaultDatasetId')
curl -s "https://api.apify.com/v2/actor-runs/$RUN_ID?waitForFinish=60" -H "Authorization: Bearer $APIFY_TOKEN" | jq -r '.data.status'
curl -s "https://api.apify.com/v2/datasets/$DATASET/items?format=json" -H "Authorization: Bearer $APIFY_TOKEN" > output.json
```

## Cost and limits

- Apify bills the Actor's usage on your account; the Actor's Pricing tab shows the current price.
- Keep the limit in the input small for a first run.

## Guardrails

- Public data only. Do not pass cookies, sessions or private account data.
- Do not use the output for spam, harassment or unlawful discrimination.
- Check the target site's terms and local law before running at scale.
Checked against the Agent Skills format and the Actor's input schema: 15 of 15 checks pass
  • SKILL.md starts with YAML front matter
  • name is 1-64 lowercase letters, digits and single hyphens
  • name matches the skill folder name
  • description is present, at most 1024 characters and has no angle brackets
  • front matter uses only spec fields
  • compatibility is at most 500 characters
  • body has instructions
  • field descriptions end on whole sentences
  • no credential values are embedded
  • the token is read from APIFY_TOKEN
  • Example input: the schema has no required fields
  • Example input: every input key exists in the published input schema
  • Example input: every value has the type the schema declares
  • Example input: every choice field uses one of its published options
  • Example input: numbers respect the published minimum and maximum

Runner scriptamazon-multi-domain-product-price-and-detail-scraper/scripts/run.mjs

// Minimal runner: node scripts/run.mjs [input.json | '{"json": "input"}']
// Needs Node 18+ and APIFY_TOKEN. Without an argument it uses references/example-input.json.
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';

const token = process.env.APIFY_TOKEN;
if (!token) {
  console.error('Set APIFY_TOKEN');
  process.exit(1);
}
const actorId = process.env.ACTOR_ID || "nimbryxo-studio~amazon-multi-domain-product-price-and-detail";
const here = path.dirname(fileURLToPath(import.meta.url));
const arg = process.argv[2];
const raw = !arg
  ? fs.readFileSync(path.join(here, '..', 'references', 'example-input.json'), 'utf8')
  : (arg.trim().startsWith('{') ? arg : fs.readFileSync(arg, 'utf8'));
const input = JSON.parse(raw);

const res = await fetch(`https://api.apify.com/v2/acts/${actorId}/run-sync-get-dataset-items`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },
  body: JSON.stringify(input)
});
if (!res.ok) {
  console.error(`HTTP ${res.status}: ${(await res.text()).slice(0, 500)}`);
  process.exit(1);
}
console.log(JSON.stringify(await res.json(), null, 2));

Example inputamazon-multi-domain-product-price-and-detail-scraper/references/example-input.json

{
  "searchTerms": [
    "wireless earbuds"
  ],
  "marketplace": "amazon.com",
  "maxItems": 25,
  "includeDetails": true,
  "dealsOnly": false
}

Using it

  • Keep SKILL.md, scripts/run.mjs, references/example-input.json, references/input-schema.json and references/output-fields.json together in that folder.
  • Make Node available and set APIFY_TOKEN in the agent's environment. Confirm that scripts/run.mjs references the token and the intended Actor endpoint, with no credentials embedded in the files.
  • Ask the agent to load the skill and review references/example-input.json for the intended products and marketplace. When ready to collect data, invoke node scripts/run.mjs from the skill folder.

Prefer MCP? The Amazon Multi-Domain Product Price & Detail Scraper page has configs for eight clients and a shorter, API-only SKILL.md.

Questions

Can an ASIN be checked across marketplaces?

Provide bare ASINs through asins and select marketplaces through domains. Leave domains empty to use marketplace only.

Does the stock filter guarantee availability?

Records with unknown stock can pass through the stock filter. Inspect inStock and keep unknown availability separate from confirmed availability.

Can it collect every review and variant price?

includeTopReviews collects public inline review snippets, while full review pagination requires login and is unsupported. includeVariants provides variant relationships and dimensions, but per-variant price and stock are unavailable from the product page.