# Tech Stack Detector: Website Technologies + DNS/SaaS (`jadelike_mustang/tech-stack-detector`) Actor

Input domains or URLs. Output one item per website: technologies (6,600+: CMS, e-commerce, analytics, frameworks, CDN, payments) with versions and categories, plus email provider, email senders, DNS host and SaaS tools from public DNS. Blocked sites not charged.

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

## Pricing

from $2.10 / 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: Website Technologies + DNS & SaaS Signals

Find out **what any website is built with** (CMS, e-commerce platform, analytics, tag managers, JavaScript frameworks, CDN, hosting, payment providers, consent tools and 6,600+ more technologies) **and which business tools the company uses**, read from its public DNS: email provider, email-sending services, DNS host, DMARC policy and SaaS tools that verified the domain.

### Why this Actor

- **6,600+ technologies** from the open Wappalyzer fingerprint set, with **versions** when the site exposes them (e.g. `WordPress 7.2`, `Gutenberg 24.3.0`) and a confidence score.
- **DNS & SaaS signals no page scan can see**: Google Workspace or Microsoft 365, Mailchimp, HubSpot, SendGrid, Salesforce, Zendesk senders, and domain verifications for Atlassian, Slack, Zoom, DocuSign, Stripe, OpenAI, Figma, Miro, Okta and many more. Ideal for B2B prospecting and competitive research.
- **Fast and cheap**: no browser, one request per site plus DNS, sites processed in parallel. Pay per website analysed, no start fee.
- **Honest results**: a site that blocks automated visits or does not answer is reported as `blocked` or with an `error`, and **is not charged**.

### Use cases

- **Sales prospecting**: find Shopify stores using Klaviyo, WordPress sites without a consent tool, companies on Microsoft 365 using Salesforce
- **Competitive research**: compare the stack of competitors and market leaders
- **Agencies and SEO**: audit a list of client or prospect sites in minutes
- **Market research**: measure the adoption of a technology across thousands of domains

### Input example

```json
{
  "websites": ["wordpress.org", "https://www.gymshark.com", "apify.com"],
  "includeDns": true,
  "minConfidence": 50
}
```

### Output example

```json
{
  "input": "https://www.gymshark.com",
  "url": "https://www.gymshark.com",
  "finalUrl": "https://www.gymshark.com/",
  "domain": "www.gymshark.com",
  "statusCode": 200,
  "title": "Gymshark | Gym Clothes & Workout Clothes",
  "technologyNames": ["Amazon CloudFront", "Contentful", "Shopify", "Next.js", "Afterpay", "PayPal", "Algolia", "React"],
  "technologies": [
    { "name": "Shopify", "version": null, "categories": ["Ecommerce"], "confidence": 100, "implied": false, "website": "https://shopify.com" },
    { "name": "Next.js", "version": null, "categories": ["JavaScript frameworks", "Web frameworks", "Static site generator"], "confidence": 100, "implied": false, "website": "https://nextjs.org" }
  ],
  "categories": { "Ecommerce": ["Shopify"], "Payment processors": ["Afterpay", "PayPal"], "Search engines": ["Algolia"] },
  "dns": {
    "emailProvider": ["Proofpoint"],
    "emailSenders": ["Proofpoint"],
    "verifiedServices": ["Atlassian", "Figma", "Google Search Console", "Meta Business", "Microsoft 365", "OneTrust", "Zoom"],
    "dnsProvider": ["Amazon Route 53"],
    "dmarcPolicy": null,
    "mx": ["…"], "nameservers": ["…"], "spf": "v=spf1 …"
  },
  "blocked": false,
  "error": null
}
```

### How it works

The Actor loads each website's home page like a normal visitor (no login, no proxy, no browser) and matches headers, cookies, HTML, scripts, meta tags and page elements against the fingerprints. DNS records are read from public resolvers. Technologies that are only visible after JavaScript runs in a browser may not be detected.

### Pricing

Pay per event, only for results you get:

- **$0.003** per website analysed. Blocked or unreachable websites are not charged. No start fee.
- Apify subscribers pay less: **10% off on Bronze, 20% on Silver, 30% on Gold** and higher plans.
- Set a maximum charge per run in the run options: the Actor stops cleanly when it is reached.

### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| `websites` *(required)* | array |  | **Websites**. Domains or URLs, one per line (e.g. 'shopify.com' or 'https://www.example.com/shop'). |
| `includeDns` | boolean | `true` | **Include DNS services**. Also read the domain's public DNS: email provider (MX), email-sending services (SPF), DNS host, DMARC policy and SaaS tools that verified the domain (Google, Microsoft 365, Atlassian, Slack, Zoom, DocuSign, OpenAI…). |
| `minConfidence` | integer | `50` | **Minimum confidence**. Hide technologies detected with lower confidence (0-100). |
| `includeImplied` | boolean | `true` | **Include implied technologies**. Add technologies implied by others (e.g. WordPress implies PHP and MySQL), marked with implied: true. |

### Tips

- Enter domains (`example.com`) or full URLs; for a specific shop or blog section use its URL.
- Use **Minimum confidence** 100 for the strictest results, 25 to see weak signals too.
- Schedule the Actor monthly on your prospect list to catch stack changes.

### Credits and privacy

Technology fingerprints: [wappalyzergo](https://github.com/projectdiscovery/wappalyzergo) by ProjectDiscovery (MIT license). Only public data about websites and companies is returned, no personal data. At the end of each run the developer receives an anonymous notification with only numbers (websites analysed, amount charged, duration, success or failure). Your input, the results and your identity are never sent.

# Actor input Schema

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

Domains or URLs, one per line (e.g. 'shopify.com' or 'https://www.example.com/shop').

## `includeDns` (type: `boolean`):

Also read the domain's public DNS: email provider (MX), email-sending services (SPF), DNS host, DMARC policy and SaaS tools that verified the domain (Google, Microsoft 365, Atlassian, Slack, Zoom, DocuSign, OpenAI…).

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

Hide technologies detected with lower confidence (0-100).

## `includeImplied` (type: `boolean`):

Add technologies implied by others (e.g. WordPress implies PHP and MySQL), marked with implied: true.

## Actor input object example

```json
{
  "websites": [
    "wordpress.org",
    "https://www.gymshark.com",
    "apify.com"
  ],
  "includeDns": true,
  "minConfidence": 50,
  "includeImplied": true
}
```

# Actor output Schema

## `sites` (type: `string`):

Overview table.

## `fullData` (type: `string`):

Technologies with versions, categories and confidence, plus DNS.

# 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": [
        "wordpress.org",
        "https://www.gymshark.com",
        "apify.com"
    ]
};

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

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

```

## MCP server setup

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