Tech Stack Detector - Bulk BuiltWith & Wappalyzer Alternative
Pricing
from $4.30 / 1,000 site analyzeds
Tech Stack Detector - Bulk BuiltWith & Wappalyzer Alternative
Detect what any website is built with: CMS, ecommerce, JavaScript frameworks, analytics, tag managers, CDN, hosting, payments and 100+ categories, with versions and evidence. dryRun prices a run before you pay; charged only for sites analysed.
Pricing
from $4.30 / 1,000 site analyzeds
Rating
0.0
(0)
Developer
Natalia Ivanova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Find out what any website is built with β CMS, ecommerce platform, JavaScript frameworks and libraries, analytics and tag managers, marketing and chat tools, CDN, hosting, web server, programming language, fonts, payment providers and 100+ other categories. Feed it one domain or ten thousand; each site comes back as one row with the detected technologies, their categories, versions where visible, a confidence score and the evidence used.
A drop-in alternative to Wappalyzer / BuiltWith lookups at a fraction of the price: the Actor downloads one page per site and matches it against the open-source webappanalyzer fingerprint database (the community-maintained successor of Wappalyzer's open rules, 3,000+ technologies, refreshed daily). No browser, no API keys.
What you can do with it
- Lead lists by technology β "all Shopify stores in my CRM export", "agencies still on WordPress 5.x", "sites using Intercom but not HubSpot".
- Competitor and market research β what stacks do the top 500 sites in a niche use; share of Next.js vs Nuxt; which analytics tools dominate.
- Sales enrichment β add
technologiesto every account before outreach; trigger sequences on a tech change. - Migration and security audits β spot outdated CMS or library versions across a portfolio of client sites.
- AI agents β let an agent answer "what is example.com built with?" through the Apify MCP server.
Input
| Field | Type | Default | Description |
|---|---|---|---|
websites | array | β | Domains or URLs, one per line. |
maxConcurrency | number | 10 | Parallel fetches. |
requestTimeoutSecs | number | 20 | Per-site timeout. |
minConfidence | number | 0 | Drop weak matches below this confidence (0β100). |
includeTechnologyDetails | boolean | true | Keep the detailed technologies array. |
maxItems | number | 10000 | Cap on websites. |
proxyConfiguration | object | off | Enable Apify Proxy if sites block datacenter IPs. |
{ "websites": ["apify.com", "wordpress.org", "shopify.com", "https://github.com"], "maxConcurrency": 10 }
Output
{"url": "https://wordpress.org","finalUrl": "https://wordpress.org/","domain": "wordpress.org","status": 200,"title": "Blog Tool, Publishing Platform, and CMS β WordPress.org","technologies": [{ "name": "WordPress", "categories": ["CMS", "Blogs"], "version": "6.7", "confidence": 100, "website": "https://wordpress.org", "detectedBy": ["meta", "html", "dom"] },{ "name": "PHP", "categories": ["Programming languages"], "version": null, "confidence": 100, "website": "http://php.net", "detectedBy": ["implied by WordPress"] },{ "name": "jQuery", "categories": ["JavaScript libraries"], "version": "3.7.1", "confidence": 100, "website": "https://jquery.com", "detectedBy": ["script"] }],"technologyNames": ["WordPress", "PHP", "jQuery", "MySQL", "Nginx"],"byCategory": { "CMS": ["WordPress"], "Programming languages": ["PHP"], "JavaScript libraries": ["jQuery"], "Databases": ["MySQL"], "Web servers": ["Nginx"] },"server": "nginx","poweredBy": null,"generator": "WordPress 6.7","techCount": 5,"error": null,"scrapedAt": "2026-09-10T16:20:11Z"}
Sites that cannot be fetched are returned with error filled in and are not charged.
How detection works
For each site the Actor requests the home page once (following redirects, falling back to http:// if https:// fails) and checks the HTML source, <script src> URLs, <meta> tags, response headers, cookies and the final URL against every fingerprint. Rules can imply other technologies (WordPress β PHP, MySQL) or exclude them; confidence adds up when several hints agree. Because there is no browser, technologies that reveal themselves only through JavaScript globals or network calls after page load may be missed β that is the trade-off for speed and price. Enable the proxy option if a site returns a bot challenge instead of the page.
Use cases
Ready-made examples you can run without configuring anything:
- Bulk CMS detector for a domain list β ready-made task, run it as is
- BuiltWith alternative without a subscription β ready-made task, run it as is
Bulk CMS detector for a domain list
Feed ten thousand domains and get the CMS, ecommerce platform and page builder for each, with confidence and the evidence behind the call.
{ "websites": ["example.com", "shop.example.org"] }
BuiltWith alternative without a subscription
The same question β what is this site built with β answered per run instead of per seat, with no monthly minimum.
{ "websites": ["example.com"] }
Wappalyzer alternative at scale
Open fingerprints, 100+ categories, versions where the site exposes them, and a row per site instead of a browser extension.
{ "websites": ["example.com"], "includeTechnologyDetails": true }
Pricing
Pay per event: a small fee per Actor start plus a fee per successfully analyzed site. Failed fetches are free. Current prices are in the Pricing tab.
Use with AI agents (MCP)
Add the Actor to the Apify MCP server and ask "What is competitor.com built with?" β tool input { "websites": ["competitor.com"] }.
Credits and licence
Fingerprints come from the webappanalyzer project (GPL-3.0) and are loaded from its repository at run time; this Actor contributes no rules and is not affiliated with Wappalyzer or BuiltWith. Detection is best-effort and may be incomplete or wrong for heavily customized sites.
Related Actors
Cost control
Pay per event only works if you can see the bill before you pay it:
- Set
dryRunto count every result and print what a full run would cost - nothing is charged, and only a few sample rows are stored. - You are charged only for rows actually delivered to the dataset; a run that finds nothing costs nothing beyond the start event.
maxItemsis respected exactly, and the run stops before the platform's Max total charge for the run.- Every run writes a
COSTrecord to the key-value store: chargeable events, charged events, the amount in USD and whether a limit was hit.