# Tech Stack Detector - BuiltWith & Wappalyzer Alternative (`digivibetech/website-tech-stack-detector`) Actor

Detect the technologies behind websites: CMS, e-commerce platform, analytics and tag managers, CDN and hosting, JS frameworks, chat and marketing tools, plus email provider from DNS. Evidence for every match. $0.00197 per site; failed sites free. Respects robots.txt.

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

## Pricing

$1.97 / 1,000 websites

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

## Tech Stack Detector - BuiltWith & Wappalyzer Alternative

Find out which technologies a website uses. You get the **CMS or site builder, e-commerce platform, payments, analytics and tag managers, advertising pixels, chat and consent tools, JS frameworks, CDN, hosting, web server** and, from public DNS, the **email provider and verified SaaS services**. Every match comes with **evidence** (the header, script, cookie name or DNS record that matched), so you can trust or check it.

**$0.00197 per website**, no start fee. Sites that fail to load, block automated access or are disallowed by robots.txt are **free**.

### Why this one

- Every match shows its evidence: the header, script, cookie name or DNS record that matched, so you can check it yourself.
- Optional DNS checks add the email provider, DNS host and verified services at no extra cost. The most-used rival on the Store (Wappalyzer Alternative, 1,491 users) does not list DNS detection.
- $0.00197 per site with no start fee, against $0.10 per detection at that rival. Sites that fail, block access or are disallowed by robots.txt cost nothing.
- One homepage request per site, and robots.txt is respected.

### New: find shops by platform

**What:** pick a platform (Shopify, WooCommerce, Magento, Shopware or Lightspeed) and a country domain (nl, de, be, fr, uk…) and/or a keyword. You get a list of shop **domains** where our live homepage check confirmed that platform — each row already carries the full tech profile (CMS, analytics, CDN, hosting, email provider from DNS, evidence for every match).
**Who:** agencies, app/plugin makers and SaaS sellers who sell to shops on one platform; market researchers counting platforms per country.
**Why this one:** company-level data only (no scraped emails, phones or personal names) and the tech stack is in the same row, with the evidence that proved the platform.

#### Try it (free plan)

On the free Apify plan a run returns up to **25 shops** (default). Each confirmed shop is a normal `site-analysed` event ($0.00197), so a 25-shop run costs about $0.05, covered by Apify's monthly free credit. Candidates that turn out to be another platform, are blocked or are disallowed by robots.txt are free. Paid Apify plans: up to 1,000 shops per run; your max cost per run applies. Next batch: same input with `page: 1, 2, …`.

#### Example input

```json
{ "mode": "find-shops", "platform": "woocommerce", "tld": "nl", "keyword": "fiets", "maxShops": 25 }
```

#### Example output row (real, 4 Nov 2026, trimmed)

```json
{ "domain": "snorfietscadzand.nl", "platformDetected": "WooCommerce", "platformEvidence": ["html: /plugins/woocommerce/"],
  "cms": "WordPress", "ecommerce": "WooCommerce", "tldFilter": "nl",
  "source": { "name": "Common Crawl URL index", "crawl": "CC-MAIN-2026-43", "matchedPath": "/winkel" } }
```

#### Data source and responsible use

Shop candidates come from the public **Common Crawl** URL index, read by DigiVibeTech from the open Common Crawl dataset on Amazon S3 with signed requests using DigiVibeTech's own AWS credentials (latest monthly crawl; host names and page paths only). You do not need your own AWS keys. Every candidate is then confirmed with one homepage request that respects robots.txt; sites that block automated access are skipped, never bypassed. The actor collects no emails, phone numbers or names of people. Coverage is a sample of what Common Crawl visited, not every shop in a country; use `page` for more.

#### How it compares (Apify Store, checked 3 Nov 2026)

| | This actor | Shopify Store Leads (clearpath) | Shopify & WooCommerce Stores (pnda) | Website Leads Database (apivault_labs) |
|---|---|---|---|---|
| Platforms | Shopify, WooCommerce, Magento, Shopware, Lightspeed | Shopify | Shopify, WooCommerce | Shopify + ecommerce |
| Personal contact data | none | emails, phones, addresses | emails, phones, socials | emails, phones |
| Full tech stack + evidence per row | yes | no | no | technology filters |
| Price | $0.00197 / confirmed shop | from $0.00599 / lead (free tier) | PPE + start fee | from $6.5 / 1K records + start fee |

### Screenshots

From a real Console run, 27 Oct 2026 (run fMNmhZoHqftZO1NMr): public shopify.com (11 technologies) and wordpress.org (5 technologies), with DNS checks on; 1 example.com canary failed (not charged).

![Sample input](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-01-input.png?signature=JS3FD2ieD6z6HzrGbrGI)

![Results table](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-02-results-table.png?signature=1FqdvnrDSTwEQlmILmq5o)

![One result item as JSON](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-03-result-item.png?signature=1CvBn3crRkdeoPwthZ0za)

![Run summary: charged events, cost, and skipped inputs (free)](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-04-run-cost.png?signature=1HEc4vBbdbzdWLQe1soJg)

