# Tech Stack Detector – Website Tech, Email Provider & Leads (`haketa/tech-stack-detector`) Actor

Detect the technology stack of any website: CMS, ecommerce, frameworks, analytics, CDN, server and more — with categories and versions. Plus technographic lead signals: email provider (Google Workspace / Microsoft 365), SSL issuer, hosting, emails and social profiles.

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

## Pricing

from $8.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 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

<h1 align="center">Tech Stack Detector 🔍</h1>

<p align="center">
  <img alt="Platform" src="https://img.shields.io/badge/Made%20for-Apify-97D700?style=for-the-badge">
  <img alt="What" src="https://img.shields.io/badge/Detects-Website%20Tech%20Stack-4C8BF5?style=for-the-badge">
  <img alt="Plus" src="https://img.shields.io/badge/%2B-Technographic%20Leads-8A2BE2?style=for-the-badge">
  <img alt="No code" src="https://img.shields.io/badge/No%20code-required-FF7A00?style=for-the-badge">
  <img alt="Export" src="https://img.shields.io/badge/Export-Excel%20%7C%20CSV%20%7C%20JSON%20%7C%20API-00B3A4?style=for-the-badge">
</p>

<p align="center"><b>Find out what any website is built with — and how to reach the people behind it.</b></p>

Give it a list of websites and get back each one's **complete technology stack** (CMS, ecommerce, frameworks, analytics, CDN, server, JavaScript libraries, payment and marketing tools) **with categories and versions** — plus the **technographic and contact signals** most detectors skip: **email provider, SSL issuer, hosting, emails and social profiles**.

A **BuiltWith & Wappalyzer alternative** that turns technology detection into **ready-to-use sales leads** — no code required.

***

### ⚡ At a glance

| | |
|---|---|
| 🧩 **Full tech stack** | CMS, ecommerce, frameworks, analytics, CDN, server, JS libs… |
| 🏷️ **Categories & versions** | Every technology tagged and versioned where detectable |
| 📧 **Email provider** | Google Workspace / Microsoft 365 / Zoho… via DNS MX |
| 🔒 **SSL & hosting** | Certificate issuer, CDN, web server, IP address |
| 📇 **Contact leads** | Emails, phones and social profiles from the page |
| 📦 **Bulk** | Analyse one site or thousands from a file/list |
| ⚡ **Fast & serverless** | Pure-HTTP — no browser, quick and cheap |
| 💾 **Export** | Excel, CSV, JSON, HTML or API |

***

### 📌 Why this Actor?

Most tech detectors stop at a list of technologies. This one is built for **technographic lead generation** — it adds the signals sales, marketing and research teams actually act on:

- 🧩 **Complete stack** — hundreds of detectable technologies across CMS, ecommerce, frameworks, analytics, tag managers, CDNs, web servers, programming languages, payment processors and marketing tools.
- 📧 **Email provider** — is the company on **Google Workspace** or **Microsoft 365**? Detected from the domain's DNS MX records — a powerful qualification signal.
- 🔒 **Infrastructure** — SSL certificate issuer & expiry, CDN, web server and IP address.
- 📇 **Contact data** — emails, phone numbers and social-media profiles pulled straight from the site.
- 📦 **Built for bulk** — feed a list of prospect domains and get an enriched technographic dataset back.

The result: not just *what* a site runs, but *who to contact* and *how they're set up*.

***

### ✨ What you get (data fields)

> **Coverage key:**  🟢 almost every site · 🟡 when published/available · ⚪ situational

#### 🧩 Technology

| Field | Description | Coverage |
|-------|-------------|:--------:|
| `technologyNames` | Flat list of all detected technologies | 🟢 |
| `technologiesByCategory` | Technologies grouped by category | 🟢 |
| `technologies` | Detailed detections (category, version, confidence) | 🟢 |
| `cms` | Detected CMS (WordPress, Drupal…) | 🟡 |
| `ecommercePlatform` | Detected ecommerce platform (Shopify, Magento…) | 🟡 |

#### 🏗️ Infrastructure

| Field | Description | Coverage |
|-------|-------------|:--------:|
| `server` | Web server (Nginx, Apache, cloudflare…) | 🟡 |
| `cdn` | Content delivery network | 🟡 |
| `poweredBy` | `X-Powered-By` header | ⚪ |
| `ipAddress` | Resolved IPv4 address | 🟢 |
| `sslIssuer` / `sslValidTo` | SSL certificate issuer & expiry | 🟢 |

#### 📧 Technographic & contact (lead data)

