PostHog as a source

Forward product events and person traits from PostHog into getuserfeedback.com for targeting and context.

Last reviewed

PostHog as a source

Use this when PostHog already sees your product activity and you want that activity available for survey targeting and response context.

Each PostHog event becomes a track event in getuserfeedback.com. If the webhook includes a person, their properties become traits on the resolved profile.

1. Create the integration

  1. Open Integrations and click New integration.
  2. Under Data in, choose PostHog.
  3. Click Create integration.

You'll land on the integration detail page. Copy the Webhook URL shown there. It points at the ingestion subdomain and looks like:

https://posthog.ingest.getuserfeedback.com/int_<id>

Copy the Shared secret too. PostHog needs to send it with every webhook request.

2. Add an HTTP Webhook destination in PostHog

  1. In PostHog, open Data pipelines.
  2. Click New → Destination.
  3. Search for Webhook and create the HTTP Webhook destination.
  4. Paste the Webhook URL from step 1.
  5. Leave the JSON Body unchanged. PostHog's default templated body sends the event and person data we use.
  6. Add the shared secret as either:
    • an Authorization header with Bearer <shared secret>
    • an x-getuserfeedback-webhook-secret header with the raw secret
  7. Create and enable the destination.

PostHog will start sending matching events to getuserfeedback.com.

If you also want to send PostHog group or project metadata, customize the PostHog JSON Body:

{"event": "{event}","person": "{person}","groups": "{groups}","project": "{project}"}

3. Verify it's working

Use PostHog's destination testing panel to send a test event. Then open Users in getuserfeedback.com. The user should appear within a few seconds when the event carries a distinct_id, a distinct ID in properties, or a person ID.

What we accept

We accept PostHog's default HTTP Webhook body:

{"event": {"uuid": "018f5d75-2222-7000-9000-abcdefabcdef","event": "$pageview","distinct_id": "user_123","timestamp": "2026-06-16T03:04:05.000Z","properties": {"$current_url": "https://app.example.com/dashboard?tab=home","$title": "Dashboard"}},"person": {"id": "person_123","name": "Jane Customer","properties": {"email": "jane@example.com","plan": "team"}}}

We also accept PostHog webhook bodies where the event is nested under event, and batch envelopes with a batch array.

How events map

  • event becomes the track event name.
  • properties are stored as event properties.
  • distinct_id becomes a posthog_distinct_id external ID.
  • person.id becomes a posthog_person_id external ID.
  • person.properties become profile traits. If person.name is present and no name trait is set, it becomes traits.name.
  • properties.$current_url becomes the page URL, path, and query string in event context.
  • If present, groups are stored on the event as $posthog_groups.
  • If present, project is stored in the event's integration metadata.

Events without a uuid must include a timestamp so getuserfeedback.com can create a stable fallback message ID. Events without a usable identity are skipped.

What can break

  • PostHog shows 401 responses. Check that the destination sends the shared secret as a Bearer token or x-getuserfeedback-webhook-secret header.
  • No user appears. Confirm the event has distinct_id, person.id, or a distinct ID in properties.distinct_id or properties.$distinct_id.
  • Page targeting looks wrong. Send the browser URL in properties.$current_url. PostHog's top-level event URL points back to PostHog and is not used as the customer page URL.
  • Events are skipped in a batch. One malformed batch item is skipped, but valid items in the same batch are still processed.

Next