---
title: "TikTok Pixel event_id missing on Framer: how to add it"
description: "Your Framer site's TikTok events have an empty event_id, so they can't be matched with Events API events. When it matters, and how to add one shared ID."
updated: "2026-10-23"
url: "https://ispixelworking.com/guides/tiktok.missing_event_id/framer"
---

# TikTok Pixel event_id missing on Framer: how to add it

Fix guide · Framer · advanced · about 60 min · updated 2026-10-23

For the finding “TikTok events have no event ID” (`tiktok.missing_event_id`).
Also for: [Any website](https://ispixelworking.com/guides/tiktok.missing_event_id/generic), [Shopify](https://ispixelworking.com/guides/tiktok.missing_event_id/shopify), [WordPress](https://ispixelworking.com/guides/tiktok.missing_event_id/wordpress), [Webflow](https://ispixelworking.com/guides/tiktok.missing_event_id/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 no `event_id` either, TikTok can fall back to the `_ttp` cookie, but only within 5 minutes, only if first-party cookies are on and your server sends `ttp`, 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

1. 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`.
2. Accept cookies, then trigger your key events, for example submit a test lead through your own form.
3. In each request's payload, `event` is the event name and `event_id` is the ID. `"event_id": ""` means the event has no ID.
4. Find where the event is sent: a `ttq.track` call 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 of `ttq.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:

1. 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".
2. 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):

1. If you set up GTM through TikTok's interactive flow in Events Manager, TikTok says an `event_id` variable is configured for you. Check that your event tags use it.
2. 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.
3. Pass the same value to your server container and send it as `event_id` with 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:

```js
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

1. In the Network tab, every `analytics.tiktok.com/api/v2/pixel` request for your key events carries a non-empty `event_id`, and it changes between actions.
2. For one test conversion, the server sends the same `event_id` and event name.
3. In Events Manager, the "Server & Browser" figures for that event grow (data is not shown in real time).
4. 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, `_ttp` fallback, 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_id` variable): 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
