Website Tech Stack Detector - CMS, Analytics, Frameworks, CDN avatar

Website Tech Stack Detector - CMS, Analytics, Frameworks, CDN

Pricing

from $1.50 / 1,000 site analyseds

Go to Apify Store
Website Tech Stack Detector - CMS, Analytics, Frameworks, CDN

Website Tech Stack Detector - CMS, Analytics, Frameworks, CDN

Detect the technology stack of websites (Wappalyzer/BuiltWith alternative). Input: URLs or domains; optional category filter. Returns per site: CMS, ecommerce, analytics, frameworks, CDN, server and payment processors with versions and confidence, from 7,600+ fingerprints. No API key.

Pricing

from $1.50 / 1,000 site analyseds

Rating

0.0

(0)

Developer

Bence Kadi

Bence Kadi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

Website Tech Stack Detector: Wappalyzer & BuiltWith alternative

Find out what any list of websites is built with: CMS, ecommerce platform, analytics and marketing tags, JavaScript framework, CDN, hosting, web server, payment providers and more. One clean row per website, with versions and a confidence score for each technology, for $1.50 per 1,000 websites.

🔎 What is Website Tech Stack Detector?

It checks 7,600+ technology fingerprints (the open-source Wappalyzer-format database, not the 50-250 that many cheap detectors know) against each site's live HTML, headers, cookies, script URLs, meta tags and CSS selectors. It adds its own rules for modern frameworks (Next.js app router, Nuxt, Astro, Remix, SvelteKit). Plain HTTP, no browser, no API key. Sites that fail or show no technology are listed with the reason and not charged.

🎯 Use cases

  • Agencies (prospect qualification): check prospect websites before you pitch. Find WooCommerce or Shopify shops, sites without analytics, or sites on an outdated CMS version.
  • Sales teams (lead lists by technology): filter thousands of domains down to Shopify stores or HubSpot / Klaviyo users, and add CMS, ecommerce and marketing tools to CRM accounts before outreach.
  • Competitor research: see what competitors use for analytics, A/B testing, payments, live chat and hosting. Re-run on a schedule to spot switches.
  • Developers and security teams (version tracking): list exposed versions like WordPress 7.2, jQuery 3.6.0 or Angular 22.2.1 and find outdated software across client sites.
  • Market research: measure technology adoption across a niche. The run summary lists the 25 most common technologies.

📊 Output fields

FieldDescriptionExample
urlWebsite as analysedhttps://www.allbirds.com/
domainDomain without www.allbirds.com
finalUrlURL after redirects (null if not fetched)https://www.allbirds.com/
statusHTTP status, or null200
errorWhy the site failed, null on successDomain not found (DNS lookup failed)
titlePage titleAllbirds: Comfortable, Sustainable Shoes & Apparel
descriptionMeta descriptionAllbirds: The world's most comfortable shoes...
languagePage languageen-US
technologyCountNumber of technologies found10
technologyNamesAll technology names["Shopify", "PayPal", ...]
technologiesname, categories, version, confidence (0-100), website, optional evidencesee Output
cmsCMS, blogs, page builders["WordPress"]
ecommerceEcommerce platforms["Shopify"]
analyticsAnalytics["Leadfeeder"]
cdnCDNs["Cloudflare"]
frameworkJavaScript and web frameworks["Next.js", "React"]
serverWeb servers, reverse proxies["Nginx"]
paymentProcessorsPayments, buy now pay later["Apple Pay", "PayPal"]
hostingPaaS, IaaS, hosting["Vercel"]
tagManagersTag managers["Google Tag Manager"]
marketingAutomationMarketing automation, email["HubSpot"]
advertisingAdvertising, retargeting[]
liveChatLive chat[]
programmingLanguagesServer-side languages["PHP"]
pagesAnalyzedPages analysed for this site1
scrapedAtTime of analysis (UTC)2026-10-05T00:56:25Z

Use cases: Analyze SEO & marketing (extract website metadata & tech stacks) · Generate leads (lead enrichment & validation, build B2B prospect lists) · Research markets & competitors (track competitors, profile companies & due diligence).

🚀 How to use it

  1. Open Website Tech Stack Detector and click Try for free.
  2. Enter your websites as a list, e.g. ["allbirds.com", "wordpress.org"], or as one text value with one site per line (a whole CSV column works).
  3. Optional: pick Only these categories, more Pages per website, or Include evidence.
  4. Click Start. The prefilled example (5 sites) finishes in about 10 seconds.
  5. Download CSV, Excel or JSON, or use the API, Google Sheets, Make, Zapier or n8n.

