# Website Tech Stack Detector - CMS, Analytics & Hosting Lookup (`paperlinenstudio/tech-stack-detector`) Actor

Find out what any website is built with, in bulk: CMS, shop system, JS frameworks, analytics, consent tool, CDN, hosting, live chat, payments and email provider. 300+ technologies with version and evidence. Filter to find leads, e.g. all Shopify shops.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 – CMS, Analytics & Hosting Lookup

Find out **what any website is built with**, for one site or thousands. Paste domains and get one row per website:

- **CMS / website builder**: WordPress (with version), TYPO3, Contao, Drupal, Joomla, Shopware, Wix, Jimdo, Webflow, Squarespace, HubSpot CMS, Contentful …
- **Shop system**: Shopify, WooCommerce, Shopware, Magento, JTL-Shop, Gambio, Plentymarkets, PrestaShop, OXID …
- **JavaScript frameworks**: React, Next.js, Vue, Nuxt, Angular, Svelte, Astro, plus jQuery and other libraries, with versions where visible
- **Analytics, tag managers & ad pixels**: GA4, Matomo, etracker, Hotjar, Clarity, GTM, Meta Pixel, LinkedIn, TikTok, Google Ads …
- **Cookie consent tool (CMP)**: Cookiebot, Usercentrics, OneTrust, Borlabs, Complianz, CCM19, consentmanager …
- **CDN, hosting & web server**: Cloudflare, Fastly, Akamai, CloudFront, Vercel, Netlify, WP Engine, Nginx, Apache, LiteSpeed …
- **Email provider** from MX records: Google Workspace, Microsoft 365, IONOS, STRATO, Proofpoint, Mimecast …
- **Live chat, CRM & marketing automation, payments, reviews, booking tools, captchas, video, maps**

Each technology comes with its **category, version (if exposed) and evidence**, i.e. the header, cookie, script URL or HTML snippet that matched. You can check every result yourself. The fingerprint set is our own (324 technologies, list below) and is tuned for European, and especially German, websites.

It needs no browser and no API key, so a run is fast and cheap: about 1–3 seconds per website, many in parallel.

### What you can use it for

- **Lead generation**: filter a domain list down to the shops on Shopify, WooCommerce or Shopware, or the sites still running Universal Analytics, then pitch your agency or app (`filterTechnologies`)
- **Sales qualification and CRM enrichment**: add CMS, shop system, email provider and marketing stack to your leads
- **Competitor research**: see which analytics, A/B testing, chat and payment tools competitors use
- **Agency audits and GDPR checks**: which client sites use Google Fonts from Google's servers, which use no consent tool, and which use outdated jQuery
- **Market research**: count the technology mix across thousands of sites; the run `SUMMARY` holds a ready-made technology ranking

### Input

| Field | Description |
|---|---|
| `urls` | Domains or URLs (`example.com`, `https://shop.example.de/`) |
| `filterTechnologies` | Optional: only return sites using one of these, e.g. `["Shopify", "WooCommerce"]`. Filtered-out sites are not charged. |
| `detectEmailProvider` | MX lookup via DNS-over-HTTPS (default `true`) |
| `includeEvidence` | Add the matching evidence to every technology (default `true`) |
| `maxItems`, `maxConcurrency`, `timeoutSecs` | Limits |

```json
{"urls": ["wordpress.org", "shopify.com", "shopware.com"], "filterTechnologies": []}
```

### Output (real example, shortened)

```json
{
  "url": "https://shopware.com/",
  "domain": "shopware.com",
  "finalUrl": "https://www.shopware.com/en/",
  "statusCode": 200,
  "title": "The ecommerce platform to power your online business | Shopware",
  "language": "en",
  "cms": "Contentful",
  "ecommerce": null,
  "jsFrameworks": ["Nuxt", "Vue.js"],
  "analytics": [],
  "tagManagers": ["Google Tag Manager"],
  "consentManagers": ["Usercentrics"],
  "cdn": ["Fastly"],
  "webServers": ["Nginx"],
  "emailProvider": "Microsoft 365",
  "mxRecords": ["shopware-com.mail.protection.outlook.com"],
  "technologyCount": 14,
  "technologyNames": ["Fastly", "Contentful", "Varnish", "Usercentrics", "Nuxt", "Vue.js", "PWA (Web App Manifest)", "Open Graph", "Schema.org JSON-LD", "Friendly Captcha", "Content Security Policy", "HSTS", "Google Tag Manager", "Nginx"],
  "categories": {"CDN": ["Fastly"], "CMS": ["Contentful"], "Consent management": ["Usercentrics"], "JavaScript framework": ["Nuxt", "Vue.js"], "…": []},
  "technologies": [
    {"name": "Fastly", "category": "CDN", "version": null, "evidence": "header x-served-by: cache-cmh1290047-CMH"},
    {"name": "Usercentrics", "category": "Consent management", "version": null, "evidence": "html …href=\"https://app.usercentrics.eu\"…"}
  ],
  "warning": null,
  "error": null,
  "responseTimeMs": 1770
}
```

