You have a list of target accounts and one question: which of them run Shopify, or HubSpot, or Microsoft 365? This page shows how to answer it by hand for a few sites, where the big databases fit, and how to check a few hundred domains in one run.
“Which companies use Shopify?” and “Which of these companies use Shopify?” sound alike but need different tools.
| You want | What fits |
| A list of every site using a technology you don’t have yet | A crawled database: BuiltWith or Wappalyzer lead lists. They index hundreds of millions of domains and keep history. BuiltWith’s plans start at $295/month (two technologies), Wappalyzer’s at $250/month; both offer free single-site lookups. |
|---|---|
| The stack of a list you already have (CRM export, event attendees, a territory) | A checker that visits each site now. Any of the database tools can do this too; a pay-per-domain checker is cheaper if you only need it now and then. |
Our Tech Enricher is the second kind. It is not a database of every Shopify store: it checks the domains you give it, at run time, and tells you what it finds on each.
Competitor prices are from their public pricing pages, checked 27 September 2026: BuiltWith plans, Wappalyzer pricing.
For a handful of domains you don’t need a tool. Everything below is public: it’s what every browser and mail server already sees.
Open the homepage, press Ctrl+U (Cmd+Option+U on a Mac) and search for these strings:
| Search for | It means |
cdn.shopify.com | Shopify |
|---|---|
wp-content | WordPress (plus plugins/woocommerce for WooCommerce) |
js.hs-scripts.com, js.hsforms.net | HubSpot tracking code or forms |
munchkin.marketo.net | Marketo |
static.klaviyo.com | Klaviyo |
widget.intercom.io | Intercom |
googletagmanager.com | Google Tag Manager or Google Analytics |
__NEXT_DATA__ | Next.js |
A caveat: many marketing tags are loaded later by a tag manager, so they never appear in the source. The browser’s developer tools (Network tab) show everything that loads, at the cost of a few minutes per site.
curl -sI https://www.allbirds.com/
Headers name the CDN or host and sometimes the platform. On 27 September 2026 that request returned server: cloudflare, a cf-ray header (Cloudflare again) and powered-by: Shopify. Also look for x-vercel-id (Vercel), x-amz-cf-id (CloudFront) and the content-security-policy header, which lists the outside domains a page is allowed to load scripts from, tag-manager tags included.
dig +short MX allbirds.com
dig +short NS allbirds.com
dig +short TXT allbirds.com
The website can’t tell you whether a company is on Google Workspace or Microsoft 365, but its MX records can. The MX with the lowest number is where mail is delivered: aspmx.l.google.com or smtp.google.com means Google Workspace; a host ending in mail.protection.outlook.com means Microsoft 365 (allbirds.com’s only MX is allbirds-com.mail.protection.outlook.com). A host at pphosted.com or mimecast.com is a security gateway in front of the mailbox, so the mailbox provider behind it stays hidden.
The TXT record starting v=spf1 lists the services allowed to send mail as the domain. Its include: entries often name tools the homepage doesn’t show: a hubspotemail.net include means HubSpot is set up to send email for that domain; mail.zendesk.com means Zendesk.
Tech Enricher does the three checks above for every domain in your list and returns one row per input. Paste domains, URLs or email addresses into Domains on the Apify Store page, or send JSON through the API:
{
"domains": ["allbirds.com", "gymshark.com", "hubspot.com",
"https://www.zapier.com/pricing", "jane@stripe.com"],
"maxConcurrency": 5
}
Each input is reduced to its domain, so https://www.zapier.com/pricing becomes zapier.com and jane@stripe.com becomes stripe.com. Every row keeps your original string in input, so results join back to your sheet.
| Domain | technologies | emailProvider | dnsProvider | spfSenders |
| allbirds.com | Shopify, Google Tag Manager, Cloudflare | Microsoft 365 | MarkMonitor | allbirds_com._es.easydmarc.com, spf.protection.outlook.com |
|---|---|---|---|---|
| gymshark.com | Shopify, Cloudflare | Proofpoint | AWS Route 53 | (none) |
| hubspot.com | HubSpot CMS, Google Analytics, Google Tag Manager, Hotjar, HubSpot, HubSpot CRM, Cloudflare | Google Workspace | Cloudflare DNS | (none) |
| zapier.com | Contentful, Google Tag Manager, Next.js, Vercel, AWS CloudFront, Optimizely | Google Workspace | AWS Route 53 | _spf.google.com, mailgun.org, 7462085.spf03.hubspotemail.net, mail.zendesk.com, _spf.qualtrics.com |
| stripe.com | Contentful, Stripe, React, Next.js | Google Workspace | AWS Route 53 | _spf.google.com, amazonses.com, mail.zendesk.com, _spf.qualtrics.com |
Three things worth noticing:
hubspotemail.net host. If you sell to HubSpot users, check spfSenders as well as technologies.us.checkout.gymshark.com; finalUrl shows where the page that was checked actually lives.Export as CSV, Excel or JSON. To pull out the Shopify stores, filter the technologies column for “Shopify”; for “on WooCommerce, not Shopify”, filter on both. technologiesByCategory groups the same names (Ecommerce, CMS, Analytics, Marketing, CRM, Support, Hosting and so on) if you’d rather have one column per category.
<script src> URLs, its response headers and its Content-Security-Policy. The CSP catches some tags that a tag manager loads later.emailProvider (lowest MX number first), NS records give dnsProvider, and SPF include:/redirect= targets give spfSenders (up to 10; the domain’s own SPF hosts are followed one level and not listed themselves).Limits, plainly: 84 technologies is a small fraction of what BuiltWith and Wappalyzer recognise. Only the homepage is checked, so a tool used only on checkout or docs pages won’t show. Pages are fetched, not rendered, so a tag injected by a tag manager is missed unless the CSP names it. Fingerprints favour precision over recall: an empty technologies list means none of the 84 left a visible trace, not that the site uses nothing. No company size, revenue or contacts are included.
| Profiled domain | $0.02 ($20 per 1,000), no subscription |
|---|
A domain is charged when its homepage answers with a non-error status and a profile row (found: true) is returned, even if none of the 84 technologies are detected on it. These come back as free rows:
stripe.com, www.stripe.com and jane@stripe.com are one domain, profiled and charged onceSet a max charge per run and the run stops at that amount; every input left over still gets a row with skipped: true, uncharged.
Put the account domains into one run and filter technologies for Shopify. Shopify is detected from cdn.shopify.com in the page or a Shopify response header. In our example allbirds.com and gymshark.com matched.
Look in three places in the output: HubSpot (tracking script), HubSpot CRM (forms or tracking script) and HubSpot CMS (site hosted on HubSpot) in technologies, plus any hubspotemail.net host in spfSenders.
Not from us. We only check domains you supply. For discovery, BuiltWith and Wappalyzer sell lists built from their crawls; you can then run our check on the list you end up with to confirm what’s live today.
Yes. The check reads the same public homepage and DNS records any visitor or mail server sees, with no login, and skips sites whose robots.txt asks crawlers to stay off the homepage.
Yes: through Apify’s integrations (Clay, Make, Zapier) or the API. Using our tools in Clay has the steps.