Analytics Mates
Live with launch partners — Meta CAPI + ServiceTitan shipping

Signal Dispatch

The conversion pipeline between your CRM and your ad platforms.

Connect ServiceTitan and other CRMs to Google Ads and Meta Ads — so booked jobs and closed-won revenue become bidding signals, with idempotency, consent gating, and a verifiable audit trail on every event.

ServiceTitan Google Ads Meta Ads Other CRMs GA4

The Problem

You're bidding against the wrong conversion.

The conversions that pay your bills live in your CRM — booked jobs, completed jobs, signed retainers, closed-won revenue. The conversions your bidding algorithm sees are form submits and page views. The gap between those two is where your media budget gets wasted.

Today

  • Meta and Google bid toward form_submit — the cheapest, leakiest signal in your funnel.
  • Booked jobs and revenue live in ServiceTitan, invisible to the algorithm.
  • Zapier flows fire duplicate conversions and silently leak plaintext PII.
  • When something breaks, no one notices until the spend has shifted to the wrong audience.

With Signal Dispatch

  • Real revenue events become server-side bidding signals.
  • Idempotent dispatch with HMAC-verified webhooks. Retries cost zero duplicate conversions.
  • PII hashed at the boundary. Consent gating enforced per destination.
  • A persisted receipt with the platform's authoritative receipt id for every event.

Bid against booked jobs. Not form fills.

A Dispatch in Flight

ServiceTitan booking → Meta CAPI in < 2 seconds.

What actually happens when a tech books a job. End-to-end, signed, hashed, idempotent.

# 1. ServiceTitan posts a signed Job.Booked webhook

POST /api/webhooks/signal-ops/serviceTitan/{userId}/{propertyId}

  X-ServiceTitan-Signature: sha256=ab12... (HMAC-verified, raw body)

  → 1 SignalEvent emitted: booked_job, value: 1250 USD

# 2. Lead enrichment recovers the originating click

  identifiers: { gclid, fbc, fbp, hashedEmail, hashedPhone, ga4ClientId }

  consent: { adUserData: granted, adPersonalization: granted }

# 3. Router selects destinations (per-event-type rules)

  booked_job → [meta, ga4]

# 4. Dispatch (parallel, isolated error boundaries)

POST https://graph.facebook.com/v19.0/{pixel_id}/events

  → fbtrace_id: A1b2C3..., events_received: 1, executionStatus: accepted

POST https://www.google-analytics.com/mp/collect

  → 204 No Content, executionStatus: accepted

# 5. Receipts persisted to the property timeline

  fixArtifacts: 2 records (kind: executable_adapter_run)

  timelineEvents: 2 entries — visible in The Helm UI

  idempotencyKeys: signal-ops:meta:{eventId}, signal-ops:ga4:{eventId}

Same payload re-delivered? Idempotency short-circuit. Consent revoked? Routing skips the destination. Meta returns a 4xx? Per-adapter error boundary — other adapters still dispatch.

The Operator View

Every dispatch, surfaced as a receipt.

Operators see every event — accepted, duplicate-prevented, or failed — alongside the audit history they already trust in The Helm.

Recent Dispatch Activity
Last 24 hours · 47 events
M
Meta CAPI · booked_job
fbtrace_id A1b2C3d4 · value 1,250 USD · gclid + em + ph
accepted
just now
G
GA4 MP · booked_job
204 No Content · client_id GA1.1.987… · transaction_id 987654
accepted
just now
M
Meta CAPI · invoice_paid
fbtrace_id X7y8Z9a0 · value 4,800 USD · em + ph
accepted
14 min ago
M
Meta CAPI · booked_job
idempotency match · webhook retry · no duplicate sent
duplicate prevented
1 hr ago
G
GA4 MP · canceled_job
validation: client_id missing · quarantined for review
failed
2 hr ago
View full property timeline →

Mock-up of the in-app dispatch panel. Live in The Helm UI alongside the existing Property Timeline.

How It Works

The Dispatch Loop.

Every event flowing through Signal Dispatch follows the same five steps — regardless of which CRM the event came from or which ad platform it's headed to.

01 Capture

CRM webhook → verified payload (HMAC + raw body)

02 Normalize

Mapped to canonical SignalEvent + PII hashed

03 Route

Per-event-type rules pick destination adapters

04 Dispatch

Server-side POST with idempotency

05 Reconcile

Receipt persisted to the property timeline

Signal Dispatch is the dispatch half of the Measurement Operations Engine. Pair it with the Measurement Operations API to detect, fix, and validate the upstream signal stack that feeds it.

Engineering Principles

Built like infrastructure, not a script.

The dispatch layer is what stands between "the algorithm trains on real revenue" and "the algorithm trains on garbage." We engineer it accordingly.

Idempotent by default

Every dispatch carries a deterministic idempotency key derived from event_id and adapter. The router refuses to fire the same conversion twice, even under webhook retry storms.

PII hashed at the boundary

Email, phone, and any other PII fields are SHA-256 hashed inside the adapter before they touch a logger or a network call. Plaintext PII never leaves the ingest layer.

Consent-aware routing

Routing rules respect Consent Mode v2 signal state per destination. Ad-platform dispatches gate on ad_user_data; analytics dispatches gate on analytics_storage. Conservative-by-default: unknown is treated as denied.

