Built for Laravel

Server-Side Tracking
for Laravel Apps

Two ways to track: our JavaScript SDK for browser events, and a direct API for backend events. Both feed into the same ingestion pipeline - formatted, encrypted, and delivered to Meta, TikTok, and GA4.

Two Ways to Track. One Pipeline.

Use either method - or both together for maximum coverage.

SDK (Browser)

A lightweight JavaScript snippet installed on your site. Automatically captures fbclid, _fbp, _fbc, IP, user agent, and page URL. Events fire with full browser context for maximum match quality.

  • Captures all browser identifiers automatically
  • Works on any page - Blade, Livewire, Inertia
  • Bypasses ad blockers via your custom subdomain
  • Best for: PageView, AddToCart, InitiateCheckout

API (Backend)

A direct HTTP endpoint. Send any event from your Laravel controllers, jobs, webhooks, or cron tasks. No browser needed. You control exactly what data goes in.

  • No client-side dependency whatsoever
  • Fire from queues - zero impact on response time
  • Send any custom event name you want
  • Best for: Purchase, SubscriptionRenewed, Refund

SDK Setup (2 minutes)

Add the script to your Blade layout. Trigger events on any page.

resources/views/layouts/app.blade.php
<!-- Add before </body> -->
<script>
(function(w,d,u,k){
  w.st=function(){(w.stq=w.stq||[]).push(arguments)};
  var s=d.createElement('script');
  s.src=u+'/lib/st.js?key='+k;
  s.async=true;
  d.head.appendChild(s);
})(window,document,'https://your-subdomain.servertrack.io','YOUR_AUTH_KEY');
</script>

<!-- Trigger events anywhere -->
<script>
// On checkout success page:
st('Purchase', {
  value: {{ $order->total }},
  currency: 'USD',
  transaction_id: '{{ $order->id }}'
});
</script>

The SDK automatically collects fbclid, _fbp, _fbc, client IP, user agent, and source URL. You just pass the event data.

API Endpoint

POST to /v1/track from anywhere. No browser needed.

app/Http/Controllers/OrderController.php
use Illuminate\Support\Facades\Http;

// Fire from controller, job, or event listener
Http::withHeaders([
    'Authorization' => 'Bearer ' . config('services.servertrack.key'),
])->post('https://your-subdomain.servertrack.io/v1/track', [
    'event_name'  => 'Purchase',
    'event_id'    => Str::uuid()->toString(),
    'user_data'   => [
        'em' => hash('sha256', $order->email),
        'ph' => hash('sha256', $order->phone),
        'fn' => hash('sha256', strtolower($order->first_name)),
    ],
    'data' => [
        'value'          => $order->total,
        'currency'       => 'USD',
        'transaction_id' => $order->id,
    ],
    'event_source_url' => url('/checkout/thank-you'),
]);

// Standard events

Purchase
AddToCart
InitiateCheckout
Lead
CompleteRegistration
ViewContent

// Your own custom events

SubscriptionRenewed
CourseCompleted
TrialStarted
RefundIssued
AppointmentBooked
WhateverYouNeed

Whatever string you pass as event_name, our system processes and delivers. No pre-configuration needed.

Advanced Feature

Delay Events

Hold specific events before they're sent to platforms. Useful for fraud verification, order confirmation, or manual review workflows.

Rule-Based Hold

In your server settings, define which event names should be delayed. E.g. hold all "Purchase" events for manual review.

Release on Command

Release held events manually from your dashboard, or programmatically via a single API call when you're ready.

24-Hour Auto-Release

If you don't act within 24 hours, delayed events are automatically released and forwarded to all platforms.

Release delayed events via API
// Release a specific delayed event by ID
Http::withHeaders(['Authorization' => 'Bearer YOUR_KEY'])
  ->post('https://your-subdomain.servertrack.io/v1/events/{event_id}/release');

// Release all delayed events at once
Http::withHeaders(['Authorization' => 'Bearer YOUR_KEY'])
  ->post('https://your-subdomain.servertrack.io/v1/events/release-all');
How it works: In your Server Settings, add event names to the "Delay Rules" list (e.g. Purchase, Lead). Any matching event is held in encrypted storage instead of being forwarded immediately. You can release events individually, in bulk, or let the 24-hour auto-release handle it.

The Ingestion Pipeline

ServerTrack is a high-performance ingestion server that processes everything in RAM. No database. No disk writes.

1

Receive

Event arrives via SDK or API

2

Validate

Format data, fill missing fields, correct params

3

Encrypt

PII is hashed. Payload encrypted before forwarding

4

Forward

Delivered to Meta CAPI, TikTok, GA4 simultaneously

No Storage

Data passes through RAM and is gone

Data Privacy & Security

ServerTrack operates as a pass-through ingestion server. Your event data is processed entirely in memory - validated, formatted, encrypted, and forwarded. We do not write customer data to disk.

If you enable Delay Events, held events are stored temporarily in encrypted form (AES-256) until released or auto-released after 24 hours. After forwarding, the encrypted record is purged. At no point does readable PII exist on our servers.

Why Laravel Developers Choose ServerTrack

Unblockable Tracking

Events fire from your server. Ad blockers, iOS privacy, and browser restrictions cannot interfere.

Queue-Friendly

Dispatch API calls to Laravel queues. Zero impact on your application's response time. Fire and forget.

100% Data Capture

Every conversion captured with certainty. No browser dependency means no lost data from privacy restrictions.

Start tracking from your Laravel app today.

Free tier available. Set up in under 5 minutes. No credit card required.