# Competitor Price Intelligence API - Price, Stock, Seller Offers (`nabeelbaghoor/competitor-price-intelligence-api`) Actor

Export competitor price intelligence your account monitors: daily competitor price, stock and promotion history, marketplace seller offers and buy box, category rank, review scores, your products with competitor price range, from the Lengow Market Intelligence API. Read only. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/competitor-price-intelligence-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 $10.00 / 1,000 product or offer record 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

## Competitor Price Intelligence API - Price, Stock, Seller Offers

Export the competitor price intelligence your Lengow Market Intelligence account already collects: daily competitor prices, stock and promotions, marketplace seller offers, category rank and review history, as clean rows for a warehouse, a spreadsheet or a repricing rule.

### What it collects

- **Competitor price history**: one row per competitor product per day with price, stock and promotion text, for the last 90 days by default or any date range you give. The same history is available for your own products.
- **Your products with the competitor price range**: price, price difference, shipping, stock and stock quantity, plus the number of matched competitor products and the lowest and highest competitor price.
- **Competitor products**: every competitor product matched to yours, with code, variant, price, shipping, stock, product URL, image and detection, update and last failure dates.
- **Marketplace seller offers**: seller id and name, offer position, price, shipping, condition, product status, active flag and buy box winner, plus the daily price history of each seller's offer.
- **Category placement, review score and review count history**: the rank of each product in its category and its rating and review count per day.
- **Product connections and attributes**: which competitor product is matched to which of yours and since when, and brand, EAN and categories on both sides.
- **Stores and geo locations**: your own stores, every competitor store and marketplace monitored for you, and the cities and zip codes prices are read from, with geo-located offers.
- **Filters**: store ids and date range sent to the provider, plus product id, country, marketplace seller and in-stock filters applied to the answer.
- Read only, pay per result, bring your own key.

### Input

| Field | What it does |
| --- | --- |
| What to read | One of 18 services. My stores (default) needs only the key. |
| Store ids | Optional. One request per store id, sent as the provider's stores filter. |
| From date / To date | Dated history services: the period, as YYYY-MM-DD. |
| Only these product ids | Keep records for these public or private product ids. |
| Only these countries | Stores and products: keep these ISO country codes. |
| Only these marketplace sellers | Marketplace offers: keep these seller names. |
| In stock only | Keep records whose stock is above zero. |
| Maximum results | Row cap for the run. |
| Requests per minute | Pacing for calls to the provider. |
| API key | Your own 60-character Business Intelligence API key, as a secret input. |

### FAQ

#### What is a competitor price intelligence API used for?

Moving competitor prices out of a price monitoring tool and into the systems that act on them. An ecommerce pricing team loads yesterday's competitor price history into BigQuery or Snowflake and tracks its price index per category. A brand manager checks which marketplace sellers hold the buy box on Amazon or Cdiscount and at what price. A category manager charts a product's category rank and review count against competitors over 90 days. A repricing script reads the lowest competitor price for each of the merchant's own products.

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

The Lengow Market Intelligence API (the NetRivals and NetMonitor products) at endpoint.netrivals.com, through the eighteen read routes of its Business Intelligence API, documented publicly at endpoint.netrivals.com/docs/v1. Examples are `GET /bi/v1/public/history/products-price`, `GET /bi/v1/public/products-marketplace-offers` and `GET /bi/v1/private/products`. It reads the stores and products already monitored in your own account; it does not add products, start scrapes or reprice anything.

#### Do I need an API key?

Yes. This actor is bring-your-own-key and never ships one. The Business Intelligence API uses a 60-character API key that Lengow provides to Market Intelligence customers. Paste it into the input or set it once as the `DATA_API_KEY` environment secret. A missing key, a key of the wrong length and a refused key each end the run cleanly with a message saying which it was.

#### How do I find my store ids?

Run the My stores service first. Each row carries a `privateStoreId`, the domain and the country. The Monitored competitor stores service lists each competitor store's `publicStoreId`, domain, country and store type. Put the ids you want in the store ids input to narrow any other service; leave it empty to read every store the key can see.

#### What is the difference between private and public products?

Private products are your own catalogue as the provider imported it from your feed. Public products are the same items found on competitor shops and marketplaces. The Product connections service says which public product is matched to which private product, and the My products service summarises each private product's matched competitors with their count and lowest and highest price.

#### How far back does price history go?

Price, review score and review count history default to the last 90 days on a daily basis, and category placement history to the last 30 days, when no dates are given. Give a from and to date to read another period. The marketplace offer price history route takes no date filter.

#### What happens when there is nothing for a store or period?

