# Product Price Watch & Drop Alerts (`mocha_tassel/product-price-watch`) Actor

Paste product page URLs from any shop. Each run reads the public price via JSON-LD / Open Graph and returns only drops (or any change). Schedule it and fire a webhook instead of refreshing the tab.

- **URL**: https://apify.com/mocha\_tassel/product-price-watch.md
- **Developed by:** [Niko T.](https://apify.com/mocha_tassel) (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 $10.00 / 1,000 price changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Product Price Watch & Drop Alerts

![product-price-watch](https://api.apify.com/v2/key-value-stores/yfnvtbimUC1yUnStx/records/product-price-watch.png?signature=8CZhiLh6h2ebm9Bpe7bh)

Paste product URLs. Each scheduled run reads the **public price** and returns **only drops** (or any change you ask for). Quiet days stay cheap.

This is not another marketplace scraper. You already know which SKUs matter — the Actor watches *those pages* and tells you when the number moved.

### Who pays for this

- E-commerce teams tracking competitors
- Deal / coupon sites
- Agencies running price-match SLAs
- Anyone who currently refreshes 40 tabs every morning

### How it reads a price

1. `schema.org` Product / Offer JSON-LD
2. Open Graph `product:price:amount`
3. `itemprop="price"`

Pages without structured price data are skipped with a warning instead of guessing from CSS classes.

### Setup

1. Add product page URLs.
2. Optional: minimum drop %, target price, webhook.
3. Run once to store the baseline.
4. Put it on a daily or hourly schedule.

### Pricing

You pay a small fee per URL checked, plus the dataset fee for each change row. A run that finds nothing still covers the work of looking.

### Proxies

Many shops block data-centre IPs. Residential proxies are on by default.

### Limitations

- JavaScript-only prices (no JSON-LD, no meta tags) are not read.
- Login walls and carts are out of scope.
- Currency conversion is not applied — you get the number on the page.

***

### Deutsch

Überwacht beliebige Produkt-URLs und meldet Preisänderungen. Liest JSON-LD und Open Graph, kein CSS-Raten. Residential-Proxys empfohlen.

# Actor input Schema

## `productUrls` (type: `array`):

Public product pages to watch. Best results on pages that expose schema.org Product/Offer or Open Graph price tags.

## `minDropPct` (type: `number`):

Only emit a row when the price fell by at least this percentage. Set to 0 to report every change including rises.

## `targetPrice` (type: `number`):

Also emit a row when the current price is at or below this number, even if the drop is small.

## `includeUnchanged` (type: `boolean`):

Also emit rows when the price or rate did not move. Useful for a baseline export.

## `webhookUrl` (type: `string`):

Optional HTTPS endpoint. Matching results are sent as a JSON POST.

## `stateKey` (type: `string`):

Separate histories when watching several searches in parallel.

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

Many shops block data-centre IPs. Residential proxies raise the hit rate.

## Actor input object example

```json
{
  "productUrls": [
    {
      "url": "https://www.ikea.com/gb/en/p/sydkrokus-duvet-cover-and-pillowcase-white-green-50578111/"
    }
  ],
  "minDropPct": 1,
  "includeUnchanged": false,
  "stateKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `changes` (type: `string`):

No description

## `summary` (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 = {
    "productUrls": [
        {
            "url": "https://www.ikea.com/gb/en/p/sydkrokus-duvet-cover-and-pillowcase-white-green-50578111/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mocha_tassel/product-price-watch").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 = { "productUrls": [{ "url": "https://www.ikea.com/gb/en/p/sydkrokus-duvet-cover-and-pillowcase-white-green-50578111/" }] }

# Run the Actor and wait for it to finish
run = client.actor("mocha_tassel/product-price-watch").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 '{
  "productUrls": [
    {
      "url": "https://www.ikea.com/gb/en/p/sydkrokus-duvet-cover-and-pillowcase-white-green-50578111/"
    }
  ]
}' |
apify call mocha_tassel/product-price-watch --silent --output-dataset

```

## MCP server setup

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

```

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/Io4ap3IpybbH9ovnc/builds/dkb2qgoDLPJ6BoidP/openapi.json
