Fix guide · Framer · advanced · about 60 min
TikTok Pixel event_id missing on Framer: how to add it
For the finding “TikTok events have no event ID”. Also for: Any website, Shopify, WordPress, Webflow.
What this means
Each event the TikTok Pixel sends can carry an event ID (event_id): a unique label for that one action. Your Framer site’s events arrive with an empty event_id. The pixel does not fill in an ID by itself (that is the empty event_id field you see in the Network tab): TikTok asks advertisers to choose a unique ID for each event, and if your code does not pass one, the field stays empty.
Whether this costs you money depends on one question: does your site also send these events to TikTok from a server, through the TikTok Events API? TikTok does not list Framer among its partner integrations, so on a Framer site server events usually come from a plugin, from server-side Google Tag Manager (GTM), or from your own backend.
- Yes, or you are not sure: TikTok deduplicates a browser event and a server event when they share the pixel code, the event name and the
event_id. When the server event has noevent_ideither, TikTok can fall back to the_ttpcookie, but only within 5 minutes, only if first-party cookies are on and your server sendsttp, and only by dropping the server copy. Otherwise both copies can count. - No, browser pixel only: there is nothing to deduplicate yet. It matters the day you add the Events API.
We cannot see server-to-server traffic from a browser, so we cannot tell whether your Events API works. We only check whether the browser events carry an ID.
How to confirm it yourself
- Open your published Framer site in a private (incognito) window (Framer does not run custom code in the canvas preview). Open developer tools (F12), go to Network and filter by
analytics.tiktok.com/api/v2/pixel. - Accept cookies, then trigger your key events, for example submit a test lead through your own form.
- In each request’s payload,
eventis the event name andevent_idis the ID."event_id": ""means the event has no ID. - Find where the event is sent: a
ttq.trackcall in Site Settings > Code or in a page’s own Custom Code section, a TikTok tag in GTM, or a plugin. In code, TikTok documents the ID in the third argument ofttq.track; use it.
In TikTok Events Manager, the pixel’s detail page shows “Browser”, “Server” and “Server & Browser” figures. TikTok says that if the “Server & Browser” numbers are too low, you should check your deduplication setup.
How to fix
TikTok keeps the first copy of an event and discards later copies with the same pixel code, event name and event_id that arrive within 48 hours. So the browser event and the server event need one shared ID, generated once. On Framer there are three realistic routes.
Route 1: a plugin that sends browser and server events together. Some third-party tracking plugins for Framer send the TikTok Pixel and the TikTok Events API from one setup. PixelFlow, for example, says it pairs browser and server events automatically and generates and matches event IDs, so TikTok counts a conversion once. Check the documentation of whichever tool you use. If you choose this route:
- Remove any TikTok base code from Site Settings > Code (older Framer articles call it Project Settings > Custom Code), from pages’ own Custom Code sections and from GTM, so the plugin’s pixel is the only one. A leftover manual pixel keeps sending events without IDs, and usually also shows up as “Duplicate TikTok events”.
- Turn on the plugin’s server-side option and check how it handles consent with your cookie banner.
Route 2: GTM with server-side GTM. If your TikTok Pixel runs in GTM (often in the container that Framer’s Cookie Banner loads; in our tests, the banner loaded GTM by itself):
- If you set up GTM through TikTok’s interactive flow in Events Manager, TikTok says an
event_idvariable is configured for you. Check that your event tags use it. - Otherwise, create a variable that produces a new value per event, for example Stape’s Unique Event ID variable from the Community Template Gallery, and put it in De-duplication Configurations > Event ID in each TikTok Pixel tag.
- Pass the same value to your server container and send it as
event_idwith the TikTok Events API (Official) tag, with the same event name and pixel code.
Route 3: your own code. If you send events from custom code, for example from a “thank you” page that a Framer form redirects to, pass the ID as the third argument:
ttq.track('Lead', {
value: 10,
currency: 'EUR'
}, { event_id: 'lead-8f3a2c' });
Put event code like this in custom code that runs only on that page (the page’s own Custom Code section, or an entry in Site Settings > Code limited to that page under Pages), with Run set to On Every Page Visit, which Framer describes as suited to tracking events. Then send exactly the same value as event_id in the Events API event, with the same event name and the pixel code as event_source_id.
If your server events come from a Framer form webhook, note that Framer sends your handler the form’s input names and values (plus its own submission ID in a header). The browser and the handler only share an ID if that ID travels with the submission, and Framer’s documentation does not describe a way to add a generated ID to a native form. Plan this with a developer, or use route 1 or 2. Two IDs generated separately in the browser and on the server will never match.
In every route: use a unique value per action (TikTok suggests order numbers or transaction IDs), never a fixed value, and keep first-party cookies on in Events Manager (Tools > Events > Data sources > your pixel > Settings) so the _ttp fallback still works. Publish the Framer site and the GTM containers after changes.
Common causes
- The pixel was pasted into Framer’s custom code using TikTok’s standard base code and event snippets, which do not include
event_id. - A plugin or server-side GTM was added for the Events API later, but an older pasted pixel still sends the browser events.
- In GTM, the Event ID field is empty or uses a value the server never receives.
- The browser and the server each generate their own ID.
How to verify the fix
- In the Network tab, every
analytics.tiktok.com/api/v2/pixelrequest for your key events carries a non-emptyevent_id, and it changes between actions. - For one test conversion, the server sends the same
event_idand event name. - In Events Manager, the “Server & Browser” figures for that event grow (data is not shown in real time).
- Re-run the check on IsPixelWorking. The issue should be gone.
Sources
- TikTok API for Business, Event Deduplication (keys, keep the first copy, 48 hours, 5-minute merge,
_ttpfallback, unique IDs, Server & Browser metrics): https://business-api.tiktok.com/portal/docs?id=1771100965992450 - TikTok Business Help Center, Event deduplication: https://ads.tiktok.com/resources/help/article/event-deduplication?lang=en
- TikTok API for Business, Events API 2.0 setup guide for Web (
event_id,event_source_id, first-party cookies setting): https://business-api.tiktok.com/portal/docs?id=1771100865818625 - TikTok API for Business, Events API and Pixel setup with Google Tag Manager (interactive setup configures an
event_idvariable): https://business-api.tiktok.com/portal/docs?id=1799004052020225 - TikTok on GitHub, TikTok Pixel GTM template (De-duplication Configurations > Event ID): https://github.com/tiktok/gtm-template-pixel
- TikTok on GitHub, TikTok Events API (Official) server template: https://github.com/tiktok/gtm-template-eapi
- TikTok Business Help Center, Partner integrations for web tracking (Framer not listed): https://ads.tiktok.com/resources/help/article/partner-integrations-for-web-tracking?lang=en
- Framer Updates, Custom Code (“On Every Page Visit” for tracking events): https://www.framer.com/updates/custom-code
- Framer Academy, Add Custom Code to your site in Framer (page-level custom code, not loaded in the canvas preview): https://www.framer.com/academy/lessons/custom-code
- Framer Help, Add Google Tag Manager to your site (Site Settings > Code): https://www.framer.com/help/articles/how-to-add-google-tag-manager-to-your-site/
- Framer Updates, Forms (redirect on submit, webhooks): https://www.framer.com/updates/forms
- Framer Help, Connect Framer forms to a webhook (payload of input names and values, submission ID header): https://www.framer.com/help/articles/framer-form-webhook-setup/
- PixelFlow, Send conversions from Framer to your ad platforms (third-party plugin; TikTok Events API, browser and server events paired, event IDs matched): https://pixelflow.so/framer
- Stape, Unique Event ID variable: https://stape.io/helpdesk/documentation/unique-event-id
More TikTok guides
- TikTok Pixel fires before consent on Framer: how to fix
- TikTok Pixel not firing after consent on Framer: how to fix
- Repeated TikTok event IDs drop real conversions: how to fix
- Duplicate TikTok Pixel events on Framer: how to fix
- TikTok click ID (ttclid) lost on Framer: how to fix
- TikTok Pixel tracks a button on desktop but not on mobile
- Two TikTok Pixels on one site: when it's fine, how to fix
- TikTok Events API deduplication: match the pixel's event_id
- How to set up the TikTok Events API (with deduplication)