# Website Tech Stack Detector (7,600+ technologies) (`chesapeake/tech-stack-detector`) Actor

Find out what any website is built with: CMS, ecommerce platform, analytics, tag managers, JS frameworks, CDN, hosting, payment and marketing tools. Bulk URLs, 7,600+ fingerprints, versions & categories. A cheap Wappalyzer/BuiltWith alternative.

- **URL**: https://apify.com/chesapeake/tech-stack-detector.md
- **Developed by:** [Chesapeake Commerce](https://apify.com/chesapeake) (community)
- **Categories:** Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 website analyzed (fast mode)s

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

## Website Tech Stack Detector: CMS, Ecommerce, Analytics & Hosting Lookup

Find out **what any website is built with** in seconds: CMS, ecommerce platform, JavaScript frameworks, analytics and ad pixels, tag managers, CDN, hosting, payment providers, chat widgets, cookie banners and more. Paste one URL or 5,000. Each site gets a clean row with **technology names, versions, categories and confidence**.

The detector matches **7,600+ open-source technology fingerprints** against the page HTML, HTTP headers, cookies, script URLs, meta tags and DNS records. **Browser mode** also runs the page's JavaScript to catch single-page-app frameworks and tags that load later. It works as a Wappalyzer or BuiltWith alternative at a fraction of the cost.

### What can it detect?

- **CMS and site builders**: WordPress, Drupal, Webflow, Wix, Squarespace, HubSpot CMS, Ghost, Contentful…
- **Ecommerce**: Shopify, WooCommerce, Magento / Adobe Commerce, BigCommerce, PrestaShop, Salesforce Commerce Cloud…
- **Analytics and marketing**: Google Analytics 4, Google Tag Manager, Meta Pixel, Hotjar, Microsoft Clarity, Segment, HubSpot, Klaviyo, Mixpanel…
- **Frameworks and libraries**: React, Next.js, Vue, Nuxt, Angular, Svelte, jQuery, Tailwind, Bootstrap…
- **Infrastructure**: Cloudflare, Fastly, Akamai, AWS CloudFront, Vercel, Netlify, Nginx, Apache, HTTP/3, HSTS…
- **Payments, chat and consent**: Stripe, PayPal, Klarna, Intercom, Zendesk, Drift, OneTrust, Cookiebot…
- **DNS-verified SaaS** (separate `dnsServices` field): Google Workspace, Microsoft 365, Atlassian, Salesforce, OpenAI and others found through public MX/TXT records.

### Who uses it

- **Sales and lead generation.** Qualify prospect lists ("all Shopify stores using Klaviyo") before outreach.
- **Agencies.** Audit a client or prospect site before a pitch; spot outdated jQuery or a missing consent manager.
- **Competitive research.** See which analytics, A/B testing and personalization tools competitors run.
- **Investors and M\&A.** A quick technical profile of a portfolio company.
- **AI agents.** Give your agent a reliable "what is this site built on?" tool through the Apify API or MCP.

### How to use it

1. Paste websites into **Websites** (bare domains like `shopify.com` work).
2. Pick **Fast** (default, cheapest) or **Browser** mode (more complete for modern JavaScript sites).
3. Click **Start** and download results as JSON, CSV or Excel. The **One row per technology** view gives a flat table that's ready for a CRM.

#### Input example

```json
{
  "urls": ["https://www.allbirds.com", "wordpress.org", "https://vercel.com"],
  "mode": "fast",
  "includeDns": true
}
```

#### Output example (browser mode, shortened)

```json
{
  "url": "https://www.allbirds.com/",
  "finalUrl": "https://www.allbirds.com/",
  "httpStatus": 200,
  "status": "OK",
  "mode": "browser",
  "title": "Allbirds: Comfortable, Sustainable Shoes & Apparel",
  "technologyCount": 22,
  "technologyNames": [
    "DoubleClick Floodlight",
    "Impact",
    "Facebook Pixel",
    "Google Analytics",
    "Microsoft Clarity",
    "Cloudflare",
    "OneTrust",
    "Shopify",
    "Google Font API",
    "Vue.js",
    "core-js",
    "Goober",
    "\u2026"
  ],
  "categories": {
    "Advertising": [
      "DoubleClick Floodlight"
    ],
    "Affiliate programs": [
      "Impact"
    ],
    "Analytics": [
      "Facebook Pixel",
      "Google Analytics",
      "Microsoft Clarity",
      "Datadog"
    ],
    "CDN": [
      "Cloudflare"
    ],
    "Cookie compliance": [
      "OneTrust"
    ]
  },
  "technologies": [
    {
      "name": "DoubleClick Floodlight",
      "version": null,
      "confidence": 100,
      "categories": [
        "Advertising"
      ],
      "website": "https://support.google.com/ds/answer/6029713?hl=en",
      "saas": null,
      "pricing": null,
      "cpe": null,
      "implied": false,
      "detectedVia": [
        "page"
      ]
    },
    {
      "name": "Impact",
      "version": null,
      "confidence": 100,
      "categories": [
        "Affiliate programs"
      ],
      "website": "https://impact.com/",
      "saas": null,
      "pricing": null,
      "cpe": null,
      "implied": false,
      "detectedVia": [
        "page"
      ]
    },
    {
      "name": "Facebook Pixel",
      "version": "2.9.427",
      "confidence": 100,
      "categories": [
        "Analytics"
      ],
      "website": "https://facebook.com",
      "saas": null,
      "pricing": null,
      "cpe": null,
      "implied": false,
      "detectedVia": [
        "page"
      ]
    }
  ],
  "dnsServices": [
    "Cursor",
    "DocuSign",
    "Miro",
    "Apple iCloud Mail"
  ],
  "server": "cloudflare",
  "poweredBy": null,
  "durationMs": 7455,
  "checkedAt": "2026-10-24T17:54:50.837Z"
}
```

### Pricing (pay per event)

| Event | Price |
|---|---|
| Website analyzed, **fast mode** | **$0.002** ($2 per 1,000 sites) |
| Website analyzed, **browser mode** | **$0.01** ($10 per 1,000 sites) |
| Actor start | $0.00005 (Apify default) |

You are **not charged** for sites that fail to load, return an HTTP error or bot-protection page, or are disallowed by robots.txt. Those rows are still returned with a clear `status` and `error`, so you know what happened. Use **Max cost per run** to cap spending.

### Fast vs Browser mode

| | Fast | Browser |
|---|---|---|
| How | 1 HTTP request + robots.txt + DNS | Headless Chrome, runs JavaScript |
| Speed | about 1–3 s per site | about 3–8 s per site |
| Finds | server-rendered tech, headers, cookies, scripts in HTML | all of Fast + JS globals, scripts injected by tag managers, SPA frameworks |
| Typical result | 8–15 technologies | 15–35 technologies |

### FAQ

**How accurate is it?** Detection uses the open, community-maintained [webappanalyzer](https://github.com/enthec/webappanalyzer) fingerprint set (the open-source continuation of Wappalyzer). Each technology has a confidence score. We only return matches with at least 50% confidence.

**Does it respect robots.txt?** Yes. Each site's robots.txt is checked first, and pages that disallow automated access are skipped and not charged. The Actor fetches only the page you ask for. It doesn't crawl, use proxies or solve captchas.

**Why did a site return HTTP_ERROR?** Some sites put up a bot-protection page (DataDome, Cloudflare challenge, etc.). We don't try to bypass these. You get the headers we saw (often enough to spot the CDN) and are not charged.

**What is `dnsServices`?** Services detected only from public DNS records (for example `google-site-verification` or MX records). They show which SaaS tools a company has verified, which is useful for sales, but they're kept apart from technologies running on the page.

**Can I check thousands of sites?** Yes, up to 5,000 per run. For bigger lists, run several Tasks or call the API in batches.

**Licensing.** The fingerprint data is GPL-3.0 (webappanalyzer); this Actor's source is GPL-3.0-or-later.

**Need a technology added or found a false positive?** Open an issue on the Issues tab. We reply within 2 business days.

# Actor input Schema

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

Homepages or page URLs to analyze. Bare domains like shopify.com are fine. Max 5,000 per run.

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

Fast mode makes one HTTP request per site. Browser mode loads the page in headless Chrome and inspects JavaScript globals and every script loaded.

## `includeDns` (type: `boolean`):

Look up MX/TXT/NS records (via DNS over HTTPS) to detect email providers, verification records and DNS hosting.

## `maxConcurrency` (type: `integer`):

Websites processed in parallel (browser mode is capped at 4).

## `timeoutSecs` (type: `integer`):

Max time to load each page.

## Actor input object example

```json
{
  "urls": [
    "https://apify.com",
    "https://www.allbirds.com",
    "wordpress.org"
  ],
  "mode": "fast",
  "includeDns": true,
  "maxConcurrency": 5,
  "timeoutSecs": 30
}
```

# Actor output Schema

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

One item per analyzed website in the default dataset, Overview view selected.

# 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://apify.com",
        "https://www.allbirds.com",
        "wordpress.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chesapeake/tech-stack-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://apify.com",
        "https://www.allbirds.com",
        "wordpress.org",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("chesapeake/tech-stack-detector").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 '{
  "urls": [
    "https://apify.com",
    "https://www.allbirds.com",
    "wordpress.org"
  ]
}' |
apify call chesapeake/tech-stack-detector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chesapeake/tech-stack-detector"
        }
    }
}
```

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/8N3KI3p9NaA4JJM26/builds/AzsLilJGt7FOBGiXm/openapi.json
