# SaaS Pricing & Plans Scraper (`techionik9993/saas-pricing-plans-scraper`) Actor

Extract SaaS pricing plans, monthly prices, currencies, billing periods, free trial signals, contact-sales links, and pricing page URLs from SaaS websites. Built for competitive intelligence, SaaS research, pricing analysis, and market monitoring.

- **URL**: https://apify.com/techionik9993/saas-pricing-plans-scraper.md
- **Developed by:** [Techionik](https://apify.com/techionik9993) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.12 / per success result

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 & Plans Scraper

Extract clean SaaS pricing data from public pricing pages and SaaS websites. This actor is designed for competitive intelligence, market research, SaaS pricing analysis, product benchmarking, and sales/lead research.

### What this actor does

SaaS Pricing & Plans Scraper collects structured pricing information from SaaS websites, including plan names, monthly prices, currencies, billing periods, free trial availability, contact-sales links, pricing page URLs, and last checked date.

You can provide direct pricing page URLs or main SaaS website URLs. When homepage URLs are provided, the actor attempts to detect and follow the pricing page automatically.

### Best use cases

- SaaS competitor pricing research
- Market and product intelligence
- Pricing benchmark datasets
- Agency research for SaaS clients
- Startup and founder market analysis
- SaaS directory enrichment
- Lead generation and account research
- AI/RAG-ready pricing datasets

### Input

Add SaaS website URLs or direct pricing page URLs.

Example input:

{
  "startUrls": [
    { "url": "https://www.notion.com/pricing" },
    { "url": "https://linear.app/pricing" },
    { "url": "https://vercel.com" }
  ],
  "findPricingPage": true,
  "useBrowserFallback": true,
  "maxPlansPerPage": 5
}

### Input options

#### startUrls

List of SaaS websites or pricing page URLs to scrape.

Recommended:

- Direct pricing page URLs for highest accuracy
- Main domain URLs when you want the actor to discover the pricing page automatically

#### findPricingPage

If enabled, the actor tries to find the pricing page from a homepage.

#### useBrowserFallback

If enabled, the actor can use a browser fallback for pages where normal HTML extraction has low confidence.

#### maxPlansPerPage

Maximum number of pricing plans to extract from each website.

### Output

Each dataset item contains:

- companyName
- domain
- planName
- monthlyPrice
- currency
- billingPeriod
- freeTrial
- contactPageUrl
- pricingPageUrl
- lastCheckedAt

Example output:

{
  "companyName": "Notion",
  "domain": "notion.com",
  "planName": "Business",
  "monthlyPrice": 20,
  "currency": "USD",
  "billingPeriod": "monthly",
  "freeTrial": "Available",
  "contactPageUrl": "https://www.notion.com/contact-sales",
  "pricingPageUrl": "https://www.notion.com/pricing",
  "lastCheckedAt": "2026-05-20T16:13:06.998Z"
}

### Why use this actor?

SaaS pricing pages are often spread across different layouts, plan cards, pricing grids, and contact-sales sections. Manually checking them is slow and inconsistent.

This actor helps turn public SaaS pricing pages into structured data that can be exported, analyzed, compared, or used in automation workflows.

### Recommended test URLs

- https://www.notion.com/pricing
- https://linear.app/pricing
- https://vercel.com/pricing
- https://clickup.com/pricing
- https://miro.com/pricing/
- https://webflow.com/pricing
- https://www.wix.com/upgrade/website
- https://www.canva.com/pricing/

### Notes and limitations

Some SaaS websites use dynamic pricing, location-based pricing, A/B tested pricing, hidden enterprise pricing, or JavaScript-rendered plan cards. The actor uses a Cheerio-first approach for speed and can use browser fallback when needed.

For best accuracy, direct pricing page URLs are recommended.

### Data quality tips

For best results:

- Use direct pricing page URLs when available
- Enable browser fallback
- Keep maxPlansPerPage between 5 and 10
- Re-run periodically to monitor pricing changes

### Who is this for?

This actor is useful for:

- SaaS founders
- Agencies
- Pricing analysts
- Market researchers
- Competitive intelligence teams
- Product marketers
- RevOps teams
- AI data builders

### Export options

You can export results from Apify Dataset in formats such as:

- JSON
- CSV
- Excel
- XML
- API

### Example workflow

1. Add SaaS website or pricing page URLs
2. Run the actor
3. Export the dataset
4. Compare pricing plans across competitors
5. Use the data in spreadsheets, dashboards, CRM enrichment, or AI workflows

### Support

If a website does not return expected data, try using the direct pricing page URL and enabling browser fallback.

# Actor input Schema

## `startUrls` (type: `array`):

Add SaaS homepage URLs or direct pricing page URLs. The actor can automatically find pricing pages from homepages.
## `findPricingPage` (type: `boolean`):

Enable this if you are entering homepage URLs instead of direct pricing page URLs.
## `useBrowserFallback` (type: `boolean`):

If normal HTML extraction does not find reliable pricing data, retry the page with Playwright.
## `maxPlansPerPage` (type: `integer`):

Maximum number of pricing plans to save from each pricing page.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.notion.com/pricing"
    },
    {
      "url": "https://slack.com/pricing"
    }
  ],
  "findPricingPage": true,
  "useBrowserFallback": true,
  "maxPlansPerPage": 10
}
````

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://www.notion.com/pricing"
        },
        {
            "url": "https://slack.com/pricing"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("techionik9993/saas-pricing-plans-scraper").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 = { "startUrls": [
        { "url": "https://www.notion.com/pricing" },
        { "url": "https://slack.com/pricing" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("techionik9993/saas-pricing-plans-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.notion.com/pricing"
    },
    {
      "url": "https://slack.com/pricing"
    }
  ]
}' |
apify call techionik9993/saas-pricing-plans-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=techionik9993/saas-pricing-plans-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SaaS Pricing & Plans Scraper",
        "description": "Extract SaaS pricing plans, monthly prices, currencies, billing periods, free trial signals, contact-sales links, and pricing page URLs from SaaS websites. Built for competitive intelligence, SaaS research, pricing analysis, and market monitoring.",
        "version": "0.0",
        "x-build-id": "aAC5dFNpxiQtXgzbp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/techionik9993~saas-pricing-plans-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-techionik9993-saas-pricing-plans-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/techionik9993~saas-pricing-plans-scraper/runs": {
            "post": {
                "operationId": "runs-sync-techionik9993-saas-pricing-plans-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/techionik9993~saas-pricing-plans-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-techionik9993-saas-pricing-plans-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "SaaS Website or Pricing Page URLs",
                        "type": "array",
                        "description": "Add SaaS homepage URLs or direct pricing page URLs. The actor can automatically find pricing pages from homepages.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "findPricingPage": {
                        "title": "Auto-detect pricing page",
                        "type": "boolean",
                        "description": "Enable this if you are entering homepage URLs instead of direct pricing page URLs.",
                        "default": true
                    },
                    "useBrowserFallback": {
                        "title": "Use browser fallback for JavaScript pages",
                        "type": "boolean",
                        "description": "If normal HTML extraction does not find reliable pricing data, retry the page with Playwright.",
                        "default": true
                    },
                    "maxPlansPerPage": {
                        "title": "Maximum plans per page",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Maximum number of pricing plans to save from each pricing page.",
                        "default": 10
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
