# Bulk Website Tech Stack Detector — CMS, Analytics, CDN (`haketa/bulk-tech-detector`) Actor

Detect the tech stack of thousands of websites at once: CMS, e-commerce platform, JS framework, analytics, marketing/chat tools, CDN, hosting and server. Fast, cheap, keyless technographics for sales intelligence and lead generation.

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

## Pricing

from $0.70 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Bulk Website Tech Stack Detector — CMS, Analytics, CDN & More

Detect the **technology stack of thousands of websites at once.** Paste a list of sites and get, for each one: **CMS, e-commerce platform, JS framework, analytics & marketing tools, payment providers, CDN, hosting and web server.**

Fast, cheap and keyless — the technographics you need for **sales intelligence, lead scoring, competitor research and market analysis.**

***

### Why this Actor?

Knowing what a website is built with is gold for sales and research: target every Shopify store, find sites still on an old CMS, score leads by their martech stack, or map a market's platform share. Dedicated technographics tools are expensive and per-lookup; this Actor checks a whole list at once, on plain HTTP, so it stays cheap at scale.

- **Sales intelligence** — filter prospects by platform (e.g. all WooCommerce sites, all HubSpot users).
- **Lead scoring & enrichment** — add tech signals to your CRM records.
- **Competitor & market research** — map CMS / e-commerce / CDN share across a list of sites.
- **Agency prospecting** — find sites on platforms you specialize in.

***

### What you get

One record per site:

| Field | Description |
| --- | --- |
| `url` | The site |
| `statusCode` | HTTP status |
| `cms` | Content management system (WordPress, Wix, Drupal…) |
| `ecommerce` | E-commerce platform (Shopify, WooCommerce, Magento…) |
| `frameworks` | JS frameworks (Next.js, React, Vue, Angular…) |
| `analytics` | Analytics (Google Analytics, GTM, Hotjar, Segment…) |
| `marketing` | Marketing & chat (HubSpot, Intercom, Mailchimp, Klaviyo…) |
| `payment` | Payment providers (Stripe, PayPal, Square) |
| `cdn` | CDN (Cloudflare, Fastly, CloudFront, Vercel, Netlify…) |
| `server` | Web server (nginx, Apache, IIS…) |
| `jsLibraries` | Libraries (jQuery, Bootstrap, Tailwind…) |
| `allTechnologies` | All detected technologies |
| `techCount` | How many were detected |
| `error` | Error, if the check failed |
| `scrapedAt` | Timestamp |

***

### Example output

```json
{
  "url": "https://www.shopify.com",
  "statusCode": "200",
  "ecommerce": "Shopify",
  "analytics": "Google Analytics, Google Tag Manager",
  "cdn": "Cloudflare",
  "server": "Cloudflare",
  "allTechnologies": "Shopify, Google Analytics, Google Tag Manager, Cloudflare",
  "techCount": "4",
  "scrapedAt": "2026-07-09T15:00:00.000Z"
}
```

***

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `urls` | array | — | **Required.** Websites to analyze. Paste a list or upload/link a text/CSV file. |
| `maxConcurrency` | integer | `50` | Sites analyzed in parallel (up to 300). |
| `timeoutSecs` | integer | `30` | Give up on a site after this many seconds. |

#### Example

```json
{ "urls": [{ "url": "https://shopify.com" }, { "url": "https://wordpress.org" }], "maxConcurrency": 50 }
```

You can also link a **remote text/CSV file** of URLs for very large lists.

***

### Use cases in detail

#### 1. Build a platform-targeted prospect list

Run a list of company sites, then filter `ecommerce = Shopify` (or WooCommerce, Magento…) to get every prospect on the platform you sell to.

#### 2. Lead scoring by martech

`marketing` and `analytics` tell you how sophisticated a prospect is — sites running HubSpot/Segment/Klaviyo are further along and often better leads.

#### 3. Market & competitor research

Aggregate `cms` / `ecommerce` / `cdn` across a market to see platform share and trends.

#### 4. Agency prospecting

Specialize in Webflow, Shopify or WordPress? Find sites on (or off) those platforms to pitch.

***

### How to use it

1. Click **Try for free**.
2. Paste or upload your websites.
3. Click **Start**.
4. Export as **JSON, CSV, Excel**, or via the Apify API.

