Export voice bot analytics data three ways: a UI export scoped to the records you select or filter, a webhook that pushes each call as it completes, and an API you query directly. Cekura exposes all three, exports selected call records from its Calls page as CSV, and splits transcripts, metrics, and recordings across different endpoints rather than one.
TL;DR
-
Cekura exports selected call records from the Calls page in Observability as CSV, and Cekura's documentation names the Get Call API as the route for custom or automated reporting.
-
Cekura's Results API returns metrics, scores, and pass/fail outcomes with no transcript field, and hands back connected_runs, the run IDs that have transcript data, which Cekura's bulk runs endpoint then returns with the timestamped transcript and the recording URL.
-
Cekura's list call-logs endpoint returns transcripts inside a paginated pull with a 33-day maximum range per request, scoped to production calls only; a UI export like Retell's is scoped by the filters that were active on the history table when the CSV was created.
-
Cekura pushes a completed call record with its call_log.completed webhook, carrying the transcript, the timestamped transcript object, the recording URL, and the evaluation metrics, authenticated with a shared-secret X-CEKURA-SECRET header; on other platforms the payload varies by event, and Retell's call_ended carries the call object without call_analysis.
-
Cekura's benchmark does not measure export or analytics tooling, so this page cites its method rather than a score: a frozen matched study of 7 configurations across 82 scenarios with 3 retained repeats each.
What data can you actually export from a voice bot?
Exporting voice bot analytics data means moving three separate payloads out of a platform: the call record with its outcome fields, the transcript, and the recording. Which payload arrives depends on the endpoint, and the difference matters more than the file format does. Cekura's call-log records carry status, success, duration, call_ended_reason, dropoff_point, topic, error_message, and per-metric evaluation scores, so a containment or drop-off rate is computable from the export. A scores-and-metrics export and a full-transcript export are still two different calls: Cekura's Results API returns metrics, scores, and run-level detail for an evaluation, with no transcript field in the response schema, but it hands back connected_runs, the run IDs that have transcript data. Cekura's bulk runs endpoint takes those IDs and returns the transcript, the timestamped transcript, and the recording URL for each. Exporting "analytics data" without checking which shape an endpoint returns is how a report ends up missing exactly the field it needed.
How do voice AI platforms let you export analytics data?
Cekura, Vapi, and Retell each document several export mechanisms rather than one default, and no two return quite the same fields. Cekura documents a UI export scoped to selected records, a paginated bulk pull of call logs, a single-record pull with the fields the bulk pull omits, a metrics-only test-results pull, the transcript pull that pairs with it, and two outbound webhook events. Vapi documents a list endpoint alongside separate single-call and download endpoints, and Retell documents a UI export plus a webhook on top of its own API.
| Platform | Export method | What you get back | Documented limit |
|---|---|---|---|
| Cekura (Calls page) | Select records in Observability and export as CSV | The selected call records as a CSV file | Selection-based, so the file covers only the records selected |
| Cekura (call logs API) | GET /observability/v2/call-logs/, paginated, or /{id}/ for one record | Transcript and timestamped transcript on the paginated pull; voice_recording_url and metadata only on the single-record call | Production calls only; 30-day default window, 33-day maximum range; simulation runs use the results/bulk-runs pair instead |
| Cekura (test results API) | GET /test_framework/v2/results/{id}/, plus a follow-up call to the bulk runs endpoint for transcripts | Metrics, scores, pass/fail outcomes, and connected_runs from the first call; transcript, timestamped transcript, and recording from the second | No transcript field in the result schema itself; this is the simulation-side path, not production calls |
| Cekura (results webhook) | call_log.completed, result.completed, and result.pre_trigger events POSTed to a destination URL | call_log.completed carries the transcript, timestamped transcript, voice_recording_url, and evaluation metrics; result.completed carries per-run transcript data and a voice_recording URL; result.pre_trigger carries neither | Authenticated with a shared-secret X-CEKURA-SECRET header; Cekura does not store or display webhook delivery logs in the dashboard UI |
| Cekura (KPI alerting) | Threshold on a custom KPI routed to Slack, email, or a webhook | A notification that one KPI crossed a threshold | Alerting channel, separate from the results webhook above |
| Vapi | GET /call, list only; Vapi's docs index additionally lists a single-call GET, create/update/delete, and seven download endpoints | Call objects with id, timestamps, type, status, messages, and costs, filterable by assistant, phone number, and date | limit defaults to 100 on the list endpoint |
| Retell (UI) | Actions, then Export, choosing columns | A CSV Retell generates in the background, matching the active filters, plus export-only fields not shown in the table: transcript data, PII-scrubbed transcripts, and recording and public log URLs | Exceeding the workspace export limit requires narrower filters; completed exports are kept one week |
| Retell (webhook) | call_analyzed event | Full call data including the call_analysis object | call_ended carries every field except call_analysis; 10-second timeout, up to 3 retries |
A UI export is scoped by the selection or filters active when it was created, a bulk call-log pull caps at a 33-day range per request so a longer backfill needs several requests, and a test-results pull needs a second call to the bulk runs endpoint for the transcript. Checking which shape a mechanism returns before building a pipeline around it avoids discovering mid-report that the field was never in that endpoint's response.
Which calls should show up in a voice bot analytics export?
A voice bot analytics export should return every recorded outcome, including the calls that failed. Cekura Bench holds this line in its own methodology: calls that did not connect or produced no transcript stay in the denominator rather than getting dropped from the results, across a frozen matched study of 7 configurations, 82 scenarios, and 3 retained repeats each, where Cekura shared the system prompt, tool definitions, test-case summaries, and test data while providers chose their own models, speech components, and settings (see Cekura Bench). The same rule decides whether an export is trustworthy. Cekura's call-log schema carries status, call_ended_reason, error_message, and dropoff_point on every record, so a dropped call exports as a row with a reason attached rather than vanishing from the count. Cekura Bench measures task completion, infrastructure reliability, interruption handling, voice naturalness, response time, and pass³ reliability, not export tooling, so nothing on this page claims a benchmark score for an export mechanism.
How does Cekura export voice bot analytics data?
Cekura exposes voice bot analytics data through several primitives rather than a single export button. The Calls page exports selected records as CSV, and Cekura's documentation names the Get Call API for automated reporting, adding that Cekura "provides full API access to retrieve your data at any time" to avoid vendor lock-in. The call-logs API adds a paginated pull with the full transcript and a single-record call with the recording URL and metadata the pull omits. The Results API and bulk runs endpoint split metrics from transcripts across two calls, and a call_log.completed webhook pushes the same data out on completion. Dashboards filter by test suite, scenario, agent, or time period and open individual sessions for transcripts, recordings, and metric breakdowns (see Cekura Dashboards), and route into a daily report email rather than a file download. For root-cause analysis, see Cekura's call analytics guide; for KPI alert routing, see how to monitor AI chat and voice agents in production.
Frequently Asked Questions
Should you export via API, webhook, or a UI download?
Cekura supports all three, and the right one follows how often the data is needed. Cekura's Calls page export fits a one-off pull of selected records as CSV. Cekura's list call-logs endpoint fits a scheduled job with a filtered date range. Cekura's call_log.completed webhook fits a pipeline that needs each record as the call completes, the same shape as Retell's call_analyzed event.
What file format does a voice bot analytics export come back in?
Cekura returns CSV from the Calls page and JSON from its observability, test-framework, and webhook payloads, so the format follows the mechanism rather than the platform. Retell's UI export also produces a CSV, generated in the background. A webhook delivers JSON per event rather than a file, so a pipeline built entirely on webhooks never receives a file at all.
Does a webhook export include the full call transcript?
Cekura's call_log.completed webhook carries the full text transcript and the timestamped transcript object in the payload it POSTs, so on Cekura a transcript arrives by push and needs no follow-up pull. On other platforms it depends on the event: Retell's call_ended event carries the call object without the call_analysis field, and only call_analyzed carries the full call_analysis object. Subscribing to the wrong event is how a pipeline silently misses the field it wanted.
Does exporting analytics data include the call recording or audio?
Cekura returns voice_recording_url on its single call-log endpoint and in its call_log.completed webhook payload, and returns the per-run recording as voice_recording in result.completed; the list call-logs endpoint and the Results API omit it. The recording follows the endpoint rather than the platform's recording setting, so a pull built only on the list or bulk endpoints needs the single-record endpoint too if the recording URL matters.
How do you get voice bot analytics into a warehouse or BI tool?
Cekura supports two routes and names both in its documentation. Cekura's webhook POSTs the evaluation results and metadata for each completed call to a destination URL, for persistence in your own database and for BI tools such as Tableau, Looker, or Grafana. Cekura's list call-logs endpoint accepts an ISO 8601 timestamp_from and timestamp_to with page and page_size, so a cron job walks a fixed window and backfills as a sequence of windows, since one request caps at 33 days.
Does a webhook-based export ever miss a call?
Cekura does not support replaying webhooks for evaluations that completed before the integration was active, and Cekura's documentation directs a backfill through the API instead, since the API response matches the structure the webhook sends. Cekura's list call-logs endpoint covers that backfill for production calls; simulation results reconcile through the results and bulk-runs pair instead. On Retell, the webhook has a 10-second timeout and retries up to 3 times before giving up, so a pipeline with no reconciliation against a pull can end up with gaps if a receiving endpoint is briefly down longer than the retry window covers.







