Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures avatar

Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures

Pricing

from $1.00 / 1,000 domain analyzeds

Go to Apify Store
Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures

Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures

Detect the CMS, e-commerce platform, JS framework, CDN/host, payments and analytics a website runs, from one HTTP request. 19 technologies, each verified live. No login, no API key.

Pricing

from $1.00 / 1,000 domain analyzeds

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

20 websites' tech stacks in 26 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.

Give it a list of domains and find out what each website runs: its e-commerce platform, CMS, JavaScript framework, CDN or host, payment processor and tag manager. The actor requests each homepage once and matches the response against 19 technology signatures, every one checked against a real site running that technology. No browser, no login and no API key, at $1.00 per 1,000 domains.

Why choose this actor?

  • A prospect list qualified in seconds. In our test of the live code on 2 October, 20 well known websites were scanned in 26 seconds, all 20 reachable and every one with at least one technology found: Shopify on allbirds.com and gymshark.com, WordPress on techcrunch.com, Drupal on usa.gov, Next.js on Vercel for notion.so.
  • Signatures you can trust. Each of the 19 technologies is matched on a real technical marker (an asset domain, a code path, a response header), not on a brand name that marketing copy might mention. A short list that is right beats a long list that guesses.
  • Pay only for domains scanned. $0.001 per domain on every Apify plan, plus a $0.005 start fee per run. A domain that does not answer, answers with an error, or blocks the request is never charged.

Run it on Apify

Part of The Mine Works Company and business data family: GST Taxpayer Lookup, Company Domain Finder, World Bank Trade Scraper, SEC EDGAR Filings Scraper, EU VAT Checker (VIES), Company KYB Resolver.

Try it in one minute

Paste this into the JSON tab of the input page and press Start:

{
"domains": ["shopify.com", "allbirds.com", "techcrunch.com", "usa.gov", "vercel.com"]
}

You get one row per domain with the technologies found, in a few seconds.

