# B2B SaaS Pricing Page & Tier Matrix Extractor (`voxatools/b2b-saas-pricing-tracker`) Actor

Extract B2B SaaS pricing pages, plan tier matrices, monthly vs. annual billing discounts, usage quotas, enterprise SSO feature gates, and SHA-256 price change diffs — no login cookies or API keys required, $0.00 start fee, $1.80/1k records.

- **URL**: https://apify.com/voxatools/b2b-saas-pricing-tracker.md
- **Developed by:** [VoxaTools](https://apify.com/voxatools) (community)
- **Categories:** Lead generation, E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 base saas pricing tier records

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

## 🏆 B2B SaaS Pricing Page & Tier Matrix Extractor Pro

> **Stop burning $15,000–$40,000/year on enterprise competitive intelligence subscriptions or maintaining brittle headless browsers just to track competitor SaaS pricing tiers.**
> Bulk-extract live B2B SaaS pricing tiers (`tierName`, `monthlyPrice`, `annualPricePerMonth`, `annualDiscountPct`), **monetization model classifications (`billingModel`, `billingUnit`, `hasFreeTier`, `hasEnterpriseCustomTier`)**, **Monetization Transparency Scores (`pricingTransparencyScore` `0–100` & `tierGrade` `A/B/C/D`)**, **normalized feature-gate & quota matrices (`includeFeatureMatrix`)**, and **content-addressed SHA-256 pricing audit snapshots** — **lightweight zero-browser HTTP architecture**, **$0 proxy cost**, and **all-inclusive base pricing** (`$1.80 / 1,000 tiers`).

> ### ⚡ Start in 10 Seconds — Zero Setup, Zero Risk
>
> - **No API Keys, Login Cookies, or Residential Proxies Needed:** Works out of the box on public B2B SaaS pricing pages with zero configuration required.
> - **1-Click First Run (`~$0.012` from your Free Apify Credit):** Click the green **Start** button with the default preset (`github.com/pricing`, `linear.app/pricing`) — or paste your own competitor domains and pricing URLs — to generate your first **B2B SaaS Pricing Matrix & Sales Battlecard Report** in a single run.

***

### 🎯 What You Can Do With This Tool

Whether you are building sales battlecards for Enterprise Account Executives, benchmarking SaaS packaging for a pricing committee, or monitoring 50+ competitors for silent price hikes, you can tailor the output to your exact workflow:

| # | Team / Workflow | Common Challenge | How This Tool Solves It | Recommended Settings |
|---|---|---|---|---|
| 1 | **Product Marketing (PMM) & Competitive Intelligence Teams** | Checking 30+ competitor pricing pages manually in spreadsheets every month takes days and misses silent feature-gate removals or seat-minimum changes. | Extracts structured pricing tiers, monthly vs. annual toggle math (`annualDiscountPct`), `ctaText`, and **normalized feature & quota matrices (`featureGates`, `usageQuotas`, `enterpriseGateSignals`)** with ready-to-paste **AI Battlecard Prompts (`ai_analysis_prompt`)**. | `resultType: "tiers"`, `includeFeatureMatrix: true`, `generateBattlecardSummary: true` |
| 2 | **SaaS Founders, Pricing Committees & RevOps Leaders** | Hard to benchmark how competitors structure their monetization (`per_seat` vs `usage_based` vs `hybrid` vs `enterprise_custom`) and where the paywall sits between Pro and Enterprise. | Computes a deterministic **Monetization Transparency Score (`0–100`) & Grade (`A/B/C/D`)**, classifies `billingModel` and `billingUnit`, and rolls up vendor-level packaging metrics (`resultType: "vendors"`). | `resultType: "vendors"`, `companySummaryMode: true`, `includeFeatureMatrix: true` |
| 3 | **Venture Capital, Private Equity & M\&A Analysts** | Portfolio and target companies price across diverse billing models and currencies (`USD`, `EUR`, `GBP`, `CAD`, `AUD`), making cross-company price benchmarking tedious. | Filters or tags pricing tiers by `targetCurrency` and `billingModelFilter`, deduplicates canonical SaaS domains (`deduplicateTargets: true`), and isolates transparent self-serve leaders (`onlyTransparentPricing: true`). | `targetCurrency: "USD"`, `includeFeatureMatrix: true`, `deduplicateTargets: true` |
| 4 | **Scheduled Competitive Pricing & Packaging Radar** | Re-scraping unchanged competitor pricing pages every week wastes budget and floods Slack/CRM channels with duplicate rows. | Computes a canonical SHA-256 fingerprint (`sha256TierHash`) per tier and vendor, persists baseline state after dataset delivery, and **only outputs and bills for newly added or changed pricing tiers**. | `onlyChangedOrNew: true`, `monitorStoreName: "STATE-SAAS-PRICING-HISTORY"` |
| 5 | **Procurement, Legal & Governance Audit Teams** | Vendors frequently alter public plan limits, overage fees, or SSO/SCIM inclusions without notice, leaving buyers without historical proof during renewal negotiations. | Archives content-addressed HTML and JSON **SHA-256 Pricing Audit Snapshots (`SNAPSHOT_<DOMAIN>_<TIER>_<HASH>.html`)** into your Apify Key-Value Store (`snapshotArchiveUrl`). | `archivePricingSnapshot: true`, `includeFeatureMatrix: true` |

***

### ⚡ Why B2B Product Managers, RevOps & Competitive Intelligence Teams Switch To This Extractor

#### 1. Zero-Mock Live HTML, Hydration State & Semantic DOM Extraction

Every pricing tier and vendor record is extracted strictly from live upstream HTTP responses with **zero hardcoded vendor dictionaries, synthetic fallback tiers, or unverified price guessing**:

- **Multi-Layer Structural Parsing:** Fetches public SaaS pricing pages over lightweight HTTP with automatic path discovery (`/pricing`, `/plans`) when given a bare domain, then parses semantic pricing cards, billing toggles, and feature-gate lists in a single pass.
- **Strict Canonical Hostname Isolation:** Verifies that the final resolved pricing page belongs to the requested vendor domain (`verifyTargetDomainIdentity`) and never cross-contaminates competitor records when redirects occur. If a target site blocks automated requests (`HTTP 403/429/5xx` or WAF challenge), the target is isolated into `failedQueries` in `COMPETITOR_AD_SUMMARY.json` with **`$0.00` charged**.

#### 2. Automatic Monthly vs. Annual Toggle Math & Billing Model Classification

Most SaaS pricing pages display annual-billed monthly prices alongside month-to-month prices or annual discount percentages:

- **Complete Billing Cycle Math:** Automatically pairs `monthlyPrice` and `annualPricePerMonth` when both billing cycles are disclosed and computes `annualDiscountPct` alongside `hasFreeTier` and `hasEnterpriseCustomTier` (`Contact Sales` / custom quote detection). When a tier does not publicly disclose a monthly or annual price, it returns `null` rather than guessing.
- **Monetization Model Classifier (`billingModel`):** Automatically categorizes each tier into `per_seat` (`/user/month`), `flat_rate` (`/month`), `usage_based`, `hybrid`, `enterprise_custom` (`custom`), or `free` (`$0`).

#### 3. Deterministic Monetization Transparency Score (`0–100`) & Enterprise SSO Tax Detection

Instantly filter out opaque "Contact Us" brochureware or pinpoint product-led growth (PLG) leaders:

- **Transparency Score (`0–100`) & Grade (`A/B/C/D`):** Scores every pricing tier based on public numeric pricing availability (`+35`), explicit monthly vs. annual billing transparency (`+25`), self-serve free tier availability (`+20`), and public feature/quota disclosure (`+20`), assigning a clear **`winnerTier`** badge (`🏆 TRANSPARENT_VALUE_LEADER`, `✅ STANDARD_SAAS_TIER`, or `⚠️ OPAQUE_ENTERPRISE_GATED`).
- **Enterprise Gate & "SSO Tax" Detector (`enterpriseGateSignals`):** Flags whether `ssoSamlGated`, `scimProvisioningGated`, `auditLogsGated`, `soc2HipaaGated`, `customRoleRbacGated`, and `contactSalesOnly` are present on each tier.

#### 4. Deep Feature Matrix Extraction, SHA-256 Audit Snapshots & Stateful Delta Radar

- **Deep Feature Matrix & Usage Quotas (`includeFeatureMatrix: true`):** Extracts `featureGates` arrays and quantitative `usageQuotas` (`2,000 CI/CD minutes/month`, `500MB storage`, `100 tasks/month`, etc.). Billed **only** when non-empty feature gates or usage quotas are verified on the live page (`detailVerified: true`).
- **Content-Addressed SHA-256 Pricing Snapshots (`archivePricingSnapshot: true`):** Archives self-contained `SNAPSHOT_<DOMAIN>_<TIER>_<HASH>.html` audit certificates to your Apify Key-Value Store (`snapshotArchiveUrl`) for renewal negotiations and historical audits.
- **Stateful Price-Change & Packaging Delta Radar (`onlyChangedOrNew: true`):** Compares each tier's SHA-256 fingerprint (`sha256TierHash`) against your persistent Key-Value Store (`monitorStoreName`) and **persists updated baselines strictly after `Actor.pushData` completes** so interrupted runs never lose change alerts.

***

### 📊 Feature & Total Cost Comparison

| # | Capability | Basic Generic Web Scrapers | Enterprise CI SaaS Platforms | 🏆 **VoxaTools B2B SaaS Pricing Extractor Pro** |
|---|---|---|---|---|
| 1 | **Effective Cost for 1,000 Pricing Tiers** | `$4.00 – $90.00 / 1k` + Start Fees | `$15,000 – $40,000 / year` contract | **`$1.80 / 1,000 Tiers` (`$0.0018 / tier` Base Tier)** |
| 2 | **Zero-Browser Direct HTML & DOM Parsing** | ❌ Slow Headless Chrome (`15–30s/page`) | ⚠️ Manual analyst curation delay | ✅ **Lightweight HTTP + Semantic Parser (`$0` Proxy)** |
| 3 | **Monthly vs. Annual Toggle & Discount Math** | ❌ Scrapes only raw text strings | ✅ Included | ✅ **Included Free (`monthlyPrice`, `annualDiscountPct`)** |
| 4 | **Monetization Model & Transparency Score (`0–100`)** | ❌ None | ⚠️ Manual tagging | ✅ **Included Free (`billingModel`, `pricingTransparencyScore`)** |
| 5 | **Normalized Feature-Gate & Quota Matrix** | ❌ Raw unparsed HTML dumps | ✅ Included | ✅ **Supported (`includeFeatureMatrix`, `+$1.40 / 1k`)** |
| 6 | **Enterprise SSO / SCIM / Audit Gate Signals** | ❌ None | ⚠️ Manual analyst notes | ✅ **Included (`enterpriseGateSignals`)** |
| 7 | **Vendor-Level Packaging Rollup Mode** | ❌ None | ✅ Included | ✅ **Supported (`resultType: "vendors"`, `$3.20 / 1k`)** |
| 8 | **Duplicate URL & Canonical Tier Deduplication** | ❌ Bills for every duplicate URL | ⚠️ Limited | ✅ **Auto-Deduplicates (`campaignScaleCount`)** |
| 9 | **Content-Addressed SHA-256 Pricing Snapshots** | ❌ None | ⚠️ Screenshot only | ✅ **Supported (`archivePricingSnapshot`, `+$0.90 / 1k`)** |
| 10 | **Scheduled Price-Change Delta Monitor** | ❌ Re-bills all rows every run | ✅ Included | ✅ **Supported (`onlyChangedOrNew: true`)** |

***

### 🚀 Key Operating Modes & Workflows

#### Mode 1 — 📊 Bulk SaaS Pricing Tier Extraction (`resultType: "tiers"`)

Pass an array of SaaS pricing URLs or bare company domains in `targets`. Each tier is emitted as a normalized row containing `vendorName`, `vendorDomain`, `pricingPageUrl`, `tierName`, `tierOrder`, `monthlyPrice`, `annualPricePerMonth`, `annualDiscountPct`, `currency`, `billingUnit`, `billingModel`, `hasFreeTier`, `hasEnterpriseCustomTier`, `pricingTransparencyScore`, `tierGrade`, `winnerTier`, `sha256TierHash`, `battlecardSummary`, and `ai_analysis_prompt`.

#### Mode 2 — 🔐 Deep Feature-Gate Matrix & Usage Quota Extraction (`includeFeatureMatrix: true`)

Enable `includeFeatureMatrix: true` (`+$1.40 / 1,000`, billed **only** when `detailVerified: true`) to extract each plan's `featureGates`, quantitative `usageQuotas` (seats, storage, CI/CD minutes, API tasks), and enterprise compliance gates (`enterpriseGateSignals`).

#### Mode 3 — 🏢 Consolidated Vendor Monetization Rollup (`resultType: "vendors"` or `companySummaryMode: true`)

Set `resultType: "vendors"` (or `companySummaryMode: true`, `$3.20 / 1,000 vendors`) to consolidate all pricing tiers for a SaaS company into **one executive vendor monetization battlecard** summarizing all plan names, entry paid price, maximum annual discount, SSO gating, and overall transparency score.

#### Mode 4 — 🛡️ Content-Addressed Cloud SHA-256 Pricing Snapshot Archiving (`archivePricingSnapshot: true`)

Enable `archivePricingSnapshot: true` (`+$0.90 / 1,000 snapshots`) to store self-contained `SNAPSHOT_<DOMAIN>_<TIER>_<HASH>.html` audit certificates in your Apify Key-Value Store (`snapshotArchiveUrl`) for procurement renewals or competitive archives.

#### Mode 5 — 🔄 Scheduled Price-Change & Packaging Delta Radar (`onlyChangedOrNew: true`)

Run weekly or daily competitive pricing checks without paying to re-export unchanged plans. With `onlyChangedOrNew: true`, the Actor compares each tier's SHA-256 fingerprint (`sha256TierHash`) against `monitorStoreName`, outputs only newly added or modified pricing tiers (`pricingDiffSummary`), and **persists updated state strictly after dataset delivery**.

***

### 📖 Quick-Start Guide & Copy-Paste Input Examples (Paste Into "Input → JSON")

To start a run, open the **Input** tab on Apify Console, switch from **Form** to **JSON**, and copy-paste any of the 5 ready-to-run configurations below:

#### Input Example 1 — Bulk SaaS Pricing Tier Extraction With Deep Feature-Gate Matrix

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing",
    "https://slack.com/pricing",
    "https://zapier.com/pricing"
  ],
  "resultType": "tiers",
  "includeFeatureMatrix": true,
  "deduplicateTargets": true,
  "targetCurrency": "AUTO",
  "generateBattlecardSummary": true,
  "maxResults": 50
}
```

#### Input Example 2 — Consolidated Vendor Monetization Rollup & Battlecard Benchmarking (`resultType: "vendors"`)

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing",
    "https://calendly.com/pricing",
    "https://asana.com/pricing"
  ],
  "resultType": "vendors",
  "companySummaryMode": true,
  "includeFeatureMatrix": true,
  "targetCurrency": "AUTO",
  "maxResults": 50
}
```

