# Amazon Price History: Lowest, Highest & Is Today a Real Deal (`wellbuilt_zythem/amazon-price-history`) Actor

Amazon.com price history by ASIN, from the copies of the product page kept by the Internet Archive: price, list price, rating and Best Sellers Rank by month or week, lowest and highest price with dates, average, and today's price compared with its history.

- **URL**: https://apify.com/wellbuilt_zythem/amazon-price-history.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 price histories

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Amazon Price History: Lowest, Highest & Is Today a Real Deal

Get the **price history of Amazon.com products by ASIN**, built from the copies of each product page that the **Internet Archive (Wayback Machine)** has kept over the years. For every product: the price month by month (or week by week), the list price, rating, number of ratings and Best Sellers Rank at each date; the **lowest and highest price with their dates**, the average and median; and **today's price compared with its own history**, so you know whether a "deal" is a real one.

No Keepa subscription, no API key, no proxy.

### See it run

https://youtu.be/WtCjh6HcVAU

### Example

Oral-B Pro 1000 (B01AKGRTUM), 8 monthly points read on 2026-10-17:

| Date | Price |
|---|---|
| 2024-12-02 | $39.94 |
| 2025-01-04 | $39.94 |
| 2025-04-08 | $49.94 |
| 2025-08-06 | $49.94 |
| 2025-11-25 | $39.94 |
| 2025-12-30 | $39.94 |
| 2026-06-06 | $49.94 |
| 2026-07-07 | $49.94 |

Lowest $39.94 (first seen 2024-12-02), highest $49.94: the $10 holiday discount shows up twice.

### What you can do with it

- **Check a deal before you publish it**: is today's price really the lowest, or was it lower last Black Friday?
- **Plan your own prices**: see how competitors priced the same product through the year.
- **Product research**: price stability, discount seasons, and how ratings and Best Sellers Rank moved.

### Input

```json
{
  "products": ["B01AKGRTUM", "https://www.amazon.com/dp/B00EI7DPI0"],
  "period": "month",
  "maxPointsPerProduct": 36,
  "includeCurrentPrice": true,
  "outputFormat": "products"
}
```

- **One price point per** month (default) or week. Each point is one archived copy of the product page.
- **Max points per product**: the most recent points are kept. 36 months is three years.
- **From year**: ignore older copies.
- **Compare with today's price**: also opens the live amazon.com page.
- **Output**: one row per product with its history inside, or one row per price point for charts and spreadsheets.

### Output (one row per product)

| Field | Notes |
|---|---|
| `lowestPrice`, `lowestPriceDate`, `highestPrice`, `highestPriceDate` | the first date the extreme was seen |
| `averagePrice`, `medianPrice`, `latestArchivedPrice`, `latestArchivedDate` | over the points that have a price |
| `currentPrice`, `currentListPrice` | today's live price, when **Compare with today's price** is on |
| `currentVsLowestPct`, `currentVsAveragePct`, `isAtOrBelowHistoricLow` | today compared with the archived history |
| `pricePoints`, `snapshotsRead`, `archiveCapturesFound`, `firstDate`, `lastDate` | how much history there is |
| `ratingsCountFirst`, `ratingsCountLast`, `rating`, `bestSellersRank` | |
| `history` | one entry per point: `date`, `price`, `listPrice`, `rating`, `ratingsCount`, `bestSellersRank`, `archiveUrl` (the archived copy, so every price can be checked) |

A point whose archived page shows no price keeps the date and a `noPriceReason` (`hidden_until_cart`, `prime_only_deal`, `unavailable`, `no_featured_offer`) instead of a guessed price.

### How much history there is, measured

Measured on 2026-10-17 over 50 products taken from Amazon searches:

- **Best-selling products** (25 products with more than 44,000 ratings): 24 have archived copies, 15 have 12 months or more, 14 have 24 months or more; **median 30 months**, 17 of them going back to 2021 or earlier.
- **Ordinary products** (25 picked at random, median 7,000 ratings): 16 have at least one copy, only 4 reach 12 months; median 1 month.
- **Price found in 92 % of archived copies** (126 of 137 copies read across 40 products); rating in 100 %, Best Sellers Rank in 73 %.

The Internet Archive saves popular pages often and obscure ones rarely. This Actor is for products people know; for a new or niche product it may find little or nothing, and **products without any archived price are not charged**.

#### What this Actor does not deliver

- **Daily prices.** One point per month or week, when the Internet Archive kept a copy that month or week. Months without a copy are simply missing.
- **Every variant.** The price is the one the page showed by default when it was saved (one size or color).
- **Other Amazon stores** (.co.uk, .de...). Amazon.com only.
- **Third-party offer history, sales estimates or Keepa data.**

The Internet Archive saves pages from servers in several countries, but the price on an amazon.com page is the US price in dollars; shipping to other countries is shown on another line and not used.

### Speed

The Internet Archive is a public, non-profit service and is slow: about 20-100 seconds to list a product's copies, and about 3 seconds per copy. Three products are read at a time. Measured on 2026-10-17: **15 best-selling products with up to 36 monthly points and today's price took 8 minutes** and returned 343 prices from 379 archived copies, going back to 2019-2022. Up to 300 products per run.

### Pricing

Pay per event: `price_history`, once per product delivered with at least one archived price. Products without archived prices and products the Internet Archive did not answer for are delivered for free.

# Actor input Schema

## `products` (type: `array`):

Amazon.com ASINs or product links, one per line: "B01AKGRTUM" or "https://www.amazon.com/dp/B01AKGRTUM". Up to 300 per run.

## `period` (type: `string`):

Month: one archived copy per month (the default). Week: one per week, for products the Internet Archive saved often.

## `maxPointsPerProduct` (type: `integer`):

Most recent points kept per product, 1 to 150. 36 months is three years.

## `fromYear` (type: `integer`):

Ignore copies older than this year. Empty: everything the Internet Archive has.

## `includeCurrentPrice` (type: `boolean`):

Open the live amazon.com page for today's price, rating and Best Sellers Rank, and compare today's price with the lowest and average archived prices.

## `outputFormat` (type: `string`):

One row per product with its history inside, or one row per price point (easier for charts and spreadsheets). The price is the same.

## `proxyConfiguration` (type: `object`):

Only used for today's price. Not needed: measured without proxy from Apify.

## Actor input object example

```json
{
  "products": [
    "B01AKGRTUM"
  ],
  "period": "month",
  "maxPointsPerProduct": 12,
  "includeCurrentPrice": true,
  "outputFormat": "products",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "products": [
        "B01AKGRTUM"
    ],
    "maxPointsPerProduct": 12,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/amazon-price-history").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "products": ["B01AKGRTUM"],
    "maxPointsPerProduct": 12,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/amazon-price-history").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "products": [
    "B01AKGRTUM"
  ],
  "maxPointsPerProduct": 12,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call wellbuilt_zythem/amazon-price-history --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wellbuilt_zythem/amazon-price-history"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BDaDiptr2EVxGqxWR/builds/IEjqWfaiwN3fgoPCv/openapi.json
