# SaaS Pricing Monitor: Competitor Plan Changes (`getascraper/saas-pricing-change-monitor`) Actor

Monitor parseable public SaaS pricing pages for plan, price, billing-period, and feature-package changes. Preserve source evidence and before-and-after values for review. Unsupported or incomplete pages produce status records instead of guessed data.

- **URL**: https://apify.com/getascraper/saas-pricing-change-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.31 / 1,000 pricing changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 💳 SaaS Pricing Monitor: Competitor Plan Changes

<table width="100%" style="display:table;width:100%;border-collapse:collapse">
<tr>
<td style="padding:24px 28px;background:#FAF5FF;border:1px solid #DDD6FE;border-top:4px solid #7E22CE;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#581C87;line-height:1.3">Keep a source-backed record of parseable SaaS plan changes.</span><br>
<span style="font-size:15px;color:#334155;line-height:1.6">Monitor supported public plan-card contexts for plan, price, billing-period, and feature-list evidence. Review the captured source details before making a decision.</span>
</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD6FE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#6B21A8">💳 Plan-card parsing</span><br>
<span style="font-size:12px;color:#334155">Capture complete plans from supported card contexts.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD6FE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#6B21A8">🧾 Price evidence</span><br>
<span style="font-size:12px;color:#334155">Keep the published price and currency text.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD6FE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#6B21A8">🧩 Feature lists</span><br>
<span style="font-size:12px;color:#334155">Preserve the plan features shown beside the price.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #DDD6FE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#6B21A8">🔄 Safe comparisons</span><br>
<span style="font-size:12px;color:#334155">Advance saved state only after complete parsing.</span>
</td>
</tr>
</table>

Monitor parseable public SaaS pricing-plan changes. Preserve plan, price, billing-period, and feature evidence so a product or competitive-intelligence team can review a real source change.

### 🎯 What it does

The Actor checks public pricing pages and their robots rules. It returns parseable pricing-plan snapshots or safe additions, changes, and removals after every selected page fetches and parses completely.

### 👥 Who it is for

- Product marketers maintaining competitor battlecards.
- Pricing and monetization teams reviewing public plan changes.
- Competitive-intelligence analysts building a source-backed pricing archive.

### ⚙️ How it works

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed">
<tr>
<td style="padding:16px 14px;width:33%;background:#FAF5FF;border:1px solid #DDD6FE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7E22CE;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#581C87">Add pricing pages</span><br>
<span style="font-size:12px;color:#334155">Provide public SaaS pricing-page URLs.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FAF5FF;border:1px solid #DDD6FE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7E22CE;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#581C87">Choose an output mode</span><br>
<span style="font-size:12px;color:#334155">Request current plans or safe plan events.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FAF5FF;border:1px solid #DDD6FE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7E22CE;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#581C87">Review the plan evidence</span><br>
<span style="font-size:12px;color:#334155">Confirm changes against the captured price and features.</span>
</td>
</tr>
</table>

### 🧾 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Public pricing page URLs | Array | No | One to fifteen public HTTP(S) pricing pages. Robots rules are checked first. |
| Output mode | Choice | No | `full` returns parseable plan snapshots. `changesOnly` returns safe plan events. |
| Maximum pages this run | Number | No | Limits selected pages. A capped run does not update saved state. |

### 📊 Output

| Field | Type | Description |
| --- | --- | --- |
| changeType | String | `SNAPSHOT`, `NEW`, `ADDED`, `CHANGED`, or `REMOVED`. |
| planName | String | Parseable public plan name. |
| priceEvidence | String | Published price text found in the plan context. |
| currencyEvidence | String | Currency evidence when available. |
| billingPeriodEvidence | String | Published billing-period text when available. |
| featureEvidence | Array | Published feature-list evidence for the plan. |
| pageUrl | URL | Inspected pricing page URL. |

### 💡 Good to know

- A plan is emitted only when the page has a non-generic plan heading, exactly one price, and feature-list evidence in a supported plan-card context.
- The Actor does not promise to parse every pricing-page design.
- Unparsed, blocked, failed, or capped pages do not create semantic change events or advance saved state.

### 💰 Pricing

This Actor uses pay per result. Empty runs do not create result charges. Start with one public pricing page and inspect the captured evidence.

### ⭐ Enjoying SaaS Pricing Monitor?

<table width="100%" style="display:table;width:100%;border-collapse:collapse">
<tr>
<td style="padding:20px 24px 14px;background:#FAF5FF;border:1px solid #DDD6FE;border-left:5px solid #7E22CE;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px;color:#B45309">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#581C87">Did the captured plan evidence speed up a pricing review?</span><br>
<span style="font-size:14px;color:#334155">A 5-star rating takes 10 seconds and helps pricing and product teams find this monitor. Your feedback guides future improvements.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#7E22CE;border:1px solid #DDD6FE;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/saas-pricing-change-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Does it detect every change on a pricing page?** No. It monitors supported, parseable plan, price, billing-period, and feature evidence.

**Does it extract trials or sales CTAs?** No. Those are not part of the current parser contract.

**Why did a page produce a status row?** The page may be blocked, unsupported, incomplete, or unparseable.

**Can I schedule it?** Yes. Use the same page list in changes-only mode after a complete baseline.

### 🔗 Other actors

- [Website Technology Change Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/website-technology-change-monitor)
- [Website Action Stack Detector](https://github.com/Devansh-365/actorstack/tree/main/actors/website-action-stack-detector)
- [Shopify Store Product Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/shopify-store-product-monitor)
- [WooCommerce Store Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/woocommerce-store-monitor)

# Actor input Schema

## `pricingPageUrls` (type: `array`):

Public HTTP(S) pricing-page URLs to parse conservatively. The Actor checks published robots rules first.

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

Changes only emits safe plan events after every page parses completely. Full emits the current parseable plan snapshot.

## `maxPages` (type: `integer`):

A run with more selected pages than this bound is capped and does not advance state.

## Actor input object example

```json
{
  "pricingPageUrls": [
    {
      "url": "https://calendly.com/pricing"
    }
  ],
  "mode": "full",
  "maxPages": 5
}
```

# Actor output Schema

## `pricingEvents` (type: `string`):

No description

## `runSummary` (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 = {
    "pricingPageUrls": [
        {
            "url": "https://calendly.com/pricing"
        }
    ],
    "mode": "full",
    "maxPages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/saas-pricing-change-monitor").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 = {
    "pricingPageUrls": [{ "url": "https://calendly.com/pricing" }],
    "mode": "full",
    "maxPages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/saas-pricing-change-monitor").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 '{
  "pricingPageUrls": [
    {
      "url": "https://calendly.com/pricing"
    }
  ],
  "mode": "full",
  "maxPages": 5
}' |
apify call getascraper/saas-pricing-change-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/saas-pricing-change-monitor"
        }
    }
}

```

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/YK8iubG2OWqO2hkQx/builds/wFGdSqYNcrS6HSyjF/openapi.json
