# Price Monitoring API - Retailer Offers, Prices and Availability (`nabeelbaghoor/retailer-price-monitoring-api`) Actor

Price monitoring export: every retailer and marketplace offer for your products per data update, with offer price, shipping, availability, offer URL, your own price, price gap and minimum price breaches, plus update dates and report columns, from the Dealavo API v3. Read only. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/retailer-price-monitoring-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 retailer offer returneds

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/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

## Price Monitoring API - Retailer Offers, Prices and Availability

Export every retailer and marketplace offer your price monitoring account has matched to your products: one row per product per offer per data update, with the offer price, shipping, availability and URL beside your own price, ready for a warehouse, a spreadsheet or a repricing rule.

### What it collects

- **Retailer offers**: for each data update, every offer matched to your products, with the retailer or marketplace seller, the offer name, the offer price with and without shipping, availability text and a true or false reading of it, stock, the offer URL and the source it was found on.
- **Your own product data beside each offer**: your product id, article name, EAN, product code, brand, producer, your price with and without shipping, catalogue, minimum and maximum price, wholesale price, VAT, currency, labels, crossed out, previous and original price and promotion description, as far as your account holds those columns.
- **Computed on every offer**: your price gap to the offer in percent, and whether the offer is below your minimum price (a minimum advertised price breach).
- **Every column kept**: all report columns, including any your account adds, are also kept under `fields` with their original names.
- **History by update**: the latest update by default, the latest few, or every update in a date range, one report per update so every row carries its update time.
- **Lookups**: the list of update dates, and the list of report columns your account can request.
- **Filters**: available offers only (sent to the provider) and retailer names (applied to the answer).
- Read only, pay per result, bring your own key.

### Input

| Field | What it does |
| --- | --- |
| What to read | Retailer offers (default, needs nothing else), update dates, or available columns. |
| Latest updates | Retailer offers: how many recent updates to read when no date range is given. |
| From date / To date | Retailer offers and update dates: a range of updates, as YYYY-MM-DD or YYYY\_MM\_DD\_HH\_MM. |
| Report columns | Retailer offers: the columns to read. Empty reads all. |
| Available offers only | Retailer offers: only currently available offers. |
| Only these retailers | Retailer offers: keep offers whose retailer name contains one of these. |
| Maximum results | Row cap for the run. |
| Requests per minute | Pacing for calls to the provider, at most 60. |
| Account ID / API key | Your own credentials, as secret inputs. |

### FAQ

#### What is a price monitoring API used for?

Getting retailer prices out of a price monitoring tool and into the systems that act on them. A brand manager loads every offer for its catalogue into BigQuery or Snowflake after each update and flags retailers selling below the minimum price. An ecommerce team compares its own price with Allegro sellers and other online shops per EAN. A category manager tracks which retailers ran out of stock on a best seller. A repricing script reads the cheapest available offer per product.

#### Which data source does this actor read?

The Dealavo API v3 at app.dealavo.com, through the three routes documented in its public OpenAPI file: Get update dates (`GET /api/v3/updates`), Get available columns (`GET /api/v3/columns`) and Generate a report (`POST /api/v3/report`, requested in its JSON format). It reads the products and retailer matches already set up in your own account; it does not add products or trigger new price checks.

#### Do I need an API key?

Yes. This actor is bring-your-own-key and never ships one. The provider issues an account ID and an API key with API access; paste both into the input, or set them once as the `DATA_API_ACCOUNT_ID` and `DATA_API_KEY` environment secrets. Missing or refused credentials end the run cleanly with a message saying which it was.

#### How far back can I read prices?

As far back as your account's update list goes. Leave the dates empty to read the latest update, raise latest updates to read several recent ones, or set a from and to date to read every update in that range. Run the update dates mode first to see what exists. Each update is read as its own report, so every row carries the time of the update it came from.

#### Which columns will I get?

Every column your account has, unless you name some. Run the available columns mode to see the exact names. Documented columns include Id, Article, Retailer, Retailer offer name, Retailer price, Retailer price with shipping, Availability, Source, Labels, Price, Url, Currency, Brand, EAN, Minimum Price and Maximum Price. A column name the account does not have ends the run with the provider's list of available columns.

#### What does the price gap mean?

It is computed here from two provider columns: your own price (Price) minus the offer's price (Retailer price), as a percentage of the offer's price. A positive number means you are more expensive than that retailer. `belowMinimumPrice` is true when the offer's price is under your Minimum Price column.

#### Can this actor change anything in my account?

No. The update and column lists are GET requests, and the report is a POST only because it takes its options as a JSON body; it reads data and changes nothing. The provider documents no write route. The credentials travel as the query parameters the provider requires and never appear in a row or in the log.

