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

Find what any website is built with, in bulk: CMS, ecommerce platform, analytics, ad pixels, marketing automation, CRM, frameworks, hosting and CDN – 3,500+ technologies – plus the company's email provider. $4 per 1,000 sites.

- **URL**: https://apify.com/ram1eal/website-tech-stack.md
- **Developed by:** [Hiếu Trần Quang](https://apify.com/ram1eal) (community)
- **Categories:** Lead generation, Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 website analyseds

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/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 **what any website is built with** – in bulk. Detects **3,500+ technologies**: CMS, ecommerce platform, analytics, advertising pixels, tag managers, marketing automation, CRM, live chat, payment providers, JavaScript frameworks, web servers, CDN and hosting, **plus the company's email provider** (Google Workspace, Microsoft 365…). Built for **B2B lead qualification**, **competitor research** and **sales prospecting**.

**Try it free:** a test with 5 websites costs about $0.03 – covered by the $5 monthly credit of the free Apify plan. After that, **$4 per 1,000 websites**, no subscription.

### Why this one

- **Ready-to-filter columns.** Besides the full technology list you get one column per area – `cms`, `ecommerce`, `analytics`, `advertising`, `marketingAutomation`, `crm`, `liveChat`, `paymentProcessors`, `jsFrameworks`, `hosting`, `cdn`… – so you can filter a lead list in seconds.
- **More than the HTML.** Headers, cookies, scripts, meta tags, page DOM, **DNS (MX and SPF)** and the **TLS certificate** are analysed: you also learn the email provider and transactional email senders (SendGrid, Mailgun, Amazon SES…).
- **Versions and confidence.** Each technology comes with its category, version when public, and a confidence score.
- **Monitoring mode.** "Only changed websites" returns – and charges – only sites whose stack changed: catch competitors switching platforms or adding tools.
- **Fast and cheap.** Plain HTTP, no browser: hundreds of websites per minute, $4 per 1,000.

### Compared with alternatives

|                                           | This Actor                             | Typical alternatives      |
| ----------------------------------------- | -------------------------------------- | ------------------------- |
| Price                                     | $4 per 1,000 websites, no subscription | BuiltWith from $295/month |
| Filterable columns (cms, ecommerce, crm…) | Yes                                    | One long list             |
| Email provider and SPF senders            | Yes (DNS)                              | No                        |
| Change monitoring                         | Only websites whose stack changed      | No                        |

### What you get

Domain, final URL, HTTP status, page title, meta description, language, `technologies` (name, categories, version, confidence, website), `technologyNames`, `categories`, `techCount`, columns per area (see above), `emailProvider`, `sslIssuer`.

### Sample output

```json
{
  "domain": "wordpress.org",
  "pageTitle": "Blog Tool, Publishing Platform, and CMS – WordPress.org",
  "cms": ["WordPress"],
  "programmingLanguages": ["PHP"],
  "webServers": ["Nginx"],
  "technologies": [
    { "name": "WordPress", "categories": ["CMS", "Blogs"], "version": "7.2", "confidence": 100 },
    { "name": "Google Tag Manager", "categories": ["Tag managers"], "confidence": 100 }
  ],
  "techCount": 12,
  "emailProvider": "Self-hosted / other",
  "sslIssuer": "Let's Encrypt"
}
```

### How to use

1. Paste websites, domains or e-mail addresses (one per line).
2. Click Start. Export to JSON, CSV or Excel, or call it from your app, n8n, Make or an AI agent.

### Use cases

- **Lead qualification:** find all prospects running Shopify, WordPress or a competitor's tool; segment by email provider.
- **Sales intelligence:** know a prospect's stack before the first call.
- **Competitor research:** compare analytics, advertising and marketing automation across competitors.
- **Agencies:** audit client and prospect websites in bulk.
- **Technology monitoring:** schedule weekly with "only changed websites".

### Pricing

Pay per website analysed, all technologies and DNS/SSL included:

| Apify plan | Per 1,000 websites | Per run |
| ---------- | ------------------ | ------- |
| Free       | $4.00              | $0.005  |
| Starter    | $3.70              | $0.005  |
| Scale      | $3.30              | $0.005  |
| Business   | $2.80              | $0.005  |

Unreachable websites and unchanged websites (only-changed mode) are free.

### Cost examples

- 100 prospects: $0.40
- 10,000-site lead list: $28–40

### Use it from code, n8n or AI agents

Run it from the Apify API, the Python or JavaScript client, n8n, Make or Zapier – or let an AI agent call it through the **Apify MCP server** (Claude, ChatGPT, Cursor).

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ram1eal/website-tech-stack").call(run_input={"websites":["allbirds.com","wordpress.org"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client
  .actor('ram1eal/website-tech-stack')
  .call({ websites: ['allbirds.com', 'wordpress.org'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**MCP:** add `ram1eal/website-tech-stack` to the Apify MCP server and ask in plain English – the agent fills the input and pays per result.

### Data sourcing & compliance

- One request for the public home page per website (plus robots.txt), DNS lookups and a TLS handshake. **robots.txt is respected**: if the home page is disallowed, only DNS/TLS signals are used.
- Blocked or unreachable websites are reported, never forced. No logins, no personal data.
- Technology fingerprints: Wappalyzer data v6.10.54 (MIT licence), extended with our own rules.

### FAQ

- **Why is a tool I know missing?** Some technologies only appear after JavaScript runs or on inner pages; this Actor analyses the home page without a browser for speed and price. Lower "Minimum confidence" to see weaker signals.
- **What does confidence mean?** 100 = a definitive signal; lower values come from weaker hints.
- **What if something breaks?** Open an issue – typical response under 12 hours.

### More tools from this author

- [WHOIS Lookup & Domain Checker – Age, DNS, Email, SSL](https://apify.com/ram1eal/domain-intelligence) – bulk WHOIS: domain age, DNS, email provider, SSL and risk
- [Contact Info Scraper – Company Emails, Phones & Socials](https://apify.com/ram1eal/company-contact-finder) – company e-mails, phones and social profiles, GDPR-safe
- [Shopify Scraper – Products, Prices, Stock & Price Monitor](https://apify.com/ram1eal/shopify-store-products) – any Shopify store: products, prices, stock, price-drop alerts
- [Companies House API & Company Registry – UK, France, LEI](https://apify.com/ram1eal/company-registry-search) – UK Companies House, France SIRENE & LEI search with a KYB risk score
- [Public Tenders – EU TED & UK Find a Tender Procurement](https://apify.com/ram1eal/public-tenders-search) – EU TED & UK Find a Tender notices with daily alerts
- [Impressum Scraper – German Company Data, HRB & VAT Check](https://apify.com/ram1eal/company-imprint) – German/Austrian/Swiss company data from the Impressum, VAT checked
- [SEC EDGAR API – Company Financials, 10-K Data & Filings](https://apify.com/ram1eal/sec-company-financials) – SEC EDGAR financials and 10-K/10-Q/8-K filings by ticker
- [SAM.gov & USAspending – US Federal Contracts & Awards](https://apify.com/ram1eal/us-federal-contracts) – new US federal contract awards and SAM.gov opportunities
- [Startup Funding Rounds – Crunchbase Alternative (SEC Form D)](https://apify.com/ram1eal/startup-funding-rounds) – US startups raising money, daily from SEC Form D

### Input reference

| Field              | Type    | Default | Description                                   |
| ------------------ | ------- | ------- | --------------------------------------------- |
| `websites`         | array   | –       | Websites, domains or e-mail addresses         |
| `maxItems`         | integer | 1000    | Maximum websites                              |
| `onlyNew`          | boolean | false   | Only websites whose technologies changed      |
| `includeDnsAndSsl` | boolean | true    | Email provider, SPF senders and TLS issuer    |
| `minConfidence`    | integer | 50      | Hide detections below this confidence (0–100) |
| `stateKey`         | string  | –       | History name for only-changed mode            |

### Changelog

- 0.1 – 3,500+ technologies, convenience columns, email provider, SSL issuer, only-changed monitoring.

# Actor input Schema

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

Websites, domains or e-mail addresses (the domain is used), one per line.

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

Stop after this many websites. You pay per website analysed.

## `onlyNew` (type: `boolean`):

For scheduled monitoring: return (and pay for) only websites whose technologies changed since your previous run with the same list (e.g. a competitor switched platform or added a tool).

## `includeDnsAndSsl` (type: `boolean`):

Detect the email provider (Google Workspace, Microsoft 365…), email senders from SPF and the certificate authority.

## `minConfidence` (type: `integer`):

Hide detections below this confidence (0–100). Lower it to see weaker signals.

## `stateKey` (type: `string`):

Runs with the same history name share what was already delivered. Leave empty to use one history per list.

## Actor input object example

```json
{
  "websites": [
    "allbirds.com",
    "wordpress.org",
    "vercel.com"
  ],
  "maxItems": 100,
  "onlyNew": false,
  "includeDnsAndSsl": true,
  "minConfidence": 50
}
```

# Actor output Schema

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

One record per website: technologies (name, categories, version, confidence), columns for CMS, ecommerce, analytics, advertising, tag managers, marketing automation, CRM, live chat, payments, frameworks, web servers, CDN, hosting and cookie consent, plus email provider and SSL issuer.

## `runSummary` (type: `string`):

JSON summary of the run: requests, websites delivered and charged, unchanged websites skipped (only-changed mode) and error counts.

# 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": [
        "allbirds.com",
        "wordpress.org",
        "vercel.com"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("ram1eal/website-tech-stack").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": [
        "allbirds.com",
        "wordpress.org",
        "vercel.com",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("ram1eal/website-tech-stack").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": [
    "allbirds.com",
    "wordpress.org",
    "vercel.com"
  ],
  "maxItems": 100
}' |
apify call ram1eal/website-tech-stack --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ram1eal/website-tech-stack"
        }
    }
}
```

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/fIBNnlaEhsnxSbYDj/builds/u5NJHkhHoiJcowkA0/openapi.json
