Website Tech Stack Detector: BuiltWith & Wappalyzer Alternative avatar

Website Tech Stack Detector: BuiltWith & Wappalyzer Alternative

Pricing

$5.00 / 1,000 website with technologies detecteds

Go to Apify Store
Website Tech Stack Detector: BuiltWith & Wappalyzer Alternative

Website Tech Stack Detector: BuiltWith & Wappalyzer Alternative

Bulk tech stack lookup for a list of websites, a live pay-per-result alternative to BuiltWith and Wappalyzer. CMS, ecommerce platform, frameworks, analytics, tag managers, payments, hosting, CDN, email provider. 21 ready columns, CSV or JSON. You pay only for sites where something was found.

Pricing

$5.00 / 1,000 website with technologies detecteds

Rating

0.0

(0)

Developer

Evgeny Domnin

Evgeny Domnin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Website Tech Stack Detector

Give it a list of websites. Get back what each one runs: CMS, ecommerce platform, JavaScript framework, analytics, tag manager, payment processor, CRM, hosting, CDN, server language, email provider.

You pay only for websites where something was found. Blocked, dead and empty rows are still written to the dataset. They cost nothing.

What you get

  • 21 ready columns per website. Open the CSV, filter by CMS = Shopify. No JSON parsing.
  • Proof for every technology. Which channel matched and what exactly: header, cookie, script, meta tag, JavaScript global, MX record.
  • CPE identifiers for vulnerability lookups. 463 technologies carry one, mostly CMSes, web servers and web frameworks.
  • Email provider from MX, in one DNS query. Google Workspace, Microsoft 365, Proofpoint, self-hosted.
  • Versions and confidence, where the page gives them away.
  • 7613 technologies in the rule set, pinned to a fixed commit.

What it is for

  • Lead lists: find every prospect on Shopify, or every site still on WordPress.
  • Competitor research: what stack a market uses.
  • Sales signals: who runs HubSpot, Segment, Klaviyo, Stripe.
  • Security triage: CPE strings join your rows to a vulnerability database.

Input

Paste domains, one per line. A bare host name is fine.

{ "urls": ["allbirds.com", "vercel.com", "wordpress.org"] }

Upload a file instead: .txt or .csv, one website per line. In a CSV the first column that looks like a domain is used, so a CRM export works as is.

shopify.com,Shopify Inc,5000
allbirds.com;Allbirds
wordpress.org

A link to a remote list works too: {"startUrls": [{"requestsFromUrl": "https://example.com/domains.txt"}]}.

The field can also be called domains, websites, targetUrls, startUrls or url. Mix them if you like. Duplicates are dropped.

Options

OptionWhat it does
alwaysBrowserRender every site in a browser. On by default - it is where analytics, tag managers and pixels come from. Turn it off for a run about three times faster.
useBrowserTurn off for the fastest, cheapest pass: one plain HTTP request per site and nothing else.
slimRow without the per-technology array. 3.6x lighter. Columns stay, evidence and CPE go.
maxConcurrencyParallel requests. Leave empty: the Actor takes 10 per CPU core, and Apify gives one core per 4 GB of run memory.

Output

One row per website.

{
"input": "ledger.com",
"url": "https://www.ledger.com/",
"status": "ok",
"title": "Ledger Crypto Wallet - Security for DeFi & Web3",
"technologyCount": 16,
"technologyNames": "WordPress, Contentful, MySQL, PHP, Yoast SEO, Swiper, Optimizely, OneTrust, jQuery Migrate, jQuery, Google Tag Manager, Font Awesome, Cloudflare Bot Management, Cloudflare, cdnjs, Google Workspace",
"CMS": "WordPress, Contentful, Yoast SEO",
"Ecommerce": "",
"Payments": "",
"Analytics": "Optimizely",
"Advertising": "",
"Tag managers": "Google Tag Manager",
"Marketing": "Optimizely",
"CRM & support": "",
"Frontend": "Swiper, jQuery Migrate, jQuery, Font Awesome",
"Web frameworks": "",
"Languages": "PHP",
"Databases": "MySQL",
"Hosting & CDN": "Cloudflare, cdnjs",
"Security": "Cloudflare Bot Management",
"Privacy": "OneTrust",
"SEO": "Yoast SEO",
"Media": "",
"Dev tools": "",
"Business tools": "",
"Email hosting": "Google Workspace",
"Other": "",
"technologies": [
{
"name": "WordPress",
"version": null,
"confidence": 100,
"categories": ["CMS", "Blogs"],
"website": "https://wordpress.org",
"cpe": "cpe:2.3:a:wordpress:wordpress:*:*:*:*:*:*:*:*",
"pricing": ["low", "recurring", "freemium"],
"saas": true,
"evidence": [
{ "type": "html", "match": "<link rel='stylesheet' href='https://www.ledger.com/wp-content/" },
{ "type": "scriptSrc", "match": "/wp-includes/" }
]
}
// ...and 15 more
],
"meta": {
"method": "http",
"httpStatus": 200,
"https": true,
"server": "cloudflare",
"poweredBy": null,
"generator": "WPML ver:4.9.6 stt:5,59,1,4,3,28,29,42,45,2,52,53;",
"durationMs": 173,
"error": null,
"analyzedAt": "2026-09-08T07:01:44.019Z",
"rulesDate": "2026-09-06"
}
}

The 21 columns

