Skip to main content
Glama
mambalabsdev

Competitor Price, Stock, and Changelog Monitor MCP Server

Competitor Price, Stock, and Changelog Monitor MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

An MCP server for the Mamba Labs Competitor Price, Stock, and Changelog Monitor actor on Apify. Give it competitor sites. Each run compares every site with the state saved by the last run and returns only what changed.

What's Inside

Related MCP server: Competitor Website Change Monitor

What it does

  • Stores: Shopify stores through their public product feed and WooCommerce stores through their public Store API. Changes: price_change, compare_at_price_change, out_of_stock, back_in_stock, new_product, removed_product, each with the product, variant, old and new value, and a link.

  • SaaS sites: the pricing page and changelog the site links to. Changes: plan_added, plan_removed, plan_price_change, pricing_page_change, and changelog_entry.

  • One row per site per run: site_baseline on the first check under a state_key, then site_check with changes_found for a site that changed, or a free no_change row when nothing moved.

Unreadable sites come back free with a row_status saying so.

All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.

Quick start

You need Node.js 18 or newer and an Apify account with an API token.

Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:

{
  "mcpServers": {
    "mamba-competitor-price-stock-changelog-monitor": {
      "command": "npx",
      "args": [
        "-y",
        "@mambalabsdev/mcp-competitor-price-stock-changelog-monitor"
      ],
      "env": {
        "APIFY_TOKEN": "your-apify-token"
      }
    }
  }
}

Restart the client. The monitor_competitor_changes tool appears.

Prerequisites

Example prompts

  • "Watch deathwishcoffee.com and allbirds.com for price cuts of 10 percent or more and tell me what changed since last week."

  • "Did Notion or Linear change their pricing plans or ship anything new this week?"

  • "Which products went out of stock on gymshark.com since yesterday?"

Tool

monitor_competitor_changes. One tool. Example arguments:

{
  "sites": [
    "deathwishcoffee.com",
    "linear.app"
  ],
  "state_key": "competitors-weekly",
  "min_price_change_pct": "5"
}

Inputs

Every buyer facing input of the actor, unchanged. Omitted inputs take the actor's own defaults. Numbers and booleans are sent as strings.

Input

Type

Description

sites

array

Competitor sites to watch, one per line: a domain (deathwishcoffee.com, linear.app) or a URL. A URL with a path is read as that page: a pricing page, a changelog page, or a product page. Up to 200 sites per run

site_type

string

auto (default) reads the public Shopify product feed or the WooCommerce Store API when the site has one, and otherwise reads the pricing and changelog pages it links to

watch

array

Any of: prices, stock, products, plans, changelog. prices covers price and compare at price per variant; stock covers in stock and out of stock; products covers new and removed products; plans covers plan names and prices on a pricing page; changelog covers new changelog entries. Empty means all five

product_urls

array

Product pages on a store that is not Shopify or WooCommerce. Each page is read for its schema.org Product price and availability

pricing_urls

array

Pricing pages to read, when the site does not link to its pricing page from the homepage

changelog_urls

array

Changelog or release notes pages to read, when the site does not link to one from the homepage. An RSS or Atom feed the page declares is read first

max_products

string

Products read from a store catalog per run, up to 5000. A store with more products than this is compared on the products read, and removed products are not reported for it. Default 250

min_price_change_pct

string

Report a price change only when it is at least this many percent. 0 reports every change. Default 0

max_changes_per_site

string

Change rows returned per site per run, up to 1000. The rest are counted in changes_found. Default 200

include_snapshot

string

true to also return one snapshot row per product variant, plan, and changelog entry on the first check of a site. Each snapshot row is billed as a snapshot row. Default false

state_key

string

Names the saved state, so separate schedules keep separate baselines. Runs with the same state key and site compare against each other

reset_state

string

true to ignore the saved state and record a new baseline for every site. Default false

max_charge_usd

string

Optional. The run stops before it would charge more than this

proxy_mode

string

auto (default) sends requests directly and moves a host to the Apify proxy default pool only when that host refuses. A reliability setting: proxy use adds nothing to your price

Pricing

Pay per event on Apify, billed to your Apify account. Prices in USD.

Event

Free plan

Bronze

Silver

Gold

change-row, one change on a watched site since the last run: a price, compare at price, or stock change on a variant, a new or removed product, a plan added, removed, or repriced, a price change on a pricing page, or a new changelog entry

$0.0025

$0.002375

$0.00225

$0.002125

site-check, the first check of a site, or a later check that finds a change

$0.003

$0.00285

$0.0027

$0.00255

snapshot-row, one current variant, plan, or changelog entry on the first check of a site, returned only when include_snapshot is on

$0.001

$0.00095

$0.0009

$0.00085

apify-actor-start, per run start

$0.0005

$0.0005

$0.0005

$0.0005