#### Input Example 3 — Scheduled Competitive Pricing Change Radar (`onlyChangedOrNew: true`)

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing",
    "https://slack.com/pricing"
  ],
  "resultType": "tiers",
  "includeFeatureMatrix": true,
  "onlyChangedOrNew": true,
  "monitorStoreName": "STATE-SAAS-PRICING-HISTORY",
  "maxResults": 50
}
```

#### Input Example 4 — Filter for Transparent Self-Serve Pricing Leaders (`onlyTransparentPricing: true`)

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing",
    "https://calendly.com/pricing"
  ],
  "resultType": "tiers",
  "targetCurrency": "USD",
  "billingModelFilter": "ALL",
  "onlyTransparentPricing": true,
  "minTransparencyScore": 70,
  "maxResults": 50
}
```

#### Input Example 5 — Archive Permanent SHA-256 Pricing Audit Snapshots With Spending Guardrail

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing"
  ],
  "resultType": "tiers",
  "includeFeatureMatrix": true,
  "archivePricingSnapshot": true,
  "generateBattlecardSummary": true,
  "maxResults": 25,
  "maxTotalChargeUsd": 5.0
}
```

***

### 🛠️ Input Parameters Reference

Below is the complete reference for all 17 configuration options available in the Input tab:

| # | Parameter | Type & Default | Description |
|---|---|---|---|
| 1 | `targets` | `array` (`["https://github.com/pricing", ...]`) | List of B2B SaaS pricing page URLs (e.g., `https://linear.app/pricing`) or bare company domains (e.g., `slack.com`, `notion.so`). Bare domains automatically resolve `/pricing` or `/plans`. |
| 2 | `resultType` | `string` (`"tiers"`) | Choose `"tiers"` for individual SaaS pricing tier records (`$1.80/1k`), or `"vendors"` for consolidated vendor monetization rollup profiles (`$3.20/1k`). |
| 3 | `companySummaryMode` | `boolean` (`false`) | Shortcut flag that activates `resultType: "vendors"` to output 1 consolidated monetization battlecard row per SaaS company (`$3.20/1k vendors`). |
| 4 | `includeFeatureMatrix` | `boolean` (`false`) | Optional add-on (`+$1.40/1k`, billed only when `detailVerified: true`): Extracts `featureGates`, quantitative `usageQuotas`, and `enterpriseGateSignals`. |
| 5 | `onlyChangedOrNew` | `boolean` (`false`) | Stateful monitoring mode: compares each tier's `sha256TierHash` against `monitorStoreName` and outputs only newly added or modified pricing tiers. |
| 6 | `monitorStoreName` | `string` (`"STATE-SAAS-PRICING-HISTORY"`) | Named Apify Key-Value Store used to persist SHA-256 pricing fingerprints across scheduled runs when `onlyChangedOrNew: true`. |
| 7 | `deduplicateTargets` | `boolean` (`true`) | Merges duplicate URLs and bare domains pointing to the same SaaS vendor into canonical records with `cloneCount`, `campaignScaleCount`, and `clonedCreativeIds`. |
| 8 | `targetCurrency` | `string` (`"AUTO"`) | Currency filter/preference (`"AUTO"`, `"USD"`, `"EUR"`, `"GBP"`, `"CAD"`, `"AUD"`). Defaults to `"AUTO"` to preserve native pricing page currency. |
| 9 | `billingModelFilter` | `string` (`"ALL"`) | Filter output records by detected monetization model (`"ALL"`, `"per_seat"`, `"flat_rate"`, `"usage_based"`, `"hybrid"`, `"enterprise_custom"`, `"free"`). |
| 10 | `onlyTransparentPricing` | `boolean` (`false`) | Excludes opaque `"Contact Sales"` custom tiers where both `monthlyPrice` and `annualPricePerMonth` are hidden. |
| 11 | `minTransparencyScore` | `integer` (`0`) | Minimum Monetization Transparency Score (`0` to `100`) required to emit a record. |
| 12 | `archivePricingSnapshot` | `boolean` (`false`) | Optional add-on (`+$0.90/1k snapshots`): Archives content-addressed HTML & JSON SHA-256 pricing audit snapshots (`SNAPSHOT_<DOMAIN>_<TIER>_<HASH>.html`) into your Apify Key-Value Store (`snapshotArchiveUrl`). |
| 13 | `generateBattlecardSummary` | `boolean` (`true`) | Generates `OUTPUT_SUMMARY` and `COMPETITOR_AD_SUMMARY.json` in the default Key-Value Store with mathematical averages across extracted vendors. |
| 14 | `customTierSelector` | `string` (`""`) | Optional CSS selector hint for bespoke single-page pricing tables when targeting non-standard layouts. |
| 15 | `maxResults` | `integer` (`50`) | Maximum number of records (pricing tiers or vendor rollups) to output (`1` to `5000`). Strictly enforced. |
| 16 | `maxTotalChargeUsd` | `number` (`10.0`) | Hard spending ceiling in USD for the run. The Actor monitors cumulative PPE charges in real time and stops cleanly before exceeding your cap. |
| 17 | `proxyConfiguration` | `object` (`{"useApifyProxy": false}`) | Optional proxy settings. Defaults to direct zero-proxy HTTP fetching (`$0` proxy cost); supports Apify Proxy fallback if needed. |