Unreachable sites get an `error` such as `Domain does not resolve (no A/AAAA record)` or a timeout. If HTTPS fails but HTTP works, `httpsError` records why. `warning` flags error pages (HTTP 4xx/5xx) and near-empty pages. The key-value store record `SUMMARY` counts how often each technology was found across the run.

### How detection works and its limits

It reads the page you enter (the homepage for a bare domain) the way a crawler does, **without running JavaScript**, and matches HTTP headers, cookie names, meta tags, script and stylesheet URLs and HTML markers against the fingerprint list.

- Tools that are injected only by JavaScript at runtime, for example through Google Tag Manager or only after cookie consent, may not show up. The tag manager itself is detected.
- Bot protection (Cloudflare challenge, Akamai) can return a challenge page. You then get the CDN and a `warning`, not the full stack.
- Versions are only reported where a site exposes them (generator meta tag, server header, file names).
- Hosting providers that leave no trace in headers can't be identified from HTTP alone.

### Supported technologies (324)

<details><summary>Show the full list</summary>

- **A/B testing** (6): AB Tasty, Dynamic Yield, Kameleoon, LaunchDarkly, Optimizely, VWO
- **Accessibility** (4): AudioEye, Eye-Able, UserWay, accessiBe
- **Advertising** (15): AWIN, Criteo, DoubleClick (Google Marketing Platform), Google AdSense, Google Ads, LinkedIn Insight Tag, Meta Pixel, Microsoft Advertising (Bing UET), Outbrain, Pinterest Tag, Reddit Pixel, Snap Pixel, Taboola, TikTok Pixel, X (Twitter) Pixel
- **Analytics** (22): Adobe Analytics, Amplitude, Cloudflare Web Analytics, Fathom, Google Analytics (Universal), Google Analytics 4, Heap, Hotjar, Matomo, Microsoft Clarity, Mixpanel, Mouseflow, Piwik PRO, Plausible, PostHog, Segment, Simple Analytics, Smartlook, Umami, Vercel Analytics, Yandex Metrica, etracker
- **Booking / scheduling** (9): Acuity Scheduling, Booking.com widget, Bookingkit, Calendly, Doctolib, OpenTable, Resmio, Shore, SimplyBook.me
- **Build tool** (2): Vite, Webpack
- **CDN** (11): Akamai, Amazon CloudFront, Azure Front Door, Bunny CDN, Cloudflare, Fastly, Imperva, KeyCDN, cdnjs, jsDelivr, unpkg
- **CMS** (27): Adobe Experience Manager, Bitrix, Blogger, Confluence, Contao, Contentful, Craft CMS, DokuWiki, Drupal, Ghost, HubSpot CMS, Joomla, Kirby, MediaWiki, Medium, Neos, Plone, Prismic, Sanity, Sitecore, Statamic, Storyblok, Strapi, Substack, TYPO3, Umbraco, WordPress
- **CRM** (3): Pipedrive, Salesforce, Zoho
- **Cache** (1): Varnish
- **Consent management** (18): Borlabs Cookie, CCM19, Complianz, Cookie Notice (Hu-manity), CookieYes, Cookiebot, Didomi, Google Consent Mode, Klaro, OneTrust, Osano, Real Cookie Banner, Sourcepoint, Termly, TrustArc, Usercentrics, consentmanager.net, iubenda
- **Database** (1): MySQL
- **Ecommerce** (16): BigCommerce, Ecwid, Etsy Pattern, Gambio, JTL-Shop, Lightspeed eCom, Magento, OXID eShop, OpenCart, Plentymarkets, PrestaShop, Saleor, Salesforce Commerce Cloud, Shopify, Shopware, WooCommerce
- **Email marketing** (8): Brevo (Sendinblue), CleverReach, ConvertKit (Kit), Klaviyo, Mailchimp, MailerLite, Newsletter2Go, Rapidmail
- **Fonts** (4): Adobe Fonts, Bunny Fonts, Font Awesome, Google Fonts
- **Forms** (4): Contact Form 7, Gravity Forms, Jotform, Typeform
- **Hosting / PaaS** (15): Amazon S3, Amazon Web Services, Firebase Hosting, Fly.io, GitHub Pages, Google Cloud, Heroku, Kinsta, Microsoft Azure, Netlify, Pantheon, Raidboxes, Render, Vercel, WP Engine
- **JavaScript framework** (10): Angular, AngularJS, Ember.js, Next.js, Nuxt, React, Remix, Svelte, SvelteKit, Vue.js
- **JavaScript library** (15): Alpine.js, GSAP, Lodash, Lottie, Modernizr, RequireJS, Slick, Stimulus, Swiper, Three.js, Turbo, core-js, htmx, jQuery, jQuery UI
- **Live chat** (14): Chatwoot, Crisp, Drift, Freshchat, HubSpot Chat, Intercom, LiveChat, Olark, Smartsupp, Tawk.to, Tidio, Userlike, WhatsApp chat button, Zendesk
- **Maps** (4): Google Maps, Leaflet, Mapbox, OpenStreetMap
- **Marketing automation** (9): ActiveCampaign, Albacross, Braze, Customer.io, HubSpot, Leadfeeder / Dealfront, Marketo, OptinMonster, Salesforce Pardot
- **Mobile** (1): AMP
- **Monitoring / RUM** (5): Bugsnag, Datadog RUM, Dynatrace, New Relic, Sentry
- **Payment** (11): Adyen, Amazon Pay, Apple Pay, Google Pay, Klarna, Mollie, Paddle, PayPal, Shop Pay, Stripe, Unzer
- **Programming language** (6): ASP.NET, Java, Node.js, PHP, Python, Ruby
- **Progressive Web App** (1): PWA (Web App Manifest)
- **Reviews** (8): Feefo, Google Reviews widget (Elfsight), Judge.me, ProvenExpert, Trusted Shops, Trustpilot, Yotpo, eKomi
- **SEO** (2): Open Graph, Schema.org JSON-LD
- **SEO plugin** (2): Rank Math, Yoast SEO
- **Security / captcha** (6): Cloudflare Turnstile, Friendly Captcha, Sucuri, Wordfence, hCaptcha, reCAPTCHA
- **Security header** (2): Content Security Policy, HSTS
- **Site search** (6): Algolia, Doofinder, Elasticsearch, FactFinder, Klevu, Searchspring
- **Social / embeds** (5): AddToAny, Disqus, Facebook SDK, Instagram embed, ShareThis
- **Static site generator** (9): Astro, Docusaurus, Eleventy, Gatsby, Hugo, Jekyll, MkDocs, Sphinx, VitePress
- **Tag manager** (4): Adobe Launch, Commanders Act, Google Tag Manager, Tealium
- **UI framework** (6): Bootstrap, Bulma, Chakra UI, Foundation, Material UI, Tailwind CSS
- **Video** (6): JW Player, Mux, Vidyard, Vimeo, Wistia, YouTube
- **Web framework** (5): Django, Express, Laravel, Ruby on Rails, Symfony
- **Web server** (8): Apache, Caddy, Envoy, LiteSpeed, Microsoft IIS, Nginx, OpenResty, Phusion Passenger
- **Website builder** (13): Carrd, Divi, Duda, Elementor, Framer, GoDaddy Website Builder, IONOS MyWebsite, Jimdo, Squarespace, WPBakery, Webflow, Weebly, Wix

