# Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures (`themineworks/tech-stack-detector`) Actor

Detect the CMS, e-commerce platform, JS framework, CDN/host, payments and analytics a website runs, from one HTTP request. 19 technologies, each verified live. No login, no API key.

- **URL**: https://apify.com/themineworks/tech-stack-detector.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (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

$1.00 / 1,000 domain analyzeds

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?

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: 19 Verified CMS, JS & CDN Signatures

> 🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

> 💰 $1.00 / 1,000 results.

> ⚡ 19 technologies from one HTTP request. No browser, no login, no API key.

> 💸 An unreachable domain is never billed.

Point it at a domain and find out what it runs: CMS, e-commerce platform, JavaScript framework, CDN or hosting provider, payment processor, and analytics tooling, all from a single HTTP request. No login, no browser, no API key.

### Why 19 technologies, not 45

A single HTTP GET to a homepage carries real signal: response headers name the CDN or server, and the HTML body carries script tags, path fragments, and meta generator tags specific to the platform serving it. Every signature in this actor was checked against a real, known site running that technology before being written into the code: Shopify against a live Shopify store, WordPress against a live WordPress blog, Drupal against usa.gov, and so on through all 19. A signature that didn't show up on a real reference site isn't in the list. This is a smaller number than some competitors advertise, and every one of the 19 is confirmed working rather than assumed from documentation.

### What it covers

- **E-commerce**: Shopify, WooCommerce, BigCommerce
- **CMS**: WordPress, Drupal, Wix, Squarespace, Webflow, Ghost
- **JavaScript frameworks**: React, Next.js, Vue.js, Angular, Svelte
- **CDN and hosting**: Cloudflare, Vercel, Netlify
- **Payments**: Stripe
- **Analytics**: Google Tag Manager

### Input

- **domains** (required): one or more domains to scan, e.g. `"shopify.com"`. A full URL is also accepted; only the domain is used.

### Example output

```json
{
  "domain": "shopify.com",
  "reachable": true,
  "http_status": 200,
  "checked_at": "2026-08-30T00:00:00.000Z",
  "technologies": [
    { "name": "Shopify", "category": "ecommerce" },
    { "name": "Cloudflare", "category": "cdn-host" },
    { "name": "Google Tag Manager", "category": "analytics" }
  ]
}
```

### Who this is for

Sales and marketing teams qualifying leads at scale: knowing a prospect runs Shopify or WooCommerce before the first call changes the pitch. Competitive research: which platform a set of competitor sites migrated to, and when. Agencies scoping a rebuild who want to confirm what a client's current site actually runs before quoting the work.

### Frequently asked questions

**Why isn't Magento or Salesforce Commerce Cloud included?** Only signatures verified against a real live site running that platform are in the list. Coverage grows by adding and confirming new signatures, not by adding plausible-looking ones.

**What does an empty `technologies` array mean?** The domain responded, but none of the 19 known technologies were detected on its homepage. This can mean the site runs something not yet covered, or renders its stack in a way a plain HTTP request doesn't surface. It does not mean the site runs nothing.

**Why is `reachable: false` returned for some domains?** The domain didn't resolve, timed out, or returned an error status. A run is never charged for a domain it couldn't reach.

**Does this need a specific URL path?** No, it always requests the domain's homepage. Deeper crawling for signals only present on inner pages isn't part of this actor.

**Can it be run on a large list of domains?** Yes, up to 100 domains per run, checked concurrently.

**Does this need a headless browser?** No. It is a single HTTP GET plus signature matching against the response headers and HTML, which is why it is fast and cheap enough to run against a whole prospect list. Up to 100 domains per run are checked concurrently.

### Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Domain analyzed | $0.001 | A domain is successfully scanned |

**$1.00 per 1,000 domains.** Flat pricing, the same on every Apify plan. An unreachable domain is never charged.

### Run it on a schedule

Most people run this as a one-off batch against a prospect list. A schedule is worth it when you are watching a fixed competitor set for platform migrations, for example whether a list of stores moves off Shopify. Weekly is enough.

1. Run it once with the input you want repeated, then click **Save as a task**
   so that exact input is attached to every future run.
2. In the Apify Console go to **Schedules** and create a new one, either a
   preset (hourly / daily / weekly) or a cron expression.
3. Save. It then runs unattended, billed the same pay-per-result way. Nothing
   is charged for the schedule existing.

### Use from Claude, ChatGPT & any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

```
https://mcp.apify.com/?tools=themineworks/tech-stack-detector
```

Claude Desktop / Cursor config (token auth):

```json
{
  "mcpServers": {
    "tech-stack-detector": {
      "url": "https://mcp.apify.com/?tools=themineworks/tech-stack-detector",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Ask your agent: *"What CMS and payment processor does \[domain] run?"*

### Part of the outbound prospecting toolkit

Qualify a lead by their stack before you reach out. Resolve a
[company name to its domain](https://apify.com/themineworks/company-domain-finder),
check what that domain runs here, then get a
[verified work email](https://apify.com/themineworks/linkedin-email-finder)
for the right contact.

Keywords: tech stack detector, website technology checker, what CMS does this site use, BuiltWith alternative, Shopify detector, WordPress detector, competitor tech stack, sales lead qualification tool

# Actor input Schema

## `domains` (type: `array`):

One or more domains to scan, e.g. "shopify.com". A full URL is also accepted; only the domain is used.

## Actor input object example

```json
{
  "domains": [
    "shopify.com"
  ]
}
```

# 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 = {
    "domains": [
        "shopify.com"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/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/dWnzqc7giBgGViL6l/builds/UJUMaJ6fuNDqR0sgZ/openapi.json