***

### 📦 Sample Dataset Output

#### A. Individual SaaS Pricing Tier & Feature Matrix Record (`resultType: "tiers"`)

```json
{
  "id": "calendly.com#teams",
  "resultType": "tiers",
  "vendorDomain": "calendly.com",
  "canonicalVendorKey": "calendly.com",
  "vendorName": "Calendly",
  "pricingPageUrl": "https://calendly.com/pricing",
  "sourceUrl": "https://calendly.com/pricing",
  "requestIdentifier": "SAAS-REQ-CALENDLY-8F4A2C19B0",
  "tierName": "Teams",
  "tierOrder": 3,
  "monthlyPrice": 20,
  "annualPricePerMonth": 16,
  "annualDiscountPct": 20,
  "currency": "USD",
  "billingUnit": "/user/month",
  "billingModel": "per_seat",
  "hasFreeTier": true,
  "hasEnterpriseCustomTier": true,
  "ctaText": "Start Free Trial",
  "featureGates": [
    "Everything in Standard, plus:",
    "Round-robin & collective event routing",
    "Salesforce, HubSpot & Marketo routing integrations",
    "Admin management & centralized billing"
  ],
  "usageQuotas": [
    "Unlimited event types",
    "Automated workflows & reminders"
  ],
  "enterpriseGateSignals": {
    "ssoSamlGated": true,
    "scimProvisioningGated": false,
    "auditLogsGated": false,
    "soc2HipaaGated": false,
    "customRoleRbacGated": true,
    "contactSalesOnly": false
  },
  "detailVerified": true,
  "pricingTransparencyScore": 100,
  "tierGrade": "A",
  "winnerTier": "🏆 TRANSPARENT_VALUE_LEADER",
  "isLongRunningWinner": true,
  "sha256TierHash": "8f4a2c19b0e74d33a80c5e2194f02d8a6c11e5f702b3d84a91e6c3f08a2b4d11",
  "pricingDiffSummary": {
    "changeType": "BASELINE_VERIFIED",
    "previousMonthlyPrice": null,
    "previousAnnualPricePerMonth": null,
    "priceDeltaUsd": 0,
    "previousSha256TierHash": null
  },
  "cloneCount": 1,
  "campaignScaleCount": 1,
  "clonedCreativeIds": [
    "https://calendly.com/pricing"
  ],
  "snapshotArchiveUrl": "https://api.apify.com/v2/key-value-stores/default/records/SNAPSHOT_calendly.com_teams_8f4a2c19b0e7.html",
  "battlecardSummary": "Calendly — Teams Tier: $20/mo ($16/mo billed annually, save 20%) (per_seat, Transparency Score: 100/100 [Grade A], SSO/SAML Gated).",
  "ai_analysis_prompt": "Act as a Chief B2B SaaS Pricing Strategist & Competitive Intelligence PMM. Analyze this live pricing tier for \"Calendly\" (calendly.com, Source: https://calendly.com/pricing): Tier=\"Teams\", Pricing=\"$20/mo ($16/mo billed annually, save 20%)\"...",
  "scrapedAt": "2026-11-02T14:20:11.402Z"
}
```

