Why it happens
The fbc must carry the click ID exactly. When someone clicks your ad, the address of your landing page usually carries an fbclid query parameter. The Meta pixel stores it in the _fbc browser cookie, and a server sends it to the Conversions API as the fbc parameter. Meta's developer docs say fbc must have the form version.subdomainIndex.creationTime.fbclid, where the last part "is the value for the fbclid query parameter in the page URL". They add that the click ID "is case sensitive" and should not be modified, "such as lower or upper case". Any change to that last part is a modified fbclid.
A step lowercases or trims customer data. Many server setups lowercase and trim customer details such as e-mail and phone before they hash them. That is right for an e-mail address. If the same step also runs over fbc, the click ID changes case, and Meta sees a value it did not issue.
The fbc is rebuilt from a changed address. When the browser has no _fbc cookie, a server can build fbc itself from the fbclid in the landing page address. Meta allows this. But if the address was decoded, encoded again, cut short or rewritten by a redirect on the way, the fbclid that ends up in fbc is no longer the original one.
The cookie value is edited before sending. Meta's docs say to always send the _fbc and _fbp browser cookie values in the fbc and fbp parameters when they are available. A setup that strips the prefix, swaps the parts or adds its own characters sends something else.
Two senders disagree. If two tools send Purchase to the same dataset from a server, one may pass fbc unchanged while the other rewrites it. Check each one.
Check it yourself
- 1In Meta Events Manager, open Data sources, pick your dataset and open the Diagnostics tab. Open the issue and note which event it names and when it was first detected.
- 2Open the History tab. Meta lists changes made to your pixel and Conversions API, when they were made and who made them. A new integration or a change on the day the warning appeared is your lead.
- 3List every tool that sends server events to this dataset: the Facebook & Instagram app on Enhanced or Maximum, a tracking app, a server Google Tag Manager container, custom code.
- 4Open your store with a made-up click ID in mixed case, for example yourstore.com/?fbclid=AbCdTest123. Accept your cookie banner first. In your browser's site data, read the _fbc cookie. The fbclid part should read exactly AbCdTest123, with the same capital letters; a setup built on Meta's parameter builder adds a short suffix after it.
- 5Check its format. Meta's example is fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890: the prefix fb, a subdomain index, the creation time in milliseconds, then the fbclid. Meta says a server that builds fbc without the cookie should use 1 as the subdomain index and the time it first saw the fbclid as the creation time.
- 6If your sending tool shows the event it sent, compare its fbc with the cookie, character by character. In a tag manager or custom code, make sure fbc is left out of any step that lowercases, trims or rewrites values.
- 7After the fix, watch Diagnostics. Meta says an issue that is not detected the following day moves to Previously detected, and comes back to Active if Meta detects it again after 3 days.
FAQ
Should I lowercase the fbclid to be safe?
No. Meta's docs say the click ID is case sensitive and should not be modified, lower or upper case included. Send it exactly as it arrived.
Is this warning urgent?
Meta marks each Diagnostics issue as critical, with a red icon, or as a warning, with a yellow one. Check which icon yours has. Either way, a broken click ID can make it harder for Meta to tie a purchase to the ad click, which also shows up in low Event Match Quality.
My store has no _fbc cookie. Can I still send fbc?
Meta says yes, when the page address carries an fbclid. Build the value in the fbc format, with the time you first saw that fbclid and a subdomain index of 1, and keep the fbclid unchanged.
How long does the _fbc cookie last?
Meta's docs recommend a 90-day expiry when a server sets the cookie. A purchase made long after the click may carry no fbc, which is not an error.
Does the same rule apply to fbp?
fbp has its own format: version.subdomainIndex.creationTime.randomnumber, where the random number comes from the Meta pixel. Send it as the browser stored it too. If browser and server copies of a purchase do not merge, see the Meta event ID with a Shopify custom pixel.