Tech Stack & Infrastructure Lookup avatar

Tech Stack & Infrastructure Lookup

Pricing

Pay per usage

Go to Apify Store
Tech Stack & Infrastructure Lookup

Tech Stack & Infrastructure Lookup

Bulk domain to technology and infrastructure lookup: detected tech stack plus DNS, CDN, TLS certificate issuer and mail provider.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Catalyst

Catalyst

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bulk domain lookup. For each domain you get the detected technology stack (CMS, analytics, frameworks, etc.) plus four things most tech-stack tools don't report: DNS records, CDN, TLS certificate issuer, and mail provider.

No headless browser, no residential proxy, one HTTP GET plus a handful of DNS/TLS lookups per domain. Built to run in 256 MB and finish in seconds.

Input

Give it one or more domains via urls (a JSON array, a single string, or a comma/newline separated list of domains). If you're switching from another tech-detection tool, you can also use whichever of these field names your existing input already uses. This Actor accepts all of them as aliases for the same thing: startUrls, domains, websites, targetUrls, url. Supply domains in any one of them, or mix several; they are combined and deduplicated.

FieldTypeDefaultDescription
urlsarray of stringsnoneDomains or URLs to look up. Supply this or any one alias below.
startUrlsarraynoneAlias of urls. Accepts plain strings or {"url": "..."} objects.
domainsarraynoneAlias of urls.
websitesarraynoneAlias of urls.
targetUrlsarraynoneAlias of urls.
urlstringnoneAlias of urls for a single domain.
categories_filterarray of stringsnone (all categories)Only report technologies in these categories, e.g. ["CMS", "Analytics"].
include_versionsbooleantrueInclude the detected version number, when found.
include_confidencebooleantrueInclude a 0-100 confidence score per technology.
timeout_secondsinteger15Per-domain page-load timeout, clamped to 3-60.

Output

One dataset item per input domain:

{
"url": "https://stripe.com",
"domain": "stripe.com",
"technologies": [
{ "name": "Nginx", "categories": ["Web servers", "Reverse proxies"], "confidence": 85 }
],
"techNames": ["Amazon S3", "Amazon Web Services", "HSTS", "Nginx"],
"techCount": 4,
"dns": {
"a": ["198.137.150.231", "198.202.176.231"],
"ns": ["ns-1087.awsdns-07.org", "ns-423.awsdns-52.com"]
},
"cdn": "Cloudflare",
"tls": {
"issuer": "DigiCert Global G3 TLS ECC SHA384 2020 CA1",
"subject": "stripe.com",
"notAfter": "2026-11-12T23:59:59Z",
"daysUntilExpiry": 49
},
"mail": {
"records": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"],
"provider": "Google Workspace"
},
"httpStatus": 200,
"charged": false
}

cdn is omitted when no CDN was detected. tls/dns/mail always appear, each with its own error field when that particular lookup failed. A domain that can't be reached still gets a full row showing what could be resolved, so nothing is silently dropped. charged reports whether this row's lookup was billed (see Pricing).

Compatibility

This Actor's input schema mirrors the market's existing tech-detection tool so you can swap tools without editing a saved input. What's new here: DNS records, CDN, TLS certificate issuer, and mail provider, none of which the incumbent reports.

Pricing

Free. This Actor has no price set, so every run costs you only your own Apify platform usage (about $0.00002 of compute per domain, measured over a 10-domain run). The charged field in each output row stays false while the Actor is free.

The code does support pay-per-event billing on a single domain-lookup event, priced per successfully processed domain, if a price is ever set on the Apify Console. A domain that fails entirely (unreachable, no DNS, no TLS, no mail records) would not be charged. Nothing is hardcoded in the Actor: it reads its own current price from the platform at startup and runs unmetered when there isn't one.

Notes on the technology confidence score

The detection engine (wappalyzergo) does not expose a numeric confidence score through its public API: it uses one internally to decide whether a match counts at all, then discards it. When include_confidence is on, this Actor reports a coarse two-tier estimate instead of pretending to replicate a score it doesn't have: 100 when a version number was extracted (implies a specific, high-precision pattern match), 85 otherwise.