🔧 Input guide

Websites (urls) - required. A list of domains (example.com) or full URLs (https://example.com/shop), or a single string ("stripe.com", or several sites separated by commas or new lines).

  • ✅ Good: allbirds.com, www.bbc.com, https://vercel.com
  • ❌ Bad: localhost, 192.168.1.10, ftp://example.com (private addresses and other schemes are rejected)
  • https:// is added when missing, with fallback to www. (if DNS fails) and http:// (if HTTPS fails). URLs with a scheme are used as written.
  • Lines are also split on spaces, commas and semicolons; # lines are ignored; duplicates (www. or not) are skipped. Invalid lines go to invalidInputs in the run summary.
  • Max 100,000 websites per run; extra lines are ignored.
  • Via API you can also use the field names url, startUrls (strings or {"url": ...} objects), domains, domain, websites or website: they are merged with urls and de-duplicated. With no website in any of them, the run fails with a status message naming these fields.

Pages per website (maxPagesPerSite) - 1 (default) = only your URL. 2-10 = also same-site pages linked from it, preferring pricing, plans, product, shop, features and blog pages, one per section. Login, admin, account, search and file links are skipped. Use 3-5 for tools that load only on inner pages; keep 1 for a quick CMS check of big lists. You still pay once per website.

Only these categories (onlyCategories) - return only matching technologies. Leave empty for all 100+ categories.

  • ✅ Shopify lead list: ["Ecommerce"], then filter rows where ecommerce contains Shopify.
  • ✅ Marketing stack: ["Analytics", "Tag managers", "Marketing automation", "Advertising", "Live chat"].
  • ⚠️ Via API, names must match the form list (case-insensitive); an unknown name fails the run with Invalid input: Unknown categories: .... Sites with nothing in your categories are not charged.

Include versions (includeVersions) - on by default; adds versions when exposed, e.g. WordPress 7.2.

Include evidence (includeEvidence) - off by default; adds up to 5 strings per technology showing what matched, e.g. scriptSrc: https://cdn.shopify.com/.... Bigger dataset.

Minimum confidence (minConfidence) - hide detections below this score (0-100, default 0). Most score 100; weak signals (a generic script name, a domain seen only in a Content-Security-Policy header) score lower. Try 75 for a stricter list.

Parallel websites (maxConcurrency) - 1-50, default 10. robots.txt and crawl-delay (capped at 30 s) are still respected per site.

Request timeout (requestTimeoutSecs) - 5-60 s, default 20. 429/5xx answers get one retry. Pages are read up to 3 MB; non-HTML files are not downloaded.

Proxy (proxyConfiguration) - off by default. If many sites answer 403, try Apify Proxy (datacenter). Residential proxies are not supported (the run fails with "Invalid input").

{
"urls": ["https://apify.com", "wordpress.org", "www.allbirds.com", "vercel.com", "www.bbc.com"],
"maxPagesPerSite": 1,
"onlyCategories": ["CMS", "Ecommerce", "Analytics"],
"includeVersions": true,
"includeEvidence": false,
"minConfidence": 0,
"maxConcurrency": 10,
"requestTimeoutSecs": 20,
"proxyConfiguration": { "useApifyProxy": false }
}

📦 Output

A real row from a run on 2026-10-05 (prefilled input, technologies list shortened):

{
"url": "https://www.allbirds.com/",
"domain": "allbirds.com",
"finalUrl": "https://www.allbirds.com/",
"status": 200,
"error": null,
"title": "Allbirds: Comfortable, Sustainable Shoes & Apparel",
"description": "Allbirds: The world’s most comfortable shoes, flats, and clothing ... (shortened)",
"language": "en-US",
"technologyCount": 10,
"technologyNames": ["Shopify", "Apple Pay", "PayPal", "Cloudflare", "Google Tag Manager",
"HSTS", "Priority Hints", "Swiper", "HTTP/3", "Open Graph"],
"technologies": [
{ "name": "Shopify", "categories": ["Ecommerce"], "version": null, "confidence": 100, "website": "https://shopify.com" },
{ "name": "PayPal", "categories": ["Payment processors"], "version": null, "confidence": 100, "website": "https://paypal.com" },
{ "name": "Cloudflare", "categories": ["CDN"], "version": null, "confidence": 100, "website": "https://www.cloudflare.com" }
],
"cms": [],
"ecommerce": ["Shopify"],
"analytics": [],
"cdn": ["Cloudflare"],
"framework": [],
"server": [],
"paymentProcessors": ["Apple Pay", "PayPal"],
"hosting": [],
"tagManagers": ["Google Tag Manager"],
"marketingAutomation": [],
"advertising": [],
"liveChat": [],
"programmingLanguages": [],
"pagesAnalyzed": 1,
"scrapedAt": "2026-10-05T00:56:25Z"
}

Failed sites are still listed with status and error, and are free. Examples: HTTP 403 - the site blocks automated requests (try a proxy), Bot protection challenge (HTTP 202) - try again later or with a proxy, robots.txt of this site does not allow automated access to this page (or could not be read) - skipped, Domain not found (DNS lookup failed), Timed out, Not an HTML page (...).

Dataset views in Apify Console:

  • Tech stack overview: CMS, ecommerce, analytics, framework, CDN, server, payments, count
  • All technologies: every technology name per site
  • Marketing stack: analytics, tag managers, marketing / email, advertising, live chat, payments
  • Infrastructure: final URL, server, CDN, hosting, languages, framework, site language
  • Status and errors: HTTP status, error, final URL, time

Run summary: the RUN_SUMMARY record in the key-value store has sitesRequested, sitesAnalysed, sitesWithoutTechnologies, sitesFailed, errors by type, invalidInputs, duplicatesSkipped, pagesFetched, chargeLimitReached, sitesNotProcessed, the 25 topTechnologies, durationSecs and the fingerprint database version.

Export: JSON, CSV, Excel, XML, RSS or HTML table from the Storage tab, or via API (/v2/datasets/{datasetId}/items?format=csv&view=overview).

💵 Pricing: $1.50 per 1,000 websites

One pay-per-event event, site ($0.0015): charged once per website that was analysed and has at least one detected technology, plus Apify's $0.00005 per-run start fee. Platform compute is included. Pages per website don't change the price. Other full-database detectors on the Store charge $5-100 per 1,000.

Free: failed, blocked, robots.txt-disallowed, non-HTML and empty sites, invalid lines and duplicates.

RunCharged websitesCost
Prefilled example5$0.0075
Prospect list100$0.15
Lead list1,000$1.50
Market research10,000$15.00

(Each run also pays the $0.00005 start fee.) Cap spending with Max charge per run: the run stops cleanly at your limit.

🔌 Use it via API

Get your token in Apify Console under Settings → API & Integrations.

The main input field is urls (a list, or one string with sites separated by commas or new lines). For AI agents and scripts, the aliases url, startUrls (strings or {"url": ...} objects), domains, domain, websites and website work too, so {"url": "stripe.com"} or {"domains": ["stripe.com"]} run as expected. Bare domains get https://; duplicates across all fields are skipped.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('kadi_bence/tech-stack-detector').call({
urls: ['allbirds.com', 'wordpress.org'],
onlyCategories: ['CMS', 'Ecommerce'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.domain, i.cms, i.ecommerce]));

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('kadi_bence/tech-stack-detector').call(run_input={'urls': ['allbirds.com', 'wordpress.org']})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['domain'], item['technologyNames'])

