Website Technology Detector — Stack, Evidence & DNS Signals avatar

Website Technology Detector — Stack, Evidence & DNS Signals

Pricing

from $33.50 / 1,000 website tech-stack checks

Go to Apify Store
Website Technology Detector — Stack, Evidence & DNS Signals

Website Technology Detector — Stack, Evidence & DNS Signals

Find what websites run across 452 technologies: CMS, ecommerce, frameworks, analytics, CDN, hosting, payments, chat and marketing tools, plus email provider, DNS provider, SPF and DMARC. Robots honoured, evidence for every match; blocked sites are free.

Pricing

from $33.50 / 1,000 website tech-stack checks

Rating

0.0

(0)

Developer

NexGen Watch

NexGen Watch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Website Technology Detector — Stack, Evidence & DNS (BuiltWith Alternative)

Find out what any list of websites runs — a BuiltWith alternative that shows its evidence. Give it domains or URLs; each site's robots.txt is read first, then the pages it permits (home, /about, /about-us) are scanned and the result comes back as one row per site: the CMS, ecommerce platform, JavaScript framework, analytics, tag manager, CDN, hosting, web server, payments, chat widget, marketing/CRM, advertising, consent and security tools as their own columns, plus the full technology list with the exact header, cookie, resource URL or markup that proved each one. DNS adds what pages can't show: email provider, DNS provider, SPF senders, DMARC policy, domain verifications and hosting from reverse DNS.

  • 452 technologies in 31 categories, precision-first: vendor-hosted asset URLs, vendor response headers, session-cookie names and framework markers. A product named in prose or linked in the footer does not trigger a match.
  • Headline columns for a CRM import: cms, ecommerce, framework, analytics, tag_manager, cdn, hosting, web_server, payments, chat_widget, marketing_crm, advertising, consent_management, security, email_provider, dns_provider, dmarc_policy.
  • Robots honoured per site before every fetch — a site that disallows the pages is reported ROBOTS_BLOCKED and never billed. SSRF-guarded (only public hosts), identified NexGenWatchBot user agent, no exploit probing, no logins, no third-party API.
  • Input any way you like: domains, urls or websites — bare domains or full URLs.

Billing: $0.02 per run start, then $0.05 per completed scan (website_tech_check, verdict FINGERPRINTED). Robots-blocked, SSRF-refused, failed and unparseable targets are free status rows — never billed. DNS signals are included free.

Who uses this

  • Sales and growth teams segmenting lead lists by stack (Shopify stores, HubSpot users, WordPress + WooCommerce shops, Google Workspace vs Microsoft 365).
  • Agencies and consultants auditing a prospect's stack before a pitch, with evidence they can show.
  • Analysts doing competitive and market research: what a niche's sites run, which CDNs and consent tools dominate, who enforces DMARC.

📊 Sample Output

Website Technology Detector sample output — real website rows from a Store-example run

Real rows from run GTTVyxVeIcHf2M281 on build 0.1.27 (2026-10-18), the Quick start input below (long values shortened):

domainverdictcms / ecommerceframeworkanalytics / tag managercdn / hostingemail_providerdns_providerdmarctechs
apify.comFINGERPRINTEDNext.jsGoogle Tag ManagerAmazon CloudFrontGoogle WorkspaceAmazon Route 53reject11
shopify.comFINGERPRINTEDShopifyCloudflareGoogle Workspaceself-hosted / othe…reject4
python.orgFINGERPRINTEDFastlyself-hosted / othe…Amazon Route 53none8

The run finished with the status message: NORMAL: 3 resolved (0 not-found, 0 ambiguous, 0 service-fault, 0 unparseable) of 3 | answers billable=3 | website_tech_check charged=3

✅ What you get

