# SaaS Competitor Intelligence Analyzer (`sleek_waveform/saas-competitor-intelligence`) Actor

Analyze competitor SaaS websites for tech stack detection, pricing tiers, features, and company metadata. Perfect for competitive analysis.

- **URL**: https://apify.com/sleek\_waveform/saas-competitor-intelligence.md
- **Developed by:** [Daniel Dimitrov](https://apify.com/sleek_waveform) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 results

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/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 Competitor Intelligence Analyzer

Extract competitor tech stack, pricing tiers, and feature lists from any SaaS website in seconds. A lightweight alternative to BuiltWith and manual competitor research — no API keys, no browser required.

### What does SaaS Competitor Intelligence Analyzer do?

SaaS Competitor Intelligence Analyzer crawls competitor SaaS websites and returns structured competitive data that would take hours to gather manually.

For each URL you provide, the actor visits the homepage, pricing page, and features page to extract:

- **Tech stack detection** — identifies 46+ technologies including React, Next.js, Vue, Tailwind, Stripe, Intercom, Segment, HubSpot, Cloudflare, and more
- **Pricing tier extraction** — scrapes plan names, prices, billing periods, and per-tier feature lists from the competitor's pricing page
- **Feature list scraping** — extracts product feature lists from features or product pages
- **Company metadata** — page title, description, social links (Twitter/X, LinkedIn, GitHub), contact email, and favicon

All data comes from publicly visible HTML — no login, no JavaScript rendering, no API keys needed.

### Why use SaaS Competitor Intelligence Analyzer?

Manually tracking SaaS competitors across pricing, features, and tech stack is slow and expensive. This actor automates that research so you can:

- **Build a competitive matrix** — compare pricing tiers and feature sets across your whole competitive landscape in one export
- **Monitor competitor pricing changes** — schedule weekly runs and get alerted when a competitor changes their pricing page
- **Detect what tech stack competitors use** — find out if they're running on AWS or Cloudflare, using Segment or Amplitude, selling through Stripe or Chargebee
- **Write sales battle cards** — arm your sales team with real pricing and feature comparisons against named competitors
- **Research a market before entering it** — profile 20 SaaS companies in minutes instead of days
- **Investment due diligence** — get structured data on any portfolio company or acquisition target

### Who is this for?

| Role | Use case |
|------|----------|
| Product managers | Track when competitors add new features or restructure pricing |
| Founders | Benchmark pricing and positioning before a launch |
| Sales teams | Build battle cards with live competitor pricing |
| VCs / analysts | Quickly profile SaaS companies at scale |
| Growth marketers | Discover what analytics and ad tech competitors use |
| Developers | Find out what frameworks and infrastructure competitors are running |

### How to scrape SaaS competitor websites

1. Click **Try for free**.
2. Enter one or more competitor website URLs (e.g., `https://slack.com`, `https://notion.so`, `https://linear.app`).
3. Select which analyses to run: tech stack, pricing, features — or all three.
4. Click **Run**.
5. When the run finishes, preview or download results from the **Dataset** tab in JSON, CSV, or Excel format.

Typical run time: **under 30 seconds per URL**.

### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `urls` | array | *(required)* | List of competitor website URLs to analyze |
| `analyzePricing` | boolean | `true` | Scrape the pricing page for plan names, prices, and billing periods |
| `analyzeFeatures` | boolean | `true` | Scrape the features or product page for feature lists |
| `detectTechStack` | boolean | `true` | Detect 46+ technologies from HTML, headers, and script tags |

### Output / Results

Each competitor URL produces one structured JSON result:

```json
{
  "url": "https://notion.so",
  "companyName": "Notion",
  "title": "Notion – The all-in-one workspace",
  "description": "A new tool that blends your everyday work apps into one.",
  "techStack": ["React", "Next.js", "Cloudflare", "Google Analytics", "Stripe", "Intercom"],
  "techStackCount": 6,
  "pricingTiers": [
    {
      "planName": "Free",
      "price": "$0",
      "period": "month",
      "features": ["Unlimited pages", "7-day page history", "10 guest collaborators"]
    },
    {
      "planName": "Plus",
      "price": "$10",
      "period": "month",
      "features": ["Unlimited file uploads", "30-day page history", "100 guest collaborators"]
    }
  ],
  "pricingTiersCount": 2,
  "features": ["Docs", "Wikis", "Projects", "AI assistant", "Integrations"],
  "featuresCount": 5,
  "socialLinks": { "twitter": "https://twitter.com/NotionHQ", "linkedin": "https://linkedin.com/company/notionhq" },
  "contactInfo": { "email": "team@makenotion.com" },
  "metadata": { "language": "en", "favicon": "/favicon.ico" },
  "analyzedAt": "2025-01-15T14:30:00Z"
}
````

Export to **JSON**, **CSV**, or **Excel** from the Dataset tab, or pull results directly via the [Apify API](https://docs.apify.com/api/v2).

### Tips for getting better results

- **Batch multiple competitors** — enter 5–20 URLs in one run and export to a spreadsheet for a side-by-side competitive matrix.
- **Schedule weekly monitoring** — use Apify's built-in scheduler to run this actor weekly and detect pricing or feature changes over time.
- **Disable unused analyses** — set `analyzeFeatures: false` or `analyzePricing: false` to run faster when you only need tech stack data.
- **Use the API** — integrate results into your CRM, Notion database, or Airtable using the Apify API or Zapier/Make integrations.

### How much does it cost?

Apify provides [$5 in free credits every month](https://apify.com/pricing) on the Free plan — enough to analyze dozens of SaaS competitors. Paid plans start at $49/month for heavier usage.

### Is it legal to scrape SaaS competitor websites?

This actor only accesses publicly visible website data — HTML source code, JavaScript includes, HTTP headers, and meta tags. This is equivalent to viewing a website's source in your browser's developer tools. No login is required and no authentication is bypassed.

Note that personal data is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. We recommend reading: [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Webhook Integration

Pass an optional `webhookUrl` in the input to receive a POST notification when the run finishes:

```json
{
  "webhookUrl": "https://your-server.com/webhook"
}
```

**Payload sent by Apify:**

```json
{
  "eventType": "ACTOR.RUN.SUCCEEDED",
  "eventData": { "actorId": "...", "actorRunId": "..." },
  "resource": { "id": "...", "status": "SUCCEEDED", "defaultDatasetId": "..." }
}
```

The webhook fires on `SUCCEEDED`, `FAILED`, `TIMED_OUT`, and `ABORTED` events.
Use it to trigger downstream pipelines, Zapier, Make.com, or any HTTP endpoint.

# Actor input Schema

## `urls` (type: `array`):

List of competitor SaaS website URLs to analyze. Enter one or more URLs (e.g., https://slack.com, https://notion.so).

## `analyzePricing` (type: `boolean`):

Find and extract pricing page data including plan names, prices, billing periods, and features per tier.

## `analyzeFeatures` (type: `boolean`):

Find and extract feature lists from product or features pages.

## `detectTechStack` (type: `boolean`):

Detect frameworks, analytics tools, CDNs, and other technologies used on the website (46+ technologies supported).

## `webhookUrl` (type: `string`):

Optional URL to receive a POST notification when the run completes. The payload includes actorRunId, datasetId, status, and a direct link to results.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://example.com"
    }
  ],
  "analyzePricing": true,
  "analyzeFeatures": true,
  "detectTechStack": true
}
```

# Actor output Schema

## `competitorData` (type: `string`):

View the complete competitor intelligence data including tech stack, pricing, and features

# 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 = {
    "urls": [
        {
            "url": "https://example.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sleek_waveform/saas-competitor-intelligence").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 = { "urls": [{ "url": "https://example.com" }] }

# Run the Actor and wait for it to finish
run = client.actor("sleek_waveform/saas-competitor-intelligence").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 '{
  "urls": [
    {
      "url": "https://example.com"
    }
  ]
}' |
apify call sleek_waveform/saas-competitor-intelligence --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SaaS Competitor Intelligence Analyzer",
        "description": "Analyze competitor SaaS websites for tech stack detection, pricing tiers, features, and company metadata. Perfect for competitive analysis.",
        "version": "1.1",
        "x-build-id": "Oc0tPPP8owcwC9AAY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sleek_waveform~saas-competitor-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sleek_waveform-saas-competitor-intelligence",
                "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/sleek_waveform~saas-competitor-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-sleek_waveform-saas-competitor-intelligence",
                "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/sleek_waveform~saas-competitor-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-sleek_waveform-saas-competitor-intelligence",
                "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": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "Competitor Website URLs",
                        "type": "array",
                        "description": "List of competitor SaaS website URLs to analyze. Enter one or more URLs (e.g., https://slack.com, https://notion.so).",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL",
                                    "pattern": "^https?://",
                                    "description": "Full URL including http:// or https://"
                                }
                            },
                            "required": [
                                "url"
                            ]
                        }
                    },
                    "analyzePricing": {
                        "title": "Analyze Pricing",
                        "type": "boolean",
                        "description": "Find and extract pricing page data including plan names, prices, billing periods, and features per tier.",
                        "default": true
                    },
                    "analyzeFeatures": {
                        "title": "Analyze Features",
                        "type": "boolean",
                        "description": "Find and extract feature lists from product or features pages.",
                        "default": true
                    },
                    "detectTechStack": {
                        "title": "Detect Tech Stack",
                        "type": "boolean",
                        "description": "Detect frameworks, analytics tools, CDNs, and other technologies used on the website (46+ technologies supported).",
                        "default": true
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "Optional URL to receive a POST notification when the run completes. The payload includes actorRunId, datasetId, status, and a direct link to results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