#### B. Consolidated Vendor Monetization Rollup Record (`resultType: "vendors"`)

```json
{
  "id": "calendly.com#vendor-profile",
  "resultType": "vendors",
  "vendorDomain": "calendly.com",
  "canonicalVendorKey": "calendly.com",
  "vendorName": "Calendly",
  "pricingPageUrl": "https://calendly.com/pricing",
  "sourceUrl": "https://calendly.com/pricing",
  "requestIdentifier": "SAAS-VENDOR-CALENDLY-9C21D4803A",
  "tierName": "All 4 Tiers (Free, Standard, Teams, Enterprise)",
  "tierOrder": 1,
  "monthlyPrice": 12,
  "annualPricePerMonth": 10,
  "annualDiscountPct": 20,
  "currency": "USD",
  "billingUnit": "/user/month",
  "billingModel": "per_seat",
  "hasFreeTier": true,
  "hasEnterpriseCustomTier": true,
  "ctaText": "Start Free Trial",
  "featureGates": [
    "Unlimited event types",
    "Round-robin & collective event routing",
    "SAML single sign-on (SSO) & SCIM provisioning"
  ],
  "usageQuotas": [
    "Unlimited 1:1 & team scheduling events"
  ],
  "enterpriseGateSignals": {
    "ssoSamlGated": true,
    "scimProvisioningGated": true,
    "auditLogsGated": true,
    "soc2HipaaGated": true,
    "customRoleRbacGated": true,
    "contactSalesOnly": true
  },
  "detailVerified": true,
  "pricingTransparencyScore": 85,
  "tierGrade": "A",
  "winnerTier": "🏆 TRANSPARENT_VALUE_LEADER",
  "isLongRunningWinner": true,
  "sha256TierHash": "9c21d4803a77e129b504f8123c69a0148d72e3019b45c6120f83a9147e20c531",
  "pricingDiffSummary": {
    "changeType": "BASELINE_VERIFIED",
    "previousMonthlyPrice": null,
    "previousAnnualPricePerMonth": null,
    "priceDeltaUsd": 0,
    "previousSha256TierHash": null
  },
  "cloneCount": 1,
  "campaignScaleCount": 1,
  "clonedCreativeIds": [
    "https://calendly.com/pricing"
  ],
  "snapshotArchiveUrl": null,
  "battlecardSummary": "Calendly (calendly.com) — 4 Plans [Free, Standard, Teams, Enterprise]. Entry Paid Price: $12/mo, Max Annual Discount: 20%, SSO Gated: Yes, Transparency Score: 85/100 (Grade A).",
  "ai_analysis_prompt": "Act as a VP of Revenue Operations & Competitive Intelligence Lead. Review this consolidated SaaS vendor monetization battlecard for \"Calendly\" (calendly.com)...",
  "scrapedAt": "2026-11-02T14:21:05.118Z"
}
```

