# Techstack Detector (`cerridwen/techstack-detector`) Actor

Detect 7500+ technologies on any website. Identifies CMS, frameworks, CDNs, analytics, payment processors & more. Includes DNS/TLS analysis, security scoring, cost estimation & stack comparison. Powered by Wappalyzer + custom multi-layer detection.

- **URL**: https://apify.com/cerridwen/techstack-detector.md
- **Developed by:** [Cerridwen](https://apify.com/cerridwen) (community)
- **Categories:** SEO tools, Lead generation, Developer tools
- **Stats:** 62 total users, 18 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 url analyses

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Tech Stack Detector API

Detect the **complete technology stack** of any website — frameworks, CMS, CDN, hosting, analytics, payment systems, email providers, and 7000+ more technologies.

### What it does

Given one or more URLs, this actor analyzes:

1. **Technology Fingerprinting** — Powered by the [Wappalyzer](https://github.com/AliasIO/wappalyzer) engine with 7500+ technology signatures. Detects frameworks, libraries, CMS, CDN, analytics, payment processors, and more from HTTP headers, HTML, cookies, script sources, DNS records, and meta tags.
2. **DNS Intelligence** — CNAME/A record analysis for CDN and hosting detection, MX records for email provider, TXT records for 30+ third-party service verifications (Stripe, Klaviyo, Zendesk, etc.), NS records for DNS provider.
3. **TLS Certificate Analysis** — Certificate issuer reveals CDN/hosting provider, protocol version, and certificate validity.
4. **Security Score** — Grades security headers (HSTS, CSP, X-Frame-Options, etc.) on a 0-100 scale and flags known vulnerable library versions.
5. **Cost Estimation** — Estimates monthly hosting/platform cost based on the detected stack.

### Use Cases

- **Sales prospecting**: Know what tech a prospect uses before reaching out
- **Competitive analysis**: Compare your stack vs competitors side-by-side
- **Security audits**: Quick security header assessment for any website
- **Lead generation**: Find companies using specific technologies
- **Market research**: Understand technology adoption in your industry

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `urls` | string\[] | *required* | URLs to analyze (max 10) |
| `enableDns` | boolean | `true` | Run DNS analysis (CDN, hosting, email, verifications) |
| `enableTls` | boolean | `true` | Run TLS certificate analysis |
| `enableSecurityScore` | boolean | `true` | Calculate security score (0-100) |
| `enableCostEstimate` | boolean | `true` | Estimate monthly cost |
| `compareMode` | boolean | `false` | Compare stacks across multiple URLs |
| `maxUrls` | integer | `10` | Max URLs per run |

#### Example Input

```json
{
    "urls": ["https://shopify.com", "https://notion.so"],
    "enableDns": true,
    "enableTls": true,
    "enableSecurityScore": true,
    "enableCostEstimate": true,
    "compareMode": true
}
```

### Output

Each URL produces a detailed result:

```json
{
    "url": "https://www.shopify.com/",
    "technologies": [
        {
            "name": "Shopify",
            "category": "Ecommerce",
            "version": null,
            "confidence": 100,
            "source": "wappalyzer"
        },
        {
            "name": "Cloudflare",
            "category": "CDN",
            "version": null,
            "confidence": 100,
            "source": "wappalyzer"
        },
        {
            "name": "Stripe",
            "category": "Payment processors",
            "version": null,
            "confidence": 100,
            "source": "wappalyzer"
        },
        {
            "name": "Google Workspace",
            "category": "Webmail",
            "version": null,
            "confidence": 100,
            "source": "wappalyzer"
        },
        {
            "name": "Zendesk",
            "category": "Documentation",
        }
    ],
    "totalTechnologies": 14,
    "robotsTxt": {
        "exists": true,
        "sitemaps": ["https://www.shopify.com/sitemap.xml"]
    },
    "pwa": {
        "isPwa": false
    },
    "securityTxt": {
        "exists": true,
        "contact": "mailto:security@shopify.com",
        "expires": "2026-12-31T23:59:59z"
    },
    "waf": {
        "firewalls": ["Cloudflare WAF"]
    },
    "httpProtocols": {
        "http2": true,
        "http3": true
    },
    "dns": {
        "cdn": "Cloudflare",
        "emailProvider": "Google Workspace",
        "hosting": "Shopify",
        "nameserver": "Shopify DNS",
        "verifications": [
            "Adobe", "Amazon SES", "Apple", "Atlassian", "DocuSign",
            "Facebook/Meta", "Google Search Console", "Klaviyo",
            "Microsoft 365", "OpenAI", "SendGrid", "Stripe",
            "Twilio", "Zapier", "Zendesk", "DKIM"
        ],
        "dmarcPolicy": "reject",
        "caa": [
            "issue=globalsign.com",
            "issue=letsencrypt.org",
            "issue=sectigo.com"
        ]
    },
    "tls": {
        "issuer": "Google Trust Services",
        "protocol": "TLSv1.3",
        "subject": "shopify.com",
        "validFrom": "Feb 14 16:30:43 2026 GMT",
        "validTo": "May 15 17:30:36 2026 GMT",
        "cipher": "TLS_AES_128_GCM_SHA256",
        "cipherStrength": "adequate",
        "cipherBits": 128,
        "daysUntilExpiry": 67,
        "expiryWarning": null
    },
    "securityScore": {
        "score": 35,
        "grade": "D",
        "headers": {
            "HSTS": true,
            "CSP": true,
            "X-Frame-Options": false,
            "X-Content-Type-Options": false,
            "X-XSS-Protection": false,
            "Referrer-Policy": false,
            "Permissions-Policy": false,
            "COOP": false,
            "CORP": false,
            "COEP": false
        },
        "headersPresent": 2,
        "headersTotal": 10,
        "vulnerabilities": [],
        "cspIssues": ["CSP allows unsafe-inline", "CSP allows unsafe-eval"],
        "cookieSecurity": {
            "totalCookies": 2,
            "secureCookies": 2,
            "httpOnlyCookies": 1,
            "sameSiteCookies": 1
        },
        "informationDisclosure": ["Server header leaks info"]
    },
    "costEstimate": {
        "currency": "USD",
        "monthly": "$54-412/mo",
        "breakdown": {
            "cdn": { "services": [{ "name": "Cloudflare", "min": 0, "max": 200 }], "min": 0, "max": 200 },
            "email": { "services": [{ "name": "Google Workspace", "min": 6, "max": 18 }], "min": 6, "max": 18 },
            "platform": { "services": [{ "name": "Shopify", "min": 29, "max": 79 }], "min": 29, "max": 79 },
            "payment": { "services": [{ "name": "Stripe", "min": 0, "max": 0, "note": "2.9% + $0.30/txn" }], "min": 0, "max": 0 },
            "support": { "services": [{ "name": "Zendesk", "min": 19, "max": 115 }], "min": 19, "max": 115 }
        }
    },
    "scannedAt": "2026-03-15T21:15:36.210952+00:00"
}
```

#### Compare Mode

When `compareMode` is enabled with multiple URLs, each result also includes:

```json
{
    "comparison": {
        "common": ["Cloudflare", "Open Graph", "React"],
        "unique": {
            "https://shopify.com": ["Shopify", "Stripe", "Zendesk"],
            "https://notion.so": ["Next.js", "Vercel", "hCaptcha"]
        },
        "totalUrls": 2
    }
}
```

### What Makes This Different

| Feature | This Actor | BuiltWith | Wappalyzer |
|---------|-----------|-----------|------------|
| Technology detection | 7500+ fingerprints | ✅ | ✅ |
| DNS intelligence | ✅ 30+ services | ❌ | ❌ |
| Email & TXT verification | ✅ Stripe, DKIM, DMARC, etc. | ❌ | ❌ |
| TLS analysis | ✅ Expiry warnings, Cipher suite | ❌ | ❌ |
| Security scoring | ✅ 0-100 grade (CSP, Cookies, Vulns) | ❌ | ❌ |
| Cost estimation | ✅ 30+ SaaS tool pricing | ❌ | ❌ |
| Deep probes | ✅ PWA, WAF, robots.txt, HTTP/2-3 | ❌ | ❌ |
| Stack comparison | ✅ | ❌ | ❌ |
| Price | Pay per use | $295/mo | $450/mo |

### Technology

- **Detection engine**: [wappalyzer-next](https://github.com/s0md3v/wappalyzer-next) with up-to-date fingerprints
- **HTTP client**: `curl_cffi` with Chrome impersonation (bypasses Cloudflare and bot protection)
- **Session management**: Automatic connection reuse and exponential backoff retry logic
- **DNS analysis**: Custom multi-record analysis (A, CNAME, MX, TXT, NS, CAA)
- **Async processing**: Concurrent URL analysis for fast batch scans

# Actor input Schema

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

List of website URLs to detect technology stacks. Max 10 URLs per run.

## `enableDns` (type: `boolean`):

Analyze DNS records (CNAME, MX, TXT) to detect CDN, email provider, and hosting.

## `enableTls` (type: `boolean`):

Analyze TLS certificate to detect certificate issuer and CDN provider.

## `enableSecurityScore` (type: `boolean`):

Calculate a security score (0-100) based on HTTP security headers and known vulnerabilities.

## `enableCostEstimate` (type: `boolean`):

Estimate monthly hosting/platform cost based on detected technologies.

## `compareMode` (type: `boolean`):

When analyzing multiple URLs, show common and unique technologies across all sites.

## `maxUrls` (type: `integer`):

Maximum number of URLs to analyze in a single run.

## Actor input object example

```json
{
  "urls": [
    "https://shopify.com"
  ],
  "enableDns": true,
  "enableTls": true,
  "enableSecurityScore": true,
  "enableCostEstimate": true,
  "compareMode": false,
  "maxUrls": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing detected technologies, DNS analysis, TLS certificate info, security score, and cost estimate for each URL.

# 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": [
        "https://shopify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cerridwen/techstack-detector").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": ["https://shopify.com"] }

# Run the Actor and wait for it to finish
run = client.actor("cerridwen/techstack-detector").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": [
    "https://shopify.com"
  ]
}' |
apify call cerridwen/techstack-detector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/TvZjY3zDdnCnfheaZ/builds/c8EzaPrTZYwYjsvQu/openapi.json