Hundreds of sites finish in seconds; large lists run cheaply on plain HTTP.

***

### Calling from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "urls": [{"url":"https://shopify.com"}] }'
```

Then fetch the dataset (JSON/CSV):

```bash
curl "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs/last/dataset/items?token=YOUR_APIFY_TOKEN&format=csv"
```

Works with webhooks, Zapier, Make and n8n.

***

### Frequently asked questions

**How does it detect technologies?**
It fetches each site's HTML and response headers and matches them against a library of fingerprints (script URLs, markers, headers). No browser, so it's fast and cheap.

**How many sites can it handle?**
Thousands to millions — it auto-scales concurrency and streams results.

**Does it render JavaScript?**
No — it reads the server-rendered HTML and headers, which is where the vast majority of tech signals live. Technologies injected only by later JS execution may not appear.

**Why did a site show fewer technologies than expected?**
Some stacks are only detectable via runtime JS or are intentionally obscured. The detector focuses on high-confidence signals to keep false positives low.

**Can I filter by platform?**
Yes — export and filter on `cms`, `ecommerce`, `marketing`, etc., or search `allTechnologies`.

***

### Tips

- **Filter on `ecommerce` / `cms`** to build platform-specific prospect lists.
- **Combine with a contact scraper** to turn a tech-targeted list into outreach-ready leads.
- **Raise `maxConcurrency`** for speed on big runs.

***

### Notes

This Actor performs standard HTTP requests and inspects publicly returned HTML and headers to infer technologies. Detection is best-effort (signal-based) and not guaranteed complete. Use on sites you have the right to analyze.

***

### Support

Want more fingerprints (a specific platform/tool), or a field exposed differently? Open an issue from the Actor's page.

# Actor input Schema

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

The websites whose tech stack you want to detect. Paste a list of URLs or bare domains (e.g. 'stripe.com'), or upload/link a text/CSV file — it handles a handful up to millions. Each entry becomes one result row. Leave empty to run a quick demo on a diverse sample of popular sites.

## `maxItems` (type: `integer`):

Cap the total number of websites analyzed in one run — handy for a quick, cheap test before launching a big list. Set to 0 to process every website you provided.

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

How many sites to analyze in parallel. Raise it for faster runs on large lists; lower it if you see errors.

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

Give up on a site after this many seconds so one slow website never stalls the whole run.

## `proxyConfiguration` (type: `object`):

Apify Proxy. Off by default — enable it for very large runs or geo-specific checks.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://www.shopify.com"
    },
    {
      "url": "https://wordpress.org"
    },
    {
      "url": "https://vercel.com"
    }
  ],
  "maxItems": 100,
  "maxConcurrency": 50,
  "timeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `url` (type: `string`):

The site

## `statusCode` (type: `string`):

HTTP status

## `cms` (type: `string`):

Content management system

## `ecommerce` (type: `string`):

E-commerce platform

## `frameworks` (type: `string`):

JS frameworks

## `analytics` (type: `string`):

Analytics tools

## `marketing` (type: `string`):

Marketing & chat tools

## `payment` (type: `string`):

Payment providers

## `cdn` (type: `string`):

CDN

## `server` (type: `string`):

Web server

## `jsLibraries` (type: `string`):

JS libraries

## `allTechnologies` (type: `string`):

All detected technologies

## `techCount` (type: `string`):

Number of technologies

## `error` (type: `string`):

Error if failed

## `scrapedAt` (type: `string`):

Timestamp

# 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://www.shopify.com"
        },
        {
            "url": "https://wordpress.org"
        },
        {
            "url": "https://vercel.com"
        }
    ],
    "maxItems": 100,
    "maxConcurrency": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/bulk-tech-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": [
        { "url": "https://www.shopify.com" },
        { "url": "https://wordpress.org" },
        { "url": "https://vercel.com" },
    ],
    "maxItems": 100,
    "maxConcurrency": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/bulk-tech-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": [
    {
      "url": "https://www.shopify.com"
    },
    {
      "url": "https://wordpress.org"
    },
    {
      "url": "https://vercel.com"
    }
  ],
  "maxItems": 100,
  "maxConcurrency": 50
}' |
apify call haketa/bulk-tech-detector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Tj054PIT4liF7VgiT/builds/3kSwJbVnmqXWTZF5m/openapi.json