CMS, Ecommerce, Payments, Analytics, Advertising, Tag managers, Marketing, CRM & support, Frontend, Web frameworks, Languages, Databases, Hosting & CDN, Security, Privacy, SEO, Media, Dev tools, Business tools, Email hosting, Other.

  • Every column is always there. Empty string when nothing was found. Your saved filter keeps working between runs.
  • Values are comma-separated strings, not lists. A list would export to CSV as CMS/0, CMS/1.
  • All 109 categories of the rule set map into these 21. A test checks it, so nothing falls out silently.
  • One technology can sit in two columns. Yoast SEO is a WordPress plugin and an SEO tool. Exact categories are in technologies[].categories.

Evidence

Every technology says why we say so.

typeWhere it matched
headersresponse header
cookiescookie name
metameta tag
scriptSrc, scriptsscript URL or inline script
htmlpage markup
jsJavaScript global in the rendered page
mxMX record, for the email provider
impliednot seen directly, implied by another technology. React implied by Next.js, MySQL implied by WordPress

Status

statusMeaningCharged
oksomething real was foundyes
infrastructure-onlythe site answered, but only said where it is hosted or what wall guards itno
blocked4xx or 5xxno
deadDNS failure, refused connection, timeoutno

Never an answer on its own:

  • protocol markers: HSTS, HTTP/2, HTTP/3, Open Graph, RSS, PWA, Cloudflare;
  • hosting only: PaaS, IaaS, CDN, web servers, reverse proxies, caching, load balancers;
  • the wall in front of the site: anti-bot, captcha, cookie banner.

A language, a framework, a CMS, an analytics tag or a payment processor counts, even alone.

How it works

  1. One HTTP request to the home page, sent with a real browser TLS fingerprint. Answers most sites in about a second.
  2. Then the page is opened in a real Chromium. JavaScript runs, and the rendered HTML, cookies and JavaScript globals are read. Analytics, tag managers and ad pixels exist only after this step: measured on 200 sites, it is the difference between 8 technologies per site and 12. Turn it off for a run about three times faster.
  3. One DNS query for MX, in parallel. Never touches the site.

Measured, not promised

Run on 2026-09-14 with this Actor: 100 active Y Combinator company sites, 100 sites from the Tranco top-250k on Western commercial TLDs.

YC company sitesGeneral web
Answered with technologies (charged)89 of 10071 of 100
Only infrastructure (free)012
4xx or 5xx (free)16
Did not resolve or connect (free)1011
Median technologies per answered site1210
Email provider found7051

The misses on the general-web sample are the sample, not the Actor: those domains do not resolve or refuse every connection.

All 200 sites took 8 to 9.5 minutes on the default 4 GB of run memory, across repeated runs.

Speed scales with the memory you give the run, because Apify gives one CPU core per 4 GB: the same 200 sites take about 4.5 minutes at 8 GB and under 3 minutes at 16 GB. Same answers, the run just has more cores to work with.

What it does not do

  • Home page only. A technology used only in checkout or behind a login will not show up.
  • Sites that refuse datacenter traffic stay refused. Proxies were measured: of 13 such sites, a residential IP recovered 2. The other 11 refuse everyone.
  • No login, no crawling past the first page.

Compared to BuiltWith and Wappalyzer

Different jobs, and this one is narrower.

  • They answer "which sites in the world run X". They own a historical database and can sell you a list, with adoption history. This Actor cannot do that at all.
  • This Actor answers "what does each of these sites run right now". You bring the domain list, it visits every site live, in a real browser, and returns the current answer with the evidence for each finding.
  • Pay per result, $5 per 1000. No subscription, no monthly floor. A site where nothing was found costs nothing.

If your list of domains already exists, this is the cheaper and fresher route. If you need the database itself, buy the database.

Detection rules

Open rule set enthec/webappanalyzer, pinned to one commit, so the same page gives the same answer next month.

  • Commit 2b5eed3a5eede8b2415fcd0b27c003d625ad88d3
  • Commit date 3 September 2026, vendored into this Actor 2026-09-08
  • 7613 technologies, 109 categories

meta.rulesDate in every row records which rule set produced it.

Pricing

$5 per 1000 websites. Charged per row with status: ok. Nothing else is charged.

A row that says Cloudflare, HTTP/3 and nothing else tells you nothing about the site. Here it is free.

Changelog

0.1 - 2026-09-14

  • Every site is now rendered in a browser, not only the silent ones. Median technologies per site went from 8 to 12, and no site came back with less.
  • The run is a single queue instead of two passes, and HTML parsing moved off the main thread. The plain pass got about twice as fast; the full browser pass on 16 GB now takes what the plain pass used to take on 4 GB.
  • A run that is interrupted and resumed no longer repeats sites, so nothing is charged twice.
  • Parallelism is derived from the memory you give the run.

0.1 - 2026-09-08

  • Email provider from MX records, new Email hosting column.
  • Every technology carries evidence. Implied ones now say what implied them.
  • HTTP pass sends a real browser TLS fingerprint.
  • Upload a .txt or .csv with your domains, or link a remote list.
  • slim output option.
  • 21 category columns, all 109 rule-set categories mapped.
  • Anti-bot challenge pages no longer count as an answer, and are no longer charged.

0.1 - 2026-09-06

First release. HTTP first, browser pass for silent sites, rules pinned to a commit, charging only for rows that carry a result.