Tech Stack Detector: 19 Verified CMS, JS & CDN Signatures
Pricing
from $1.00 / 1,000 domain analyzeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
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.
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
| Technology | Category | Matched when the homepage has |
|---|---|---|
| Shopify | ecommerce | assets from cdn.shopify.com |
| WooCommerce | ecommerce | the /wp-content/plugins/woocommerce path |
| BigCommerce | ecommerce | assets from cdn11.bigcommerce.com |
| WordPress | cms | wp-content or wp-includes paths |
| Drupal | cms | the /sites/default path |
| Wix | cms | wixstatic assets or Wix CSS modules |
| Squarespace | cms | static1.squarespace.com or squarespace-cdn.com assets |
| Webflow | cms | Webflow's wf-page or data-wf- attributes |
| Ghost | cms | a Ghost generator tag |
| React | js-framework | data-reactroot or react-dom |
| Next.js | js-framework | __NEXT_DATA__ or /_next/static |
| Vue.js | js-framework | data-v- attributes or __vue__ |
| Angular | js-framework | an ng-version attribute |
| Svelte | js-framework | svelte- classes or __svelte |
| Cloudflare | cdn-host | a Cloudflare server header or a cf-ray header |
| Vercel | cdn-host | a Vercel server header or an x-vercel-id header |
| Netlify | cdn-host | a Netlify server header |
| Stripe | payments | the js.stripe.com script |
| Google Tag Manager | analytics | googletagmanager.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
| Parameter | Type | Default | What it does |
|---|---|---|---|
domains | array of strings | required (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 pastedhttps://www.notion.so/productbecomeswww.notion.so).reachable:trueon 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.comscript. - An empty
technologieslist 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 delivereddomainvalues 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):
| Field | What it holds |
|---|---|
domain | Host scanned |
reachable | Always true on a delivered row |
http_status | Homepage HTTP status |
technologies | List of name and category pairs |
checked_at | ISO 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.
| Event | Free | Bronze | Silver | Gold 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 event | same | same | same |
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
- GST Taxpayer Lookup
- Company Domain Finder
- World Bank Trade Scraper
- SEC EDGAR Filings Scraper
- EU VAT Checker (VIES)
- Company KYB Resolver
- Bundesanzeiger Scraper
- Domain to LinkedIn URL Resolver
- US Import Records
- Y Combinator Scraper
- USAspending Scraper
- Norway Company Register
Social media and video
Leads and business directories
Marketing, SEO and reviews
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.

