TikTok Pixel Not Working: Separating “Installed” From “Firing” From “Received”

By Jackson Kolinski · October 12, 2026 · 8 min read
TikTok Pixel Not Working: Separating “Installed” From “Firing” From “Received”

A TikTok Pixel that is not working is three different problems wearing the same costume. The code might not be on the page. It might be on the page and never fire. It might fire perfectly and TikTok might reject what arrives. From Ads Manager all three look the same: an empty events column. Checking them in the right order turns an afternoon into about ten minutes.

The three states, and why the order matters

Each check rules out everything above it, so working top-down means you never investigate a layer that was already fine.

  1. Installed— the base code is present in the delivered HTML.
  2. Firing— the code runs and sends a request when the thing you care about happens.
  3. Received— TikTok accepts the request and attributes it to your pixel.

Step 1: is it installed?

Load the page and view source rather than the inspector. The inspector shows the DOM after JavaScript has run; view-source shows what the server actually sent. Search for ttq or analytics.tiktok.com.

If nothing is there, the pixel is injected at runtime, usually by a tag manager, which pushes the question down a layer: is the container loading, and is the tag inside it firing? That is a different investigation from a missing snippet, and it is worth knowing which one you are in before you start.

Watch for more than one. Multiple ttq.load calls with different pixel IDs is a common state on sites that changed agencies. Every event then counts more than once, which looks like success until someone reconciles against actual orders.

Step 2: is it firing?

The TikTok Pixel Helper extension is the quick answer, with a caveat worth knowing: it reports what the browser is doing, and your browser is not a typical visitor. It has no ad blocker, it has already accepted your cookie banner, and it is on desktop. Plenty of pixels work perfectly in Pixel Helper and fire for a minority of real traffic.

The more honest check is the network panel. Filter for analytics.tiktok.com and perform the action. You are looking for a request at the moment the event should happen.

  • No request at all on a page where the base code is present means something stopped the script: a consent tool holding it until opt-in, a JavaScript error earlier on the page, or a tag that never fired.
  • A request for PageView but not for the conversion means the base code is fine and the event trigger is wrong. On a single-page app this is usually because the conversion fires on a route change the tag manager never hears about.
  • A request that appears and then the page navigates can be cancelled in flight. A form submit that immediately redirects will sometimes kill the beacon before it leaves.

Test it like a visitor, not like a developer

Repeat the check in a private window, on a phone, on cellular, going through the consent banner by actually clicking what a real person clicks. A surprising share of “not working” reports are pixels that work only for people who accept all cookies on desktop Chrome.

Step 3: is TikTok receiving it?

TikTok Events Manager has a Test Events tool that shows events arriving in near real time against a test code. It is the authoritative answer to “did it reach TikTok”, and it is also where people lose the most time, because a few things make it look broken when it is not.

  • The test code has to be on the request. Opening Test Events and then browsing your site normally shows nothing. The session has to carry the code.
  • It is near-real-time, not instant. Tens of seconds is normal. Reloading twice in five seconds and concluding failure is the classic error.
  • Standard events reported as custommeans a naming mismatch. TikTok's standard events are case-sensitive and specific: CompletePayment is standard, complete_payment is a custom event that no standard optimisation will use.

If the request leaves the browser with a 200 and nothing appears here, the usual causes are a pixel ID that belongs to a different ad account, or an event rejected for a malformed payload.

The causes that account for most of it

Consent tools

The most common single cause, and the one most likely to be invisible to the person investigating, because they accepted the banner weeks ago and their browser remembers. If the pixel is gated behind marketing consent and your banner defaults to denied, the pixel fires for whatever share of visitors opt in, which in some markets is under half.

Shopify and app conflicts

On Shopify, the TikTok channel app installs its own pixel. If someone has also pasted the base code into the theme, or added it through a tag manager, you get two pixels and double-counted events. Checkout is a separate surface again: theme edits do not reach it, which is why a purchase event can be missing while every other event on the site works.

Single-page apps

