PostHog Conversion Tracking And Attribution – How To Set Up
Send revenue and other conversion events to PostHog
Contents
Send events to PostHog
Able sends revenue and other conversion events from arbitrary server-side sources to PostHog, providing additional capabilities:
- Server-side revenue beyond Stripe. PostHog's revenue analytics is Stripe-only. Able CDP captures purchases from any backend — custom payment systems, manual CRM entries, offline sales — and could send those as revenue events PostHog can't get from Stripe alone. This matters for businesses that don't use Stripe or use multiple payment processors.
- Backend conversion attribution. PostHog's UTM capture is browser-side JS only. It works great when a user clicks an ad, lands on your site, and converts in the same session (or at least the same browser). But it misses the cases Able specializes in: purchases that happen server-side days later (e.g., a sales-assisted deal closed in a CRM), conversions on a different device, or transactions that come through webhooks where no JS ever fires. Able attributes those back to the original marketing touchpoint via customer identifiers (email, phone, click IDs stored server-side).
- Cross-platform ad attribution on product analytics. PostHog knows that a user arrived with utm_source=google — but it doesn't know the GCLID, can't feed conversion data back to Google Ads, and can't connect a Meta fbclid to a purchase that happened three weeks later via Stripe webhook. Able bridges that gap with its other integrations.
To start sending revenue and other conversion events to PostHog with Able, follow our quick setup guide below:
Save PostHog Project Token
In Able Dashboard, press "Add Service Integration" and select "PostHog".
Add PostHog project API key/token as a new credential below (leave refresh_token empty).
For the name of the credential, use your PostHog API domain - for example, https://us.i.posthog.com for US Cloud and https://eu.i.posthog.com for EU Cloud. Confirm yours by checking your URL from your PostHog instance.
Link PostHog distinct_id to Able visitors
Able sends an event to PostHog only when the customer's PostHog distinct_id is known; it can't be derived from an email or phone number. Server-side sources such as Stripe don't carry it, so send it from the browser before the conversion happens — for example on the checkout or sign-up page, before redirecting to Stripe:
uipe('track', 'Identify', {
keys: {
email: customerEmail,
distinct_id: posthog.get_distinct_id()
}
});
Able will carry the distinct_id forward to later events for the same customer, including purchases and renewals arriving from Stripe. If you send events to Able via webhooks from your own backend, you can include distinct_id directly in keys instead.
Enable Outbound Integration
In Able Dashboard, press "Add Service Integration" and select "PostHog".
Frequently Asked Questions and Troubleshooting
How does Able match events to PostHog persons?
PostHog identifies people by distinct_id, an identifier assigned by your application or by the PostHog JavaScript SDK. Able sends an event to PostHog only when a distinct_id is known for that customer; it can't derive it from an email or phone number, because only your app knows that mapping. Events that reach Able without a distinct_id are skipped by the PostHog integration (you'll see No distinct_id available in the event log).
Server-side sources such as Stripe, payment webhooks or CRMs don't normally carry a distinct_id, so link it to the customer in the browser before the conversion happens — for example on the checkout or sign-up page, before redirecting to Stripe:
uipe('track', 'Identify', {
keys: {
email: customerEmail,
distinct_id: posthog.get_distinct_id()
}
});
Once Able has seen the distinct_id alongside the email, it carries it forward to every later event for the same customer, including purchases arriving from Stripe and recurring renewals, with no changes to the server-side source. If you send events to Able from your own backend via webhooks, you can alternatively include distinct_id directly in keys.