Skip to main content
Olo → MetaIntegration guide

Connecting Olo to Meta Conversions API

Olo sits between a multi-location brand and every channel it sells through, which makes it the only place where a direct order and a marketplace order can be compared on the same terms. Meta's pixel loses a large share of conversions to Safari, ad blockers and iOS, and the Conversions API exists because of it. The join between them succeeds or fails on one thing: whether the fbc and fbp values reaches the Olo order before the conversion happens, because Meta can only match a conversion it can tie back to a click it recognizes.

Free30 minutesNo obligation

Specific to this pair

Olo to Meta: direct orders only, tagged with the location

Send Meta Purchase from direct Olo web orders only, filtered by channel at the webhook, since Rails orders carry names or phones Meta would falsely match. Set _fbc and _fbp on your parent domain or carry fbclid to Olo ordering, use the Olo order ID as event_id on server and pixel, add location to custom_data, and send catering at placement.

For an Olo brand, Meta's Purchase should come from direct web orders only, filtered by the order's channel before anything is sent. Rails orders from DoorDash, Uber Eats and Grubhub have no fbc, but they may carry a customer name or phone. Meta will match those to its users, and orders your ads never touched will look like ad conversions. Filter at the Olo order webhook, not in Events Manager.

Olo's ordering experience often runs on an Olo-hosted subdomain. If it is a subdomain of your own domain, set _fbc and _fbp on the parent domain so the ordering pages can read them. If it is not, capture fbclid on your site and carry it across in the link. Send the server Purchase with the Olo order ID as event_id, and use the same ID on any pixel event from the confirmation page.

Add the Olo location identifier to custom_data on every Purchase, so custom conversions and reporting can be split by restaurant. Catering orders are the timing edge case. They can be placed days before the pickup date, and an event sent at fulfillment may fall outside Meta's seven-day window for website events. Send at order placement and handle cancellations in your own reporting, because Meta cannot reverse a Purchase.

Olo → Meta · what breaks

Why this join usually fails — Olo → Meta

  1. 01

    The fbc and fbp values never reaches Olo

    Olo's ordering experience is frequently hosted on an Olo subdomain, and marketplace orders arrive through an API with no browser session behind them whatsoever.

  2. 02

    Marketplace orders inflating the direct channel

    Rails is designed to make marketplace demand look like your own order flow, which is excellent for operations and ruinous for measurement. Left unsplit, a good week on DoorDash reads as a good week for your ad account.

  3. 03

    Double counting from broken deduplication

    Server and browser both fire, the event_id does not match, and Meta counts two purchases. Reported ROAS goes up, the business does not, and it can run for months before anyone reconciles against the store.

  4. 04

    Nothing reconciles afterwards

    Events Manager shows received events, the deduplication state and an Event Match Quality score per event. Events arriving is not the test — deduplicated, well-matched events arriving is. Compare Meta's reported purchases against your store's order count for the same window.

Olo → Meta · the fix

What working looks like — Olo → Meta

  • The fbc and fbp values on every order

  • Conversions arriving in Meta

    Events appear in Events Manager with an Event Match Quality score, deduplicated against the pixel, and become usable for optimization and attribution.

  • Reconciled against the source

Olo → Meta · architecture

How Olo and Meta actually connect

  1. 1

    Olo holds the truth

    Rails pulls DoorDash, Uber Eats and Grubhub orders into the same order stream as your own website. They land in one feed and they are not the same thing: one carries a click you paid for, the other carries a marketplace commission and no identifier at all.

  2. 2

    Meta Conversions API needs a click to match

    Meta matches server events to people using whatever identifiers you send, hashed with SHA-256 where required. There is no single mandatory key, which is why quality varies so much between implementations — a poorly matched event is accepted, reported, and worth much less than it appears.

  3. 3

    The identifier is the bridge

    The fbc and fbp values, captured at the visit and carried into the Olo order.

  4. 4

    The event source decides reliability

    Send per-location. A brand with two hundred restaurants running one national campaign learns nothing from a single national conversion number.

  5. 5

    Deduplication at the destination

    Meta deduplicates on the pair of event_name and event_id. The browser pixel and the server event must send the same event_id for the same conversion, within the deduplication window. Get this wrong and every purchase counts twice — which is by far the most common Conversions API failure and it inflates reported ROAS rather than reducing it.