One website_tech_check row per website (verdict: FINGERPRINTED rows are billed; every other verdict is a free status row):

  • Headline columns: cms, ecommerce, framework, analytics, tag_manager, cdn, hosting, web_server, payments, chat_widget, marketing_crm, advertising, consent_management, security — one representative name each, or null.
  • technologies — every detection as {technology, category, evidence, source, inferred} (source says which page and signal: header, cookie, resource, markup or meta generator); technology_names, technology_count.
  • DNS: email_provider, mx_hosts, dns_provider, nameservers, has_spf, spf_vendors, dmarc_policy (none / quarantine / reject), domain_verifications, hosting_provider_dns, ip_address, reverse_dns, dns_status.
  • Scan facts: origin, domain, pages_fetched, pages_blocked_by_robots, robots_status, coverage_summary.
  • verdict: FINGERPRINTED (completed scan — billed, even when nothing is recognised) · ROBOTS_BLOCKED (site disallows the pages — free) · SSRF_BLOCKED (non-public target — free) · SERVICE_FAULT (every permitted fetch failed — free) · UNPARSEABLE (not a domain — free), with unbilled_reason.

Three dataset views: Detected stacks, All technologies, DNS & email.

⚙️ Sample inputs

1. Quick start — three sites (the Store example)

{
"domains": ["apify.com", "shopify.com", "python.org"]
}

About $0.17 on the Free tier ($0.02 start + 3 × $0.05).

2. A lead list, stack only (no DNS)

{
"domains": ["allbirds.com", "basecamp.com", "techcrunch.com", "zapier.com"],
"dnsSignals": false
}

3. From the API — URLs instead of domains

{
"urls": ["https://www.example-store.com", "https://www.example-agency.co.uk"]
}

🧾 JSON sample record

{
"record_type": "website_tech_check",
"input": "apify.com",
"origin": "https://apify.com",
"domain": "apify.com",
"source": "buyer-supplied website, robots-permitted pages only (own fetch; no third-party API)",
"technologies": [
{
"technology": "Amazon CloudFront",
"category": "CDN",
"evidence": "header via: 1.1 b1a3a4ff6e52cd6d8599a21fc6f0de3a.cloudfront.net (CloudFront)",
"source": "header (/)",
"inferred": false
},
{
"technology": "Bootstrap",
"category": "UI framework",
"evidence": "resource https://apify.com/ext/bootstrap.js",
"source": "resource (/)",
"inferred": false
},
{
"technology": "Content Security Policy",
"category": "Security",
"evidence": "header content-security-policy: default-src 'none'; connect-src 'self' data: https://apify.com https://*.apify.c",
"source": "header (/)",
"inferred": false
},
{
"technology": "Google Tag Manager",
"category": "Tag manager",
"evidence": "resource https://www.googletagmanager.com/gtm.js?id=GTM-MNGXGGB",
"source": "resource (/)",
"inferred": false
}
],
"technology_names": [
"Amazon CloudFront",
"Bootstrap",
"Content Security Policy",
"Google Tag Manager",
"HSTS",
"HubSpot",
"HubSpot Conversations",
"Intercom",
"Next.js",
"Node.js",
"React"
],
"technology_count": 11,
"cms": null,
"ecommerce": null,
"framework": "Next.js",
"analytics": null,
"tag_manager": "Google Tag Manager",
"cdn": "Amazon CloudFront",
"hosting": "Amazon CloudFront",
"web_server": null,
"payments": null,
"chat_widget": "HubSpot Conversations",
"marketing_crm": "HubSpot",
"advertising": null,
"consent_management": null,
"security": "Content Security Policy",
"pages_fetched": 2,
"pages_blocked_by_robots": [],
"robots_status": "loaded",
"email_provider": "Google Workspace",
"mx_hosts": [
"alt1.aspmx.l.google.com",
"alt2.aspmx.l.google.com",
"aspmx.l.google.com",
"aspmx2.googlemail.com",
"aspmx3.googlemail.com"
],
"dns_provider": "Amazon Route 53",
"nameservers": [
"ns-1225.awsdns-25.org",
"ns-1928.awsdns-49.co.uk",
"ns-449.awsdns-56.com",
"ns-839.awsdns-40.net"
],
"has_spf": true,
"spf_vendors": [
"Google Workspace",
"Mailgun",
"Amazon SES",
"HubSpot"
],
"dmarc_policy": "reject",
"domain_verifications": [
"OpenAI",
"Mixpanel",
"Google (Search Console / Workspace)"
],
"hosting_provider_dns": "Amazon CloudFront",
"ip_address": "3.170.42.100",
"reverse_dns": "server-3-170-42-100.iad61.r.cloudfront.net",
"dns_status": "ok",
"verdict": "FINGERPRINTED",
"coverage_summary": "scanned 2 permitted page(s); 11 technolog(ies) fingerprinted; 0 path(s) robots-blocked; robots=loaded",
"unbilled_reason": null
}

