fbclid is the Facebook Click ID: a parameter Meta adds to your website's URL when someone clicks through from Facebook or Instagram. The Meta pixel stores it in the _fbc cookie, and the value goes back to Meta with your conversions, from the browser or through the Conversions API, so the sale can be matched to the click.
Most people meet it as clutter in a URL. I'd treat it as the most useful string a Meta click brings you, and strip it from the address bar only after it's saved.
The fbclid has an odd reputation. It turns up at the end of links people paste into group chats, it fills analytics reports with near-duplicate page URLs, and there are whole guides on how to get rid of it. Meanwhile, the same string is what lets Meta connect a purchase on your site back to the ad that caused it.
Picture a store that adds a "clean URLs" plugin to tidy those links, and a week later sees Meta's reported purchases drop while sales hold steady. The plugin did exactly what it promised. It removed the parameter before anything had stored it. This guide is about getting the tidy URLs without that side effect.
What is fbclid?
Meta calls it the ClickID: "a Meta-generated parameter that is passed with the URL of an advertiser's website when a user clicks an ad on Facebook and/or Instagram" (Meta for Developers). It's a click ID, like Google's gclid and TikTok's ttclid, and it looks like this:
https://yourbrand.com/offer?utm_source=facebook&fbclid=IwAR2F4...
Meta's spec is explicit that the value is case sensitive: don't lowercase, trim or re-encode it before you use it.
Where you'll see fbclid
Meta's documentation talks about ad clicks, but in practice the parameter also appears on ordinary links clicked on Facebook, which is why a URL copied from a friend's post often ends in ?fbclid=. So its presence tells you the visitor came from Meta, not that you paid for the visit.

That's the reason I never use "has an fbclid" as the definition of paid Meta traffic in a report. Tag your ads with UTM parameters and let those say what was paid; let the fbclid do its one job, which is matching.
fbclid and the _fbc cookie
The fbclid only lives in the URL. When the Meta pixel runs on the page, it saves the click in a first-party cookie on your domain called _fbc, in this format:
fb.1.1759140000000.IwAR2F4...
fb: always the same prefix.1: the subdomain index, 0 forcom, 1 foryourbrand.com, 2 forwww.yourbrand.com.1759140000000: when the cookie was created, as Unix time in milliseconds.- The rest is the fbclid, unchanged.
Meta says to set it with a 90-day expiration. Next to it, the pixel sets _fbp, a browser ID in a similar format that exists for every visitor, click or no click.

_fbc (fbc) | _fbp (fbp) | |
|---|---|---|
| Holds | The fbclid of the click | A random browser ID |
| Exists when | The visitor arrived with an fbclid | The pixel ran, for any visitor |
| Set by | The Meta pixel, or you from the URL | The Meta pixel |
| Sent in Conversions API as | user_data.fbc | user_data.fbp |
If there's no _fbc cookie but the URL had an fbclid, Meta tells you to build the fbc value yourself from the URL, with the current time as the creation time. That's the case that matters most when the pixel is blocked or hasn't loaded yet.
Should you remove fbclid from your URLs?
There are fair reasons to. Every click gets a different value, so pages cached by their full URL miss the cache, shared links look messy, and reports that use the full page URL split one page into hundreds of rows. Safari already removes known tracking parameters from links in Private Browsing (WebKit, Safari 17).
The rule is the order. Capture first, then clean. Let the page load with the parameter, let the pixel set _fbc and let your server store the value, then remove it from the address bar with history.replaceState. A redirect or a plugin that strips it before the page runs is the store in the example above.
How to send fbclid back through the Conversions API
The Conversions API sends events from your server, so a purchase reaches Meta even when the browser pixel doesn't fire. The fbclid travels in it as fbc.
- Store the click on arrival. Save the fbclid from the URL, plus the
_fbcand_fbpcookies once the pixel has set them, with the visit or session on your server. - Build fbc if the cookie is missing.
fb.1., the time in milliseconds, a dot and the fbclid, exactly as it came. - Send the purchase. Post a Purchase event to
/{pixel_id}/eventswithfbc,fbp, hashed customer data, the IP address and user agent, the value and currency, and anevent_id. - Deduplicate with the pixel. If the pixel also fires Purchase, give it the same event ID (
eventIDin the pixel). Meta discards the later copy when event name and ID match within 48 hours and generally keeps the first one it received (Meta for Developers).
The event, as your server would send it:
{
"data": [{
"event_name": "Purchase",
"event_time": 1759140000,
"event_id": "order-1042",
"action_source": "website",
"event_source_url": "https://yourbrand.com/offer",
"user_data": {
"fbc": "fb.1.1759139000000.IwAR2F4...",
"fbp": "fb.1.1759138000000.1234567890",
"em": ["sha256 of the lowercased email"],
"client_ip_address": "203.0.113.7",
"client_user_agent": "Mozilla/5.0 ..."
},
"custom_data": { "currency": "USD", "value": 89.00 }
}]
}
How long a click can earn credit is a separate question from how long the cookie lives. Meta credits a purchase within the attribution setting on your ad set, counted in days after the click or view (Meta Business Help Center), not for the full 90 days of the cookie. Compare Meta's numbers with your store's over the same window, or the gap will look like a tracking problem when it isn't.
fbclid vs gclid vs ttclid
| fbclid | gclid | ttclid | |
|---|---|---|---|
| Platform | Meta (Facebook, Instagram) | Google Ads | TikTok |
| Appears on | Clicks from Facebook and Instagram, paid or shared | Ad clicks with auto-tagging on | TikTok ad clicks |
| Browser cookie | _fbc, 90 days | _gcl_aw, 90 days | ttclid |
| Sent back as | fbc in the Conversions API | A conversion upload | user.ttclid in the Events API |
The fbclid is the only one of the three that needs reformatting before it goes back. The other two are sent as they arrived. If you're wiring all three, the gclid guide covers offline uploads and the ttclid guide covers TikTok's Events API.
fbclid in ElasticFunnels
When we built the Meta connection into ElasticFunnels, we made the server keep the click, because a cookie that has to survive until the thank-you page is the part of this chain most likely to be missing when you need it.
- Captured on arrival. Pages hosted on ElasticFunnels store the fbclid from the landing URL, and the
_fbcand_fbpcookies, with the visit. When there's no_fbccookie, ElasticFunnels buildsfbcfrom the fbclid. - Sales go to Meta server-side. With the Meta Ads integration connected and conversion postbacks on, a sale on a visit that came from a Meta click reaches your pixel through the Conversions API as a Purchase, with
fbc,fbp, the order value and currency, the IP address and user agent, and the customer's email, name, phone and address hashed with SHA-256. - No app review needed for the Conversions API connection. If you'd rather not connect with Facebook Login, the Meta Conversions API connection needs only a pixel ID and a system user token.
Every feature is on every plan.
- Never install a URL-cleaning plugin without checking what it strips and when. Cleaning after capture is fine; cleaning before it costs you attribution you'll never see go missing.
- Don't count fbclid visits as paid traffic. Your UTMs know what you paid for; the fbclid doesn't.
- If you only have time to send one thing server-side to Meta, send the purchase with
fbcand a hashed email. That's the event the algorithm is buying. - When Meta and your store disagree, check the attribution setting before you blame the pixel.
The fbclid looks like junk in a URL, and most advice treats it that way. Keep it long enough to send it back, then clean up all you like.



