Pendo

Datafly Signal delivers product analytics events to Pendo server-to-server, enriching visitor and account profiles with backend-resolved traits.

Why route Pendo through Datafly Signal

  • Your numbers stop depending on what the browser allows. Client-side analytics loses every visit where the tag is blocked or the page unloads early. Signal delivers from the server, so Pendo receives the complete event stream.
  • Client IP and user agent are carried in the payload. Both are taken from the original visitor request rather than your server, which is what Pendo needs to attribute the event to the right session.
  • One consent decision governs every destination. Pendo is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

A Pendo subscription with admin access to the application you want to send events into, and that application’s Track Event shared secret.

Get your Pendo credentials

Step 1: Find the Track Event shared secret

  1. In Pendo, go to Settings > Subscription settings > Applications and open your app.
  2. Under App Details, click Show next to Track Event shared secret and copy it.

The Track Event shared secret authenticates server-side Track Events (sent as the x-pendo-integration-key header). It is not the API key in your install snippet, and it is not an integration key.

Step 2: Note your data region

Your region is the host you log in to: app.pendo.io (US), app.eu.pendo.io (EU), us1.app.pendo.io (US1), app.jpn.pendo.io (Japan) or app.au.pendo.io (Australia). Signal sends Track Events to the matching host: data.pendo.io, data.eu.pendo.io, us1.data.pendo.io, data.jpn.pendo.io or data.au.pendo.io.

Configure the integration in Signal

Configuration Fields

FieldRequiredDescription
integration_keyYesThe Track Event shared secret from Step 1.
regionNous (default), eu, us1, jpn or au. Selects the Track Event host.

Management API Setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/pendo/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Pendo",
    "variant": "saas",
    "config": {
      "integration_key": "your_track_event_shared_secret",
      "region": "eu"
    },
    "delivery_mode": "server_side"
  }'

What Signal sends

Each event is one Track Event (POST https://data.pendo.io/data/track, or your region’s host):

{
  "type": "track",
  "event": "subscription_started",
  "visitorId": "crm-user-7",
  "accountId": "acme-co",
  "timestamp": 1758500000123,
  "properties": { "plan_name": "Pro", "revenue": 99, "currency": "GBP" },
  "context": { "ip": "203.0.113.7", "userAgent": "Mozilla/5.0 ...", "url": "https://app.example.com/billing", "title": "Billing" }
}
Pendo fieldSource
visitorId (required)The signed-in user ID, else the Signal anonymous ID. Use the same ID your Pendo snippet passes as visitor.id.
accountIdThe group() ID.
timestamp (required)Event time, epoch milliseconds. Pendo processes past timestamps in its daily reprocessing and may ignore events older than seven days.
contextVisitor IP, user agent, page URL and title.
propertiesThe event’s documented properties (see the event specs), currency upper-cased. Pendo rejects a properties object over 512 bytes, so only mapped properties are sent: no item arrays and no free-text feedback.

No personal data is sent.

Presets

PresetEvents
Defaultsign_up, login, logout, onboarding_completed, trial_started, trial_converted, subscription_started, subscription_upgraded, subscription_downgraded, subscription_cancelled, feature_used, support_ticket_created, feedback_submitted
B2B / SaaSThe full SaaS event spec: leads and demos, authentication, onboarding, trial and subscription, product usage, reports and exports, integrations, support, referrals, invitations and seats.

Page views are not sent: the Pendo snippet records pages and clicks itself. Event names are Signal’s canonical names; rename them on the installed integration to match your Pendo naming convention.

Default consent category: analytics.

Verify it’s working

  1. In the Signal Management UI, open your Pendo integration and watch the Live Events stream as you trigger events.
  2. Confirm 200 responses from the Track Event endpoint.
  3. In Pendo, open Track Events; new event names appear after Pendo’s hourly processing.

Troubleshooting

SymptomCauseFix
401 or 403Wrong secretUse the Track Event shared secret, not the snippet API key.
404Wrong regionSet region to the region you log in to.
Events on the wrong visitorvisitorId mismatchMake sure the user ID passed to datafly.identify() is the one your Pendo snippet uses.
”event properties JSON too large” in PendoProperties over 512 bytesMap fewer or shorter properties on the installed integration.

Blueprint

The Pendo blueprint version is 0.4.0 (not yet tested against a live Pendo subscription).

See also

  • Heap — alternative product analytics destination.
  • Amplitude — alternative product analytics destination with revenue tracking.
  • FullStory — pair for session replay context.