</details>

### Pricing

Free to use. You only pay for the Apify platform usage of your run, which is very low because no browser is used.

***

### Deutsch: Kurzbeschreibung

**Website Tech Stack Detector**: Für beliebig viele Websites erkennen, womit sie gebaut sind:

- CMS (WordPress, TYPO3, Contao, Jimdo …) und Shopsystem (Shopify, Shopware, WooCommerce, JTL, Gambio …)
- Frameworks, Analytics und Werbe-Pixel
- Cookie-Consent-Tool (Cookiebot, Usercentrics, Borlabs …)
- CDN, Hosting, Webserver und E-Mail-Anbieter (MX)

Mit Version und Nachweis (Header, Cookie, Script). Ideal für Leadgenerierung, z. B. alle Shopware- oder WooCommerce-Shops einer Liste finden, sowie für Wettbewerbsanalyse und DSGVO-Checks. Kein Browser, kein API-Key.

# Actor input Schema

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

Domains or URLs to analyze, e.g. example.com or https://shop.example.de/. The page you enter is fetched (the homepage if you give a bare domain). Duplicates are removed.

## `filterTechnologies` (type: `array`):

Return only websites where at least one of these technologies is detected, e.g. Shopify, WooCommerce, Shopware, Matomo, Cookiebot. Use the exact names from the README list (case-insensitive). Filtered-out websites are not charged.

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

Look up the domain's MX records via DNS-over-HTTPS and name the email provider (Google Workspace, Microsoft 365, IONOS, STRATO, Proofpoint …).

## `includeEvidence` (type: `boolean`):

Show why each technology was detected (header, cookie, script URL or HTML snippet).

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

Stop after this many websites.

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

Websites analyzed in parallel.

## `timeoutSecs` (type: `integer`):

Request timeout.

## Actor input object example

```json
{
  "urls": [
    "wordpress.org",
    "shopify.com",
    "vercel.com"
  ],
  "filterTechnologies": [],
  "detectEmailProvider": true,
  "includeEvidence": true,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "timeoutSecs": 30
}
```

# Actor output Schema

## `items` (type: `string`):

No description

## `summary` (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 = {
    "urls": [
        "wordpress.org",
        "shopify.com",
        "vercel.com"
    ]
};

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

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

```

## MCP server setup

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