# Catalog Price Change Summarizer (`theendfear/factory-catalog-price-change-summarizer-13a6ce90`) Actor

Analyze user-provided price records into deterministic grouped price change intelligence.

- **URL**: https://apify.com/theendfear/factory-catalog-price-change-summarizer-13a6ce90.md
- **Developed by:** [Marco S.](https://apify.com/theendfear) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Catalog Price Change Summarizer

Analyze user-provided product or offer price records into grouped price intelligence. The Actor does not autonomously discover websites, scrape stores, use proxies, require logins, or call paid external APIs.

### What It Does

It turns user-provided ecommerce price-list, offer, or competitor records into one grouped analysis row per comparable item. Use it when you already have price data and need deterministic spread, outlier, and action signals instead of manual spreadsheet cleanup.

### Who It Is For

Pricing teams, ecommerce operators, resellers, and analysts comparing current listed prices across catalogs, merchants, regions, or channels.

### Input

Provide `records` with product or item names, prices, optional currency, and optional source fields. Use `groupKey`, `priceField`, and `dedupeKey` to adapt the analysis to your own data.

### Output

Each dataset row is one analyzed group with offer count, min/median/mean/max price, spread percentage, outlier count, deterministic score, recommended action, score explanation, and source record indexes.

### How It Works

The Actor validates each record, normalizes the configured product and price fields, removes duplicates using group, currency, price, and source key, groups remaining offers by item, then calculates min, median, mean, max, spread percentage, and IQR outliers. The score ranges from 0 to 100: coverage adds confidence, wider spread increases review priority, and detected outliers reduce confidence. Recommended action is derived from the final score thresholds.

### Example

```json
{
  "records": [
    {"product": "Widget A", "price": "$10.00", "currency": "USD", "url": "https://a.example/w-a"},
    {"product": "Widget A", "price": 12, "currency": "USD", "url": "https://b.example/w-a"}
  ],
  "groupKey": "product",
  "priceField": "price",
  "dedupeKey": "url"
}
```

### Pricing

PAY\_PER\_EVENT event `analysis_record_emitted` is charged once per emitted grouped analysis row. Invalid records, duplicates, skipped rows, and charge-limited records are not billable.

### Limitations

Currency symbols and codes are normalized for grouping only; this Actor does not perform FX conversion.

### Integration

Run it directly with JSON input, from an Apify task, or downstream from another Actor that produces a default dataset of price records. Results are written to the default dataset and the run summary is written to the `OUTPUT` key-value store record.

### Differentiation

Use this for current ecommerce offer or price-list analysis. It is not a sold-comps tool: it does not require sale dates or distinguish completed sales from active listings.

# Actor input Schema

## `records` (type: `array`):

Array of user-provided product, offer, or competitor price records.

## `groupKey` (type: `string`):

Field used to group comparable offers.

## `priceField` (type: `string`):

Field containing numeric price values.

## `dedupeKey` (type: `string`):

Optional field used with group and price to remove duplicate offers.

## `maxRecords` (type: `integer`):

Maximum number of input records to process in one run.

## Actor input object example

```json
{
  "groupKey": "product",
  "priceField": "price",
  "dedupeKey": "url",
  "maxRecords": 5000
}
```

# Actor output Schema

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

Grouped price analysis rows in the default dataset.

# 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("theendfear/factory-catalog-price-change-summarizer-13a6ce90").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("theendfear/factory-catalog-price-change-summarizer-13a6ce90").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 theendfear/factory-catalog-price-change-summarizer-13a6ce90 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,theendfear/factory-catalog-price-change-summarizer-13a6ce90"
        }
    }
}

```

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/GPXGFQq3kXPV7VGVq/builds/PuNoaxkRUZOFGpjfQ/openapi.json
