Tech Stack Lookup by Domain: Website Technology, CMS, CRM avatar

Tech Stack Lookup by Domain: Website Technology, CMS, CRM

Pricing

$2.50 / 1,000 domain tech stacks

Go to Apify Store
Tech Stack Lookup by Domain: Website Technology, CMS, CRM

Tech Stack Lookup by Domain: Website Technology, CMS, CRM

Website tech stack detector by domain: CMS, Shopify or other shop platform, payments, CRM and marketing tools, chat, analytics, ad pixels, hosting and email provider, each with evidence. Plain domains work. $2.50 per 1,000 domains; unreachable is free.

Pricing

$2.50 / 1,000 domain tech stacks

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Website Tech Stack Detector: CMS, shop platform, CRM and email provider by domain

Paste domains, get back what each website runs on: CMS or site builder, shop platform (Shopify, WooCommerce), payments, CRM and marketing tools (HubSpot, Klaviyo), chat, analytics, ad pixels, hosting and the email provider behind the domain. Plain domains are fine (allbirds.com, no https:// needed). No API key, no browser.

Price: $2.50 per 1,000 domains ($0.0025 each), charged only for a domain where at least one technology is found. Unreachable, parked and invalid domains are free. See Pricing below.

Why use this one

  • Every technology comes with its evidence (html: cdn.shopify.com, header cf-ray, MX aspmx.l.google.com), so you can trust or discard a result.
  • Yes/no questions in one field. Put Shopify or HubSpot in checkFor and each row says true or false.
  • Email provider from DNS, so Google Workspace or Microsoft 365 is reported even when the website itself cannot be read.
  • Misses cost nothing. A domain with nothing detected, or that cannot be reached, is returned with its status and not billed.
  • Honest limit: it reads the home page, headers and DNS only, with no JavaScript rendering, so tools that appear only on inner pages or behind a login are not seen.

Minimal input

{"domains": ["allbirds.com", "hubspot.com"], "checkFor": ["Shopify", "HubSpot"]}

Sample output row (real platform run, shortened)

{
"input": "kyliecosmetics.com",
"domain": "kyliecosmetics.com",
"finalUrl": "https://kyliecosmetics.com/",
"status": "ok",
"detected": true,
"pageTitle": "Kylie Cosmetics by Kylie Jenner | Kylie Jenner Fragrances | Kylie Skin",
"technologyCount": 13,
"platform": "Shopify",
"ecommerce": [
"Shopify"
],
"crmMarketing": [
"Klaviyo"
],
"analytics": [],
"hosting": [
"Cloudflare"
],
"emailProvider": [
"Google Workspace"
],
"checkFor": {
"Shopify": true,
"WooCommerce": false,
"Klaviyo": true
},
"scrapedAt": "2026-10-11T07:16:08+00:00"
}

What it does

For each domain it reads the home page and its response headers and cookies, and looks up the domain's MX, TXT and name-server DNS records. It matches about 270 technology fingerprints across 24 categories. No browser is used, and no page beyond the home page is requested.

  • Website: CMS (WordPress, Drupal, Ghost, Contentful), builders (Wix, Squarespace, Webflow, Framer), shop platforms (Shopify, WooCommerce, BigCommerce, Magento, PrestaShop), JavaScript frameworks (React, Next.js, Vue, Nuxt, Angular).
  • Money and marketing: payments (Stripe, PayPal, Klarna, Shop Pay), CRM and automation (HubSpot, Salesforce, Marketo, Klaviyo, Mailchimp, ActiveCampaign, Brevo), chat and support (Intercom, Zendesk, Drift, Crisp), A/B testing.
  • Tracking: analytics (Google Analytics, Plausible, Mixpanel, Hotjar, Sentry), ad pixels (Meta, TikTok, LinkedIn, Google Ads), tag managers, cookie consent tools.
  • Infrastructure: CDN and hosting (Cloudflare, Vercel, Netlify, AWS, Fastly), DNS provider, security services.
  • Email, from DNS: mailbox provider (Google Workspace, Microsoft 365, Zoho, Proton) read from MX records, sending services (SendGrid, Amazon SES, Postmark, Mailgun) and workplace tools (Atlassian, Slack) named in SPF and verification TXT records.

Every detected technology comes with the evidence that proved it (for example html: cdn.shopify.com, header cf-ray, MX aspmx.l.google.com), so an agent can trust or discard it. A link to a tool in the page text is not treated as usage.

Use cases

  • AI agents and SDR pipelines that need to qualify a lead: "which of these 500 domains run Shopify and Klaviyo?"
  • Technographic lead lists: find companies that use a competitor's product, or lack the product you sell.
  • Competitor and market research: which stack do the leaders in a niche run?
  • Agencies and freelancers: spot WordPress sites on old themes, stores without analytics, sites without a cookie banner.
  • Email deliverability and sales ops: which mailbox provider and sending tools a prospect uses.

Use it from n8n, Make, Zapier or an AI agent

Actor ID: datagleaner/tech-stack-by-domain

Minimal input:

{"domains": ["allbirds.com", "hubspot.com"], "checkFor": ["Shopify", "HubSpot"]}

Each tool below runs this Actor with your own Apify API token.

  • n8n: add the Apify node (@apify/n8n-nodes-apify). Choose Run an Actor and get dataset, set Actor to datagleaner/tech-stack-by-domain and paste the input above.

  • Make: use the Apify app's Run an Actor module, then Get Dataset Items.

  • Zapier: use the Apify action Run Actor, then the search Fetch dataset items.

  • AI agents (MCP): connect to https://mcp.apify.com/?tools=datagleaner/tech-stack-by-domain. In Claude Code:

    claude mcp add --transport http apify "https://mcp.apify.com/?tools=datagleaner/tech-stack-by-domain"
    

    Then run /mcp to sign in to Apify in your browser. Other clients can sign in with OAuth or send the header Authorization: Bearer YOUR_APIFY_TOKEN. Then ask the agent in plain words, for example:

    Which of acme.com, globex.com and initech.io use HubSpot, and what email provider does each use?

  • LangChain (Python):

# pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/tech-stack-by-domain")
result = tool.invoke({"run_input": json.loads('{"domains": ["allbirds.com"], "checkFor": ["Shopify"]}')})

Through the API, one call returns the rows:

curl -X POST "https://api.apify.com/v2/acts/datagleaner~tech-stack-by-domain/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"domains": ["allbirds.com", "plausible.io"], "checkFor": ["Shopify"]}'

Each domain is one row with the same fields every time, so an agent can read platform, crmMarketing or checkFor.HubSpot without parsing. A typical domain takes 1 to 3 seconds.

Input

{
"domains": ["allbirds.com", "https://www.hubspot.com", "plausible.io"],
"checkFor": ["Shopify", "HubSpot", "Klaviyo"],
"maxConcurrency": 10
}
FieldMeaning
domainsDomains or URLs, one per line. Any path is ignored: the lookup reads the home page.
datasetId, datasetUrlField, maxDatasetItemsRead websites from another Actor's dataset (see below). maxDatasetItems caps the distinct domains read (default 1000).
checkForOptional technology names to answer yes or no for. Matched case-insensitively against the detected names.
maxConcurrencyDomains looked up in parallel (default 10).
requestTimeoutSecs, respectRobotsTxt, proxyConfigurationNetwork options. Leave the proxy empty: sites are read directly, and a site that blocks with HTTP 403 or 429 is retried through Apify Proxy automatically.

Leave domains empty to run a 3-domain example.

Run it after Google Maps Scraper or any scraper

Open the source Actor's Integrations tab, add this Actor (datagleaner/tech-stack-by-domain) and set its input to:

{"datasetId": "{{resource.defaultDatasetId}}"}

Every time the source run succeeds, this Actor reads the websites from its results (website, url, domain, site, homepage, link, companyWebsite or web, the first one present), skips items with no website, social-media or map links, and duplicates, and detects the tech stack of each (at most maxDatasetItems, default 1000). Each row also carries sourceName, the title or name of the source item (for example the Google Maps place name). Billing is the same: one event per domain with a detected stack.

The same works from code, for one finished run:

run = client.actor("datagleaner/tech-stack-by-domain").call(run_input={"datasetId": "SOURCE_DATASET_ID"})

The status message tells how many domains were read from the dataset and how many items had no website.

It also works as an integration without setting any input: in the source Actor's Integrations tab choose Add integration and pick this Actor, and the dataset is passed automatically.

Output

One row per domain. Lists that found nothing are empty, never guessed.

{
"input": "allbirds.com",
"domain": "allbirds.com",
"finalUrl": "https://www.allbirds.com/",
"status": "ok",
"detected": true,
"pageTitle": "Allbirds | Sustainable shoes",
"language": "en",
"technologyCount": 8,
"platform": "Shopify",
"technologies": [
{"name": "Shopify", "category": "Ecommerce platform", "evidence": "html: cdn.shopify.com"},
{"name": "Microsoft 365", "category": "Email provider", "evidence": "MX allbirds-com.mail.protection.outlook.com"}
],
"ecommerce": ["Shopify"],
"payments": ["Shop Pay"],
"crmMarketing": [],
"analytics": ["Microsoft Clarity"],
"hosting": ["Cloudflare"],
"emailProvider": ["Microsoft 365"],
"emailSending": [],
"checkFor": {"Shopify": true, "HubSpot": false},
"error": null,
"scrapedAt": "2026-10-11T09:00:00+00:00"
}

The full row also has cms, websiteBuilder, chatSupport, advertising, tagManagers, abTesting, frameworks, security, cookieConsent, forms, workplaceTools, dns, other and byCategory. status is ok, unreachable or blockedByRobots (only DNS records could be read, which can still return an email provider), parked, invalidDomain or error. detected tells you whether the row was billed.

Pricing

Pay per event, one event:

  • tech-stack-found: $0.0025 ($2.50 per 1,000) for one domain where at least one technology was detected.
  • Unreachable, parked, invalid and empty domains are free, and still returned so you can see why.

Worked example. A 2,000-domain lead list, of which about 90% return a detected stack: 1,800 x $0.0025 = $4.50. Platform usage is small: a domain takes about five light requests (robots.txt, the home page and three DNS lookups).

Set a maximum total charge on the run and the Actor stops cleanly when it is reached.

Limits

  • Fingerprints, not a database. Detection is based on what the home page, its headers and the domain's DNS show. It does not know technologies used only on inner pages or behind a login, and it is not a historical index.
  • No JavaScript rendering. A tool injected only by a tag manager after the page loads may be missed; the tag manager itself is reported.
  • Sites that block bots. A site that answers HTTP 403 or 429 is retried once through Apify Proxy. Sites behind a hard bot wall come back unreachable, with whatever the DNS records show.
  • DNS evidence is indirect. A sending service or workplace tool in a TXT record shows the company has set it up for the domain, not that it is the only one in use.
  • The fingerprint list covers the common tools. If one you need is missing, tell us in the Issues tab.

FAQ

Can I get a list of all sites using a technology? No. You bring the domains; it returns each one's stack. There is no subscription or API key, and a miss costs nothing.

How do I check if a company uses HubSpot (or Shopify, Klaviyo, Stripe)? Put the domain in domains and the name in checkFor; the row has checkFor.HubSpot true or false, with the evidence in technologies.

How do I find a domain's email provider? Read emailProvider. It comes from the MX records, so it works even when the website itself cannot be read.

Do I need an API key or login? No. Only public pages and public DNS records are read.

Can I get the contacts too? Use Company Enrichment by Domain for the profile and socials, or Website Contact Details Scraper for every email and phone on the site.

Responsible use

This Actor reads publicly available web pages and public DNS records only, and returns facts about technologies, not about people. You are responsible for complying with the law that applies to you, including anti-spam and data protection rules, when you use the results to contact companies.