Sources in, destinations out
Events flow in from signed webhooks, your own app, or any custom source, and fan back out to the tools you already run. PostHog is the default source; every other wire in and out is configuration.
See the actual wiring
Select a source. Each snippet is the real setup — the URL, the header, the secret — condensed from its docs page. Most of these are one env var and a webhook form.
One command and one browser consent — hogsend connect posthog wires person reads and the webhook loop. The inbound source is still scaffold code you own.
Full guide →# The scaffold asks "Are you using PostHog?" and writes
# POSTHOG_API_KEY · POSTHOG_HOST · a minted webhook secret
# — and enables the outbound PostHog destination.
# Once deployed, one command finishes the loop:
$ hogsend connect posthog
# One browser consent (OAuth, PKCE). The credential is stored
# encrypted server-side; person reads are wired (timezones,
# property conditions) and the PostHog → Hogsend webhook is
# provisioned for you — idempotent, adopts an existing one.
# Self-hosted PostHog, or no OAuth? Use a personal key
# scoped to person:read + project:read instead.A Webhooks (Actions) destination. identify and track calls become contacts and events; everything else is skipped.
Full guide →# Segment → Connections → Destinations → Webhooks (Actions)
# URL https://api.hogsend.com/v1/webhooks/segment
# Header x-signature — HMAC-SHA256 hex of the raw body
# Secret the same value on both sides
# Hogsend .env — enables the preset and verifies signatures
SEGMENT_WEBHOOK_SECRET=your-segment-shared-secret
# identify → contact.updated (traits merge onto the contact)
# track "Order Completed" → event "Order Completed", name as-is
# page / screen / group / alias → skipped (200, skipped: true)A built-in preset. Set the signing secret and billing events become journey triggers — no SDK, no handler.
Full guide →# Stripe → Developers → Webhooks → Add endpoint
# URL https://api.hogsend.com/v1/webhooks/stripe
# Subscribe to customer.created at minimum, plus the
# subscription / invoice events you trigger on.
# Hogsend .env — the endpoint's signing secret
STRIPE_WEBHOOK_SECRET=whsec_...
# Verifies the stripe-signature header itself (HMAC-SHA256,
# 5-minute tolerance) — no Stripe SDK required.
# customer.created → contact.created
# customer.subscription.<x> → subscription.<x>
# invoice.<x> → invoice.<x> (invoice.payment_failed)A built-in, Svix-verified preset. User lifecycle and waitlist events normalise into Hogsend's contact vocabulary.
Full guide →# Clerk Dashboard → Webhooks → Add Endpoint
# URL https://api.hogsend.com/v1/webhooks/clerk
# Subscribe: user.created, user.updated, user.deleted,
# waitlistEntry.created
# Hogsend .env — the endpoint's signing secret
CLERK_WEBHOOK_SECRET=whsec_...
# Deliveries are Svix-signed — svix-id / svix-timestamp /
# svix-signature are verified before the payload is processed.
# user.created → contact.created
# user.updated → contact.updated
# waitlistEntry.created → waitlist.joinedA built-in preset watching auth.users. Signups, profile changes, and deletions become contact lifecycle events.
Full guide →# Supabase → Database → Webhooks → Create a new hook
# Table auth.users · Events: Insert, Update, Delete
# Type HTTP Request · Method POST
# URL https://api.hogsend.com/v1/webhooks/supabase
# Header x-supabase-webhook-secret: <same value as below>
# Hogsend .env — mounts the preset; fail-closed without it
SUPABASE_WEBHOOK_SECRET=whsec_your_secret_value
# INSERT → contact.created · UPDATE → contact.updated
# DELETE → contact.deleted
# raw_user_meta_data merges onto the contact record.A built-in preset. Support moments — Fin resolutions, escalations, CSAT ratings — become support.* events, keyed to the customer's own app user id so they fold onto the existing contact.
Full guide →# Intercom Developer Hub → your app → Webhooks
# URL https://api.hogsend.com/v1/webhooks/intercom
# Subscribe to the conversation topics you trigger on.
# Hogsend .env — your Intercom app's Client Secret
INTERCOM_CLIENT_SECRET=your_intercom_client_secret
# X-Hub-Signature (HMAC-SHA1 of the raw body) is verified
# before the transform runs — fail-closed, no SDK.
# conversation.user.created → support.conversation_started
# conversation.admin.closed → support.resolved (Fin closes too)
# conversation.admin.assigned → support.escalated
# conversation.rating.added → support.rated (numeric rating)Everything your users do, in one stream
One command connects PostHog; five signed-webhook presets auto-enable the moment you set their secret — no handler, no glue. Or send from your own code, or define a source of your own.
PostHog
One command after deploy. hogsend connect posthog opens a single browser consent, wires person reads, and provisions the PostHog → Hogsend webhook for you — or set the keys yourself if you prefer.
Stripe
Subscriptions, invoices, failed payments — verified Stripe events become journey triggers without writing a handler.
Clerk
Sign-ups, sign-ins, and user changes arrive as verified events. Drop in the signing secret and the preset is live.
Supabase
Database webhooks and auth hooks flow in as events you can trigger journeys on — verified the moment the secret is set.
Segment
Pipe your existing Segment track calls in as a source. One secret enables the preset; every event is signature-checked.
Intercom & Fin
Support conversations become lifecycle triggers — a Fin AI resolution, an escalation, a bad CSAT rating. Set the client secret and support.* events fire journeys, keyed to the same contact as their product activity.
Your own app
Call the @hogsend/client SDK or POST /v1/events directly from your backend. Identify a contact and fire events from anywhere in your stack.
Anything else
Define a source in TypeScript with defineWebhookSource(): declare auth, validate with Zod, transform the payload, return an event.
Every send fans back out
The outbound event catalog — contact changes, email sends and opens, journey completions, bucket transitions — fans out to the tools you already run, reusing the engine's durable retry, backoff, and DLQ for free.
PostHog
Every email and lifecycle event fans back into PostHog as a captured event — so sends, opens, and journey state live next to product analytics.
Segment
Forward the outbound event stream into Segment and let it fan out to the rest of your downstream tools from there.
Slack
Post lifecycle moments — milestones, failed payments, churn signals — straight into a channel as they happen.
A CRM
Sync contact and engagement events into your CRM so sales and success see the same lifecycle signals you act on.
A warehouse
Land the raw outbound event stream in your warehouse for modelling, attribution, and reporting alongside the rest of your data.
Any signed webhook
Define a destination in TypeScript with defineDestination(): pick the events, shape the request, and ship to any HMAC-signed endpoint.
Wire up your first connector
Pick a preset, send from your app, or define your own source and destination in TypeScript.