Website Tags & Pixels Detector - Analytics, Ads & CRM Scanner avatar

Website Tags & Pixels Detector - Analytics, Ads & CRM Scanner

Pricing

$10.00 / 1,000 results

Go to Apify Store
Website Tags & Pixels Detector - Analytics, Ads & CRM Scanner

Website Tags & Pixels Detector - Analytics, Ads & CRM Scanner

Detects 330 third-party tools on any website: analytics, ad pixels, CRM, chat, cookie consent, payment and error tracking. Extracts the tracking IDs they expose, such as GA4 and GTM. Analyzes scripts, cookies, JavaScript globals and network requests, on one page or across a crawl.

Pricing

$10.00 / 1,000 results

Rating

0.0

(0)

Developer

My Smart Digital

My Smart Digital

Maintained by Community

Actor stats

5

Bookmarked

93

Total users

12

Monthly active users

2 days ago

Last modified

Share

Website Tags & Pixels Detector

Find out which analytics, advertising, CRM and tracking tools any website runs — with the tracking IDs it exposes.

Give it a URL, get back every third-party tool detected on the page, how it was detected, and the IDs it leaks (GA4 measurement ID, GTM container ID, and similar). Optionally crawl internal pages to see which tools are loaded site-wide and which only appear on some pages.

What it detects

330 tools across 26 categories, one rule per tool. A tool is reported at most once per page, whatever the number of signals that matched it — summary.totalTools is therefore a count of distinct tools.

An ad pixel is reported only on what belongs to it: its loader script, its JavaScript global, its cookie or its collection endpoint. An embedded tweet, TikTok video, Instagram or LinkedIn post, a Facebook page plugin, a Pinterest save button, or the social profile links in a page's structured data are not reported as that network's pixel.

Google's ad tags are told apart the same way. Google Ads is reported on its conversion ID (AW- followed by 9 to 11 digits, returned in full in ids), its loader, or its conversion and remarketing endpoints. DoubleClick is reported on a Campaign Manager 360 Floodlight tag or a Google Ad Manager tag (gpt.js). An embedded YouTube video, a Google Analytics 4 tag or an Ad Manager ad slot does not make Google Ads appear.

Google's analytics tags too. Google Analytics 4 is reported on its measurement ID (G- followed by 10 characters), its loader, its collection endpoint (/g/collect, including a site's own server-side tagging endpoint), its _ga_<ID> cookie, or the measurement IDs configured in the Google Tag Manager container the page loads — so a GA4 tag that waits for cookie consent is still reported, with its ID. Google Tag Manager is reported on its gtm.js loader or its container ID. The dataLayer and gtag globals, which every Google tag creates, no longer make GA4 or GTM appear on their own: a site with only a Google Ads tag, or only GA4, is not reported as running Tag Manager. Universal Analytics is reported on Google's own analytics.js / ga.js library, a loaded tracker, or its UA- property ID; a script of the site that happens to be named analytics.js, or Segment's library, is not.

