sGTM hosting
One shared multitenant tagging endpoint - your own domain, CNAME'd at the PixelFox ingest origin, speaking the GA4 wire format.
PixelFox hosts one shared, multitenant tagging endpoint — not a dedicated
server per store. You claim a hostname, CNAME it at our ingest origin, and point
Google Tag Manager or gtag at it. Events arrive on /g/collect in the standard
GA4 wire format, the hostname identifies your site, and the event runs through
the exact same pipeline as the PixelFox tag: enrichment, identity stitching,
fan-out to every destination you connected, and browser↔server event_id
deduplication.
There is nothing to scale on your side and no per-customer infrastructure on ours — which is why this is included on every plan rather than sold as an add-on.
Set up
-
Dashboard → your site → sGTM hosting → Create container. You get a hostname immediately:
<id>.sgtm.pixelfox.app. Optionally claim your own (ss.yourstore.com) right in the create form. -
Add the CNAME at your DNS provider:
ss.yourstore.com CNAME connect.pixelfox.appThe TLS certificate is issued on demand the first time the name resolves — the first request after a DNS change may take a few extra seconds.
-
Point gtag or GTM at it:
// gtag.js gtag('config', 'G-XXXXXXXXXX', { server_container_url: 'https://ss.yourstore.com' }); // Google Tag (GTM web container) - GA4 config tag field "Server container URL" https://ss.yourstore.comOr import our GTM container template (
signals-web-sgtm.json) — it presets everything, including the sharedevent_idthat deduplicates browser and server events. -
Fire a test event and watch it land in Events → Live explorer.
How tenant routing works
/v1/ingest resolves you by API key; /g/collect resolves you by
hostname — the CNAME claim is the authorization. One indexed lookup
(hostname → container → site), same as key resolution. This is why a stock
gtag works with zero PixelFox code on the page: the domain itself is the
credential.
The GA4 wire format
Any GA4 transport hit works — en, cid, dl, dt, dr, ep.* (string
params), epn.* (numeric params):
GET /g/collect?v=2&tid=G-XXXXXXXXXX&en=purchase
&cid=771234567.1712345678
&dl=https://yourstore.com/checkout
&epn.value=2450&ep.currency=BDT
&ep.event_id=evt-abc123Mapping onto PixelFox events:
| GA4 param | PixelFox field |
|---|---|
en | event (view_item → view_content, begin_checkout → initiate_checkout; the raw name is kept as $ga_event) |
cid | distinct_id |
ep.event_id | uuid — the dedup contract; without it one is minted server-side |
dl / dt / dr | $current_url / page_title / referrer |
epn.value, ep.currency | conversion value + currency |
everything else (ep.*, epn.*) | event properties, verbatim |
From there it is a PixelFox event like any other: your dashboard definitions decide which ad-platform conversion each event name represents, Meta CAPI / TikTok / GA4 / LinkedIn / Snapchat / Pinterest receive the purchase-shaped ones, and PostHog receives the full stream.
Custom domains you may already have
A site can have both a first-party tracking domain (t.yourstore.com, used
by the PixelFox tag) and sGTM hostnames (ss.yourstore.com, used by
gtag/GTM) — they CNAME at the same origin and are claimed separately. Vendor
cookies (_fbp, _fbc, _ga) are extended with a 2-year HTTP lifetime on
both surfaces, so Safari/ITP cannot truncate your attribution window.
Limits and notes
- Hostnames are exclusive across all PixelFox customers - first claim wins.
- Pause a container to answer 404 on its hostnames without deleting the claim.
/g/collectis rate-limited per hostname (200 requests / 10s / IP), on top of the per-key budgets on/v1/ingest.- Pausing or deleting updates the routing cache within seconds.