Receipts, not hopes

Every successful dispatch persists an ExecutableAdapterRunArtifact with the platform's authoritative receipt id (fbtrace_id, conversion_action_id, etc.). Forensic-grade audit trail for every signal sent.

Built on the OCI Framework

Every adapter implements the field contracts, validation tiers, and failure-mode handling defined in the OCI Signal Integrity Framework — our public reference for what production-grade Offline Conversion Integration looks like.

Reversible

A separate dispatch surface, not a rip-and-replace. Existing client-side gtag and Meta Pixel tags stay live. Signal Dispatch deduplicates against them via shared event_id and transaction_id. Turn it off and nothing breaks.

Destinations

Where your conversion signals land.

Each destination has its own field contract, identifier requirements, and quirks. Signal Dispatch encapsulates them so you don't have to.

Paid Social Available

Meta Conversions API

Server-side conversion events with hashed PII (em, ph), click identifiers (fbc, fbp), value, and consent state. Validated against Meta's 7-day event window before dispatch. Returns Meta's fbtrace_id as the platform receipt.

Web Analytics Available

GA4 Measurement Protocol

Server-side hits to GA4 with the gtag client_id captured at lead origination, transaction_id deduplication, and full Consent Mode v2 signaling. Optional /debug/mp/collect cross-validation.

Paid Search Building Now

Google Ads Offline Conversions

GCLID-keyed offline conversion uploads tied to closed-won revenue. Preserves the bid-side feedback loop so Smart Bidding optimizes for booked jobs and qualified leads — not form submits.

Paid Search Coming Soon

Microsoft Ads UET

Server-side offline conversion uploads via the Microsoft Advertising API, keyed on msclkid. Restores attribution for the search budget that lives outside Google.

Paid Social Coming Soon

TikTok Events API

Server-side events with TikTok Click ID (ttclid) and hashed identifiers. Same dispatch contract, same idempotency guarantees, different destination.

Paid Social (B2B) On Roadmap

LinkedIn CAPI

Conversions API for LinkedIn — high-value B2B offline conversions tied back to ad-served impressions. Prioritized when partner demand warrants.

Adapter prioritization is partner-driven. Need a destination not on this list? Talk to us — adapter scaffolding takes days, not quarters.

Sources

Where your conversion signals come from.

CRM, intake platform, call tracking, ITSM. Different schemas, different webhook conventions — all normalized to a single canonical event shape. See the full curated integration map →

Field Service CRM Available

ServiceTitan

Job.Booked, Job.Completed, Invoice.Paid webhook ingest. Lead enrichment lookup recovers gclid / fbc / fbp captured at the marketing landing page so dispatched events carry the originating click.

Legal Intake Building Now

Lead Docket

Intake-to-signed lifecycle webhooks for personal injury, mass tort, and consumer law firms. Dispatches qualified-lead and signed-retainer events as conversion-grade signals.

Legal Operations Coming Soon

Litify

Salesforce-native legal CRM. Matter creation, intake conversion, and case milestone events normalized into the canonical SignalEvent schema.

ITSM / Enterprise Coming Soon

ServiceNow

Enterprise workflow events normalized for B2B marketing attribution. Bridges ServiceNow records to ad-platform conversion APIs without bespoke ETL.

CRM On Roadmap

Salesforce

Opportunity stage transitions (qualified, closed-won) dispatched as offline conversions with revenue-weighted value. Prioritized once two enterprise design partners commit.

Call Tracking On Roadmap

CallRail

Inbound call events with caller PII and source attribution. Pairs with field-service CRM dispatches to close the call-to-booked-job loop.

Who This Is For

Built for one wedge first. Designed to extend.

Primary Wedge — Where We Ship Today

Agencies running paid media for field-service operators

Your client uses ServiceTitan for booked jobs and Google Ads + Meta for demand gen. The conversion you optimize against is "form_submit" — a leading indicator at best, a lie at worst. Signal Dispatch closes the loop: every booked job becomes a server-side conversion fed back to the bidding algorithm with the originating click identifier intact.

"Bid against revenue, not form fills."

Also Serving

Legal & professional services

Lead Docket and Litify webhooks normalized through the same canonical schema. Optimize against signed retainer, not page view.

Enterprise marketing operations

One dispatch contract across brands, business units, and regions. Replace twelve bespoke Zapier flows nobody can audit.

Embedded / OEM partners

Embed the dispatch engine in your own product. Adapters as a service.

Two ways to get this in your stack.

Whether you want us to operate the pipeline for you or you want to consume it as infrastructure — we're onboarding partners now.

Managed Service

Signal Integrity Ownership

We design, build, validate, and operate the dispatch layer end-to-end against your CRM and ad platforms. You see the receipts; we own the integrity.

Book a Consultation →

Infrastructure Partner

Early Access Partner

Embed the dispatch engine into your agency stack or your product. We're onboarding a small number of design partners for Meta CAPI, GA4 MP, and Google Ads OCI.

Talk to Us About Early Access →

The Helm app is generally available with the full audit and Navigator experience. Signal Dispatch and the Measurement Operations API are shipping incrementally to partners.