HelpAd Autopilot

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
Google Ads
The same relay sends each order to Google with the click id; see the Google Ads section
Cost
Free. No Meta review needed on your side
One source only

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. 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. 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. The pixel sends page views, product views, searches, add to carts, checkouts and payment details to Meta from CamClo's server, with the same id as the browser copy, so each counts once. Pasted an earlier CamClo pixel? Replace it with the current one.

  3. 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. Create one more with the same URL and Event Order creation, so cash on delivery orders count when they are placed (each order still counts once). 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. 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. 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.

Why not Shopify's own Maximum sharing?

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. 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 defines camcloTrack, 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. 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. 3

    Option B, your backend

    When an order is paid, POST JSON to the Any backend URL from the Doctor. Required: event_name Purchase, event_id = the order id, value, currency, and at least one of email, phone, external_id, fbp, fbc, or ip plus user_agent. Send user_agent and source_url so 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. 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.

Extra events

The Doctor also offers ViewContent, AddToCart, InitiateCheckout and Lead tags. Meta learns from these before the purchase. Paste them where the action happens. Under What CamClo sends you can switch any event except orders off, for example while another tool still sends it, and choose whether an order counts when it is placed or when it is paid (Shopify, WooCommerce, BigCommerce and Webflow). The base tag picks up product views, searches, add to cart and checkout by itself on WooCommerce, Wix, Ecwid, BigCommerce, Magento, Squarespace and Webflow; each event there is marked Automatic or Needs a tag.

Order filters

Under What CamClo sends you can leave some orders out of ad bidding: below a minimum value, outside the countries you choose, from sources such as your own emails, with chosen discount codes, or (on Shopify) from repeat customers. Meta gets them as OtherPurchase, which bidding ignores, and Google Ads does not get them. They still count in your own sales. Fewer sales to learn from means slower learning, and the Doctor says when your filters leave out a large share.

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. 1

    Turn on server events

    In the Tracking Doctor pick WooCommerce, enter your store address and click Turn on server events.

  2. 2

    Paste the base tag

    Before </head> on every page, with a headers-and-footers plugin or in your child theme's header.

  3. 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. 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 when they are placed (cash on delivery and bank transfers too) or when paid, as you choose under What CamClo sends.

  5. 5

    Optional, for Safari: the cookie keeper

    Safari forgets cookies a page sets after 7 days (a day after an ad click). Paste the Cookie keeper PHP from the Doctor the same way as the purchase tag: your own server then sets those cookies again and Safari keeps them for a year, so a shopper who comes back weeks later is still matched to the ad. On Shopify nothing is needed: CamClo remembers the click against Shopify's own visitor id.

  6. 6

    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.

  7. 7

    Verify

    Place a test order, then press Done, verify it in the Doctor.

Prefer the plugin?

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.

Google Ads

The same relay serves Google. Your store reports each paid order to CamClo (the tags, the Shopify pixel and webhook, the WooCommerce webhook, or your backend) and CamClo sends it to Google matched to the ad click that brought the buyer, with contact details hashed and each order counted once. Refunds go back as adjustments. A store already relaying to Meta in the same workspace can feed Google from the same tags. It lives in Ad Studio, Settings, your Google account, Tracking Doctor, Server-side step.

  1. 1

    Turn on auto-tagging

    Google adds a click id (gclid) to every ad click only when auto-tagging is on. The Doctor shows the account's setting and turns it on with one click. Without it no server-side sale can be matched to the ad that caused it.

  2. 2

    Have one enabled conversion action

    Sales are sent to your primary conversion action. Create one in the Doctor's Create step if the account has none; the relay will not turn on without somewhere to send.

  3. 3

    Answer the consent question

    Google needs to know whether it may use the data for ads. Pick My site collects consent where the law requires it when your site does; Send click ids only when it collects none; Decide per order to send only orders that carry a consent flag and withhold the rest.

  4. 4

    Install the same way as for Meta

    Shopify: paste the CamClo pixel and create the Order payment and Order creation webhooks (plus Refund create and Order cancellation, same URL). WooCommerce: paste the two tags and create the Order updated webhook. Custom site: the base tag on every page and the purchase tag on the confirmation page, or your backend posts each order with the gclid the buyer landed with. The base tag keeps the click id for 90 days so a purchase days later still carries it.

  5. 5

    Watch the ledger

    Sales sent to Google lists every order with its status: confirmed by Google, awaiting Google, withheld for missing consent, or failed with the reason. Confirmed sales appear in Google Ads within a few hours.

Every campaign CamClo publishes is ready for this

Each ad link carries utm_source, utm_medium, utm_campaign, utm_content, utm_term and CamClo's own campaign, ad group and ad ids, so analytics and the relay both know which ad brought the buyer. Campaigns are published to reach people in the places you picked, not people elsewhere who merely show interest in them, unless the plan says your buyers really are elsewhere (travel, relocation, gifting into a place).

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

The pixel counter never moves

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.

Orders show as failed in What we have taken in

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.

Meta counts two sales per order

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.

The tags stopped reporting after I changed my domain

Update the store address in the Doctor. Only pages on that address may report through the tags.

I rotated the key

Every URL and tag you installed changes. Paste the new pixel and update the webhook URL.

Use next