Organizer
Marketing & Growth8 min

Tracking Integration Guide

Connect your registration platform with BibSync to track partner-driven registrations. Choose the method that best fits your setup.

Google Tag Manager

If your registration site uses GTM, this is the fastest way to integrate. No code changes are needed on your website, just add two tags in the GTM console.

Recommended
1

Base Tag

Create a Custom HTML tag. Set the trigger to All Pages.

HTML
<script src="https://bibsync.link/v1/pixel.js" async></script>
<script>
  window.__bsq = window.__bsq || [];
  window.__bsq.push(['init', 'YOUR_CAMPAIGN_SLUG']);
</script>

Replace YOUR_CAMPAIGN_SLUG with your campaign slug from BibSync tracking settings.

2

Registration Tag

Create another Custom HTML tag. Set the trigger to fire on your thank-you or confirmation page only.

HTML
<script>
  window.__bsq = window.__bsq || [];
  window.__bsq.push(['track', {
    orderId: {{Transaction ID}},
    amount: {{Purchase Value}}
  }]);
</script>

Replace {{Transaction ID}} and {{Purchase Value}} with your GTM variables.

3

Optional dataLayer event

If your checkout already pushes purchase data to the dataLayer, map those fields into your registration tag.

JavaScript
dataLayer.push({
  'event': 'purchase',
  'transactionId': 'ORDER-123',
  'transactionTotal': 49.99
});

Push this event before the confirmation page loads so GTM can fire the registration tag with the final values.

4

Publish and test

Publish the GTM container, complete a real test registration, and confirm the event appears in BibSync.

Custom JavaScript

Use this option when you can directly edit your registration pages and thank-you flow.

1

Base Script

Add the BibSync base script to every registration page where partner traffic lands.

HTML
<!-- BibSync Tracking Pixel -->
<script src="https://bibsync.link/v1/pixel.js" async></script>
<script>
  window.__bsq = window.__bsq || [];
  window.__bsq.push(['init', 'YOUR_CAMPAIGN_SLUG']);
</script>

Replace YOUR_CAMPAIGN_SLUG with your campaign slug from BibSync tracking settings.

2

Registration Script

Trigger the registration event after a successful purchase on the confirmation page.

HTML
<script>
  window.__bsq = window.__bsq || [];
  window.__bsq.push(['track', {
    orderId: 'YOUR_ORDER_ID',
    amount: 49.99
  }]);
</script>

Replace YOUR_ORDER_ID and 49.99 with your real order ID and purchase value.

3

Verify the flow

Run a test registration and confirm the click and registration are visible in BibSync.

Server-to-Server Webhook

Sign the raw JSON payload with your campaign secret using HMAC-SHA256 and send the digest in the X-BibSync-Signature header.

Choose this option only if your team can send signed backend requests. It is the most flexible setup, but it requires engineering work.

How it works

  • Capture the BibSync click ID when a partner sends a visitor to your site.
  • Store that click ID until the registration is completed.
  • Send the completed registration from your backend to BibSync with an HMAC signature.

Endpoint

HTTP
POST https://bibsync.link/api/v1/s2s

Payload example

JSON
{
  "clickId": "bs_clk_abc123xyz789abc123",
  "externalOrderId": "RTS-998877",
  "amount": 25.00,
  "currency": "EUR"
}

Node.js example

JavaScript
const crypto = require('crypto');
const secret = process.env.BIBSYNC_S2S_SECRET;
const body = JSON.stringify({
  clickId: req.query.bs_id,
  externalOrderId: order.id,
  amount: order.totalAmount,
  currency: 'EUR',
});
const signature = crypto
  .createHmac('sha256', secret)
  .update(body)
  .digest('hex');

await fetch('https://bibsync.link/api/v1/s2s', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-BibSync-Signature': signature,
  },
  body,
});

Python example

Python
import hmac, hashlib, json, os, requests

secret = os.environ["BIBSYNC_S2S_SECRET"]
body = json.dumps({
    "clickId": request.args.get("bs_id"),
    "externalOrderId": order.id,
    "amount": order.total_amount,
    "currency": "EUR",
})
signature = hmac.new(
    secret.encode(), body.encode(), hashlib.sha256
).hexdigest()

requests.post(
    "https://bibsync.link/api/v1/s2s",
    headers={
        "Content-Type": "application/json",
        "X-BibSync-Signature": signature,
    },
    data=body,
)

FAQ & Troubleshooting

How do I test the integration?

Use a real partner link, complete a test registration on your site, and then verify the click and registration appear in BibSync.

Why do I see partner clicks at risk?

That means BibSync received partner clicks, but those visitors have not produced a registration within the expected window yet.

What happens if tracking goes offline?

BibSync warns organizers after 24 hours without data and automatically pauses the campaign after 48 hours until tracking is restored.

Can I run more than one integration method?

Use one primary method per campaign to avoid duplicate registrations. If you are migrating, disable the old flow before enabling the new one.

How quickly should events appear?

Clicks usually appear within seconds. Registrations should appear shortly after the confirmation page loads or the S2S request is accepted.