Track your sales
Send every paid order to Meta as a server event, deduplicated against the pixel, so your campaigns learn from real purchases.
Meta only optimizes toward sales it can see. Browsers, ad blockers and privacy settings hide a share of them from the pixel. Server events (Meta calls them the Conversions API) fix that: your store tells CamClo about each paid order, CamClo forwards it to Meta with the buyer details Meta matches on, and Meta counts it once. Set-up is two pastes for Shopify, two tags for a custom site, or two pastes and one webhook for WooCommerce. Open the Tracking Doctor from Settings, your Meta account, to get your own copy of every tag and URL.
At a glance
- Where
- Ad Studio, Settings, your Meta account, Tracking Doctor, Fix it step
- Shopify
- Paste one pixel, create one webhook, turn Shopify's own Meta sharing off
- Custom site
- Paste a base tag on every page and a purchase tag on the confirmation page
- WooCommerce
- Paste a base tag and a purchase tag, then create one order webhook
- What Meta gets
- One Purchase per order with hashed email, phone, name, address, plus the browser and click ids
- What CamClo keeps
- Event name, order id, value, currency and yes-or-no flags. Never the person. Rows expire after 90 days
- Cost
- Free. No Meta review needed on your side
If Shopify's Facebook & Instagram app, Facebook for WooCommerce or another pixel app already sends server events, turn that sharing off before you use CamClo's, or leave CamClo's off. Two sources make Meta count every sale twice.
Shopify
No app, no theme edits. The pixel runs on every page and in the checkout. The webhook sends each paid order from Shopify's servers, so the Purchase reaches Meta even when the browser blocked everything.
- 1
Turn on server events
In the Tracking Doctor pick Shopify, enter your store's myshopify.com domain (Settings, Domains in Shopify shows it) and click Turn on server events.
- 2
Paste the CamClo pixel
Shopify admin: Settings, Customer events, Add custom pixel. Name it CamClo pixel, click Add pixel, replace the editor's code with the pixel from the Doctor, click Save, then Connect. Leave Permission on Marketing and Analytics so it follows each visitor's consent choice. Open your store once: the pixel counter in the Doctor should move.
- 3
Create the order webhook
Shopify admin: Settings, Notifications, Webhooks, Create webhook. Event Order payment, format JSON, latest API version, URL copied from the Doctor. Save, then copy the signing secret shown at the bottom of the Webhooks page into the Doctor and save it. Optional: two more webhooks with the same URL for Refund create and Order cancellation so net revenue stays right.
- 4
Make CamClo the only source
If the Facebook & Instagram app is installed: Settings, Apps and sales channels, Facebook & Instagram, App settings, turn Share data off. Catalog and shop features keep working. Remove any other pixel app.
- 5
Verify
Place a test order, then press Done, verify it in the Doctor. The order shows in What we have taken in as sent, and in Meta Events Manager within minutes.
It works with one switch, but it sends less identity and merchants report lower match scores with it. If you prefer it anyway, set it to Maximum in that app and leave CamClo's server events off.
Custom site or any other platform
Two ways. Option A needs no developer: two tags. Option B is for whoever runs your backend: one request per paid order. Both start with Turn on server events in the Doctor and your store address, which is the only site the tags may report from.
- 1
Option A, base tag
Paste the base tag once before
</head>on every page. It loads the Meta pixel, remembers which ad brought the visitor, and definescamcloTrack, which fires the pixel and sends the same event to CamClo with one shared id. Squarespace: Settings, Developer Tools, Code Injection, Header. BigCommerce: Storefront, Script Manager, placement Head. - 2
Option A, purchase tag
Paste the purchase tag on the order confirmation page, after the base tag. Fill in the order id, total and currency; email, phone, name and address are optional but lift the match score. Squarespace and BigCommerce fill their own order variables for you. Wix has its own Meta integration: use that instead and leave CamClo's server events off.
- 3
Option B, your backend
When an order is paid, POST JSON to the Any backend URL from the Doctor. Required:
event_namePurchase,event_id= the order id,value,currency, and at least one of email, phone, external_id, fbp, fbc, or ip plus user_agent. Senduser_agentandsource_urlso Meta counts it as a website event. Up to 100 events per request; the same event id sent twice is ignored. The Doctor has curl, Node and PHP samples and a note you can hand to your developer. - 4
Verify
Open your site or place a test order, then press Done, verify it. Optional: Send a test event from the Doctor proves the relay works without touching your reporting.
The Doctor also offers ViewContent, AddToCart, InitiateCheckout and Lead tags. Meta learns from these before the purchase. Paste them where the action happens.
WooCommerce
Two pastes in WordPress and one webhook, all processed by CamClo. The base tag remembers the ad click and reports the funnel; the purchase tag on the order-received page passes the browser id and click id along; the webhook sends each paid order from your server with the buyer details.
- 1
Turn on server events
In the Tracking Doctor pick WooCommerce, enter your store address and click Turn on server events.
- 2
Paste the base tag
Before
</head>on every page, with a headers-and-footers plugin or in your child theme's header. - 3
Paste the purchase tag
It is PHP. Paste it into a code snippets plugin (PHP, run everywhere) or your child theme's
functions.php. WooCommerce fills the order id, total, currency, email, phone, name and address for you. - 4
Create the order webhook
WordPress admin: WooCommerce, Settings, Advanced, Webhooks, Add webhook. Status Active, topic Order updated, delivery URL from the Doctor, any long random string as the secret, API version WP REST API Integration v3. Paste the same secret into the Doctor. Orders count once they are Processing or Completed with a paid date.
- 5
Make CamClo the only source
If Facebook for WooCommerce is installed, switch its Conversions API option off or remove the plugin. Otherwise Meta counts every sale twice.
- 6
Verify
Place a test order, then press Done, verify it in the Doctor.
Facebook for WooCommerce can send orders to Meta on its own. It bypasses CamClo, so you lose the first-party order count beside Meta's figures and the click attribution. If you keep it, leave CamClo's server events off.
What we send and what we keep
Sent to Meta: email, phone, first name, last name, city, state, zip and country, each hashed. The browser id and click id, the buyer's ip and browser, the order value, currency and product ids.
Hashed on the way: the tags hash email and phone in the browser when they can, so contact details never leave your site in clear text.
Kept by CamClo: event name, order id, value, currency, time and which fields were present. Refunds are recorded for your net revenue and never sent to Meta.
Attribution: every ad link carries the campaign, ad set and ad ids. The tags remember them for 28 days, so the campaign page can show your store's own orders by click beside Meta's attributed count.
Troubleshooting
Check the pixel shows Connected in Customer events and that server events are on. Open your store in a normal window; consent banners and ad blockers can hold it back on a quiet day.
Read the reason on the row. A Purchase without value and currency is refused. A wrong signing secret makes every Shopify delivery fail: paste it again from the bottom of the Webhooks page.
Another source is sending the same order. Turn off Shopify's Share data or the other pixel app, or give both events the same id.
Update the store address in the Doctor. Only pages on that address may report through the tags.
Every URL and tag you installed changes. Paste the new pixel and update the webhook URL.