cURL (runs and returns items in one call; best for small lists)

curl -X POST "https://api.apify.com/v2/acts/kadi_bence~tech-stack-detector/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" -d '{"urls": ["allbirds.com", "wordpress.org"]}'

Apify CLI

apify call kadi_bence/tech-stack-detector --input '{"urls": ["allbirds.com"]}'
apify call kadi_bence/tech-stack-detector -f input.json

MCP for AI agents (Claude, Cursor, VS Code and other MCP clients):

{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=kadi_bence/tech-stack-detector"}}}

Then ask your agent: "Which of these 20 domains run on Shopify?"

🔁 Integrations & scheduling

Use Apify Schedules (any cron) on a saved task, webhooks ("Run succeeded" → your URL), the Apify app in Zapier, Make and n8n, and Google Sheets, Slack or email through Apify integrations.

  1. Shopify lead list: run your domain list with onlyCategories: ["Ecommerce", "Payment processors"], export the Tech stack overview view to Google Sheets, filter ecommerce for Shopify.
  2. CRM enrichment: when a company is added to your CRM, a Make / Zapier / n8n flow calls run-sync-get-dataset-items with its website and writes cms, ecommerce and marketingAutomation back.
  3. Competitor watch: a weekly schedule on competitor domains with maxPagesPerSite: 3, results to Google Sheets or Slack.
  4. Version tracking: a monthly run on client sites with onlyCategories: ["CMS", "JavaScript libraries", "WordPress plugins"]; compare version values with last month.

Website due diligence

Content pipelines

❓ FAQ

How does it work, and how accurate is it? It fetches each page with plain HTTP and matches fingerprints against the HTML, headers, cookies, script URLs (including scripts injected by inline loaders like Google Tag Manager or Hotjar), meta tags and CSS selectors. Without a browser it cannot see tools that load only after JavaScript runs or after user consent, or only on inner pages (set Pages per website > 1). In our tests the CMS, ecommerce platform, framework, CDN and server were found reliably. Include evidence shows why each one matched.

What are the limits? 100,000 websites per run, 10 pages per website, 50 websites in parallel, 3 MB per page.

How fast is it? In our test, 100 websites took about 15 seconds with 20 in parallel (1 page each, desktop CPU). On Apify with the default 1 GB of memory, expect a few minutes per 1,000 websites. For 10,000+ sites, give the run 4 GB: up to about 4x faster for the same price.

Why are some sites "blocked" or skipped? Some large sites (Amazon, eBay, Etsy, NYTimes...) block automated requests with 403/429 or bot challenges, and some forbid all bots in robots.txt. Those rows show the reason and are not charged. Challenge pages are reported, never solved. On a top-100 test list, 73% of sites were analysed; normal business and shop websites succeed far more often. Usually no proxy is needed; if many sites answer 403, try Apify Proxy (datacenter).

Is it legal? The Actor requests only the pages you list (plus, if asked, a few same-site pages), like a browser would. It respects robots.txt (RFC 9309) and crawl-delay, collects no personal data (no e-mails, names or form data) and never logs in. You are responsible for using the results in line with the sites' terms and your local laws; this is not legal advice.

Can I use it from Python, JavaScript, an AI agent, or no-code tools? Yes: see Use it via API (JavaScript, Python, cURL, CLI, MCP) and Integrations & scheduling (Sheets, Make, Zapier, n8n).

What does a big job cost? 10,000 analysed sites ≈ $15; 100,000 (the per-run maximum) ≈ $150, plus the start fee. Failed and empty sites are free. Set Max charge per run as a hard cap.

What if something fails or is wrong? Failed sites carry an error and are free. If a whole run fails, read the status message (e.g. Invalid input: ...) and RUN_SUMMARY. For a missing or wrong technology, open an issue on the Issues tab with the website and technology; fixes usually land within 24-48 hours. See the Changelog for updates.

Where do the fingerprints come from? From webappanalyzer, the open-source continuation of the Wappalyzer technology database (GPL-3.0, © its contributors), plus a few rules of our own. See Credits below.

📝 Changelog

  • 2026-10-05: Input aliases for API and AI-agent calls: urls also takes a single string or a comma/newline-separated list, and url, startUrls, domains, domain, websites and website are accepted and merged. A run with no website fails with a clear message naming the accepted fields.
  • 2026-10-05: Store page rewritten.
  • 1.0 (2026-10-05): First release. 7,600+ fingerprints (webappanalyzer snapshot of 2026-09-16), versions, confidence scores, evidence, multi-page scanning, robots.txt per RFC 9309, failed and blocked sites not charged.

🤝 Need a custom version?

I build custom scrapers, scheduled data feeds and integrations (CSV, Excel, Google Sheets, API, MCP for AI agents). Tell me the sites and fields you need:

Credits and licence notice

Technology fingerprints: webappanalyzer by Enthec and contributors, https://github.com/enthec/webappanalyzer, licensed under the GNU GPL v3.0. The data is used unmodified, and the licence text ships with the Actor. This Actor is not affiliated with or endorsed by Wappalyzer, BuiltWith, Enthec or any vendor whose technology it detects. All product names are trademarks of their owners.

More low-cost Actors by the same developer, built on official APIs and public data:

All my Actors: apify.com/kadi_bence