TikTok & Kwai Ad Pixel Checker avatar

TikTok & Kwai Ad Pixel Checker

Pricing

from $1.92 / 1,000 domain extracteds

Go to Apify Store
TikTok & Kwai Ad Pixel Checker

TikTok & Kwai Ad Pixel Checker

Check public company domains for TikTok and Kwai ad pixel signals, IDs, detection paths, GTM evidence, and fetch diagnostics.

Pricing

from $1.92 / 1,000 domain extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Turn a list of public company domains into evidence-based TikTok and Kwai advertiser signals.

This ad pixel checker inspects each public homepage and a bounded number of referenced public Google Tag Manager (GTM) containers. It exports one row per submitted domain with separate network verdicts, exposed pixel IDs, detection paths, source URLs, and fetch diagnostics.

Use the results to qualify prospects, research competitors, audit campaign setup, or refresh an advertiser-enrichment table.

What does this Actor do?

The Actor accepts plain domains such as apify.com and complete HTTP(S) URLs. For each entry it:

  1. normalizes the URL;
  2. validates that every destination is public;
  3. fetches the page with bounded redirects and retries;
  4. detects TikTok and Kwai script URLs, JavaScript APIs, variables, and exposed IDs;
  5. discovers referenced GTM-* container IDs;
  6. optionally checks a bounded number of public GTM container scripts;
  7. exports independent TikTok and Kwai verdicts;
  8. includes diagnostics that distinguish a clean no-signal result from an unreachable page.

A detected verdict means a supported public signature was found. A no-signal verdict means the page was fetched successfully but no supported signature was visible. An unknown verdict means the page could not be evaluated reliably.

Who is it for?

Lead-generation teams can prioritize companies whose sites expose TikTok or Kwai campaign infrastructure.

Advertising agencies can find public evidence relevant to outreach and account audits.

Competitive-intelligence teams can compare current pixel presence across a watchlist.

Marketing operations teams can check whether an expected tag is publicly visible after a deployment.

Data teams can enrich domain tables through the API and schedule recurring snapshots.

This Actor is focused on TikTok and Kwai qualification. Choose a broader technology-stack Actor when you need CMS, analytics, hosting, or dozens of unrelated trackers.

Why use it?

  • One stable row per submitted entry.
  • Separate TikTok and Kwai verdicts instead of one ambiguous tracker flag.
  • Pixel IDs when the public implementation exposes them.
  • Detection paths that explain why a verdict is positive.
  • Source URLs showing whether evidence came from page HTML or GTM.
  • Bounded GTM inspection without running a full browser.
  • Explicit HTTP, content-type, size, retry, and timing diagnostics.
  • SSRF defenses that reject credentials, local hosts, and private network addresses.
  • Conservative concurrency and finite retries for predictable runs.

Input

FieldTypeDefaultDescription
domainsarrayrequiredUp to 1,000 public domains or HTTP(S) URLs.
scanGtmContainersbooleantrueInspect referenced public GTM container JavaScript.
maxGtmContainersPerDomaininteger3Maximum GTM containers fetched per domain, from 0 to 10.
maxConcurrencyinteger5Concurrent domain checks, from 1 to 20.
requestTimeoutSecsinteger20Timeout per request, from 5 to 60 seconds.

Plain domains are normalized to HTTPS. Complete URLs may include a public path. URLs containing credentials are rejected. Localhost, local domains, and private IP destinations are rejected.

Small input example

{
"domains": [
"neo-ia.eu",
"stanleyshair.com",
"apify.com"
],
"scanGtmContainers": true,
"maxGtmContainersPerDomain": 3,
"maxConcurrency": 3
}

Output fields

FieldMeaning
domainNormalized hostname.
inputUrlNormalized submitted URL.
finalUrlURL after validated public redirects.
checkedAtUTC completion time.
tiktokDetectedConvenience boolean for a TikTok detection.
tiktokVerdictdetected, no-signal, or unknown.
tiktokPixelIdsPublicly exposed TikTok pixel IDs.
tiktokDetectionPathsMatched signature and extraction path.
tiktokSourceUrlsURLs containing TikTok evidence.
kwaiDetectedConvenience boolean for a Kwai detection.
kwaiVerdictdetected, no-signal, or unknown.
kwaiPixelIdsPublicly exposed Kwai pixel IDs.
kwaiDetectionPathsMatched signature and extraction path.
kwaiSourceUrlsURLs containing Kwai evidence.
gtmContainerIdsReferenced public GTM IDs.
scannedSourceUrlsEvery page or GTM URL inspected.
fetchStatusFetch or input-validation outcome.
httpStatusFinal page HTTP status when available.
contentTypeFinal response content type.
responseBytesNumber of analyzed response bytes.
elapsedMsTotal domain-check duration.
retryCountTransient retries across the check.
errorConcise diagnostic when evaluation failed.