***

### 💰 Simple, Transparent Modular Pricing

Every Apify account includes **$5.00 in free monthly usage credit** — enough to extract **~2,777 B2B SaaS pricing tiers (with monthly/annual toggle math, monetization model classification, 0–100 Transparency Scores, and AI Battlecard Prompts)** every month at zero cost.

| # | Event Name | Price | What Is Included |
|---|---|---|---|
| 1 | **`Base SaaS Pricing Tier Record` (`apify-default-dataset-item`)** | **`$0.0018 / tier` (`$1.80 / 1,000 tiers`)** | **All-Inclusive Base Tier:** Live SaaS pricing tier extraction + Monthly & Annual price pairing + Annual discount `%` math + Monetization model (`per_seat`, `flat_rate`, `usage_based`, `hybrid`, `enterprise_custom`, `free`) + Transparency Score (`0–100`) & Grade (`A/B/C/D`) + SHA-256 fingerprint + AI Battlecard Prompt (`$0` Actor Start fee, `$0` Proxy cost). |
| 2 | **`Consolidated Vendor Monetization & Battlecard Profile` (`advertiser`)** | **`$0.0032 / vendor` (`$3.20 / 1,000 vendors`)** | Triggered only when `resultType: "vendors"` or `companySummaryMode: true`: 1 consolidated Vendor Monetization & Packaging Rollup row per SaaS company (`$0.0018` dataset item + `$0.0014` vendor rollup delta). |
| 3 | **`Deep Feature-Gate Matrix & Enterprise Tax Breakdown` (`detail`)** | **`+$0.0014 / tier` (`+$1.40 / 1,000 tiers`)** | Triggered only when you enable `includeFeatureMatrix: true` AND verified feature-gate or usage-quota rows are extracted (`detailVerified: true`): Adds `featureGates`, quantitative `usageQuotas`, and `enterpriseGateSignals`. |
| 4 | **`Permanent SHA-256 Pricing Snapshot & HTML Battlecard Archive` (`asset`)** | **`+$0.0009 / snapshot` (`+$0.90 / 1,000 snapshots`)** | Triggered only when you enable `archivePricingSnapshot: true` and content-addressed HTML/JSON SHA-256 pricing audit certificates (`SNAPSHOT_<DOMAIN>_<TIER>_<HASH>.html`) are archived to your Apify Key-Value Store (`snapshotArchiveUrl`). |

