Echo Lab Tools

Echo Lab Tools › Tech stack

Find out what CMS, ecommerce platform, email provider and SaaS a website uses, in bulk

The website tech stack detector is an Apify Actor that takes a list of domains and returns, for each one, the technologies it can see (CMS, ecommerce platform, JavaScript framework, analytics, CDN, email provider, SaaS verification records) as JSON, each with a confidence level and the exact evidence that triggered it.

What you get

  • 206 independently written fingerprints over homepage HTML, script URLs, headers, cookie names and meta generator
  • Public DNS signals (MX, TXT/SPF, NS, CNAME): email provider, DNS host and SaaS tools that never appear on the homepage
  • Evidence and confidence for every detection, plus flat name lists and category groups for CSV filtering

Price: $2.50 per 1,000 domains + $0.00005 per runLogin needed: noRuns on: Apify (API, schedule, MCP)

Run the tech stack detector on Apify →See real output ↓

How it works

For each domain (bare or as a URL; duplicates and invalid lines are dropped and not billed), the Actor does two independent things:

Every detection carries a category, a high or medium confidence, a short evidence string and the vendor's website. The Actor then derives best guesses for emailProvider, dnsProvider, hosting and cdn. There is no browser and no JavaScript execution, which keeps it fast and cheap, with the trade-offs listed below.

Sample output

A complete row from a real run on the Apify platform (run CkObmsf1Ee1MNoL6e, build 0.1.4, 2026-11-05):

{
  "domain": "wordpress.org",
  "inputValue": "wordpress.org",
  "finalUrl": "https://wordpress.org/",
  "httpStatus": 200,
  "title": "Blog Tool, Publishing Platform, and CMS – WordPress.org",
  "technologies": [
    {
      "name": "WordPress",
      "category": "CMS",
      "version": "7.2",
      "confidence": "high",
      "evidence": "meta generator: WordPress 7.2",
      "website": "https://wordpress.org"
    },
    {
      "name": "Google services",
      "category": "Domain verification (SaaS used)",
      "version": null,
      "confidence": "high",
      "evidence": "dns txt: google-site-verification=",
      "website": "https://google.com"
    },
    {
      "name": "Google Tag Manager",
      "category": "Tag manager",
      "version": null,
      "confidence": "medium",
      "evidence": "html: googletagmanager.com/gtm.js",
      "website": "https://tagmanager.google.com"
    },
    {
      "name": "nginx",
      "category": "Web server",
      "version": null,
      "confidence": "high",
      "evidence": "header server: nginx",
      "website": "https://nginx.org"
    }
  ],
  "technologyNames": [
    "WordPress",
    "Google services",
    "Google Tag Manager",
    "nginx"
  ],
  "categories": {
    "CMS": [
      "WordPress"
    ],
    "Domain verification (SaaS used)": [
      "Google services"
    ],
    "Tag manager": [
      "Google Tag Manager"
    ],
    "Web server": [
      "nginx"
    ]
  },
  "emailProvider": null,
  "dnsProvider": null,
  "hosting": null,
  "cdn": null,
  "homepageSkipped": null,
  "error": null,
  "errorMessage": null,
  "checkedAt": "2026-11-05T04:03:11.702141+00:00"
}

A larger real run (IboHolfuN2y17Wsa3, build 0.1.3) checked 20 domains in 11 seconds. Part of it, including the misses:

Domain Platform found Email provider CDN Detections Note
wordpress.org WordPress — — 3
techcrunch.com WordPress Mimecast Cloudflare 11
woocommerce.com WordPress, WooCommerce — — 7
gymshark.com Shopify Proofpoint Cloudflare 11
kyliecosmetics.com Shopify, Vue.js Google Workspace Cloudflare 9
vercel.com Next.js, Vercel Hosting Google Workspace — 13
stripe.com Next.js Google Workspace — 13
github.com Contentful Microsoft 365 — 16
webflow.com Webflow Google Workspace — 19
squarespace.com Squarespace Google Workspace — 10
wix.com — Google Workspace — 11
openai.com — Google Workspace — 11 homepage 403 (fetch_failed)