🔧 How it works

Fetch. The host is resolved and must be public (SSRF guard). robots.txt is read and honoured for our user agent; only permitted paths among /, /about, /about-us are fetched (one GET each, body capped). Only the site's own public, logged-out responses are used.

Detect. 452 fingerprints across 31 categories, matched against response headers, Set-Cookie names (values never read), the resource URLs the pages load (scripts, styles, images, frames, forms and URLs inside inline loader scripts — never plain links or prose), framework markers and the meta generator. Each hit records the evidence and the page it was seen on. Implied technologies (WordPress ⇒ PHP, Next.js ⇒ React) are labelled inferred: true.

DNS. The registrable domain's public MX, NS, TXT and _dmarc records plus the reverse DNS of the homepage IP are read over DNS-over-HTTPS and mapped to providers — public infrastructure data about the organisation, no person data.

Billing. Each completed scan is pushed and charged in one call; a row that cannot be charged is not delivered. A batch where every target was blocked or failed ends SUCCEEDED with SOURCE UNAVAILABLE … nothing charged and the status rows explain each one.

Limits. 10,000 sites per run; three pages per site (tools loaded only deeper in the site or purely client-side will not show).

💰 Pricing example

EventFreeBronzeSilverGold
Actor Start (apify-actor-start)$0.02$0.02$0.02$0.02
Website scan (website_tech_check)$0.05$0.045$0.04$0.0335
  • 100 websites: $0.02 + 100 × $0.05 = $5.02
  • 1,000 websites: $0.02 + 1,000 × $0.05 = $50.02

Reads each site's public pages as any visitor would, honours robots.txt, identifies itself with a contact User-Agent, never logs in and performs no exploit probing. Technology names are factual identifications from public fingerprints; no page content is reproduced and no personal data is collected. DNS records are public infrastructure data.

❓ FAQ

Q: How does this compare with BuiltWith or Wappalyzer? A: Same job at pay-per-site pricing, with the evidence behind every detection and DNS/email signals included. Precision-first: a match means the vendor asset, header or cookie is actually present. Historic adoption data is not included.

Q: Why ROBOTS_BLOCKED? A: The site's robots.txt disallows the pages for crawlers, so nothing is fetched. The row is free.

Q: A completed scan with zero technologies is billed? A: Yes — the pages were read and checked against the full set; that is the completed scan you pay for. Blocked and failed scans are never billed.

Q: Can I pass bare domains or URLs? A: Either. domains, urls and websites all accept example.com or https://example.com/.

Q: What formats can I export? A: JSON, CSV, Excel or XML from the Dataset tab or API — the headline columns make the CSV CRM-ready.

🆘 Troubleshooting

  • verdict = SERVICE_FAULT → every permitted page answered 4xx/5xx or timed out for direct requests; retry later. Free.
  • A tool you know the site uses is missing → it may load only on inner pages, only after consent, or purely client-side without a vendor asset URL. Open an issue with the domain and we add the signature.
  • Run TIMED-OUT → split the batch or raise the run timeout; delivered rows are kept.

⭐ Found this useful?

A quick review on the Apify Store helps other teams find it. Feature request? Open it from the Issues tab — every one is read.