***

### ❓ Frequently Asked Questions & Release Notes

#### How does the extractor handle SaaS pages that toggle between Monthly and Annual billing?

Modern SaaS pricing pages embed both monthly and annual billing numbers inside their pricing cards or billing toggle markup. Our parser extracts both billing cycles in a single HTTP request, pairs `monthlyPrice` with `annualPricePerMonth`, and calculates `annualDiscountPct` without requiring browser automation.

#### What happens if a competitor hides their pricing behind "Contact Sales" (`hasEnterpriseCustomTier: true`)?

When a tier does not publish a numeric price (e.g., Enterprise `"Contact Sales"` or `"Custom"`), the Actor sets `billingModel: "enterprise_custom"` and `monthlyPrice: null` (never guessing or interpolating prices), while still extracting all public feature-gate bullets, enterprise security signals (`ssoSamlGated`, `scimProvisioningGated`, `auditLogsGated`, `soc2HipaaGated`), and CTA text. You can exclude non-numeric tiers anytime by setting `onlyTransparentPricing: true`.

#### What happens if a target website is unreachable or blocks automated requests?

If a target domain is offline or returns `HTTP 403/429/5xx`, the engine automatically retries with backoff and isolates any unreachable target into `failedQueries` in `COMPETITOR_AD_SUMMARY.json` with **$0.00 charged for incomplete items**.

