Website Tech Stack Detector avatar

Website Tech Stack Detector

Pricing

Pay per event

Go to Apify Store
Website Tech Stack Detector

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

Martello Systems

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

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 methodDeterministic signature matching. Same site, same input, same answer, every run.
EvidenceEvery hit carries source and evidence, the literal string that matched.
Failed domainsStill get a row, with the error. A 500-domain run never silently returns 480.
BillingYou are charged only for domains that were actually fingerprinted. Dead domains are free.
Charge limitsSet maxTotalChargeUsd and the run trims the input up front. It stops the crawling, not just the invoice.
Coverage49 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

CategoryTechnologies
CMSDrupal, Ghost, HubSpot CMS, Joomla, Squarespace, Webflow, Wix, WordPress
FrameworkAngular, ASP.NET, Express, Gatsby, Laravel, Next.js, Nuxt.js, React, Ruby on Rails, Svelte / SvelteKit, Vue.js
AnalyticsAmplitude, Facebook Pixel, Google Analytics, Google Tag Manager, Hotjar, Mixpanel, Plausible, Segment
CDN / hostingAkamai, Amazon CloudFront, Apache, Cloudflare, Fastly, Netlify, Nginx, Vercel
EcommerceBigCommerce, Magento, Shopify, WooCommerce
MarketingDrift, HubSpot, Intercom, Klaviyo, Mailchimp, Zendesk
PaymentsBraintree, 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

FieldRequiredDescription
domainsyesList 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.