Linking Vapi as a source
This source is currently in alpha. The interface and available tables may change.
The Vapi connector syncs your AI voice agent data into PostHog, including call transcripts, analysis, cost breakdowns, assistants, phone numbers, and more. Use it to join your Vapi call data with product analytics to understand how voice interactions impact user behavior.
Adding a data source
- Go to the sources tab of the data pipeline section in PostHog.
- Click + New source and then click Link next to Vapi.
- You need an API key from Vapi. In your Vapi dashboard, go to Organization Settings and copy your Private API Key.
- Back in PostHog, paste the API key in the API key field and click Next.
- Select the tables you want to sync, set the sync method and frequency, then click Import.
Once the syncs are complete, you can start using Vapi data in PostHog.
Available tables
| Table | Description | Sync method |
|---|---|---|
calls | Phone and web calls with transcripts, analysis, ended reasons, and per-component cost breakdowns | Incremental (by createdAt or updatedAt) |
assistants | Configured voice assistants with transcriber, LLM, and voice settings | Full refresh |
phone_numbers | Phone numbers attached to your org, provisioned through Vapi or brought from other providers | Full refresh |
squads | Groups of multiple assistants that can transfer calls between them | Full refresh |
tools | Tools that assistants can invoke during calls (API requests, transfers, etc.) | Full refresh |
files | Files uploaded to Vapi, typically used as knowledge-base sources for assistants | Full refresh |
chats | Text-based chat interactions with assistants | Incremental (by createdAt) |
sessions | Sessions that group related chats and calls into one conversation context | Incremental (by createdAt) |
campaigns | Outbound call campaigns with live progress counters | Full refresh |
Incremental tables sync only new or updated records on each run. Full refresh tables reload all data on each sync.
Sync behavior
The calls table supports incremental sync by either createdAt (default) or updatedAt. Using updatedAt re-syncs calls whose analysis or artifacts were attached after the call ended. The chats and sessions tables only support createdAt incremental sync since the Vapi API can't sort these by updatedAt.
Configuration tables like assistants, squads, tools, and campaigns use full refresh because they mutate in place – a createdAt watermark would miss updates to existing records.
Configuration
| Option | Type | Required |
|---|---|---|
API key | password | Yes |
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
calls | Phone and web calls handled by Vapi voice assistants, squads, or workflows, including transcript artifacts, analysis, ended reason, and per-component cost breakdown. | Incremental, Full refresh | createdAt, updatedAt | — |
assistants | Configured Vapi voice assistants: transcriber, LLM, and voice settings plus call behavior, analysis, and artifact plans. | Full refresh | — | — |
phone_numbers | Phone numbers attached to the org, either provisioned through Vapi or brought from providers like Twilio, Vonage, or Telnyx. | Full refresh | — | — |
squads | Squads group multiple assistants so calls can be transferred between them mid-conversation. | Full refresh | — | — |
tools | Tools that assistants can invoke during calls, such as API requests, call transfers, or external integrations. | Full refresh | — | — |
files | Files uploaded to Vapi, typically used as knowledge-base sources for assistants. | Full refresh | — | — |
chats | Text-based chat interactions with assistants, including input, output messages, and cost. | Incremental, Full refresh | createdAt | — |
sessions | Sessions group related chats and calls into one continuous conversation context. | Incremental, Full refresh | createdAt | — |
campaigns | Outbound call campaigns that dial a list of customers with an assistant or workflow, with live progress counters. | Full refresh | — | — |