Find shops by platform, from a real Console run on 4 Nov 2026 (WooCommerce, .nl, keyword "fiets", maxShops 3):

![Find shops input: mode find-shops, platform woocommerce, tld nl, keyword fiets, maxShops 3](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-05-find-shops-input.png?signature=67z9GRzgpjcXXf3ptkPM)

![Run log: Found 1 WooCommerce shop(s) from 1 Common Crawl candidates (others not charged)](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-06-find-shops-log.png?signature=bwgh8hXgbdtjevxTFkhz)

![Find shops output: snorfietscadzand.nl, WooCommerce / WordPress, HTTP 200](https://api.apify.com/v2/key-value-stores/8dx7mDMr71NbvtKdp/records/tech-stack-07-find-shops-output.png?signature=V66ckn4SGuNIhXW2KCN9)

### Quick start: example input, output and cost

Find which CMS, shop platform, analytics, CDN, framework and email provider a website uses, with evidence per match. A low-cost technology lookup.

**Example input**

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

**Cost example:** 1,000 websites x $0.00197 = **$1.97**.

### Input

- `urls`: domains or homepage URLs (up to 5,000 per run; duplicates removed).
- `dnsChecks` (default on): reads public MX/NS/TXT records (email provider, DNS host, Google/Facebook/Atlassian/Stripe verifications). Same price.

### Output (one item per site)

`domain, finalUrl, httpStatus, technologies[] {name, category, confidence, evidence[]}, count, byCategory{}, cms, ecommerce, analytics[], cdn, hosting, hostingSource, emailProvider`

`hosting` comes from hosting-specific response headers (for example Vercel, Netlify, Fly.io, Render, Heroku, Railway, WP Engine, Kinsta) or, for fully hosted platforms such as Shopify, Wix, Squarespace and Webflow, from the platform itself. `hostingSource` says which: `detected` or `platform`.

Use the **All technologies** view for one row per technology. Failed sites and reasons are in **ERRORS**; totals in **SUMMARY**.

### Limits

- One homepage request per site: technologies used only on inner pages or server-side are not detected.
- A missing technology means no public trace was found, not that the site does not use it.
- Hosting stays empty when a site sits behind a CDN or a plain web server that reveals no host; we do not guess from IP ranges.

### How it works (and responsible use)

- **One homepage request per site**, after checking the site's **robots.txt**; disallowed sites are skipped (free). Honest User-Agent `TechStackDetector/1.0`, about one request per second per site at most, no logins and no bot-protection bypassing.
- About 120 technologies are matched by fingerprints we wrote ourselves from public, observable markers (response headers, script URLs, generator tags, cookie names, DNS records).
- No personal data: we store only technology names and the technical evidence that matched.
- Limits: technologies that leave no trace on the homepage (back-office tools, server-side only) cannot be detected. A missing technology is not proof it is not used.

### Pricing

| Event | Price |
|---|---|
| website (homepage fetched and matched) | $0.00197 |

1,000 sites = $1.97. Comparable tools on the Store charge $0.005–0.1 per site or $0.01 per technology row.

*Maintained by DigiVibeTech. Questions or bugs: use the Issues tab or [digivibetech.com/support](https://digivibetech.com/support/); we reply within 2–5 business days.*

# Actor input Schema

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

'profile' checks the websites you list. 'find-shops' finds shop domains on one platform in a country TLD (and/or with a keyword in the domain), then profiles each one.

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

Domains or homepage URLs (up to 5,000). One homepage request per site; robots.txt is respected. Used in 'profile' mode.

## `dnsChecks` (type: `boolean`):

Reads public MX, NS and TXT records. Same price.

## `platform` (type: `string`):

Only shops where our live homepage check confirms this platform are returned.

## `tld` (type: `string`):

Top-level domain, e.g. nl, de, be, fr or uk (uk covers co.uk). Required except for Shopify (without it: \*.myshopify.com stores).

## `keyword` (type: `string`):

One word that must appear in the domain name, e.g. 'fiets' or 'coffee'.

## `maxShops` (type: `integer`):

Confirmed shops to return. Free Apify plan: up to 25 per run. Paid plans: up to 1,000 (your max cost per run still applies).

## `page` (type: `integer`):

0 = first sample of the index. Use 1, 2, ... to get a different batch of shops.

## Actor input object example

```json
{
  "mode": "profile",
  "urls": [
    "https://wordpress.org",
    "https://www.shopify.com"
  ],
  "dnsChecks": true,
  "tld": "nl",
  "maxShops": 25,
  "page": 0
}
```

# Actor output Schema

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

All result items (overview view)

## `errors` (type: `string`):

Inputs that could not be processed, with the reason

## `summary` (type: `string`):

Counts of processed, billed and failed items

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

// Run the Actor and wait for it to finish
const run = await client.actor("digivibetech/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 = {
    "urls": [
        "https://wordpress.org",
        "https://www.shopify.com",
    ],
    "tld": "nl",
}

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

```

## MCP server setup

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