Give the sites in domains, one per line. A bare domain (allbirds.com) or a full link (https://www.notion.so/product) both work; only the host is used, and the actor always reads that host's homepage. Repeated domains are scanned once.

Apify's free plan includes $5 of credit every month, which covers about 4,700 domains at this actor's price ($0.001 per domain, plus the $0.005 start fee on each run of up to 100 domains).

Copy to your AI assistant

themineworks/tech-stack-detector on Apify. Detects the technology a website runs (Shopify, WooCommerce, BigCommerce, WordPress, Drupal, Wix, Squarespace, Webflow, Ghost, React, Next.js, Vue.js, Angular, Svelte, Cloudflare, Vercel, Netlify, Stripe, Google Tag Manager) from one request to its homepage, and returns one row per reachable domain with domain, reachable, http_status, technologies (list of name and category) and checked_at. Call ApifyClient("TOKEN").actor("themineworks/tech-stack-detector").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: domains (string[] of domains or URLs, up to 100 per run). Domains that do not answer or answer with an HTTP error get no row and are not charged; they are counted in the final row with _type "summary". Rows with _type "summary" or "info" are never billed. Full spec: GET https://api.apify.com/v2/acts/themineworks~tech-stack-detector/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • 19 technologies in 6 categories: e-commerce (Shopify, WooCommerce, BigCommerce), CMS (WordPress, Drupal, Wix, Squarespace, Webflow, Ghost), JavaScript frameworks (React, Next.js, Vue.js, Angular, Svelte), CDN and hosting (Cloudflare, Vercel, Netlify), payments (Stripe) and analytics (Google Tag Manager).
  • One request per domain. A single GET of the homepage with a 15 second timeout and one retry, following redirects. Headers name the CDN or host; the HTML carries the platform markers.
  • Up to 100 domains per run, 8 at a time. A list longer than 100 is cut to the first 100, with a warning in the log.
  • Several technologies per site. One domain can match many signatures at once: woocommerce.com matched WooCommerce, WordPress, React and Google Tag Manager in our test.
  • No browser, no proxy. Plain HTTP from Apify's servers, which is why a 100 domain run costs about ten cents.

What each signature looks for

TechnologyCategoryMatched when the homepage has
Shopifyecommerceassets from cdn.shopify.com
WooCommerceecommercethe /wp-content/plugins/woocommerce path
BigCommerceecommerceassets from cdn11.bigcommerce.com
WordPresscmswp-content or wp-includes paths
Drupalcmsthe /sites/default path
Wixcmswixstatic assets or Wix CSS modules
Squarespacecmsstatic1.squarespace.com or squarespace-cdn.com assets
WebflowcmsWebflow's wf-page or data-wf- attributes
Ghostcmsa Ghost generator tag
Reactjs-frameworkdata-reactroot or react-dom
Next.jsjs-framework__NEXT_DATA__ or /_next/static
Vue.jsjs-frameworkdata-v- attributes or __vue__
Angularjs-frameworkan ng-version attribute
Sveltejs-frameworksvelte- classes or __svelte
Cloudflarecdn-hosta Cloudflare server header or a cf-ray header
Vercelcdn-hosta Vercel server header or an x-vercel-id header
Netlifycdn-hosta Netlify server header
Stripepaymentsthe js.stripe.com script
Google Tag Manageranalyticsgoogletagmanager.com or a gtag( call

Brand names alone never count. When this actor was built, shopify.com's own page linked to a "Shopify vs. BigCommerce" comparison and a naive check reported BigCommerce; every signature was then tightened to a technical marker. In our 2 October test, bigcommerce.com itself came back as Next.js on Vercel with Cloudflare, not as a BigCommerce store, which is what its homepage actually runs.

How to use it

Basic: what does one site run?

{
"domains": ["allbirds.com"]
}

Qualify a prospect list for a Shopify app

{
"domains": ["allbirds.com", "gymshark.com", "woocommerce.com", "squarespace.com", "wix.com"]
}

Keep rows whose technologies include Shopify; send the rest to a different sequence. In our test, allbirds.com and gymshark.com matched Shopify and Cloudflare. Paste up to 100 domains per run; split longer lists into several runs or let an automation loop over them.

Agency scoping before a rebuild

{
"domains": ["https://www.client-site.example/about"]
}

The path is dropped and the homepage is read, so you can paste whatever link the client sent. A WordPress, Wix or Squarespace answer tells you what you will be migrating from.

Competitor platform watch

{
"domains": ["competitor-one.example", "competitor-two.example", "competitor-three.example"]
}

Save this as a task and schedule it monthly. Compare each run's technologies per domain with the last one to see when a competitor moves from WordPress to Webflow, or from Shopify to a custom Next.js front end.

Input parameters

ParameterTypeDefaultWhat it does
domainsarray of stringsrequired (form prefill: shopify.com)Domains or URLs to scan. Only the host is used; the homepage is requested. Up to 100 per run; duplicates removed.

The run uses 256 MB of memory and a 300 second timeout by default, which is plenty for 100 domains.

What data do you get?

One row per domain that answered.

  • domain: the host that was scanned (a pasted https://www.notion.so/product becomes www.notion.so).
  • reachable: true on every delivered row.
  • http_status: the HTTP status of the homepage, after redirects.
  • technologies: a list of { "name", "category" } pairs, one per signature found; empty when none of the 19 matched.
  • checked_at: ISO timestamp of the scan.

Each run ends with a _type: "summary" row (domains requested, scanned, unreachable, signatures_available, stopped_early) and an _type: "info" row. Neither is a result and neither is ever charged.

Things to know

  • Only the homepage is read. Technologies that appear only on inner pages, at checkout or after login are not seen. stripe.com, for example, came back as Next.js only, because its homepage does not load the js.stripe.com script.
  • An empty technologies list is not "nothing". It means none of these 19 signatures matched. The site may run something not on the list (Magento, HubSpot CMS, a custom stack) or load its framework in a way a plain request does not show.
  • Unreachable domains get no row. A domain that does not resolve, times out, or answers with an HTTP error (400 or above, which includes some sites that block automated requests) is skipped, counted in the summary's unreachable, and not charged. Compare your input list with the delivered domain values to see which were skipped.
  • 19 signatures, deliberately. Each was confirmed on a real site before it went in. A technology is added only once it can be matched on a reliable marker.

Stable fields for automations

These 5 fields were present in every domain row we sampled (21 rows from our 2 October test run and an Apify run the same day):

FieldWhat it holds
domainHost scanned
reachableAlways true on a delivered row
http_statusHomepage HTTP status
technologiesList of name and category pairs
checked_atISO timestamp of the scan

We will not rename these fields. New fields may be added over time; existing ones keep their names.

Output examples

Real rows from 2 October 2026.

shopify.com, from our scheduled check on Apify (run rfDth3LUmFZTbCxJz):

{
"domain": "shopify.com",
"reachable": true,
"http_status": 200,
"technologies": [
{ "name": "Shopify", "category": "ecommerce" },
{ "name": "React", "category": "js-framework" },
{ "name": "Cloudflare", "category": "cdn-host" },
{ "name": "Google Tag Manager", "category": "analytics" }
],
"checked_at": "2026-10-02T09:04:05.123Z"
}

woocommerce.com, four technologies at once (test run):

{
"domain": "woocommerce.com",
"reachable": true,
"http_status": 200,
"technologies": [
{ "name": "WooCommerce", "category": "ecommerce" },
{ "name": "WordPress", "category": "cms" },
{ "name": "React", "category": "js-framework" },
{ "name": "Google Tag Manager", "category": "analytics" }
],
"checked_at": "2026-10-02T16:19:42.093Z"
}

usa.gov, a government site on Drupal (test run):

{
"domain": "usa.gov",
"reachable": true,
"http_status": 200,
"technologies": [
{ "name": "Drupal", "category": "cms" },
{ "name": "Google Tag Manager", "category": "analytics" }
],
"checked_at": "2026-10-02T16:19:42.404Z"
}

The summary row from the 20 domain test run:

{
"_type": "summary",
"domains": 20,
"scanned": 20,
"unreachable": 0,
"signatures_available": 19,
"stopped_early": false,
"scraped_at": "2026-10-02T16:19:50.889Z"
}

Pricing

Pay per event: one flat price per domain scanned, the same on every Apify plan, plus a small start fee per run.

EventFreeBronzeSilverGold and above
domain-analyzed, per domain$0.001$0.001$0.001$0.001
domain-analyzed, per 1,000 domains$1.00$1.00$1.00$1.00
apify-actor-start, per run$0.005 per GB of run memory, minimum one eventsamesamesame

The start fee, exactly. Apify's apify-actor-start event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 256 MB by default, so a default run pays the minimum, $0.005.

Worked examples: one domain costs $0.001 plus $0.005. A full run of 100 domains costs $0.10 plus $0.005. 1,000 domains in 10 runs cost $1.00 plus $0.05 in start fees. Our 20 domain test would cost $0.02 plus $0.005.

Never charged: domains that do not resolve, time out or answer with an HTTP error, duplicate domains in the same list, and the summary and info rows. A run where no domain answers pays only the start fee.

There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your own plan; if it and this table ever differ, the Pricing tab is right.

FAQ

What does it detect? The 19 technologies in the table above: three e-commerce platforms, six CMSs, five JavaScript frameworks, three CDN or hosting providers, Stripe payments and Google Tag Manager. It is a quick, cheap filter for the platforms that matter most in sales and agency work, not a full inventory of every library on a page.

Why not Magento, HubSpot or Salesforce Commerce Cloud? A signature goes in only after it has been confirmed on a real site running that platform, with a marker that marketing copy cannot fake. Others will be added the same way. If you need one, email us (see Support).

How many domains per run? Up to 100, scanned 8 at a time. For more, run it several times or loop over chunks of 100 from Make, Zapier, n8n or the API.

How fresh is the data? Every run requests each homepage live. Sites change platforms, so a result is as of checked_at.

Do I need an API key, an account or a browser? No. You need only an Apify account. The actor makes one ordinary HTTP request per domain from Apify's servers.

Why did a domain I sent not come back? It did not answer within 15 seconds (after one retry), did not resolve, or answered with an HTTP error such as 403 or 404. Some sites refuse automated requests. Such domains are counted in the summary's unreachable and cost nothing.

Can I run it on a schedule? Yes. Save your input as a task, then in Apify Console open Schedules, choose Create new and pick a time or a cron expression such as 0 6 1 * * (monthly). Compare technologies by domain between runs to catch platform migrations.

How do I export the data? From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. In CSV and Excel, Apify spreads the technologies list over numbered columns; JSON keeps it as a list.

Can I use it from Claude, ChatGPT or another AI assistant?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/tech-stack-detector.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http tech-stack-detector "https://mcp.apify.com/?tools=themineworks/tech-stack-detector".

Is it legal to check what technology a website uses? The actor makes one normal request to each public homepage, the same request a browser makes, and reads only what the site sends back to everyone. It collects no personal data. You are responsible for how you use the results, including the sites' terms and laws such as GDPR and CCPA if you combine them with data about people. This is general information, not legal advice.

Integrations

  • Google Sheets: export a run to a sheet next to your lead list.
  • Make, Zapier and n8n: use the Apify app or node to scan new leads' domains as they arrive and tag them in your CRM.
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and client libraries: start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
  • MCP clients: Claude, ChatGPT, Cursor, VS Code and other MCP clients can call the actor through https://mcp.apify.com.

More from The Mine Works

Company and business data

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools

Support

Found a bug, a wrong detection, or need a technology we do not detect yet? Open an issue on the Issues tab of this page and we will reply there, or email dmineworks@gmail.com.

Tech Stack Detector tells you which of 19 verified platforms, frameworks and hosts a website runs, from one request per domain, at $1.00 per 1,000 domains.