Pendo provides extensive integration capabilities for connecting product analytics to CRMs, marketing automation platforms, customer support tools, and data warehouses. This guide covers native integrations, API access, webhooks, and custom implementation patterns.
Native Integrations
Pendo offers pre-built integrations with popular business tools, enabling seamless data synchronization and workflow automation.
CRM Integrations
Sync Pendo product usage data to Salesforce records:
- Navigate to Settings → Integrations → Salesforce
- Click "Connect to Salesforce"
- Authenticate with Salesforce credentials
- Map Pendo visitor metadata to Salesforce fields
- Configure sync frequency (real-time, hourly, daily)
Data Flow:
- Pendo → Salesforce: Product usage scores, feature adoption, guide engagement
- Salesforce → Pendo: Account attributes, user roles, subscription data
Use Cases:
- Enrich account records with product engagement scores
- Trigger sales alerts for high-value feature adoption
- Identify expansion opportunities based on usage patterns
- Flag at-risk accounts with declining engagement
Integrate product analytics with marketing automation:
- Settings → Integrations → HubSpot
- Connect HubSpot account
- Map visitor properties to HubSpot contacts
- Configure automated workflows
Capabilities:
- Create HubSpot lists based on Pendo segments
- Trigger marketing emails based on product behavior
- Score leads using product usage data
- Track product-led growth metrics
Customer Support Integrations
Zendesk:
Connect product usage to support tickets:
- Settings → Integrations → Zendesk
- Authenticate with Zendesk
- Enable Pendo widget in Zendesk interface
- Configure data syncing
Features:
- View user's product journey in ticket sidebar
- Identify support needs based on feature usage
- Deliver contextual in-app support
- Track support ticket impact on product adoption
Intercom:
Combine product analytics with customer messaging:
- Settings → Integrations → Intercom
- Connect Intercom account
- Map Pendo segments to Intercom users
- Configure message triggers
Workflow:
- Send targeted messages based on Pendo events
- Display Pendo guides within Intercom messenger
- Segment Intercom users by product usage
- Track message effectiveness in Pendo
Collaboration Tools
Slack:
Receive Pendo notifications in Slack channels:
- Settings → Integrations → Slack
- Add to Slack workspace
- Select notification types
- Configure channel routing
Notification Types:
- Guide analytics summaries
- NPS survey responses
- Feature adoption milestones
- Segment threshold alerts
Configuration Example:
{
"channel": "#product-insights",
"notifications": {
"nps_response": true,
"guide_analytics": "daily",
"segment_alerts": true
}
}
Analytics & CDP Integrations
Segment:
Route Pendo events through Segment's CDP:
- Settings → Integrations → Segment
- Enter Segment write key
- Configure event forwarding
- Map event properties
Events Sent to Segment:
- Guide views and interactions
- Track events (custom and automatic)
- Page views
- Feature clicks
- Poll and NPS responses
Segment Configuration:
// Events appear in Segment as:
{
"event": "Pendo Guide Viewed",
"properties": {
"guide_id": "ABC123",
"guide_name": "Onboarding Checklist",
"visitor_id": "user_123",
"account_id": "account_456"
}
}
Sync product analytics between platforms:
- Settings → Integrations → Amplitude
- Enter Amplitude API key
- Configure two-way data sync
- Map user properties
Data Synchronization:
- Pendo → Amplitude: Guide engagement, poll responses
- Amplitude → Pendo: User cohorts, behavioral segments
Product Management Tools
Jira:
Link feature requests to development:
- Settings → Integrations → Jira
- Connect Jira instance
- Configure issue creation triggers
- Map feedback to Jira fields
Capabilities:
- Create Jira tickets from Pendo feedback
- Track feature request volume in Pendo
- Link guides to Jira epics
- Monitor feature delivery impact
ProductBoard:
Centralize product feedback:
- Settings → Integrations → ProductBoard
- Authenticate with ProductBoard
- Configure feedback forwarding
- Map Pendo segments to user personas
API Integration
Authentication
Pendo API uses integration keys for authentication.
Generate Integration Key:
- Settings → Integrations → Integration Keys
- Click "Create Integration Key"
- Name the key (e.g., "Analytics Export")
- Select permissions
- Copy and securely store the key
API Request Format:
curl "https://app.pendo.io/api/v1/aggregation" \
-H "x-pendo-integration-key: YOUR_INTEGRATION_KEY" \
-H "Content-Type: application/json"
Aggregation API
Retrieve Product Usage Data:
curl -X POST "https://app.pendo.io/api/v1/aggregation" \
-H "x-pendo-integration-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"response": {
"mimeType": "application/json"
},
"request": {
"pipeline": [
{
"source": {
"events": {},
"timeSeries": {
"period": "dayRange",
"first": "2024-01-01",
"count": 30
}
}
},
{
"aggregate": {
"eventCount": {
"distinct": "visitorId"
}
}
}
],
"requestId": "unique-request-id"
}
}'
Response:
{
"results": [
{
"data": [
{"count": 1523, "day": "2024-01-01"},
{"count": 1687, "day": "2024-01-02"}
]
}
]
}
Metadata API
Retrieve Visitor Metadata:
curl "https://app.pendo.io/api/v1/visitor/USER_ID" \
-H "x-pendo-integration-key: YOUR_KEY"
Update Visitor Metadata:
curl -X PUT "https://app.pendo.io/api/v1/visitor/USER_ID" \
-H "x-pendo-integration-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"auto": {
"account_plan": "enterprise",
"role": "admin",
"signup_date": "2024-01-15"
}
}
}'
Guide API
Retrieve Guide Analytics:
curl "https://app.pendo.io/api/v1/guide/GUIDE_ID/analytics" \
-H "x-pendo-integration-key: YOUR_KEY"
Update Guide Status:
curl -X PUT "https://app.pendo.io/api/v1/guide/GUIDE_ID" \
-H "x-pendo-integration-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"state": "public"
}'
Track Events API
Send Custom Events:
curl -X POST "https://app.pendo.io/data/track" \
-H "Content-Type: application/json" \
-d '{
"type": "track",
"event": "custom_feature_used",
"visitorId": "user_123",
"accountId": "account_456",
"properties": {
"feature_name": "advanced_reporting",
"usage_count": 5
},
"timestamp": 1640995200000
}'
Webhooks
Configure webhooks to receive real-time notifications for Pendo events.
Webhook Setup
- Settings → Integrations → Webhooks
- Click "Add Webhook"
- Enter endpoint URL (must be HTTPS)
- Select event types
- Add signing secret for verification
- Save configuration
Supported Events
Guide Events:
guide.viewed- User viewed a guideguide.advanced- User progressed through guideguide.dismissed- User dismissed guideguide.completed- User completed guide
Poll Events:
poll.response- User submitted poll response
NPS Events:
nps.response- User submitted NPS score
Track Events:
track.event- Custom track event fired
Webhook Payload
Example: Guide Viewed Event
{
"event_type": "guide.viewed",
"timestamp": "2024-01-15T14:30:00Z",
"data": {
"guide_id": "ABC123",
"guide_name": "Feature Announcement",
"visitor_id": "user_123",
"account_id": "account_456",
"metadata": {
"browser": "Chrome",
"platform": "web"
}
}
}
Signature Verification
Verify webhook authenticity using HMAC signature.
Node.js Example:
const crypto = require('crypto');
function verifyPendoWebhook(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(JSON.stringify(payload)).digest('hex');
return signature === `sha256=${digest}`;
}
app.post('/webhook/pendo', (req, res) => {
const signature = req.headers['x-pendo-signature'];
const isValid = verifyPendoWebhook(req.body, signature, WEBHOOK_SECRET);
if (!isValid) {
return res.status(401).send('Invalid signature');
}
// Process webhook
console.log('Guide viewed:', req.body.data.guide_name);
res.sendStatus(200);
});
Data Export
CSV Export
Export Usage Data:
- Navigate to Data → Export
- Select date range
- Choose data type (events, visitors, accounts)
- Configure columns
- Click "Export to CSV"
Automated Exports:
Configure scheduled exports:
- Settings → Data → Scheduled Exports
- Create new export schedule
- Select frequency (daily, weekly, monthly)
- Configure destination (email, SFTP, S3)
- Map data fields
Data Warehouse Integration
Snowflake:
Export Pendo data to Snowflake:
- Settings → Integrations → Snowflake
- Enter Snowflake connection details
- Configure sync schedule
- Map tables and schemas
# Python script for Pendo → BigQuery export
import requests
from google.cloud import bigquery
PENDO_API_KEY = 'your_key'
BQ_PROJECT = 'your-project'
BQ_DATASET = 'pendo_data'
# Fetch from Pendo
response = requests.post(
'https://app.pendo.io/api/v1/aggregation',
headers={
'x-pendo-integration-key': PENDO_API_KEY,
'Content-Type': 'application/json'
},
json={
'request': {
'pipeline': [
{
'source': {
'events': {},
'timeSeries': {
'period': 'dayRange',
'first': '2024-01-01',
'count': 30
}
}
}
]
}
}
)
data = response.json()
# Load to BigQuery
client = bigquery.Client()
table_id = f'{BQ_PROJECT}.{BQ_DATASET}.pendo_events'
job = client.load_table_from_json(data['results'], table_id)
job.result()
Custom Integration Patterns
Visitor Identification
JavaScript Implementation:
// Initialize Pendo with visitor and account data
pendo.initialize({
visitor: {
id: 'user_123',
email: 'user@example.com',
role: 'admin',
signup_date: '2024-01-15'
},
account: {
id: 'account_456',
name: 'Acme Corp',
plan: 'enterprise',
mrr: 5000
}
});
Custom Event Tracking
Track Feature Usage:
// Track custom events
pendo.track('feature_used', {
feature_name: 'advanced_reporting',
usage_type: 'export',
file_format: 'pdf'
});
// Track with metadata
pendo.track('purchase_completed', {
amount: 99.99,
currency: 'USD',
product_id: 'PROD-123'
});
Dynamic Segmentation
Update Visitor Metadata:
// Update visitor properties dynamically
pendo.updateOptions({
visitor: {
id: 'user_123',
license_tier: 'premium', // Updated value
feature_flags: ['new_dashboard', 'beta_features']
}
});
Third-Party Tool Integrations
Google Analytics
Forward Pendo Events to GA:
// Listen for Pendo guide events
pendo.events.guideViewed(function(guideData) {
gtag('event', 'guide_viewed', {
'guide_id': guideData.guideId,
'guide_name': guideData.guideName
});
});
pendo.events.guideCompleted(function(guideData) {
gtag('event', 'guide_completed', {
'guide_id': guideData.guideId,
'guide_name': guideData.guideName
});
});
Mixpanel
Sync Events to Mixpanel:
// Forward Pendo track events
pendo.events.track(function(eventData) {
mixpanel.track(eventData.eventName, {
visitor_id: eventData.visitorId,
account_id: eventData.accountId,
properties: eventData.properties
});
});
Custom Dashboards
Embed Pendo Data in Internal Tools:
// Fetch Pendo metrics for custom dashboard
async function getPendoMetrics() {
const response = await fetch('https://app.pendo.io/api/v1/aggregation', {
method: 'POST',
headers: {
'x-pendo-integration-key': PENDO_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
request: {
pipeline: [
{
source: {
guides: {},
timeSeries: {
period: 'dayRange',
first: '2024-01-01',
count: 7
}
}
},
{
aggregate: {
viewCount: {},
completionRate: {}
}
}
]
}
})
});
return await response.json();
}
Mobile App Integration
iOS (Swift)
Initialize Pendo:
import Pendo
PendoManager.shared().setup("YOUR_API_KEY")
// Identify visitor
PendoManager.shared().startSession(
visitorId: "user_123",
accountId: "account_456",
visitorData: [
"email": "user@example.com",
"role": "admin"
],
accountData: [
"name": "Acme Corp",
"plan": "enterprise"
]
)
// Track events
PendoManager.shared().track("feature_used", properties: [
"feature_name": "mobile_dashboard"
])
Android (Kotlin)
Setup Pendo:
import io.pendo.sdk.Pendo
Pendo.setup(this, "YOUR_API_KEY", null, null)
// Start session
Pendo.startSession(
"user_123",
"account_456",
hashMapOf(
"email" to "user@example.com",
"role" to "admin"
),
hashMapOf(
"name" to "Acme Corp",
"plan" to "enterprise"
)
)
// Track custom events
Pendo.track("feature_used", hashMapOf(
"feature_name" to "mobile_dashboard"
))
Best Practices
API Usage:
- Cache frequently accessed data to minimize API calls
- Implement retry logic with exponential backoff
- Monitor rate limits and adjust request frequency
- Use batch operations when available
- Store integration keys securely
Visitor Identification:
- Use consistent visitor IDs across platforms
- Include meaningful metadata for segmentation
- Update visitor properties as they change
- Validate data types and formats
- Avoid PII in metadata when possible
- Use descriptive event names
- Structure metadata consistently
- Track only actionable events
- Document custom events for team reference
- Test events before production deployment
Webhook Handling:
- Always verify webhook signatures
- Implement idempotency for duplicate events
- Use async processing for webhook payloads
- Log webhook failures for debugging
- Monitor webhook delivery success rate