| Field | Description | Coverage |
|-------|-------------|:--------:|
| `emailProvider` | Email provider via DNS MX (Google Workspace / Microsoft 365 / …) | 🟢 |
| `mailServers` | Raw MX hostnames | 🟢 |
| `emails` | Emails found on the page | 🟡 |
| `socialLinks` | Social-media profiles | 🟡 |
| `phones` | Phone numbers found on the page | ⚪ |

#### 📄 Page & meta

| Field | Description | Coverage |
|-------|-------------|:--------:|
| `url` / `finalUrl` | Requested and post-redirect URL | 🟢 |
| `statusCode` | HTTP status | 🟢 |
| `title` / `description` | Page title & meta description | 🟢 |
| `scrapedAt` | Collection timestamp | 🟢 |

***

### 🚀 Quick start

1. Click **Try for free / Start**.
2. Add your **Websites** — one domain or URL per line:
   ```
   gymshark.com
   stripe.com
   https://www.allbirds.com
   ```
3. *(Optional)* Toggle **email provider**, **SSL** and **contact** enrichment.
4. Click **Save & Start**, then export from the **Dataset** tab.

> 💡 **Tip:** Have a big prospect list? Use **Websites from file / URL list** to load thousands of domains from a CSV, Google Sheet or URL.

***

### 🎯 Use cases

| Use case | What it delivers |
|----------|------------------|
| 🧲 **Technographic lead generation** | Build lists of companies using a specific stack (e.g. Shopify + Klaviyo) — with email provider and contacts to reach them. |
| 🕵️ **Competitive intelligence** | See exactly what competitors run — CMS, analytics, CDN, payment and marketing tools. |
| 💼 **Sales qualification** | Qualify prospects by platform and email provider before you reach out. |
| 📊 **Market research** | Measure technology adoption across a list of domains or an industry. |
| 🧰 **Agency & audit** | Audit a client's or prospect's tech and infrastructure in seconds. |
| 🔌 **App & integration targeting** | Find sites already using the platform your product plugs into. |

***

### ⚙️ Input reference

| Input | Type | Default | Description |
|-------|------|---------|-------------|
| **Websites** | list | *sample* | One domain or URL per line. |
| **Websites from file / URL list** | list | — | Bulk-load domains from a file, URL or Google Sheet. |
| **Detect email provider (DNS MX)** | boolean | `true` | Identify Google Workspace / Microsoft 365 / etc. |
| **Check SSL certificate issuer** | boolean | `true` | Report SSL issuer and expiry. |
| **Extract contact & social data** | boolean | `true` | Pull emails, phones and social profiles. |
| **Page timeout (seconds)** | number | `25` | Per-website response timeout. |
| **Proxy configuration** | object | Datacenter | Default works well. |
| **Max concurrent requests** | number | `8` | Websites analysed in parallel (5–15 recommended). |

#### 📥 Example input

```json
{
  "websites": ["gymshark.com", "allbirds.com", "stripe.com"],
  "detectEmailProvider": true,
  "checkSsl": true,
  "extractContacts": true,
  "maxConcurrency": 10
}
```

***

### 📤 Example output

```json
{
  "url": "https://allbirds.com/",
  "finalUrl": "https://www.allbirds.com/",
  "statusCode": 200,
  "title": "Allbirds: Comfortable, Sustainable Shoes & Apparel",
  "technologyNames": ["Shopify", "Google Tag Manager", "Cloudflare", "HSTS", "HTTP/3"],
  "technologiesByCategory": {
    "Ecommerce": ["Shopify"],
    "Tag managers": ["Google Tag Manager"],
    "CDN": ["Cloudflare"]
  },
  "cms": null,
  "ecommercePlatform": "Shopify",
  "server": "cloudflare",
  "cdn": "Cloudflare",
  "ipAddress": "23.227.38.74",
  "sslIssuer": "Google Trust Services",
  "sslValidTo": "2026-09-01",
  "emailProvider": "Microsoft 365",
  "mailServers": ["allbirds-com.mail.protection.outlook.com"],
  "emails": ["help@allbirds.com"],
  "socialLinks": ["https://www.instagram.com/allbirds/"],
  "scrapedAt": "2026-07-24T13:40:00.000Z"
}
```

***

### 💡 Tips & best practices

- ✅ **Feed clean domains** — `example.com` or a full URL both work; `https://` is added automatically.
- ✅ **Qualify by email provider** — `Microsoft 365` vs `Google Workspace` is a strong segmentation signal.
- ✅ **Group by category** — use `technologiesByCategory` to filter for a specific stack (e.g. all sites with Klaviyo).
- ✅ **Turn off enrichment** you don't need (SSL / contacts) to run even faster.
- ✅ **Scale up** — raise concurrency and load domains from a file for large lists.
- ✅ **Combine signals** — tech + email provider + contacts = a complete technographic lead.

***

### ❓ FAQ

