"Which of these 2,000 companies run Shopify and use Klaviyo?" is a question sales, partnership and market-research teams ask every week. Browser extensions answer it one site at a time; lookup subscriptions answer it with monthly caps. This guide shows how to fingerprint a whole list of websites and get one clean row per site — CMS, shop platform, analytics, ad pixels, payments, chat, frameworks, hosting and tracking IDs — for $20 per 1,000 results.
What you get
The tool crawls a few pages per site over plain HTTP and matches them against 7,000+ open-source Wappalyzer fingerprints. Each website becomes one row:
| Field | What it tells you |
|---|---|
cms, ecommerce, primaryCms, primaryEcommerce, isEcommerce |
Content and shop platforms, plus a best single guess |
analytics, advertising |
Analytics tools and ad pixels |
emailMarketing, chat, payments |
Marketing, live-chat and payment providers |
frameworks, cookieConsent, cdn, server |
Front-end stack, consent tool, hosting and web server |
trackingIds |
GA4, GTM, Google Ads, Meta Pixel, Hotjar, Yandex and TikTok IDs found on the site |
technologies, byCategory, technologyCount |
Every detection with categories, version and confidence (0–100) |
domain, title, description, generator, pagesCrawled |
Who the site is and how much was crawled |
A real row from a recorded run:
{
"domain": "apify.com",
"startUrl": "https://apify.com",
"title": "Apify: Marketplace of ready-to-run tools for AI",
"description": "Thousands of tools to automate your business. Get real-time web data, track competitors, generate leads, and integrate your apps and AI agents.",
"generator": null,
"cms": [],
"ecommerce": [],
"analytics": [
"Google Tag Manager"
],
"advertising": [],
"emailMarketing": [
"HubSpot"
],
"chat": [
"Intercom"
],
"payments": [],
"frameworks": [
"Next.js"
],
"cookieConsent": [
"OneTrust"
],
"cdn": [
"Amazon CloudFront"
],
"server": [],
"primaryCms": null,
"primaryEcommerce": null,
"isEcommerce": false,
"trackingIds": {
"gtm": [
"GTM-MNGXGGB"
]
},
"technologies": [
{
"name": "Algolia",
"categories": [
"Search engines"
],
"version": null,
"confidence": 100
},
{
"name": "Amazon CloudFront",
"categories": [
"CDN"
],
"version": null,
"confidence": 100
},
{
"name": "Amazon S3",
"categories": [
"CDN"
],
"version": null,
"confidence": 100
}
],
"technologyCount": 11,
"byCategory": {
"Search engines": [
"Algolia"
],
"CDN": [
"Amazon CloudFront",
"Amazon S3"
],
"PaaS": [
"Amazon Web Services"
],
"Documentation": [
"Docusaurus"
],
"Static site generator": [
"Docusaurus"
],
"Security": [
"HSTS"
],
"Miscellaneous": [
"HTTP/3",
"Webpack"
],
"Analytics": [
"Leadfeeder",
"Linkedin Insight Tag"
],
"JavaScript frameworks": [
"React"
]
},
"pagesCrawled": 3,
"scrapedAt": "2026-10-03T15:21:12.177Z",
"error": null
}Detections are anchored to signals a site can only have if it truly runs the technology — HTTP headers, cookies, generator tags, script sources from the vendor's own hosts, namespaced JavaScript globals — rather than brand names appearing in page text.
Step-by-step
- Open the tool and paste websites into Websites — bare domains or full URLs.
- Leave Max pages per website at 3 (homepage plus a couple of internal pages catches most scripts). Raise it if a tool you expect is missing.
- Optional: narrow Technology categories (for example
cms,ecommerce,advertising). Empty means detect everything. - Turn on Follow subdomains when the shop or app lives on
shop.orapp.. - Click Start and export JSON, CSV or Excel.
trackingIdsandbyCategoryare objects; the flat fields likeprimaryCmsandisEcommercefilter nicely in a spreadsheet.
Run Tech Stack Detector — Wappalyzer & BuiltWith Alternative on Apify →
Call it from code
import json
import os
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("webdatatools/tech-stack-detector").call(run_input=json.loads("{\n "startUrls": [\n {\n "url": "https://apify.com\"\n }\n ],\n "maxPagesPerDomain": 3,\n "categories": []\n}"))
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('webdatatools/tech-stack-detector').call({
"startUrls": [
{
"url": "https://apify.com"
}
],
"maxPagesPerDomain": 3,
"categories": []
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
curl -X POST "https://api.apify.com/v2/acts/webdatatools~tech-stack-detector/run-sync-get-dataset-items"
-H "Authorization: Bearer $APIFY_TOKEN"
-H "Content-Type: application/json"
-d '{"startUrls":[{"url":"https://apify.com"}],"maxPagesPerDomain":3,"categories":[]}'Recipes
Build a segmented lead list
Start from a list of company domains (a CRM export, a directory scrape, or Google results from the search tool chained through inputDatasetId). Run the detector, then filter primaryEcommerce = "Shopify" and emailMarketing containing your competitor. You now have a list of shops that use the product you replace.
Competitive and market mapping
Fingerprint the top 500 sites in a niche and count primaryCms, payments and analytics values. It's a quick, defensible answer to "what share of DTC brands in Germany run Shopware vs. Shopify?" — with the raw rows to back it up.
Agency audit prep
Before a pitch, run the prospect's domains and note the analytics and ad pixels (trackingIds shows the exact GA4 and Meta Pixel IDs). Missing GA4, duplicate tag containers or no consent tool are concrete talking points.
Limitations worth knowing
- Tags loaded through Google Tag Manager are invisible. They're injected at runtime by JavaScript; this tool reads HTML, so it reports the GTM container (and its ID) but not the tags inside it.
- It reads a few pages per site. A script that only appears on the checkout page may be missed unless you raise Max pages per website.
- Sites that block automated HTTP requests return a row with
errorinstead of detections.
How much does it cost?
| Apify plan | Per result | Per 1,000 |
|---|---|---|
| Free plan | $0.02 | $20 |
| Starter | $0.016 | $16 |
| Scale | $0.014 | $14 |
| Business | $0.012 | $12 |
| Enterprise | $0.012 | $12 |
| Enterprise+ | $0.012 | $12 |
Primary event rates from a catalog snapshot; this is not the total price of a run. Additional charge events and Actor Start fees may apply; start fees can scale with memory. Check the Actor's Pricing tab on Apify for all events, conditions and current plan-specific rates, and set a maximum run budget before starting.
One website is one result, however many pages are crawled for it. Narrowing categories and keeping the page budget low also keeps platform usage down. Set Maximum cost per run to cap spend.
How it compares
| Option | Good at | Watch out for |
|---|---|---|
| This tool | Thousands of sites per run, one row per site, tracking IDs, confidence scores; API, schedules and MCP; pay per site | HTML-only: misses tags injected through Google Tag Manager or loaded only after user interaction |
| Browser extensions | Instant answer for the site you're viewing, including runtime-loaded scripts | One site at a time, no export |
| Lookup subscriptions | Historical data and large precomputed databases | Monthly plans with lookup caps |
| DIY fingerprinting | Full control | Maintaining thousands of signatures yourself |
FAQ
How accurate is it?
Signatures are anchored to technical evidence such as vendor script hosts, headers, cookies and generator tags, so false positives are rare. Each detection carries a confidence score so you can filter borderline ones.
Why is a tool I know they use missing?
Most often it's loaded through Google Tag Manager, which this HTML-based tool can't see inside. Otherwise the script may live on a page outside the crawl budget — raise Max pages per website.
Does it detect regional platforms?
Yes, the open-source ruleset covers many regional platforms, and the tool adds its own signatures for Turkish e-commerce and payments: Ticimax, IdeaSoft, T-Soft, ikas, Platin Market, iyzico, PayTR and Shopier.
Do I need a proxy?
Usually not — it runs on plain HTTP. A proxy option is available for sites that rate-limit repeated requests.
Can an AI agent call it?
Yes. It's available through the Apify MCP server, so an assistant can fingerprint a list of domains and summarise the results for you.