# Website Tech Stack Detector: BuiltWith Alternative (`waags/website-tech-stack-detector`) Actor

Detect what any list of websites runs on: CMS, e-commerce platform (Shopify, WooCommerce, Magento), analytics, ad pixels, marketing automation, live chat, payments, CDN, hosting and JS frameworks. Shows the evidence for each detection. One request per site, no browser.

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

## Pricing

$1.20 / 1,000 website 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?

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: BuiltWith & Wappalyzer Alternative

Find out **what technology any list of websites runs on**: **CMS and website builder** (WordPress, Webflow, Wix, Squarespace, Drupal, HubSpot CMS…), **e-commerce platform** (Shopify, WooCommerce, Magento, BigCommerce, Salesforce Commerce Cloud…), **analytics and tag managers**, **ad pixels** (Meta, Google Ads, TikTok, LinkedIn…), **marketing automation and email** (HubSpot, Marketo, Klaviyo, Mailchimp…), **live chat and support** (Intercom, Drift, Zendesk…), **payments** (Stripe, PayPal, Klarna, Afterpay…), **CDN and hosting** (Cloudflare, Fastly, Vercel, WP Engine…) and **JavaScript frameworks** (Next.js, React, Vue, Angular…). That's **150+ technologies in 28 categories**, each with the **evidence** that triggered it.

**One request per website, no browser, no API key.** Detection uses HTML, script URLs, `<meta generator>`, response headers and cookie names. Pay only for websites where something was detected.

### Why use it

- 🎯 **Lead filtering by tech stack:** "only Shopify stores using Klaviyo", "WordPress sites without a chat widget", "HubSpot customers"
- 🧾 **Grouped output:** `cms`, `ecommerce`, `analytics`, `advertising`, `marketing`, `chatAndSupport`, `payments`, `cdnAndHosting`, `frameworks` columns plus the full `technologies[]` with category and evidence
- 🔍 **Explainable:** every detection says why (`html: cdn.shopify.com`, `header server: cloudflare`, `cookie _shopify_y`)
- 🧹 **No false positives from text mentions:** fingerprints use asset URLs, headers and markup, not product names in page copy
- 💸 **Cheap:** a single capped homepage download per site. Unreachable sites and sites filtered out by your tech filter are free.

### Use cases

- **Sales prospecting:** agencies, SaaS and app developers targeting users of a platform (Shopify apps, WordPress plugins, HubSpot partners)
- **Competitive intelligence:** see which analytics, A/B testing and ad platforms competitors use
- **Lead scoring & segmentation:** enrich CRM accounts with CMS, e-commerce and marketing stack
- **Market research:** platform market share in a niche or region

### How to use it

1. Click **Try for free**. A few websites are prefilled, so it works in one click.
2. Paste websites or domains, **or** pick an **Input dataset** (for example our [Website Contact Extractor](https://apify.com/waags/website-contact-extractor) output) and set the **Website field**.
3. Optionally fill **Only sites using** (e.g. `Shopify`, `Klaviyo`) to turn it into a lead filter.
4. Click **Start** and export to **CSV, Excel or JSON**.

#### Input example

```json
{
    "websites": ["allbirds.com", "gymshark.com", "mrrooter.com"],
    "onlyWithTechnologies": ["Shopify"],
    "includeFailedSites": false,
    "maxItems": 1000
}
```

#### Output example (real result)

```json
{
    "website": "mailchimp.com",
    "domain": "mailchimp.com",
    "finalUrl": "https://mailchimp.com/",
    "title": "Email & SMS Marketing Platform | Mailchimp",
    "technologies": [
        { "name": "FullStory", "category": "Heatmaps & session recording", "evidence": "html: fullstory.com/s/fs.js" },
        { "name": "Akamai", "category": "CDN", "evidence": "header x-akamai-transformed: 9 - 0 pmb=mRUM,2" },
        { "name": "Envoy", "category": "Web server", "evidence": "header server: istio-envoy" },
        { "name": "OneTrust", "category": "Cookie consent", "evidence": "html: cdn.cookielaw.org" },
        { "name": "Optimizely", "category": "A/B testing", "evidence": "html: cdn.optimizely.com" }
    ],
    "technologyNames": ["FullStory", "Akamai", "Envoy", "OneTrust", "Optimizely"],
    "techCount": 5,
    "cms": [],
    "ecommerce": [],
    "analytics": ["FullStory"],
    "cdnAndHosting": ["Akamai"],
    "server": "istio-envoy"
}
```

The **Tech stack** view shows one row per domain with CMS, e-commerce, analytics, ad pixels, marketing, chat, payments, CDN/hosting, frameworks and the technology count.

### Pricing

Pay-per-event: a fixed price per website **where at least one technology was detected**, currently **about $1.20 per 1,000 websites** (see the **Pricing** tab). Unreachable websites and websites excluded by **Only sites using** are free. There is no start fee and no compute charge on top.

### FAQ

**How accurate is it?** Detection relies on publicly visible fingerprints (asset hosts, markup hooks, headers, cookies), the same signals BuiltWith and Wappalyzer use. Tools injected only by client-side JavaScript after page load, or behind logins, can't be seen without a browser.

**Why are some sites "unreachable"?** Large enterprise sites sometimes block automated requests (WAF/bot protection). They are not charged. Pass `includeFailedSites: true` to list them.

**Can you add a technology?** Yes. Open an issue on the **Issues** tab with the technology name and an example website.

### Related actors by WAAGS

- [Website Contact Extractor](https://apify.com/waags/website-contact-extractor): emails, phones and socials from the same websites
- [Domain WHOIS Lookup](https://apify.com/waags/domain-whois-lookup): domain age, registrar and expiry
- [Bulk Email Validator](https://apify.com/waags/bulk-email-validator) · [US Phone Number Validator](https://apify.com/waags/us-phone-number-validator)

# Actor input Schema

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

Websites or bare domains, one per line. Only the homepage of each domain is analyzed.

## `inputDatasetId` (type: `string`):

Pick another Apify dataset, e.g. the output of our Website Contact Extractor or a Google Maps scrape, whose websites should be analyzed. Set the field name in "Website field".

## `websiteField` (type: `string`):

Name of the field holding the website URL or domain in the input dataset (dot notation supported).

## `onlyWithTechnologies` (type: `array`):

Keep only websites that use at least one of these technologies, e.g. Shopify, Klaviyo, WordPress, HubSpot. Sites that don't match are not charged.

## `includeFailedSites` (type: `boolean`):

Add free rows for websites that could not be loaded or where nothing was detected.

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

Maximum number of websites to analyze. You are charged only for websites where technologies were detected.

## Actor input object example

```json
{
  "websites": [
    "https://www.allbirds.com",
    "https://apify.com",
    "https://www.mrrooter.com",
    "https://www.gymshark.com",
    "https://wordpress.org"
  ],
  "websiteField": "website",
  "includeFailedSites": false,
  "maxItems": 20
}
```

# 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 = {
    "websites": [
        "https://www.allbirds.com",
        "https://apify.com",
        "https://www.mrrooter.com",
        "https://www.gymshark.com",
        "https://wordpress.org"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("waags/website-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": [
        "https://www.allbirds.com",
        "https://apify.com",
        "https://www.mrrooter.com",
        "https://www.gymshark.com",
        "https://wordpress.org",
    ],
    "maxItems": 20,
}

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

```

## MCP server setup

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