# Amazon Price Scraper: Prices by ASIN on Any Marketplace

> Scrape Amazon prices by ASIN on amazon.com, .co.uk and .de: the URL pattern, the fields you get, residential cost math and the 'cannot be dispatched' trap.

- URL: https://datatooly.xyz/guides/amazon-price-scraper-asin/
- Author: Omar Eldeeb (https://datatooly.xyz/about/)
- Published: 2026-10-20
- Updated: 2026-10-20
- Free tool: [E-commerce price tracker — scrape product prices, stock and variants](https://datatooly.xyz/ecommerce-price-tracker/)
- Tags: amazon, python, webscraping, ecommerce

An Amazon price scraper by ASIN loads `https://www.amazon.<marketplace>/dp/<ASIN>` for each product and returns the price, currency, was-price, stock, seller and rating as fields. Load each marketplace from its own country, or Amazon may hide the price behind a "cannot be dispatched" message. Outside amazon.com, expect some pages to need residential proxies.

This guide shows a Python script that prices one ASIN on three marketplaces through an Apify actor, the fields in a real row, what non-US marketplaces cost, and three traps: ASINs that differ by country, delivery-location blocks, and Prime-only prices. All output is from runs on 2026-10-20.

## The URL pattern and the marketplaces

An ASIN is Amazon's 10-character product id. The shortest stable product URL is `/dp/<ASIN>` on the marketplace's domain:

- `https://www.amazon.com/dp/B0DBTV5QF5`
- `https://www.amazon.co.uk/dp/B0DXDTX47W`
- `https://www.amazon.de/dp/B0DXDTX47W`

The [E-commerce Product Scraper Pro actor](https://apify.com/constructive_calm/ecommerce-product-scraper-pro?fpr=v77kxu) accepts 24 Amazon storefronts. Its supported-sites table lists **amazon.com** and **amazon.de** as supported, and the other 22 (including `amazon.co.uk`, `amazon.ca`, `amazon.fr`, `amazon.it`, `amazon.com.mx` and `amazon.com.br`) as best-effort. In the actor's latest cloud tests before release, amazon.de delivered 84 % and amazon.co.uk 95 % of deliverable products. Amazon sometimes serves empty pages or captchas, so expect some variation from run to run.

## Python: one ASIN, three marketplaces

```python
import os
from apify_client import ApifyClient

ASINS = ["B0DXDTX47W"]          # add more ASINs here
MARKETS = ["amazon.com", "amazon.co.uk", "amazon.de"]

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("constructive_calm/ecommerce-product-scraper-pro").call(run_input={
    "detailsUrls": [{"url": f"https://www.{m}/dp/{a}"} for a in ASINS for m in MARKETS],
    "maxProductResults": len(ASINS) * len(MARKETS),
})

for p in client.dataset(run["defaultDatasetId"]).iterate_items():
    asin = (p.get("additionalProperties") or {}).get("asin") or p.get("sku")
    print(f"{p['site']:<10} {asin}  {p['price']} {p['currency']}  was {p['originalPrice']}  "
          f"{p['availability']}  seller={p['seller']}  {p['rating']}* ({p['reviewCount']})  via {p['tierUsed']}")

# One status row per input: blocked, not-found, or delivered with a note (e.g. "cannot deliver")
for s in client.dataset(run["storageIds"]["datasets"]["status"]).iterate_items():
    print(f"{s['site']:<10} {s['outcome']:<9} {s['errorDescription'] or ''}")
```

Output on 2026-10-20 (`pip install apify-client`, `APIFY_TOKEN` set to your Apify API token):

```text
amazon-us  B0DBTV5QF5  9.99 USD  was None  InStock  seller=AnkerDirect  4.7* (6781)  via datacenter
amazon-gb  B0DXDTX47W  9.98 GBP  was 13.99  InStock  seller=AnkerDirect UK  4.7* (7402)  via residential
amazon-de  B0DXDTX47W  10.95 EUR  was 18.17  InStock  seller=AnkerDirect DE  4.8* (7503)  via residential
amazon-us  ok        The store now lists this product under https://www.amazon.com/dp/B0DBTV5QF5 (your URL has ID B0DXDTX47W).
amazon-gb  ok        
amazon-de  ok        
```

Three things in that output are easy to miss:

- **The US store answered with a different ASIN.** amazon.com served B0DXDTX47W as B0DBTV5QF5, and the status row says so. Key your data on the ASIN in the row, not the one you sent.
- **Each price is in its market's currency.** Don't compare £9.98 with €10.95 without converting.
- **The UK and German pages came over residential connections.** amazon.com was reached from a datacenter. That difference drives the cost (see below).

An earlier run the same morning used ASIN B088NRLMPV. amazon.com and amazon.co.uk returned it, while amazon.de answered with a page that wasn't a product page, reported as `not-found`. An ASIN that exists in one marketplace doesn't always exist in another.

## What's in an Amazon row

A real amazon.com row from 2026-10-20, trimmed:

```json
{
  "url": "https://www.amazon.com/dp/B088NRLMPV",
  "name": "Anker USB C to USB C Cable, 60W Fast Charging Cable (2-Pack, 6 ft, Black)",
  "price": 9.99,
  "currency": "USD",
  "currencyRaw": "$",
  "originalPrice": null,
  "unitPrice": 5,
  "unitPriceUnit": "count",
  "inStock": true,
  "stockQty": 1,
  "availability": "LimitedAvailability",
  "seller": "AnkerDirect",
  "rating": 4.7,
  "reviewCount": 90039,
  "additionalProperties": {
    "asin": "B088NRLMPV",
    "parentAsin": "B0DRYBKGR2",
    "productDetails": { "Brand": "Anker", "Best Sellers Rank": "#1 in USB Cables", "UPC": "194644034061" },
    "availabilityText": "In Stock Only 1 left in stock - order soon."
  },
  "variantCount": 12,
  "site": "amazon-us",
  "tierUsed": "datacenter"
}
```

| Field | What it is on Amazon |
|---|---|
| `price`, `currency`, `currencyRaw` | The buy-box price as a number, the ISO currency code, and the symbol as printed |
| `originalPrice` | The struck-through was-price, when the page shows one. It's Amazon's claim, not a price history |
| `unitPrice`, `unitPriceUnit` | Price per count, ounce or meter when the page prints one |
| `inStock`, `stockQty`, `availability` | Stock flag, the number from "Only 1 left", and the availability class |
| `seller` | The buy-box seller ("AnkerDirect"). Sellers' own pages are a separate input (`sellerUrls`) |
| `rating`, `reviewCount` | Star rating and number of ratings |
| `additionalProperties` | ASIN, parent ASIN, bullet points, the product-details table (with Best Sellers Rank) |
| `variants[]` | Sibling ASINs with their size and color, but no prices (see [scraping product variants](https://datatooly.xyz/guides/scrape-product-variants-sizes-colors/)) |

The product page also carries the top 8–13 reviews; [scraping product reviews](https://datatooly.xyz/guides/scrape-product-reviews-walmart-target-amazon/) covers what you can and can't get there.

## What it costs: datacenter vs residential

Pay per event, from the actor's pricing table, on Apify's FREE plan tier and on GOLD:

| Event | FREE | GOLD |
|---|---|---|
| Actor start (per run, 1 GB) | $0.005 | $0.005 |
| Product scraped | $0.0048 | $0.0008 |
| Residential proxy traffic, per MB | $0.018 | $0.014 |

amazon.com pages were reached over datacenter connections in the actor's tests, so they have no traffic fee. Non-US storefronts often need residential proxies. The actor's measured traffic was 0.3–0.5 MB per delivered amazon.co.uk product, and 0–0.5 MB on amazon.de. Billed MB are 89 % of the measured traffic, and only for items that delivered.

Worked examples, using the table:

- **100 amazon.com products:** 100 × $0.0008 + $0.005 = **$0.085** on GOLD; 100 × $0.0048 + $0.005 = **$0.485** on FREE.
- **100 amazon.co.uk products:** 30–50 MB measured, billed as 27–45 MB. On GOLD: $0.08 + 27–45 × $0.014 + $0.005 ≈ **$0.46–$0.71**. On FREE: $0.48 + 27–45 × $0.018 + $0.005 ≈ **$0.97–$1.30**.
- **The run above:** 3 products, 2 of them residential, billed 1 MB. On FREE: 3 × $0.0048 + 1 × $0.018 + $0.005 = **$0.0374**.

Blocked or empty pages cost nothing: a product that never delivers has no product event and no traffic fee. Apify's free plan includes $5 of usage every month, with no credit card required. There's no free trial inside the actor.

## "Cannot be dispatched to your location"

Amazon decides what to show by the visitor's delivery location. When an amazon.de or amazon.co.uk page is loaded from a US IP address, Amazon can replace the buy box with a message that the item can't be dispatched to your location ("…kann nicht an den von dir ausgewählten Zustellungsort versendet werden" on amazon.de). The page loads fine, but it has no price.

How to avoid wrong rows:

1. **Load each marketplace from its own country.** The actor's `proxyCountry` defaults to Auto, which uses each marketplace's own country (amazon.de → Germany). Leave it on Auto for Amazon, or set it to the marketplace's country. Don't pin a German store to a US exit to "see US prices"; you'll get no-ship pages.
2. **Treat a price of `null` as "unknown", never as zero.** If Amazon still says it can't deliver when checked from inside the country, the actor retries on another route and then delivers the product without a price. Its status row then reads, for a German page: "Amazon says it cannot deliver this item in DE (checked from a residential exit in that country): delivered without a price."
3. **Check the status dataset after every run.** The script above prints it. A run can succeed and still contain rows without a price.

## Prime-only prices, coupons and other prices you won't see

A scraper that doesn't sign in sees the signed-out page. That has consequences:

- **Prime-exclusive prices** (for example during Prime Big Deal Days) are offered to members. They aren't the `price` in a signed-out row. See the [Prime Day price tracker](https://datatooly.xyz/guides/prime-day-price-tracker/) for how to handle member-only events.
- **Clip-on coupons and Subscribe & Save discounts** are typically shown next to the price, not taken off it.
- **The buy-box price is one offer.** Other sellers may sell the same ASIN for less. The row's `seller` tells you whose offer it is.

## Holiday season: start the baseline before the sale

For Black Friday (Friday, November 27, 2026) and Cyber Monday (November 30), the useful question is whether a deal is below the price the product actually sold at in the weeks before, not below its `originalPrice`. Schedule the same ASIN list daily on Apify from early November with `monitorMode: true`. Each row then gets `previousPrice`, `priceChange` and a `changeType` such as `price-down`. With `onlyChanges: true`, unchanged products aren't written and are billed at the lower "product checked" price ($0.0012 FREE, $0.0002 GOLD). The [holiday sales calendar](https://datatooly.xyz/guides/holiday-sales-calendar-price-tracking/) lists the 2026–2027 dates, and [Amazon price history without Keepa](https://datatooly.xyz/guides/amazon-price-history-without-keepa/) shows how to keep and chart the history.

## Related guides

- [Amazon price history without Keepa](https://datatooly.xyz/guides/amazon-price-history-without-keepa/).
- [Prime Day price tracker](https://datatooly.xyz/guides/prime-day-price-tracker/).

## Do it without code

The free [e-commerce price tracker builder](https://datatooly.xyz/ecommerce-price-tracker/) takes Amazon product URLs (or a keyword with Amazon as the marketplace) and a proxy country, and produces a ready-to-run input for the actor, with a fixed example of the output. It doesn't fetch Amazon from your browser.

*Disclosure: I built the actor and this site.*

Sources: actor runs on 2026-10-20 (the output above), the actor's README (supported-sites table, residential traffic measurements, pricing table and worked examples), and our cloud test runs from October 2026.

## Quick answers

### How do I get the price of an Amazon product from its ASIN?

Build the product URL as `https://www.amazon.<marketplace>/dp/<ASIN>` (for example `https://www.amazon.co.uk/dp/B0DXDTX47W`) and scrape that page, or pass the URL to a scraper that returns the price, currency and was-price as fields. The ASIN is the 10-character code in the URL and in the product details table.

### Is an Amazon ASIN the same in every country?

Often, but not always. In our 2026-10-20 runs, ASIN B0DXDTX47W was the same Anker cable on amazon.co.uk and amazon.de, while amazon.com served it under B0DBTV5QF5, and B088NRLMPV had no product page at all on amazon.de. Check each marketplace's result rather than assuming.

### Why does an Amazon page say the item cannot be dispatched to my location?

Amazon decides delivery by the visitor's location. When a page is loaded from outside the marketplace's country, Amazon can show a 'cannot be dispatched to your selected delivery location' message instead of a buy box, and the price disappears. Load each marketplace from its own country.

### Does scraping Amazon show Prime member prices?

No. A scraper that isn't signed in sees what a signed-out visitor sees. Prices Amazon offers only to Prime members are not the price in the scraped row.

### Can I scrape Amazon prices without Keepa?

Yes. Scrape the product pages on a schedule and keep each run's prices; that builds your own history from the day you start. Keepa and camelcamelcamel already have years of history, which a new scraper can't recreate.

## Related guides

- [Retail Sales Calendar 2026-2027: When to Track Prices](https://datatooly.xyz/guides/holiday-sales-calendar-price-tracking/)
- [Amazon Price History Without Keepa: Build Your Own](https://datatooly.xyz/guides/amazon-price-history-without-keepa/)
- [Back in Stock Alert Scraper: Products, Sizes, Colours](https://datatooly.xyz/guides/back-in-stock-alert-scraper/)
- [Back to School Price Tracker: Tax Holidays & Laptops](https://datatooly.xyz/guides/back-to-school-price-tracker/)
- [Compare Black Friday Prices Across Stores (Google Shopping)](https://datatooly.xyz/guides/black-friday-google-shopping-price-comparison/)
- [Black Friday Price Tracker: Watch 2026 Prices Daily](https://datatooly.xyz/guides/black-friday-price-tracker/)
- [Boxing Day Sales Tracker UK 2026: Prices in GBP](https://datatooly.xyz/guides/boxing-day-sales-price-tracker-uk/)
- [Christmas Price Tracker: When to Buy Gifts Cheapest](https://datatooly.xyz/guides/christmas-price-tracker/)
- [Competitor Price Monitoring: Scraper Setup and Cost](https://datatooly.xyz/guides/competitor-price-monitoring-scraper/)
- [Cyber Monday Price Tracker: Hourly Checks for Nov 30](https://datatooly.xyz/guides/cyber-monday-deal-tracker/)
- [Grocery Price Tracker: Build a Basket Index in Python](https://datatooly.xyz/guides/grocery-price-tracker-scraper/)
- [MAP Monitoring: Find Minimum Advertised Price Violations](https://datatooly.xyz/guides/map-price-monitoring/)
- [Price Drop Alerts to Slack or Email with a Scraper](https://datatooly.xyz/guides/price-drop-alerts-email-slack/)
- [Prime Day Price Tracker: ASINs, Big Deal Days, 2027](https://datatooly.xyz/guides/prime-day-price-tracker/)
- [Ramadan Sale Price Tracker 2027: Noon & Amazon UAE](https://datatooly.xyz/guides/ramadan-eid-sales-price-tracking/)
- [Scrape Product Prices with Python from JSON-LD](https://datatooly.xyz/guides/scrape-product-prices-json-ld-python/)
- [Scrape Product Reviews from Walmart, Target and Amazon](https://datatooly.xyz/guides/scrape-product-reviews-walmart-target-amazon/)
- [Scrape Product Variants: Sizes, Colors and Price per SKU](https://datatooly.xyz/guides/scrape-product-variants-sizes-colors/)
- [Fake Black Friday Deals: Check the Real Discount](https://datatooly.xyz/guides/spot-fake-black-friday-discounts/)
- [Apify E-commerce Scraping Tool Alternative: Same Input](https://datatooly.xyz/guides/switch-from-apify-ecommerce-scraping-tool/)
- [When Do Black Friday Prices Drop? The 2026 Timeline](https://datatooly.xyz/guides/thanksgiving-black-friday-price-drop-timeline/)
- [Walmart and Target Price Scraper: Search and Product Pages](https://datatooly.xyz/guides/walmart-target-price-scraper/)
- [White Friday & 11.11 Tracker: Noon and Amazon UAE Prices](https://datatooly.xyz/guides/white-friday-11-11-noon-amazon-uae-prices/)
- [Shopify products.json Pagination: 250 Limit and the 25,000 Cap](https://datatooly.xyz/guides/shopify-products-json-pagination/)
- [AI Share of Voice: Measure It in ChatGPT and Perplexity](https://datatooly.xyz/guides/ai-share-of-voice-chatgpt-perplexity/)