It becomes its own row with `found: false` and a note: a store id the key cannot read, a period with no history, or an answer where no record passed your filters. Those rows are never charged.

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

No. Every request is a GET to the Business Intelligence API. The provider's Standard API also documents a route that recalculates price suggestions and one that starts a feed import; neither is wired, and the Standard API is not called at all. The key never appears in a row or in the log.

#### How is it priced?

Pay per result. A product or offer row (your product, a competitor product, a marketplace seller offer or a geo-located offer) is one charge; a smaller row (one day of history, an attribute set, a connection, a store or a location) is charged at a lower rate. Rows for store ids or periods that produced nothing, and records dropped by your filters, are free. Your Lengow subscription applies separately.

### Example output

```json
{
  "service": "marketplaceOffers",
  "serviceLabel": "Marketplace seller offers",
  "recordType": "marketplaceOffer",
  "requestedStoreId": "1234",
  "found": true,
  "publicProductId": "8f14e45fceea167a5a36dedd4bea2543",
  "position": 1,
  "offerNum": 3,
  "sellerId": "A1X6FK5RDHNB96",
  "sellerName": "Example Electronics",
  "productStatus": "new",
  "condition": "new",
  "price": 249,
  "shipping": 4.99,
  "stock": null,
  "inStock": null,
  "active": "1",
  "buyBoxWinner": true,
  "url": "https://www.example-marketplace.fr/dp/B0EXAMPLE",
  "detectionDate": "2026-06-02 08:11:40",
  "updateDate": "2026-09-27 06:02:13",
  "retrievedAt": "2026-09-28T09:14:52.118Z",
  "note": null
}
```

Values are illustrative, and empty columns are left out here for brevity; every source field is one the provider documents.

### Keyword map

competitor price intelligence API, competitor price monitoring, price history API, marketplace seller monitoring, buy box tracking, reseller price monitoring, ecommerce market intelligence, category rank tracking, review score history, price index data, repricing data feed, Lengow Market Intelligence API, NetRivals API.

# Actor input Schema

## `service` (type: `string`):

One service per run. My stores needs nothing but the key and lists the store ids that narrow every other service, so it is the default. The history services read one row per product per day; the rest read one row per store, product, attribute set, offer, connection or location.

## `storeIds` (type: `array`):

Optional. Numeric store ids, one per line, as the store services list them. Each id is sent to the provider as its stores filter, one request per id. Left empty, the provider answers for every store the key can read. Not used by the two store lists.

## `dateFrom` (type: `string`):

History services with a date filter only (price, placement, score and review count history): the first day, as YYYY-MM-DD. Left blank, the provider uses its own window: the last 90 days, or the last 30 days for placement history.

## `dateTo` (type: `string`):

History services with a date filter only: the last day, as YYYY-MM-DD. Left blank, the provider uses today.

## `productIds` (type: `array`):

Optional. Keep only records whose public (competitor) product id, private (your) product id or product id is listed, one per line. Applied to the provider's answer, which covers every product of the store.

## `countryCodes` (type: `array`):

Stores and products only: keep only records whose two-letter ISO 3166-1 country code is listed, one per line, such as fr or es. Applied to the provider's answer.

## `sellerNames` (type: `array`):

Marketplace offers and their price history only: keep only offers from sellers whose name is listed, one per line, matched without regard to case. Applied to the provider's answer.

## `inStockOnly` (type: `boolean`):

Services that report stock only (products, price history, marketplace offer price history, geo-located offers): keep only records whose stock value is above zero. Applied to the provider's answer.

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

Stop after this many rows. Price history for a store is one row per product per day, so 90 days of a 1,000 product catalogue is up to 90,000 rows.

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

Pacing ceiling for calls to the provider. Each call answers a whole dataset, so a run makes one call per store id.

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

Your own 60-character Business Intelligence API key, which Lengow provides to Market Intelligence customers. This actor is bring-your-own-key and never ships one. Leave blank to use the DATA\_API\_KEY environment secret instead. It is sent as the api\_key parameter and never written to a row or the log.

## `baseUrl` (type: `string`):

Override the host the actor calls. Only useful for testing against a different environment.

## Actor input object example

```json
{
  "service": "privateStores",
  "inStockOnly": false,
  "maxResults": 1000,
  "requestsPerMinute": 30
}
```

# Actor output Schema

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

One row per store, product, daily history point, offer, connection or location.

# 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/competitor-price-intelligence-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/competitor-price-intelligence-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/competitor-price-intelligence-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/competitor-price-intelligence-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/1tWOfBaCGsifpmyh9/builds/lI4CY53ccVLeZZSUa/openapi.json