All schema fields are nullable because public sites can change or omit evidence. Arrays are empty when no corresponding public evidence was found.

Output example

A current direct-page TikTok detection can look like this:

{
"domain": "neo-ia.eu",
"inputUrl": "https://neo-ia.eu/",
"finalUrl": "https://neo-ia.eu/",
"tiktokDetected": true,
"tiktokVerdict": "detected",
"tiktokPixelIds": ["CVLSKRBC77UB7DSGH6Q0"],
"tiktokDetectionPaths": [
"page HTML: analytics.tiktok.com pixel script",
"page HTML: ttq JavaScript API",
"page HTML: TikTok pixel ID"
],
"kwaiDetected": false,
"kwaiVerdict": "no-signal",
"kwaiPixelIds": [],
"gtmContainerIds": [],
"fetchStatus": "success",
"httpStatus": 200,
"retryCount": 0,
"error": null
}

Public tags can change after this example is written. Use the current run output as the authoritative observation.

How much does it cost to check domains for TikTok and Kwai pixels?

Pricing uses pay per event:

  • a one-time Start event of $0.005 per run;
  • one Domain extracted event per submitted entry;
  • the BRONZE domain price is $0.0032 per domain.

GTM evidence and diagnostics are included in the domain event. They are not charged as separate records.

Example BRONZE totals:

DomainsStartDomain eventsEstimated total
1$0.005$0.0032$0.0082
10$0.005$0.032$0.037
100$0.005$0.320$0.325

Higher subscription tiers receive the active tier price shown in Apify Console. Actual billing follows the active platform pricing for your account tier.

Getting started

  1. Open the Actor in Apify Console.
  2. Add one or more public domains to Company domains.
  3. Keep Scan public GTM containers enabled for broader public evidence.
  4. Start with the default concurrency.
  5. Click Start.
  6. Open the default dataset.
  7. Filter tiktokVerdict or kwaiVerdict to detected.
  8. Export the result as JSON, CSV, Excel, XML, or RSS.
  9. Schedule the task when you need recurring snapshots.

Detection behavior

TikTok checks include public analytics.tiktok.com pixel scripts, the ttq JavaScript API, common TikTok pixel variables, and exposed loader IDs.

Kwai checks include public Kwai pixel script URLs, the kwaiq JavaScript API, common Kwai pixel variables, and exposed loader IDs.

The Actor also extracts public GTM container IDs from successful page HTML. When enabled, it fetches each bounded container from www.googletagmanager.com and applies the same network-specific checks.

A positive signature is evidence of tag code, not proof that an advertising campaign is currently spending money. A pixel may be dormant, conditionally triggered, misconfigured, or loaded only after consent.

Recurring advertiser qualification

Create an Apify Task with your CRM or prospecting domains. Schedule it daily, weekly, or monthly. Export each run to your destination or retrieve it through the dataset API.

A useful downstream workflow is:

  1. join rows to the normalized domain key;
  2. keep detected and no-signal distinct from unknown;
  3. compare pixel ID arrays between snapshots;
  4. route newly detected domains to research;
  5. retry unknown domains later rather than treating them as negatives.

The Actor emits observations only. It does not maintain historical state or send change alerts itself.

API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~tiktok-kwai-domain-advertiser-checker/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains":["neo-ia.eu","stanleyshair.com"],"scanGtmContainers":true}'

To wait for completion and receive dataset items:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~tiktok-kwai-domain-advertiser-checker/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains":["apify.com"]}'

Keep your token in a secret or environment variable. Do not commit it to source control.