**What technologies can it detect?**
Hundreds — across CMS, ecommerce, JavaScript frameworks, analytics, tag managers, CDNs, web servers, programming languages, payment processors and marketing tools, with categories and versions where available.

**How is this different from a plain tech detector?**
It adds the **technographic lead layer**: email provider (DNS MX), SSL issuer, hosting/IP, and on-page emails, phones and socials — so each result is a usable lead, not just a tech list.

**Do I need to code?**
No. Paste your domains, click Start, and export.

**Can I analyse thousands of websites?**
Yes — load them from a file or URL list and raise concurrency.

**Why do some sites show few technologies?**
Highly custom or heavily protected sites expose fewer fingerprints. Infrastructure and DNS signals (email provider, SSL, IP) are still returned.

**In what format is the data?**
Structured JSON by default, exportable to CSV, Excel, HTML or via API.

***

### 📊 Output & integrations

Results are stored in a standard Apify dataset. You can:

- 👀 Preview them in a clean **table view** in the Console.
- 💾 Export to **JSON, CSV, Excel, HTML, or RSS**.
- 🔌 Pull them via the **Apify API**.
- 🔗 Push them to **Google Sheets, Make, Zapier, Airbyte** and more.

***

### ⚖️ Legal & responsible use

This Actor inspects **publicly available website and DNS information** for legitimate purposes such as market research, competitive analysis and B2B lead generation.

- Use the data in compliance with **GDPR** and any other applicable laws, including rules on **B2B marketing and electronic communications**.
- Any personal data (e.g. emails) requires a lawful basis for processing and outreach — ensure you have one and honour opt-out requests.
- Respect each website's terms of service and use the data responsibly.
- You are responsible for how you use the collected data.

***

### 🛟 Support

Found a bug, need an extra signal, or want a tweak? **Open an issue** on the Actor's Issues tab — feedback is welcome and helps improve the Actor.

<p align="center"><b>Happy prospecting! 🔍</b></p>

# Actor input Schema

## `websites` (type: `array`):

One website per line — a domain or full URL (e.g. 'shopify.com', 'https://www.gymshark.com'). Each is analysed for its technology stack and lead signals.

## `startUrls` (type: `array`):

Optional. Load a large list of websites from a file, URL, Google Sheet or Apify Request Queue instead of typing them.

## `detectEmailProvider` (type: `boolean`):

Look up the domain's mail servers to identify the email provider (Google Workspace, Microsoft 365, Zoho, etc.) — a strong technographic signal.

## `checkSsl` (type: `boolean`):

Read the SSL certificate to report its issuer (Let's Encrypt, DigiCert, Cloudflare, etc.) and expiry date.

## `extractContacts` (type: `boolean`):

Pull emails, phone numbers and social-media profiles from the page — turning tech detection into ready-to-use technographic leads.

## `pageTimeoutSecs` (type: `integer`):

How long to wait for each website to respond before giving up.

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

Proxy settings for reliable, uninterrupted analysis across many websites. Datacenter proxies (the default) work well.

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

How many websites to analyse in parallel. Higher finishes large lists faster. Recommended: 5–15.

## Actor input object example

```json
{
  "websites": [
    "shopify.com",
    "wordpress.org"
  ],
  "startUrls": [],
  "detectEmailProvider": true,
  "checkSsl": true,
  "extractContacts": true,
  "pageTimeoutSecs": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 8
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Download every analysed website (JSON, CSV, Excel).

## `runUrl` (type: `string`):

Open this run in the Apify Console.

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

Website analysed

## `title` (type: `string`):

Page title

## `technologyNames` (type: `string`):

All detected technologies

## `technologiesByCategory` (type: `string`):

Technologies grouped by category

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

Content management system

## `ecommercePlatform` (type: `string`):

Ecommerce platform

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

Web server

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

Content delivery network

## `emailProvider` (type: `string`):

Email provider via DNS MX

## `sslIssuer` (type: `string`):

SSL certificate issuer

## `ipAddress` (type: `string`):

Resolved IPv4 address

## `emails` (type: `string`):

Emails found on the page

## `socialLinks` (type: `string`):

Social-media profiles

## `phones` (type: `string`):

Phone numbers found on the page

## `technologies` (type: `string`):

Full detections with category, version and confidence

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

HTTP status code

## `finalUrl` (type: `string`):

URL after redirects

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

ISO 8601 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 = {
    "websites": [
        "gymshark.com",
        "vercel.com"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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 = {
    "websites": [
        "gymshark.com",
        "vercel.com",
    ],
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/tech-stack-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 '{
  "websites": [
    "gymshark.com",
    "vercel.com"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/tech-stack-detector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xU5bG4rYS0GxjgT88/builds/INuPMBLFaB4WXgC7C/openapi.json
