Rytis Balys Rytis BalysConversion tracking engineer
rytisbalys.com / troubleshooting

Meta CAPI returns events_received: 1 and Events Manager still shows nothing

Written from production audits. The API accepting an event and Events Manager showing a new event are two different claims, and the gap between them has a small number of real causes.

The short answer: events_received: 1 means Meta accepted the payload for processing. It does not mean a new event will appear. In practice it is almost always one of three things: the event was deduplicated against its browser twin, it landed in a dataset you are not looking at, or you are reading the wrong window in Events Manager. Two popular explanations, test_event_code and a stale event_time, are contradicted by Meta’s own documentation, and we quote it below.

00What the response actually promises

A successful call returns something like {"events_received": 1, "messages": [], "fbtrace_id": "..."}. That is an acknowledgement of receipt and schema validity. It is not a statement that the event was counted, attributed, or made visible. Your own endpoint returning 200 proves even less: it only says your server answered. Read the response body from Meta, not the status code from your own stack.

VERIFY - log the full JSON body Meta returns, including fbtrace_id. If messages is non-empty, your answer is already in there and nothing below applies.

01It was deduplicated against the browser event

This is the most common cause and the least suspected, because nothing about it looks like a failure. If the pixel already sent the same action from the browser, and your server event carries the same event_name and event_id, Meta keeps one of them. From the server event parameters documentation:

“If we find a match between events sent within 48 hours of each other, we only consider the first one. If a server and browser/app event arrive at approximately the same time (that is, within 5 minutes of each other), we favor the browser/app event.”

So a correctly deduplicated server event is received, accepted, and then deliberately not shown as an additional event. The system is working. You are counting the wrong thing.

VERIFY - in Events Manager, open the event and look at the source breakdown rather than the total. If the action shows both Browser and Server with a deduplication figure, your server events are arriving and being merged on purpose.

02It landed in a dataset you are not looking at

Most businesses have more than one dataset, and the ID that ends up in server code is often not the one on screen. A dataset attached to an old ad account, a second pixel created during a theme migration, or a partner integration that provisioned its own. The call succeeds, because the ID is valid. It is simply not the ID you have open.

VERIFY - take the dataset ID from the URL your server actually posts to, not from a config file or a screenshot, and paste it into the Events Manager URL. If the page that opens is a different dataset than the one you have been watching, you have your answer.

03You are reading the wrong window

Events Manager defaults do not match how a server sends. The overview is time-zone bound to the ad account, batched server traffic can arrive in bursts, and a narrow date range with a filter left on from a previous session will hide a low-volume event completely. This is the cheapest cause to rule out and the one most often skipped.

VERIFY - widen the range to the last 7 days, clear every filter, and check the event name exactly as you send it. Purchase and a custom purchase are two different rows.

04Two explanations you will read everywhere that are wrong

Both circulate widely in forum threads. Meta’s documentation contradicts both, so ruling them out first saves a day.

“Your events went to Test Events instead of production.” From the Conversions API usage documentation:

“Events sent with test_event_code are not dropped. They flow into Events Manager and are used for targeting and ads measurement purposes.”

Leaving test_event_code in production is still wrong, and Meta says to remove it. But it does not hide your events.

“Your event_time was older than 7 days, so Meta dropped it silently.” From the server event parameters documentation:

“The event_time can be up to 7 days before you send an event to Facebook. If any event_time in data is greater than 7 days in the past, we return an error for the entire request and process no events.”

Note what that rules out. A stale timestamp does not produce a quiet partial loss. It fails the whole request and returns an error, so you would not be holding an events_received: 1 at all. If you are backfilling and seeing nothing, the timestamp is worth checking, but the symptom in this article is not how it presents.

VERIFY - if you suspect the window, send one event with a timestamp eight days old on purpose. An error back confirms the rule is live on your dataset and clears the theory for your real traffic.

05The order to check them in

Read the response body. Widen the window and clear filters. Confirm the dataset ID from the live request rather than from config. Then look at the source breakdown for deduplication. Four steps, and in production audits the answer is in the first three more often than not.

Numbers still don't add up?

Tell my assistant what you see and I will reach out to you directly. Every rated job on Upwork is 5.0, check them live.

Hi, I’m Rytis’s assistant. Your name and email first, so Rytis can reach out to you directly. Then tell me where your numbers disagree, or ask about prices and timelines.

I reply myself within 6 hours, usually under 1 hour. Prefer direct? WhatsApp (messages, not calls) · work@rytisbalys.com

FAQ

Does events_received: 1 mean the event was counted?

No. It means the payload was received and passed schema validation. Counting, deduplication and attribution all happen afterwards, and any of them can end with no new row in Events Manager.

My server events are deduplicated away. Should I stop sending them?

No. Deduplication is the point. The server event is your backup for the browser event that ad blockers, ITP or a consent decline would have lost. On the occasions the browser event never arrives, the server one is the only record you have.

Does test_event_code stop my events reaching production?

No. Meta documents that events sent with test_event_code are not dropped and still flow into Events Manager. Remove it from production payloads anyway, because Meta says to, but it is not the reason an event is missing.

Can an event_time older than 7 days be dropped without telling me?

Not according to Meta's documentation. An event_time more than 7 days in the past returns an error for the entire request and no events are processed. It is loud, not silent.

My own endpoint returns 200. Is that enough?

No. That is your server answering your server. The only response that matters is the one Meta returns, and it should be logged in full, fbtrace_id included, because support cannot help without it.

How long should I wait before deciding an event is missing?

Give it minutes rather than seconds, and check a wide date range with filters cleared before concluding anything. A low-volume event in a narrow window is invisible for reasons that have nothing to do with your integration.

Want it checked by professionals?

Seven days of platform conversions next to your real orders is enough for us to name the likely cause. No charge, usually under an hour.