API with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/tiktok-kwai-domain-advertiser-checker').call({
domains: ['neo-ia.eu', 'stanleyshair.com'],
scanGtmContainers: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/tiktok-kwai-domain-advertiser-checker').call(
run_input={
'domains': ['neo-ia.eu', 'stanleyshair.com'],
'scanGtmContainers': True,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/tiktok-kwai-domain-advertiser-checker"

Claude Desktop, Cursor, and VS Code can use this equivalent MCP JSON configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/tiktok-kwai-domain-advertiser-checker"
}
}
}

Example prompts:

  • “Check these domains for TikTok and Kwai pixels and summarize detected IDs.”
  • “Separate successful no-signal checks from unknown fetch failures.”
  • “Return the GTM detection path for every Kwai-positive domain.”

Integrations

Use Apify integrations to send result rows to Google Sheets, Slack, Zapier, Make, webhooks, or cloud storage.

For CRM enrichment, keep domain as the join key and retain the verdict plus diagnostics.

For spreadsheets, export the overview view for compact columns. Use JSON when you need the complete evidence arrays.

For scheduled monitoring, store each run timestamp and compare snapshots downstream.

Reliability, retries, and limits

Each request has a configurable timeout. Transient network errors, rate limits, and selected server errors receive at most two retries with backoff. Redirects are limited and every redirect destination is validated again.

The Actor analyzes at most 5 MB of text from each response. It scans only the submitted URL, not every page on the domain. It checks at most the configured number of GTM containers.

A blocked page returns an unknown network verdict with diagnostics. The Actor does not silently convert a failed fetch into no-signal.

Limitations

  • It checks public source available without login.
  • It does not prove active media spend.
  • Consent-gated tags may not appear in a direct HTTP response.
  • Browser-only tags triggered by interaction may be absent.
  • Server-side conversion APIs cannot be detected from public browser code.
  • Obfuscated or custom proxy loaders may not match supported signatures.
  • A site can block automated requests or return different regional HTML.
  • Only the submitted page and bounded public GTM containers are inspected.
  • The Actor does not crawl checkout, confirmation, or campaign landing pages automatically.

Treat no-signal as “not visible in the checked public sources,” not “definitely never used.”

Legality and responsible use

Only submit public websites you are permitted to access. Respect applicable website terms, robots guidance, rate limits, privacy law, and advertising-platform policies.

The output reports technical signals exposed by public pages. Do not use it to infer sensitive personal traits, evade access controls, or make automated high-impact decisions about individuals.

Avoid combining pixel evidence with personal data unless you have a lawful purpose and appropriate safeguards.

Troubleshooting

Why is the verdict unknown?

Inspect fetchStatus, httpStatus, and error. The page may have blocked the request, timed out, redirected to an invalid destination, or returned a non-text response. Retry later before classifying the domain.

Why is a known pixel reported as no-signal?

The tag may load only after consent, interaction, authentication, geolocation, or client-side rendering. Try the precise public landing-page URL where you expect the tag. This Actor intentionally does not claim browser-only coverage.

Why is a GTM ID listed but no network pixel detected?

A container can omit the pixel, trigger it only under conditions, or retrieve later configuration from another service. The GTM ID itself is diagnostic context, not a TikTok or Kwai verdict.

Why is a pixel ID empty on a detected row?

Some public signatures call a network API without exposing the ID in a supported literal format. The detection paths and source URLs still explain the positive signature.

FAQ

Does this scan Meta or Google Ads pixels?

No. The output contract is intentionally focused on TikTok and Kwai.

Does it support bulk checks?

Yes. Submit up to 1,000 domains per run and tune concurrency between 1 and 20.

Does it use residential proxies?

No automatic paid proxy fallback is enabled. The Actor uses direct public HTTP requests and reports blocked pages as unknown.

Are GTM containers public?

The Actor fetches only container JavaScript referenced by the submitted public page from Google's public GTM host. It does not access a GTM account or private workspace.

Can I schedule it?

Yes. Save the input as an Apify Task and configure a schedule in Console. Store or export snapshots if you need change history.

Is every result charged?

One Domain extracted event is charged for each submitted entry because the verdict and diagnostics are the result, including an explicit unknown or invalid-input outcome. There is no separate charge for GTM sources or pixel IDs.

Combine these Actors downstream when a prospecting workflow needs advertising, domain-registration, email-security, and custom endpoint signals.

Support

For reproducible problems, include a sanitized input, run URL, affected domain, expected verdict, and the relevant diagnostic fields. Do not include API tokens, cookies, private URLs, or credentials.