Website Tech Stack Detector
Pricing
Pay per event
Website Tech Stack Detector
Give it a list of domains. For each, it fetches the homepage and deterministically detects the technology stack from response headers, HTML, scripts, and JSON-LD. No LLM. One record per domain, technologies grouped by category.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Martello Systems
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Every detection comes with the exact signal that produced it. Feed it a list of domains, get back one record per domain naming the CMS, framework, analytics, CDN, ecommerce, marketing and payment tools each site runs, plus the header, script URL, cookie or markup fingerprint that proved it.
No LLM. No API key. No confidence scores to second-guess.
{ "domains": ["shopify.com", "wordpress.org", "vercel.com"] }
Why this one
Most tech-stack detectors hand you a list of names and ask you to trust it. When a name is wrong you have no way to tell, and when it is right you cannot show anyone why. This actor records the evidence for every single hit:
{"tech": "Shopify", "category": "ecommerce", "source": "script_src", "evidence": "cdn.shopify.com"}
That matters when you are acting on the output rather than browsing it: routing a lead because a prospect runs Shopify, sizing a migration, or filing a competitive brief someone else will check.
| This actor | |
|---|---|
| Detection method | Deterministic signature matching. Same site, same input, same answer, every run. |
| Evidence | Every hit carries source and evidence, the literal string that matched. |
| Failed domains | Still get a row, with the error. A 500-domain run never silently returns 480. |
| Billing | You are charged only for domains that were actually fingerprinted. Dead domains are free. |
| Charge limits | Set maxTotalChargeUsd and the run trims the input up front. It stops the crawling, not just the invoice. |
| Coverage | 49 technologies across 7 categories, listed in full below. No inflated count. |
| Cost | $0.01 per domain analyzed. |
On coverage, plainly: 49 signatures is a focused set, not an exhaustive one. It covers the tools that actually change a commercial decision. If you need the long tail of 2,000 obscure libraries, a Wappalyzer-database actor is the better buy. If you need to know whether 4,000 prospects are on Shopify or WooCommerce and be able to prove it, this is built for that.
What it detects
| Category | Technologies |
|---|---|
| CMS | Drupal, Ghost, HubSpot CMS, Joomla, Squarespace, Webflow, Wix, WordPress |
| Framework | Angular, ASP.NET, Express, Gatsby, Laravel, Next.js, Nuxt.js, React, Ruby on Rails, Svelte / SvelteKit, Vue.js |
| Analytics | Amplitude, Facebook Pixel, Google Analytics, Google Tag Manager, Hotjar, Mixpanel, Plausible, Segment |
| CDN / hosting | Akamai, Amazon CloudFront, Apache, Cloudflare, Fastly, Netlify, Nginx, Vercel |
| Ecommerce | BigCommerce, Magento, Shopify, WooCommerce |
| Marketing | Drift, HubSpot, Intercom, Klaviyo, Mailchimp, Zendesk |
| Payments | Braintree, PayPal, Square, Stripe |
Signals read per domain: response headers, Set-Cookie, the <meta generator>
tag, every <script src> and <link href>, code fingerprints in the HTML body,
and JSON-LD blocks.
Use it for
- Lead routing and scoring. Segment a prospect list by ecommerce platform, payment processor or marketing stack before anyone writes an email.
- Competitive intelligence. Snapshot a set of competitors' stacks and diff it on a schedule to catch a re-platform.
- Migration and agency scoping. Know what a site runs before quoting the work.
- Partner and integration targeting. Find every company already running the tool you integrate with.
Input
| Field | Required | Description |
|---|---|---|
domains | yes | List of domains or homepage URLs. One record per entry. example.com, www.example.com and https://example.com all work; a bare domain gets https:// prefixed. |
Homepage only, one GET per domain, so a large list stays fast and cheap.
Output
One dataset record per domain, always emitted:
{"domain": "shopify.com","url": "https://shopify.com","final_url": "https://www.shopify.com/","status_code": 200,"ok": true,"technologies": {"ecommerce": ["Shopify"],"cdn": ["Cloudflare", "Fastly"],"analytics": ["Google Analytics", "Segment"],"framework": ["React"],"marketing": ["HubSpot"],"payments": ["Stripe"]},"all_technologies": ["Cloudflare", "Fastly", "Google Analytics", "HubSpot", "React", "Segment", "Shopify", "Stripe"],"raw_signals": {"server_header": "cloudflare","x_powered_by": null,"meta_generator": null,"matched": [{"tech": "Shopify", "category": "ecommerce", "source": "script_src", "evidence": "cdn.shopify.com"}]}}
A domain that could not be fetched still ships a record, with ok: false and an
error string, so a bulk run is auditable end to end.
The run also writes a SUMMARY record to the key-value store with
domains_analyzed, domains_ok and tech_frequency, which is the fastest way
to answer "what is the most common stack across this list".
Pricing and cost control
$0.01 per domain analyzed, charged on the website-analyzed event, plus
Apify's $0.00005 actor start. Platform usage is included.
A domain that fails to fetch is not charged.
Set maxTotalChargeUsd on the run and the actor trims the domain list to what
that budget covers before it starts fetching, then re-checks inside the loop.
The cap stops the work, not just the billing, so an over-budget run does not
quietly burn proxy bandwidth you are not paying for. The log line
[charge-guard] this run can bill N ... trimming to N records exactly what was
dropped.
Notes
- All egress is routed through the Apify residential proxy, so bulk runs are not blocked on a single IP.
- Detection is homepage-only by design. It is what makes a 5,000-domain run cheap and predictable. Sites that render everything client-side after the first paint will report fewer technologies.
- Nothing is inferred or guessed. If a technology is not in the table above, this actor will not report it, and it will never invent one to fill a row.
Built by Martello Systems.