#### Can I preview a few SaaS pricing pages for free before running a bulk competitive audit?

Yes — you can test up to 3 SaaS pricing URLs interactively on our free web utility at **[VoxaTools — B2B SaaS Pricing Matrix Extractor](https://voxatools.com/tools/b2b-saas-pricing-matrix-extractor)**.

#### Recent Updates (`v1.0`)

- **Multi-Layer Zero-Browser Pricing Parser:** Combines semantic HTML pricing card extraction, monthly/annual discount math, and canonical hostname verification (`verifyTargetDomainIdentity`).
- **Monetization Transparency Score (`0–100`) & Enterprise Gate Detector:** Scores every tier's pricing transparency across 4 dimensions (`tierGrade` `A/B/C/D`) and flags `enterpriseGateSignals`.
- **Stateful SHA-256 Pricing Delta Radar (`onlyChangedOrNew`) & Audit Snapshots (`archivePricingSnapshot`):** Persists tier and vendor SHA-256 fingerprints strictly after dataset delivery and archives content-addressed HTML/JSON pricing certificates.

# Actor input Schema

## `targets` (type: `array`):

List of B2B SaaS pricing page URLs (e.g., 'https://github.com/pricing', 'https://linear.app/pricing') or bare company domains (e.g., 'slack.com', 'notion.so', 'zapier.com'). Automatically discovers canonical '/pricing' or '/plans' paths when bare domains are supplied.

## `resultType` (type: `string`):

Select 'tiers' (default — $1.80/1k records) to output one structured row per SaaS pricing tier (Free, Pro, Team, Enterprise). Select 'vendors' ($3.20/1k companies) to aggregate all tiers of each SaaS vendor into a single executive competitive battlecard row.

## `companySummaryMode` (type: `boolean`):

When enabled (true), consolidates all extracted pricing tiers for each SaaS company into a unified Vendor Monetization & Sales Battlecard profile ($3.20/1k vendors all-inclusive), summarizing entry seat price, annual discount spread, and Enterprise SSO gating.

## `includeFeatureMatrix` (type: `boolean`):

Note: Plan names, monthly/annual prices, annual discount %, billing unit, and Monetization Transparency Score (0-100) are ALREADY included in the base $1.80/1k price! Enable 'includeFeatureMatrix' when you also need detailed featureGates arrays, usageQuotas limits, and granular Enterprise SSO/SCIM/Audit-Log gate signals (charged ONLY on records where non-empty feature gates or quotas are verified).

## `onlyChangedOrNew` (type: `boolean`):

When enabled on scheduled daily or weekly runs, compares live canonical SHA-256 tier fingerprints against your persistent Key-Value Store history and ONLY outputs and bills for newly added tiers or tiers where price, discount, or feature gates changed ($0.00 cost when 0 tiers changed).

## `monitorStoreName` (type: `string`):

Name of the persistent Apify Key-Value Store used by 'onlyChangedOrNew' to store and compare SHA-256 tier hashes across scheduled runs (defaults to 'STATE-SAAS-PRICING-HISTORY').

## `deduplicateTargets` (type: `boolean`):

When enabled (default true), normalizes and merges duplicate target URLs or bare domains pointing to the same SaaS vendor (e.g., 'github.com' and 'https://github.com/pricing') before fetching, tracking 'cloneCount' and 'campaignScaleCount' so you never pay twice for duplicate targets.

## `targetCurrency` (type: `string`):

Select 'AUTO' (default) to preserve the native currency disclosed on each SaaS pricing page (USD, EUR, GBP, etc.), or select a specific ISO currency code ('USD', 'EUR', 'GBP', 'CAD', 'AUD') to filter or tag matching currency records.

## `billingModelFilter` (type: `string`):

Filter extracted SaaS pricing tiers by their monetization billing model: 'ALL' (default), 'per_seat' (/user/month), 'flat_rate' (/month base), 'usage_based' (pay-as-you-go / credits), 'hybrid' (base + usage), 'enterprise_custom' (Contact Sales), or 'free' ($0 free tier).

## `onlyTransparentPricing` (type: `boolean`):

When enabled, filters out opaque 'Contact Sales' / unlisted custom tiers where both monthlyPrice and annualPricePerMonth are hidden, returning only tiers with transparent self-serve pricing.

## `minTransparencyScore` (type: `integer`):

Filter results to only include SaaS pricing tiers or vendors achieving at least this Monetization Transparency & Value Score (0-100). Set to 75 to isolate Grade-A transparent pricing leaders.

## `archivePricingSnapshot` (type: `boolean`):

When enabled, saves a self-contained, tamper-evident HTML & JSON pricing battlecard snapshot with UTC timestamp and SHA-256 cryptographic digest into your Apify Key-Value Store ('snapshotArchiveUrl').

## `generateBattlecardSummary` (type: `boolean`):

When enabled (default true), computes true mathematical averages across all extracted SaaS vendors (average entry price, average annual discount %, free-tier ratio, Enterprise SSO tax rate) and saves 'OUTPUT_SUMMARY' and 'COMPETITOR_AD_SUMMARY.json' to the Key-Value Store.

## `customTierSelector` (type: `string`):

Optional CSS selector hint (e.g., '.pricing-card, \[data-testid="plan-card"]') for bespoke or non-standard SaaS pricing pages. Leave empty ("") to use automatic SSR JSON & semantic DOM tier detection.

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

Maximum number of SaaS pricing tier records (or consolidated vendor profiles) to output in this run (1 to 5,000 records).

## `maxTotalChargeUsd` (type: `number`):

Hard spending ceiling in USD for this Actor run (defaults to $10.00). The Actor monitors cumulative PPE charges in real time and stops gracefully before exceeding your budget cap.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy settings. Public SaaS pricing pages work via direct zero-browser HTTP with $0.00 proxy cost by default; enable Apify Proxy only if targeting WAF-throttled domains at high concurrency.

## Actor input object example

```json
{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing"
  ],
  "resultType": "tiers",
  "companySummaryMode": false,
  "includeFeatureMatrix": false,
  "onlyChangedOrNew": false,
  "monitorStoreName": "STATE-SAAS-PRICING-HISTORY",
  "deduplicateTargets": true,
  "targetCurrency": "AUTO",
  "billingModelFilter": "ALL",
  "onlyTransparentPricing": false,
  "minTransparencyScore": 0,
  "archivePricingSnapshot": false,
  "generateBattlecardSummary": true,
  "customTierSelector": "",
  "maxResults": 50,
  "maxTotalChargeUsd": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `pricingTiersDataset` (type: `string`):

Structured dataset of B2B SaaS pricing tiers and consolidated vendor profiles including monthlyPrice, annualPricePerMonth, annualDiscountPct, currency, billingUnit, billingModel, featureGates, usageQuotas, enterpriseGateSignals, pricingTransparencyScore (0-100), tierGrade (A/B/C/D), sha256TierHash, and snapshotArchiveUrl.

## `battlecardBenchmarkSummary` (type: `string`):

Executive RevOps & PMM benchmark summary aggregating average entry seat price, average annual discount percentage, free-tier availability rate, Enterprise SSO gating index, upstream health diagnostics, and 1-click AI strategy prompts.

# 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 = {
    "targets": [
        "https://github.com/pricing",
        "https://linear.app/pricing"
    ],
    "monitorStoreName": "STATE-SAAS-PRICING-HISTORY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("voxatools/b2b-saas-pricing-tracker").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 = {
    "targets": [
        "https://github.com/pricing",
        "https://linear.app/pricing",
    ],
    "monitorStoreName": "STATE-SAAS-PRICING-HISTORY",
}

# Run the Actor and wait for it to finish
run = client.actor("voxatools/b2b-saas-pricing-tracker").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 '{
  "targets": [
    "https://github.com/pricing",
    "https://linear.app/pricing"
  ],
  "monitorStoreName": "STATE-SAAS-PRICING-HISTORY"
}' |
apify call voxatools/b2b-saas-pricing-tracker --silent --output-dataset

```

## MCP server setup

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

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/mUNLEUzbRYAGTUwQq/builds/8TTVg74l3io4B0h2M/openapi.json
