datagrit

datagrit › Data › Website Tech Stack Lookup - Technology Detector

Data

Website Tech Stack Lookup - Technology Detector

Detect the technology stack of any list of domains: CMS, ecommerce, analytics, CDN, frameworks with versions, plus mail provider, SPF and DMARC.

Run it on Apify StoreUse the APIfrom $14.00 per 1,000 results + $10 per run · no code needed
from $14.00 per 1,000 results + $10 per runpay only for analyzed websites you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.1updated 2026-09-30

Website Tech Stack Lookup tells you which technologies a list of websites runs on: CMS, ecommerce platform, analytics, tag manager, CDN, hosting, web server, JavaScript framework, marketing and chat tools, payment providers and hundreds more, with the version when the site exposes it, a confidence score and the evidence behind every detection. It also reads the public DNS of each domain to report the mail provider (MX), the SPF record with the email services it authorises, the DMARC policy and the DNS provider. Paste domains or URLs, run, and export JSON, CSV or Excel, or call it from the Apify API, n8n, Make or an AI agent through MCP.

Why use a website technology detector?

What is detected and how?

The Actor loads the home page (or the URL you give) over plain HTTP and matches 847 technology fingerprints written for this Actor against the response headers, cookie names, meta tags, script URLs and page HTML. DNS adds MX, SPF, DMARC, NS, CNAME, A and PTR signals: mail providers and security gateways, sending services authorised in SPF, DNS hosts, hosting and CDN networks, and services the domain was verified with. Versions come from generator tags, headers such as Server and X-Powered-By, and versioned CDN paths. Technologies implied by another one (PHP by WordPress, React by Next.js) are marked "implied by" and carry a lower confidence.

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
inputstringThe entry exactly as it appeared in your list.shopify.com
domainstringRegistrable domain of the entry (public suffix aware, so www.bbc.co.uk gives bbc.co.uk). DNS checks (MX, SPF, DMARC, NS) run on this domain.bbc.co.uk
urlstringFirst URL requested for this entry. For a bare domain this is https://domain/; when it did not answer, the fallbacks https://www.domain/ and http://domain/ were tried.https://shopify.com/
hoststringHostname from your entry, lowercased and converted to ASCII (punycode).shopify.com
finalUrlstringURL of the page that was analyzed, after redirects (when Follow redirects is on).https://www.shopify.com/
statusCodeintegerHTTP status code of the analyzed response. Null when the site did not answer at all.200
redirectLocationstringWhere the site redirects to, filled only when Follow redirects is off and the first response is a redirect.
titlestringText of the <title> tag of the analyzed page.Shopify: The All-in-One Commerce Platform
languagestringPage language from the <html lang> attribute, falling back to the Content-Language header and og:locale.en-US
technologyCountintegerNumber of technologies in the technologies list (after the Technology categories filter).18
technologyNamesstringComma-separated names of the listed technologies, highest confidence first.Shopify, Cloudflare, Google Workspace, React
technologyCategoriesstringComma-separated distinct categories of the listed technologies.Ecommerce, CDN, Email provider, JavaScript framework
technologiesarrayEvery detected technology with its category, version when the site exposes one, confidence from 0 to 100 and up to three pieces of evidence (header, meta tag, script URL, cookie name, HTML snippet, DNS record, or the technology that implies it).[{"name":"WordPress","category":"CMS",&q
cmsstringDetected CMS, website builder, headless CMS or blog platform, with version when known. Always filled from all detected technologies, whatever the categories filter.WordPress 6.8.2
ecommercestringDetected ecommerce platform(s), with version when known.Shopify
analyticsstringDetected analytics tools. For Google Analytics the version is GA4 or UA (Universal Analytics).Google Analytics GA4, Hotjar
tagManagerstringDetected tag managers.Google Tag Manager
cdnstringDetected content delivery network in front of the site.Cloudflare
hostingstringDetected hosting provider or platform (from response headers, CNAME, A and PTR records).Vercel
webServerstringDetected web server or reverse proxy, with version when the Server header exposes it.Nginx 1.24.0
jsFrameworkstringDetected front-end frameworks.Next.js, React
programmingLanguagestringDetected server-side language, with version when a header exposes it.PHP 8.2.12
marketingAutomationstringDetected marketing automation and email marketing tools (from page scripts and SPF includes).HubSpot, Klaviyo
liveChatstringDetected live chat and customer support tools.Intercom
paymentstringDetected payment providers (from checkout scripts and domain verification records).Stripe, PayPal
dnsProviderstringDNS hosting provider from the NS records of the domain.Cloudflare DNS
emailServicesstringTransactional email services authorised in the SPF record.SendGrid, Amazon SES
mailProviderstringProvider that receives mail for the domain, from its MX records. "Other" means MX records exist but point to a provider the Actor does not recognise (see mxRecords). Null when the domain has no MX record or DNS was not checked.Google Workspace
mxRecordsstringUp to five MX hosts, lowest priority value first.aspmx.l.google.com, alt1.aspmx.l.google.com
hasSpfbooleanTrue when the domain publishes a v=spf1 TXT record, false when it does not, null when DNS was not checked or did not answer.true
spfRecordstringThe SPF record text (first 500 characters).v=spf1 include:_spf.google.com ~all
hasDmarcbooleanTrue when _dmarc.<domain> publishes a v=DMARC1 record, false when it does not, null when DNS was not checked or did not answer.true
dmarcPolicystringPolicy (p=) of the DMARC record: none, quarantine or reject.reject
dnsCheckedbooleanTrue when the MX, TXT, DMARC and NS lookups all answered (an empty answer counts). False when some lookup failed, so a null mail field may mean "unknown". Null when DNS checks were turned off or the site row is found: false.true
htmlAnalyzedbooleanTrue when the response was an HTML page and its markup, scripts and meta tags were analyzed; false when only headers, cookies and DNS were available.true
errorReasonstringWhy a row has found: false: dns-not-found, dns-error, connection-refused, connection-reset, timeout, tls-error, host-unreachable, too-many-redirects, fetch-error, http-error, rate-limited, blocked-by-bot-protection, or no-matching-sites for the single status row when Only sites using any of these technologies matched nothing.
errorMessagestringDetails of the error, such as the HTTP status or the network error.
foundbooleanTrue for an analyzed site (charged). False for a site that could not be analyzed and for the status row; these rows are free.true
scrapedAtstringISO 8601 time of the check.2026-10-01T08:00:00.000Z
sourceUrlstringURL of the analyzed page (same as finalUrl), or the requested URL when the site did not answer.https://www.shopify.com/

Sample record

{
  "input": "shopify.com",
  "domain": "bbc.co.uk",
  "url": "https://shopify.com/",
  "host": "shopify.com",
  "finalUrl": "https://www.shopify.com/",
  "statusCode": 200,
  "redirectLocation": null,
  "title": "Shopify: The All-in-One Commerce Platform",
  "language": "en-US",
  "technologyCount": 18,
  "technologyNames": "Shopify, Cloudflare, Google Workspace, React",
  "technologyCategories": "Ecommerce, CDN, Email provider, JavaScript framework",
  "technologies": [
    {
      "name": "WordPress",
      "category": "CMS",
      "version": "6.8.2",
      "confidence": 100,
      "evidence": [
        "meta generator: WordPress 6.8.2",
        "script https://example.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"
      ]
    }
  ],
  "cms": "WordPress 6.8.2",
  "ecommerce": "Shopify",
  "analytics": "Google Analytics GA4, Hotjar",
  "tagManager": "Google Tag Manager",
  "cdn": "Cloudflare",
  "hosting": "Vercel",
  "webServer": "Nginx 1.24.0",
  "jsFramework": "Next.js, React",
  "programmingLanguage": "PHP 8.2.12",
  "marketingAutomation": "HubSpot, Klaviyo",
  "liveChat": "Intercom",
  "payment": "Stripe, PayPal",
  "dnsProvider": "Cloudflare DNS",
  "emailServices": "SendGrid, Amazon SES",
  "mailProvider": "Google Workspace",
  "mxRecords": "aspmx.l.google.com, alt1.aspmx.l.google.com",
  "hasSpf": true,
  "spfRecord": "v=spf1 include:_spf.google.com ~all",
  "hasDmarc": true,
  "dmarcPolicy": "reject",
  "dnsChecked": true,
  "htmlAnalyzed": true,
  "errorReason": null,
  "errorMessage": null,
  "found": true,
  "scrapedAt": "2026-10-01T08:00:00.000Z",
  "sourceUrl": "https://www.shopify.com/"
}

Input

FieldNameTypeWhat it does
domainsDomains or URLsarrayDomains (shopify.com), hostnames (www.bbc.co.uk) or full URLs (https://example.com/pricing), one per line. A bare domain is fetched at https://domain/, then https://www.domain/ and http://domain/ if the first address does not answer; a full URL is fetched exactly as given. Duplicates (with or without www, http or https) are merged, and entries that are not domains or http(s) URLs are listed in the run status. Leave empty to get a free example for two well-known sites.
categoriesTechnology categories to listarrayOptional. Limit the technologies list (technologies, technologyNames, technologyCategories, technologyCount) to these categories. The summary columns (cms, ecommerce, analytics, mailProvider and the rest) are always filled from every detected technology. Categories: A/B testing, Accessibility, Advertising, Affiliate, Analytics, Blog, Build tool, Business software, CDN, CMS, CRM, Captcha, Comments, Cookie consent, Customer data platform, Customer support, DNS provider, Documentation, Ecommerce, Email marketing, Email provider, Email service, Feature flags, Font service, Forms, Forum, Headless CMS, Hosting, Image CDN, JavaScript CDN, JavaScript framework, JavaScript library, LMS, Live chat, Loyalty & referrals, Maps, Marketing automation, Monitoring, Operating system, PaaS, Payment, Personalization, Popups, Product adoption, Product search, Programming language, Push notifications, Reviews, SEO, Scheduling, Security, Session replay, Social, Static site generator, Subscriptions, Tag manager, Translation, UI framework, Video, Web framework, Web server, Website builder.
requireTechnologiesOnly sites using any of these technologiesarrayOptional lead filter. Return (and charge for) a site only when it uses at least one of these technologies, for example Shopify, WooCommerce or HubSpot. Names are matched case-insensitively against the technology names in the output; unknown names are listed in the run status. Sites that do not match are skipped without charge. Unreachable sites still get a free row with found: false.
followRedirectsFollow redirectsbooleanFollow HTTP redirects (and one meta refresh) to the final page and analyze that page. Turn off to analyze only the first response; a redirect is then returned with its status code and redirectLocation.
includeDnsCheck DNS (mail provider, SPF, DMARC, DNS host)booleanLook up MX, TXT (SPF and verification records), DMARC, NS, CNAME and A/PTR records of each domain to report the mail provider, SPF and DMARC, the DNS provider and services that verified the domain. Turn off for faster runs when you need only the website stack.
maxConcurrencyParallel sitesintegerHow many sites are analyzed at the same time. Every site is a different server, so a higher value mostly speeds up long lists.
requestTimeoutSecsRequest timeout (seconds)integerHow long to wait for each page before trying the next address or reporting the site as unreachable (reason timeout).
proxyConfigurationProxy configurationobjectOptional proxy for the page requests. Most sites answer without one; sites behind strict bot protection may block data center addresses and are then reported with found: false and reason blocked-by-bot-protection. DNS lookups do not use the proxy.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~website-tech-stack-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["shopify.com","wordpress.org","hubspot.com","stripe.com","vercel.com","bbc.co.uk","allbirds.com","techcrunch.com","webflow.com","joomla.org","github.com","apify.com"]}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/website-tech-stack-lookup').call({
  "domains": [
    "shopify.com",
    "wordpress.org",
    "hubspot.com",
    "stripe.com",
    "vercel.com",
    "bbc.co.uk",
    "allbirds.com",
    "techcrunch.com",
    "webflow.com",
    "joomla.org",
    "github.com",
    "apify.com"
  ]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/website-tech-stack-lookup").call(run_input={
  "domains": [
    "shopify.com",
    "wordpress.org",
    "hubspot.com",
    "stripe.com",
    "vercel.com",
    "bbc.co.uk",
    "allbirds.com",
    "techcrunch.com",
    "webflow.com",
    "joomla.org",
    "github.com",
    "apify.com"
  ]
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Try Website Tech Stack Lookup - Technology Detector on Apify

Related Actors

Data

Domain WHOIS RDAP Lookup - DNS, MX & Expiry

Bulk domain lookup: official RDAP (WHOIS) registration, expiry and availability plus DNS, mail provider, SPF/DMARC and hosting ASN, with expiry and registrar filters.

from $3.50 / 1,000 results
Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results