Read the misses too. The tool did not flag Wix on wix.com: whatever wix.com serves on its own homepage did not match our Wix fingerprint. openai.com answered the homepage request with HTTP 403, so only DNS signals were found (still 11 of them, including Google Workspace for email). A made-up domain in the same run came back with no detections and homepageSkipped: "fetch_failed", and was billed as one row.

Output fields

Field Type Meaning
domain, inputValue string Normalized hostname and first supplied value
finalUrl, httpStatus, title string / integer / null Homepage after redirects; null when not fetched
technologies array {name, category, version, confidence, evidence, website} per detection
technologyNames array Flat list of names for CSV filters
categories object Category → names, e.g. {"CMS": ["WordPress"]}
emailProvider, dnsProvider, hosting, cdn string / null Best guesses from all detections
homepageSkipped string / null null, robots_txt or fetch_failed
error, errorMessage string / null When enabled checks cannot complete (e.g. domain_not_found, timeout)
checkedAt string UTC timestamp

Detected categories include CMS, ecommerce, website builders, JavaScript and web frameworks, analytics, tag managers, advertising pixels, A/B testing, marketing automation, CRM, email delivery and hosting, live chat, payments, CDN, hosting/PaaS, DNS providers, web servers, WAFs, consent banners, fonts, video, search, reviews, forms, scheduling and SaaS domain verification (Atlassian, OpenAI, Zoom, Adobe, Slack and others).

How much does a tech stack lookup cost?

Pricing is per result: $2.50 per 1,000 domains ($0.0025 per domain) plus $0.00005 per run, platform usage included. A valid domain whose checks fail is still saved and billed; duplicates and invalid lines are not.

Worked examples: the 20-domain run above is $0.05. Enriching a 1,000-row lead list is $2.50; 10,000 rows is $25. Apify's free plan includes $5 a month for Store tools (apify.com/pricing, checked 2026-11-06), which covers 2,000 domains.

Limits you should know about

  1. Fingerprints, not an inventory. 206 fingerprints will miss things, as wix.com above shows. A detection is evidence of use, not proof of a paid subscription.
  2. No JavaScript execution. Technologies loaded after page load or interaction can be missed, and a vendor script can mean an embedded integration rather than the site's main platform.
  3. DNS signals can be stale. Verification records often outlive the subscription, SPF lists allowed senders rather than current use, and an MX security gateway can hide the real mailbox provider.
  4. Blocked homepages lower recall. HTTP errors, robots rules and anti-bot pages (like openai.com's 403) leave only DNS detections. There is no CAPTCHA solving or bypass.
  5. Only the domains you supply, only today. It cannot list every site that uses Shopify, and it has no history of when a site adopted or dropped a technology.

API: call it from code

curl -X POST "https://api.apify.com/v2/acts/echolab~tech-stack-detector/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["shopify.com", "https://wordpress.org/", "stripe.com"]}'

Python, finding Shopify stores in a lead list:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
domains = [line.strip() for line in open("leads.txt") if line.strip()]
run = client.actor("echolab/tech-stack-detector").call(run_input={
    "domains": domains,
    "categories": ["Ecommerce", "Email hosting"],   # optional allowlist
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if "Shopify" in row["technologyNames"]:
        print(row["domain"], row["emailProvider"])

Tech stack detector vs. BuiltWith and Wappalyzer

Option Good for Trade-off
This Actor Bulk lookups of your own domain list, DNS and email signals included, evidence per detection, paid per domain Smaller fingerprint set; no history; no "all sites using X" lists
BuiltWith Historical technology data and ready-made lists of sites using a technology Subscription pricing
Wappalyzer Large fingerprint set; browser extension for one-off checks; paid API and lead lists Bulk use goes through paid plans
Browser extensions in general Checking one site you have open, with JavaScript executed Manual, one site at a time

When not to use it: if you need a list of every company running a technology, or when a site switched platforms, use BuiltWith or a similar database. If you check one site, a browser extension is quicker. This tool fits when you already have the domains, a CRM export or a scraped list, and want CMS, ecommerce, email and SaaS signals added to each row cheaply.

Open the tech stack detector on Apify for the full input schema.

Changelog

  • 2026-11-06 — made public on the Apify Store; this page published.
  • 2026-11-05 — build 0.1.4: production test on wordpress.org, stripe.com and shopify.com; pay-per-result pricing ($2.50 per 1,000 domains).

Run the tech stack detector on Apify →