This is a cross-border e-commerce feature (admin: Cross-border → Cross-border e-commerce → Ad conversions). Sites without it don't have this.
What it does
Browser pixels lose events to ad blockers and browser limits. With server-side conversions on, product views, add-to-carts, checkouts and purchases are also sent from the server:
- Same event ID as the browser pixel, so the platform deduplicates; the purchase event ID is pur_<payment intent>, so Stripe retries count once
- Email and phone are SHA-256 hashed per each platform's spec before sending
- Google (GA4) only gets the purchase from the server; the rest comes from gtag in the browser (GA4 has no deduplication)
Respecting consent
With the cookie banner on (default), only shoppers who clicked "Accept all" are reported; nothing is sent for the others (the log says no_consent). With the banner off, events are sent like the browser pixels and compliance is up to you.
Setting it up (tell your AI)
- Pixel IDs: update_site_config (metaPixelId / gaMeasurementId / tiktokPixelId)
- "Turn on Meta and TikTok server-side conversions in test mode" — set_ecom_ads_settings
- "Send a test purchase and show me the log" — send_ecom_ads_test_event, then list_ecom_ad_events (status test_sink = recorded locally in test mode)
- To see it in the platform's Test Events page: give your AI the test code (metaTestEventCode / tiktokTestEventCode) and enter the access token yourself in admin (two-factor code required). Your AI can't see or set tokens
- Switch to live when it works: metaMode = live. Check everything with get_ecom_ads_settings.
Catalog feeds
set_ecom_ads_settings feedEnabled=true, then get_ecom_product_feeds gives three URLs: meta.csv (Meta Commerce Manager / Instagram Shopping), google.xml (Merchant Center), tiktok.csv (TikTok Catalog). Use rotate_ecom_feed_token if a URL leaks.