A site where nothing moved returns a free no_change row, and sites that cannot be read are free.

Your keys

The actor needs no key. It reads public product feeds and public pages and holds no key of any kind. Proxy traffic adds nothing to your price: Mamba Labs pays the platform costs of the run. proxy_mode is a reliability setting.

Full actor documentation

apify.com/mambalabs/competitor-price-stock-changelog-monitor

License

MIT. See LICENSE.

Available Tools

1 tool
monitor_competitor_changesMonitor competitor prices, stock, and changelogsA
Read-only

Watch competitor stores and SaaS sites and return only what changed since the last run with the same state_key. Give sites as domains or URLs (for example deathwishcoffee.com, linear.app). Shopify stores are read from their public product feed and WooCommerce stores from their public Store API, so you get price, compare at price, and stock changes per variant, plus new and removed products. SaaS sites are read from the pricing and changelog pages they link to, so you get plans added, removed, or repriced, and new changelog entries. Every site gets one row per run (site_baseline on the first check, then site_check with changes_found), plus one row per change with old and new values. Unreadable sites come back free with a row_status saying so. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN; Apify charges per change row and per site check that is a first check or finds a change; an unchanged site is free.

ParametersJSON Schema
NameRequiredDescriptionDefault
sitesYesCompetitor sites to watch, one per line: a domain (deathwishcoffee.com, linear.app) or a URL. A URL with a path is read as that page: a pricing page, a changelog page, or a product page. Up to 200 sites per run.
watchNoAny of: prices, stock, products, plans, changelog. prices covers price and compare at price per variant; stock covers in stock and out of stock; products covers new and removed products; plans covers plan names and prices on a pricing page; changelog covers new changelog entries. Empty means all five.
site_typeNoauto (default) reads the public Shopify product feed or the WooCommerce Store API when the site has one, and otherwise reads the pricing and changelog pages it links to.
state_keyNoNames the saved state, so separate schedules keep separate baselines. Runs with the same state key and site compare against each other.
proxy_modeNoauto (default) sends requests directly and moves a host to the Apify proxy default pool only when that host refuses. A reliability setting: proxy use adds nothing to your price.
reset_stateNotrue to ignore the saved state and record a new baseline for every site. Default false.
max_productsNoProducts read from a store catalog per run, up to 5000. A store with more products than this is compared on the products read, and removed products are not reported for it. Default 250.
pricing_urlsNoPricing pages to read, when the site does not link to its pricing page from the homepage.
product_urlsNoProduct pages on a store that is not Shopify or WooCommerce. Each page is read for its schema.org Product price and availability.
changelog_urlsNoChangelog or release notes pages to read, when the site does not link to one from the homepage. An RSS or Atom feed the page declares is read first.
max_charge_usdNoOptional. The run stops before it would charge more than this.
include_snapshotNotrue to also return one snapshot row per product variant, plan, and changelog entry on the first check of a site. Each snapshot row is billed as a snapshot row. Default false.
max_changes_per_siteNoChange rows returned per site per run, up to 1000. The rest are counted in changes_found. Default 200.
min_price_change_pctNoReport a price change only when it is at least this many percent. 0 reports every change. Default 0.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, non-destructive, openWorld), and the description goes well beyond: it discloses the auth requirement (APIFY_TOKEN), the billing model (charged per change row and per site check that is first or finds a change; unchanged sites free), the returned row shapes (site_baseline vs site_check plus per-change rows), error behavior with run ID, and that unreadable sites still return a priced-free row_status. This is exactly the extra context a read-only-but-billed tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and the state_key contract, then layers mechanism, output shape, and cost. It is a dense single paragraph, slightly long, but nearly every sentence carries distinct information; little is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 14 parameters, no output schema, and a non-idempotent, chargeable behavior, the description supplies the missing pieces: return-row structure, first-check vs subsequent-check semantics, free-vs-billed cases, and failure signaling. An agent has enough to call it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents every parameter in depth (examples, limits, defaults, enum meanings). The description largely restates that ground (domains vs URLs, Shopify/WooCommerce feed vs SaaS pages, per-change billing) without adding syntax or format detail beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Watch competitor stores and SaaS sites and return only what changed'), with scope nailed down (price, compare at price, stock per variant, new/removed products, plans, changelog). The 'only what changed since the last run with the same state_key' phrasing pins the tool's contract precisely. No siblings exist, but the definition is self-sufficiently specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operational context: what to pass as sites (domains or URLs, with examples), what state_key does across runs, and that unreadable sites come back free rather than failing. It does not state explicit exclusions or alternatives, but there are no siblings to route against, so the context is effectively complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedmonitor_competitor_changes

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    DTC competitor intelligence: catalog snapshots, price history, cross-brand product comparison, and drop/restock detection for 84 Shopify-powered brands. Pay-per-call via Apify.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.
    MIT