Olo → Meta · normal or broken

Working vs. broken, side by side — Olo → Meta

Normal, not a fault

  • The fbc and fbp values present on the order

  • Sent from the Olo order webhook

  • Deduplicated correctly

    Meta deduplicates on the pair of event_name and event_id. The browser pixel and the server event must send the same event_id for the same conversion, within the deduplication window. Get this wrong and every purchase counts twice — which is by far the most common Conversions API failure and it inflates reported ROAS rather than reducing it.

  • Reconciles with the source

Actually broken

  • The fbc and fbp values missing on most records

    Olo's ordering experience is frequently hosted on an Olo subdomain, and marketplace orders arrive through an API with no browser session behind them whatsoever.

  • Sent from the browser

    Rails is designed to make marketplace demand look like your own order flow, which is excellent for operations and ruinous for measurement. Left unsplit, a good week on DoorDash reads as a good week for your ad account.

  • Counted twice, or not at all

    Server and browser both fire, the event_id does not match, and Meta counts two purchases. Reported ROAS goes up, the business does not, and it can run for months before anyone reconciles against the store.

  • Nobody has reconciled it

Olo → Meta · diagnose

Diagnostic order — Olo → Meta

  1. 01

    Count orders carrying the fbc and fbp values

  2. 02

    Follow one real conversion end to end

  3. 03

    Separate direct from Rails at the source

    Do this before any tracking work. The split is the measurement; everything after it is plumbing.

  4. 04

    Read Event Match Quality and the deduplication indicator

    In Events Manager, open the event and check both. A low match quality means weak identifiers; a missing deduplication indicator means your event_id pairing is broken.

  5. 05

    Read the match rate, not the success message

    Events Manager shows received events, the deduplication state and an Event Match Quality score per event. Events arriving is not the test — deduplicated, well-matched events arriving is. Compare Meta's reported purchases against your store's order count for the same window.

Olo → Meta · prove

How it gets proven — Olo → Meta

Source of truth

Olo orders by location and by channel, with direct and Rails-sourced marketplace orders held apart.

  • The fbc and fbp values confirmed present on a live order.
  • Deduplication confirmed in Events Manager on a real purchase, with the browser and server events visibly paired rather than counted twice.
  • Direct-channel orders per location reconciled against imported conversions, with Rails volume reported as a named exclusion.

Olo → Meta · free audit

What we check in the free audit

  • Count orders carrying the fbc and fbp values
  • Follow one real conversion end to end
  • Separate direct from Rails at the source
  • Read Event Match Quality and the deduplication indicator
  • Read the match rate, not the success message

Checked against

Olo orders by location and by channel, with direct and Rails-sourced marketplace orders held apart.

Get my free conversion tracking audit

Free30 minutesNo obligation

Olo → Meta · when not to buy

When you don't need this — Olo → Meta

  • Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the fbc and fbp values.
  • If your Olo volume is overwhelmingly Rails, the campaign question is about marketplace placement and commission, and no amount of conversion tracking will answer it.
  • If you are not running Meta ads at meaningful spend, the Conversions API is effort without payoff. It earns its cost when the optimization signal is worth improving.

Olo → Meta · what we deliver

What gets built — Olo → Meta

  • Identifier capture into Olo

    Persist the identifier on the direct-ordering path only, and mark Rails-sourced orders explicitly as unattributable rather than letting them dilute the figure.

  • Event source: the Olo order webhook

    Send per-location. A brand with two hundred restaurants running one national campaign learns nothing from a single national conversion number.

  • Dispatch to Meta

    Server-side events to the Conversions API with the event_id matched to the pixel, action_source set correctly, and customer data hashed before it leaves your infrastructure.

  • Reversals where they exist

    Cancelled and refunded orders should reduce the figure, per location.

Written guarantee

95%+ tracking accuracy

Measured against Olo orders by location and by channel, with direct and Rails-sourced marketplace orders held apart.. Miss it and we keep working at no cost.

Get my free conversion tracking audit

From $400 · See packages

FAQ

Olo → Meta questions, answered

No. Filter them out by channel before sending. They are marketplace demand with no Meta click behind them, and hashed customer data would still get them matched.

Free · 30 min

Get Olo and Meta joined properly

Free30 minutesNo obligation