Website Tech Stack Detector avatar

Website Tech Stack Detector

Pricing

from $10.00 / 1,000 website analyzeds

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

from $10.00 / 1,000 website analyzeds

Rating

0.0

(0)

Developer

Martello Systems

Martello Systems

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Security

Limited permissions

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.
Coverage127 technologies across 7 categories, every one listed in full below. The count is the real signature count, not a database size.
Cost$0.01 per domain analyzed.

On coverage, plainly: 127 signatures covers the tools that actually change a commercial decision - what a site sells on, charges with, tracks with, and runs on. It is not a 2,000-entry fingerprint database and does not claim to be. Every one of the 127 is listed below, so you can check before you buy whether the specific technology you care about is in there, which is not something a "2,000+ technologies" claim lets you do. If you need the obscure long tail, 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 which signal said so, this is built for that.

What it detects

CategoryCountTechnologies
CMS18Adobe Experience Manager, Bloomreach, Contentful, Craft CMS, Drupal, Duda, Framer, Ghost, HubSpot CMS, Joomla, Prismic, Sanity, Sitecore, Squarespace, Strapi, Webflow, Wix, WordPress
Framework / runtime23Alpine.js, Angular, ASP.NET, Astro, Backbone.js, Django, Ember.js, Express, Flask, Gatsby, htmx, Java (servlet container), jQuery, Laravel, Next.js, Nuxt.js, React, Remix, Ruby on Rails, Svelte / SvelteKit, Symfony, Turbo (Hotwire), Vue.js
Ecommerce14Big Cartel, BigCommerce, Ecwid, Magento, OpenCart, PrestaShop, Salesforce Commerce Cloud, Shift4Shop, Shopify, Shopware, Snipcart, Squarespace Commerce, Volusion, WooCommerce
Analytics / monitoring20Adobe Analytics, Amplitude, Cloudflare Web Analytics, Datadog RUM, Facebook Pixel, Fathom Analytics, FullStory, Google Analytics, Google Tag Manager, Heap, Hotjar, LogRocket, Matomo, Microsoft Clarity, Mixpanel, New Relic, Pendo, Plausible, Segment, Sentry
Marketing / CX / consent20ActiveCampaign, Braze, Calendly, Cookiebot, Crisp, Drift, Freshworks, HubSpot, Intercom, Iterable, Klaviyo, Mailchimp, Marketo, OneTrust, Optimizely, Salesforce Pardot, Tawk.to, Typeform, VWO, Zendesk
Payments14Adyen, Affirm, Afterpay, Authorize.Net, Braintree, Chargebee, Klarna, Mollie, Paddle, PayPal, Razorpay, Recurly, Square, Stripe
CDN / hosting / server18Akamai, Amazon CloudFront, Apache, Bunny CDN, Caddy, Cloudflare, Cloudinary, Fastly, GitHub Pages, Imperva, jsDelivr, LiteSpeed, Microsoft IIS, Netlify, Nginx, Render, Sucuri, Vercel

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.