#### How is it priced?

Pay per result: one price per retailer offer returned, and a lower price per update date or column listed. Updates with no offers and offers left out by the retailer filter are free. Your provider subscription applies separately, and the provider allows 60 requests per minute and up to 20,000 rows per request.

### Example output

```json
{
  "mode": "offers",
  "modeLabel": "Retailer offers",
  "found": true,
  "updateTime": "2026_09_28_06_00",
  "productId": "1182986505",
  "article": "Wet dog food adult beef and lamb 400g",
  "ean": "4017721829861",
  "brand": "ExampleBrand",
  "retailer": "petshop_example (allegro.pl)",
  "retailerOfferName": "Wet dog food adult beef 400g",
  "source": "Allegro",
  "url": "https://allegro.pl/oferta/example-400g",
  "currency": "PLN",
  "price": 5.3,
  "retailerPrice": 4.99,
  "retailerPriceWithShipping": 13.98,
  "priceGapPercent": 6.21,
  "availability": "Available, in assortment",
  "available": true,
  "minimumPrice": 5.0,
  "belowMinimumPrice": true,
  "labels": ["Promo", "Core range"],
  "fields": { "Id": "1182986505", "Retailer": "petshop_example (allegro.pl)", "Retailer price": "4.99" },
  "retrievedAt": "2026-09-28T09:14:52.118Z",
  "note": null
}
```

Values are illustrative; every source column is one the provider documents.

### Keyword map

price monitoring API, retailer price monitoring, competitor price tracking, MAP monitoring, minimum price violations, marketplace offer data, Allegro price monitoring, ecommerce price intelligence, retailer availability tracking, EAN price lookup, price history export, dynamic pricing data, Dealavo API.

# Actor input Schema

## `mode` (type: `string`):

Retailer offers reads, for each data update, every retailer and marketplace offer matched to your products, and needs nothing else, so it is the default. Update dates lists when your data was refreshed. Available columns lists the report columns your account can request.

## `latestUpdates` (type: `integer`):

Retailer offers only: how many of the most recent data updates to read when no date range is given. 1 reads only the latest snapshot. The update dates mode lists every update when no date range is given.

## `fromDate` (type: `string`):

Retailer offers and update dates: read every update on or after this day, as YYYY-MM-DD, or after this exact update time, as YYYY\_MM\_DD\_HH\_MM. Overrides latest updates.

## `toDate` (type: `string`):

Retailer offers and update dates: read every update on or before this day, as YYYY-MM-DD, or before this exact update time, as YYYY\_MM\_DD\_HH\_MM. Overrides latest updates.

## `columns` (type: `array`):

Retailer offers only: the report columns to read, one per line, with the exact names the available columns mode lists, such as Id, Article, Retailer, Retailer price, Availability, Price and Url. Leave empty to read every column the account has.

## `onlyAvailableOffers` (type: `boolean`):

Retailer offers only: ask the provider for currently available offers only, through its only\_available\_offers setting.

## `retailers` (type: `array`):

Retailer offers only: keep only offers whose retailer name contains one of these, one per line, such as allegro.pl or mediaexpert. Applied to the provider's answer, and needs the Retailer column.

## `maxResults` (type: `integer`):

Stop after this many rows. One update holds one row per product per retailer offer, often tens of thousands for a full catalogue.

## `requestsPerMinute` (type: `integer`):

Pacing ceiling for calls to the provider, which allows 60 requests per minute. Rate limited answers are retried after the wait the provider asks for.

## `accountId` (type: `string`):

Your own account identifier, the account\_id your provider issued with API access. Leave blank to use the DATA\_API\_ACCOUNT\_ID environment secret instead.

## `apiKey` (type: `string`):

Your own API key, the api\_key your provider issued with API access. This actor is bring-your-own-key and never ships one. Leave blank to use the DATA\_API\_KEY environment secret instead. It is never written to a row or the log.

## Actor input object example

```json
{
  "mode": "offers",
  "latestUpdates": 1,
  "onlyAvailableOffers": false,
  "maxResults": 1000,
  "requestsPerMinute": 50
}
```

# Actor output Schema

## `records` (type: `string`):

One row per retailer offer, update date or report column.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/retailer-price-monitoring-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/retailer-price-monitoring-api").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 '{}' |
apify call nabeelbaghoor/retailer-price-monitoring-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/retailer-price-monitoring-api"
        }
    }
}
```

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/Xjs1eksbwqjBTSxGy/builds/D8dELy93b7AZoj51R/openapi.json
