server-track-lab · Marc Stevens

Server-side conversions for B2B SaaS, in one API call.

Send signups, demo bookings, and trials from your server straight to Meta Conversions API, past ad blockers and cookie loss. The first 1,000 events each month are free. After that, you pay per event. You don't need a tag manager, a CDP, or a sales call.

Meta Conversions API today. Google Enhanced Conversions is coming soon.

Built for small B2B SaaS growth teams

You run paid acquisition and need Meta to see the conversions that matter, like signups, demos, and trials. Today some of those disappear between the browser and the ad platform. Enterprise attribution suites are more than you need, and a full CDP is more than you want to maintain.

Growth & demand-gen marketers

Give Meta's optimizer the real conversion events, sent from your backend, without waiting on a tracking overhaul.

The engineer who gets the ticket

One endpoint, one JSON body, and a Bearer key. We handle identifier hashing and event_id deduplication.

Teams priced out of bigger tools

If an all-in-one attribution platform costs more than your problem is worth, you can start free and pay only for the conversions you send.

What you get

  • One ingestion endpoint: POST /api/v1/track
  • Server-to-server delivery to Meta Conversions API
  • Email, phone, and name normalized and SHA-256 hashed before they leave
  • Deduplication on event_id to match your browser pixel
  • A dashboard with monthly usage and recent events with delivery status

What you skip

  • A server-side tag manager container to configure and host
  • A customer data platform to model and maintain
  • Pageview-based pricing that charges for traffic, not conversions
  • A sales call before you can test anything

How it works

There are three steps, and most teams can send a test event in an afternoon.

1

Get an API key

Create a workspace and copy your sst_live_… key. Then paste in your own Meta Pixel ID and Conversions API token.

2

POST the event

When a signup or demo booking happens, your backend sends one JSON request with the event name, event_id, timestamp, and user identifiers.

3

Meta gets it server-side

We validate, hash, and deduplicate the event, then forward it to Meta. Browser ad blockers and cookie loss can't touch it. A repeat event_id is never sent twice.

Pricing that tracks conversions, not traffic

Usage-priced per event. You pay for the conversions you send, not for pageviews, sessions, or seats.

Free

$0
up to 1,000 events / month
  • Meta Conversions API
  • Hashing + event_id deduplication
  • Dashboard with recent events
  • No credit card to start

Overage Stripe TEST

CA$2
per 1,000 events after the first 1,000 free each month · CAD · test checkout only
  • Everything in Free
  • Buy packs of 1,000 events (qty 1–999)
  • Duplicate events aren't billed
  • Self-serve, no contract or sales call

Sandbox Payment Link only. Not live billing. Free-tier quota (1,000/mo) is still enforced in-app.

Sending millions of events a month? A self-hosted server-side tag manager setup may cost you less. server-track-lab is built for teams that want simplicity at B2B conversion volumes.

Billing status: Stripe TEST / sandbox only. Live keys are not connected. CoS owns Stripe products.

Try the API

Send a signup event from your server. Replace the key with your own and use a fresh event_id. If you also fire the Meta Pixel, use the same ID as its eventID so Meta deduplicates the two.

curl -X POST https://server-track-lab.pages.dev/api/v1/track \
  -H "Authorization: Bearer sst_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "event_name": "signup",
    "event_id": "signup_8f3a2c71",
    "timestamp": "2026-10-11T14:03:22-04:00",
    "user": {
      "email": "jane.doe@acme.com",
      "external_id": "user_48213",
      "ip": "203.0.113.7",
      "user_agent": "Mozilla/5.0 ..."
    },
    "event_source_url": "https://acme.com/signup",
    "action_source": "website"
  }'

Example response:

{ "status": "accepted", "destinations": { "meta": "sent" } }

# Send the same event_id again:
{ "status": "deduplicated" }

Keys are server-side only. /api/v1/track doesn't accept browser (CORS) requests, so your key never ships to the client.