Segment is reported on its snippet or its loaded library (the analytics object it creates, recognised by Segment's own methods), its ajs_ cookies, its API, or its library and settings endpoints, including when a site serves them from its own domain. A site's own object that is merely named window.analytics is not Segment.

CategoryRulesExamples
Analytics47GA4, Universal Analytics, Adobe Analytics, Matomo, Mixpanel, Amplitude, Hotjar, Microsoft Clarity, Plausible, PostHog
Advertising46Google Ads, Microsoft Advertising, Criteo, AdRoll, The Trade Desk, Amazon DSP, DoubleClick, Outbrain, Taboola, Quantcast
Cookie Consent37Cookiebot, OneTrust, Didomi, Axeptio, Iubenda, CookieYes, Usercentrics, TrustArc, Termly, Osano
Email Marketing23Mailchimp, Klaviyo, Brevo, ActiveCampaign, ConvertKit, SendGrid, Omnisend, Campaign Monitor
Chat19Intercom, Drift, LiveChat, Crisp, Tawk.to, Tidio, Olark, JivoChat, Freshchat
Social Media13Meta Pixel, TikTok Pixel, LinkedIn Insight Tag, Pinterest Tag, Snapchat Pixel, X (Twitter) Pixel, Reddit Pixel
Error Tracking9Sentry, Bugsnag, Rollbar, Raygun, Airbrake, Honeybadger, TrackJS
CDP13Segment, Tealium, mParticle, RudderStack, BlueConic, Treasure Data, Lytics
A/B Testing12Optimizely, VWO, AB Tasty, Kameleoon, Convert, Adobe Target, Monetate
Marketing Automation10HubSpot, Marketo, Pardot, Eloqua, Braze, Iterable, Customer.io
Support10Zendesk, Freshdesk, Help Scout, LiveAgent, Zoho Desk
Forms9Typeform, SurveyMonkey, JotForm, Formstack, Gravity Forms, Survicate
CRM8HubSpot, Salesforce, Zoho, Keap
Push Notifications8OneSignal, PushEngage, Webpushr, PushOwl, WonderPush
Landing Pages7Unbounce, Instapage, Leadpages, ClickFunnels, Webflow, Framer
APM7New Relic, Datadog RUM, AppDynamics, Dynatrace, Instana
Monitoring7Pingdom, UptimeRobot, StatusCake, Site24x7, Catchpoint
Performance7GTmetrix, WebPageTest, Lighthouse CI, Calibre, SpeedCurve
Payment7Stripe, PayPal, Adyen, Mollie, Klarna, Afterpay
Reviews6Trustpilot, Yotpo, Judge.me, Reviews.io, Google Customer Reviews
Personalization6Dynamic Yield, Nosto, RichRelevance, Bloomreach
Logging6Loggly, Papertrail, Sumo Logic, Splunk, Logentries
E-commerce5Shopify Analytics, WooCommerce, Recharge, Google Merchant Center
Tag Manager4Google Tag Manager, Adobe Launch, Piwik PRO Tag Manager
Social Sharing3ShareThis, AddThis, AddToAny
Search1Algolia

Input

{
"startUrls": ["https://www.hubspot.com"],
"crawlPages": false,
"maxPages": 10,
"maxConcurrency": 3,
"checkScripts": true,
"checkCookies": true,
"checkGlobalVariables": true,
"checkNetworkRequests": true
}

startUrls takes plain strings, not objects. ["https://example.com"] works. The [{"url": "https://example.com"}] shape used by some Apify actors is not accepted here and the run will fail at startup (a failed run is not charged). Copy the format above exactly.

FieldTypeDefaultWhat it does
startUrlsarray of strings—Required. The pages to analyze.
crawlPagesbooleanfalseFollow internal links and analyze several pages of the same site. Off by default: one URL in, one page analyzed.
maxPagesinteger (1–100)10Page ceiling when crawlPages is on. Ignored when it is off.
maxConcurrencyinteger (1–10)3Pages loaded in parallel. Lower it on fragile sites.
checkScriptsbooleantrueMatch external and inline <script> sources against the catalogue, and read the Google Tag Manager containers the page loads.
checkCookiesbooleantrueMatch cookie names set by the page.
checkGlobalVariablesbooleantrueMatch JavaScript globals left on window (fbq, _paq, hj…).
checkNetworkRequestsbooleantrueMatch the domains the page actually calls. Catches tools loaded through a tag manager.

Turning a detection method off makes the run faster and shallower. All four on is the recommended setting.

Output

Every run pushes one page record per analyzed page, then one site summary at the end.

Page record

Real output for https://www.hubspot.com, trimmed to three of the nine tools found:

{
"type": "page",
"url": "https://www.hubspot.com",
"title": "HubSpot | Software & Tools for your Business - Homepage",
"httpStatus": 200,
"tools": [
{
"tool": "Google Analytics 4 (GA4)",
"category": "Analytics",
"detected": true,
"methods": ["script", "cookie", "networkRequest", "idPattern", "tagManagerContainer"],
"details": {
"scriptUrls": ["gtag/js?id=g-"],
"cookieNames": ["_ga_"],
"networkUrls": ["analytics.google.com/g/collect"],
"ids": ["G-LXTM6CQ0XK"]
}
},
{
"tool": "Google Tag Manager (GTM)",
"category": "Tag Manager",
"detected": true,
"methods": ["script", "idPattern"],
"details": { "scriptUrls": ["gtm.js"], "ids": ["GTM-N5LT88"] }
},
{
"tool": "HubSpot",
"category": "CRM",
"detected": true,
"methods": ["globalVariable", "networkRequest"],
"details": {
"globalVariables": ["hs-script-loader", "_hsq"],
"networkDomains": ["hubspot.com"]
}
}
],
"summary": {
"totalTools": 9,
"byCategory": { "Analytics": 1, "Social Media": 2, "Advertising": 4, "Tag Manager": 1, "CRM": 1 }
}
}

methods tells you how the tool was found, so you can judge the evidence yourself: script (a script URL or inline snippet matched), cookie (a cookie name matched), globalVariable (a JavaScript global was present), networkRequest (the page called the tool's domain, listed in details.networkDomains; for a domain shared by several products of the same vendor, the tool's own endpoint, listed in details.networkUrls as host and path without parameters), idPattern (an account ID matched a known format), tagManagerContainer (an ID configured in the Google Tag Manager container or Google tag the page loads, listed in details.ids — the tag it belongs to may only fire after consent).

Site summary

{
"type": "site-summary",
"pagesAnalyzed": 1,
"totalUniqueTools": 9,
"toolsFrequency": [
{ "tool": "Google Analytics 4 (GA4)", "category": "Analytics", "pagesCount": 1, "pages": ["https://www.hubspot.com"] }
],
"byCategory": {
"Analytics": { "count": 1, "tools": ["Google Analytics 4 (GA4)"] }
}
}

toolsFrequency is sorted by how many pages carry the tool — useful to separate site-wide tags from ones that only fire on a checkout or a landing page.

Export the dataset as JSON, CSV, Excel or XML from the run page, or read it through the Apify API.

Pricing

$0.01 per result (per dataset item). A run produces one item per analyzed page plus one site summary, so:

RunItemsCost
One page, no crawl1 page + 1 summary = 2$0.02
3-page crawl3 pages + 1 summary = 4$0.04
10-page crawl10 pages + 1 summary = 11$0.11

A run that fails before producing anything is not charged.

Limits, stated plainly

  • Detection is signature-based. A tool is reported when it matches a known script, cookie, global variable, domain or ID pattern. A tool that is self-hosted, proxied through a first-party domain, or renamed will be missed.
  • Only what loads on page load is seen. Tags that fire after a click, after cookie consent is accepted, or deeper in a funnel are not observed — the actor does not interact with the page. The exception is Google Analytics 4, whose measurement IDs are also read in the Google Tag Manager container the page loads. A tag manager or a tag injected by the site's own code several seconds after the page has loaded can be missed.
  • No anti-bot bypass. Sites that block automated browsers may return an error status or a challenge page; the page record then carries the real httpStatus and few or no tools. Check httpStatus before reading a short result as "clean site".
  • Crawling stays on the same hostname. www.example.com and shop.example.com are different hosts, and the crawler will not cross between them.
  • One tool, one category. Segment is reported under CDP, and the error trackers under Error Tracking. Vendors that ship genuinely different products stay separate entries on purpose (Zendesk and Zendesk Chat, Quantcast and Quantcast Choice).

Typical uses

  • Competitive teardown — see a competitor's analytics, ad and CRM stack, with their GA4 and GTM IDs.
  • Privacy and consent audit — list the trackers a site loads and whether a consent manager is even present.
  • Lead qualification — check at scale whether a prospect already runs HubSpot, Klaviyo, Intercom or nothing at all.
  • Post-migration check — confirm the tags you expect are live on every page, and that old ones are gone.
  • Performance triage — count the third-party scripts before blaming the theme.