The base code fires once on load. Route changes are not page loads, so without an explicit call on navigation, every view after the first is invisible. The symptom is a PageView count far below sessions.

Ad blockers and browser protections

A meaningful share of requests to a known analytics domain never leave the browser. This is not fixable from the page, which is the argument for the Events API below.

Getting the event names right

TikTok optimises against its standard events. Anything outside that list is recorded as a custom event, which you can still build audiences from but which will not feed the optimisation goals in the campaign setup. The mismatch is easy to create and hard to see, because Events Manager shows the custom event arriving and looking healthy.

The ones that matter most for a typical funnel are ViewContent, AddToCart, InitiateCheckout, CompletePayment, SubmitForm and CompleteRegistration. Two things go wrong repeatedly:

  • Case and separators. CompletePayment is standard. Complete_Payment, completepayment and purchase are all custom events as far as TikTok is concerned.
  • Borrowing Meta's vocabulary. Teams that already run Meta often copy the pixel setup across and send Purchase, which is Meta's name, not TikTok's. Every event lands, nothing optimises, and the setup looks complete.

Check the event names in Events Manager against the standard list rather than against your own tag configuration. The tag will always agree with itself.

Advanced Matching, and why a working pixel can still underperform

A pixel can fire correctly on every page and still deliver weak results if the events carry no identifying information. TikTok matches conversions to users using whatever customer data you attach: a hashed email, a hashed phone number, or the ttclid click identifier captured from the landing page URL.

Without those, matching leans on cookies and IP, which is exactly the signal that browser privacy features have spent several years degrading. The result is a pixel that passes every test in this article and still reports a fraction of the conversions it should.

Two practical checks. First, confirm ttclid is being read from the URL and persisted; if a redirect strips it before your page loads, it is gone for that visitor. Second, confirm that hashed identifiers are actually populated on conversion events rather than merely configured, which is a distinction the setup UI does not make for you.

When the browser is the wrong place to send from

The TikTok Events API sends conversions from your server instead of the visitor's browser. It is unaffected by ad blockers, extensions and browser privacy features, and it is the only reliable route for conversions that happen off-site entirely, like a phone order or a CRM close.

Two things matter if you run both:

  • Deduplicate. Send the same event_id from the browser and the server for the same conversion so TikTok can collapse them. Without it, running both doubles your numbers, and the doubling looks like success.
  • Send proper match keys. A server event with no hashed email, phone or click ID is weakly matched and will do little for optimisation, even though it arrives cleanly.

It fires correctly and the numbers still look wrong

Once the pixel genuinely works, a second class of complaint appears: TikTok reports more conversions than your store did. This is usually not a tracking fault, and chasing it as one wastes a lot of time.

TikTok defaults to a click-through and view-through attribution window that is wider than most people assume. A view-through conversion is someone who saw the ad, did not click, and bought later through another route. TikTok counts it; your order table attributes it to organic or direct. Both are behaving as designed.

Before concluding the pixel is double-counting, check the attribution setting on the campaign and compare like for like. If the discrepancy survives a click-only comparison over a matched date range, then it is worth investigating duplicate pixels or a missing event_id. If it does not, you are looking at an attribution difference and no amount of tag work will close it.

The part nobody has time for

Everything above is a point-in-time check. It tells you the pixel works this afternoon. It says nothing about next Thursday, when a theme update ships, a consent vendor changes defaults, or an app is installed that injects a second pixel.

That is the real shape of the problem for anyone running more than one account: the check is cheap, but remembering to run it across every client every week is not, and the window between a break and someone noticing is where the budget goes. Taglert watches Meta and Google tracking continuously and emails you the day something changes, which is the same job done on a schedule nobody has to keep. See the FAQ for what it checks.

Sources

Stop finding out about broken tracking from your client.

Taglert monitors your pixels and conversion tracking 24/7 and alerts you the moment something breaks.

Start your free trial
  • First scan in ~5 minutes
  • 30-day money-back guarantee
  • No credit card

Related reading