QVCCS innovation · Analytics and insight
Every conversation, flattened: bulk Genesys Cloud detail export with analytics jobs
Reconciliation, IVR audits and CRM matching all start with the same request: give me everything that happened between these two points in time. Conversation Detail answers it with Genesys Cloud's asynchronous analytics jobs, enriches each record with participant attributes and IVR inputs, and hands back a flat, filterable workbook and the complete nested JSON.
Did you know that the synchronous conversation detail query endpoint accepts interval start dates up to 558 days in the past, and that Genesys recommends the asynchronous conversation detail jobs endpoint for historical queries?
Did you know that a conversation detail query can cover at most seven days when it has no filter, and up to 32 days with a filter? Detail jobs lift those interval restrictions, which become a function of the data volume instead.
Did you know that the data behind conversation detail jobs is not continuously updated in real time? Depending on when you query, it may be hours to a full day behind, and each result carries a dataAvailabilityDate.
Did you know that the Interactions view export limits conversations less than 24 hours old to 10,000 per 12-hour period, while older interactions can be exported up to 1,000,000 conversations in a single export?
01
“Give me everything between these two points in time”
Finance wants last month's inbound calls reconciled against the CRM. The IVR owner wants to know how many callers struggled to enter an account number after the menu change. The compliance team wants the verification outcome every flow wrote, for every conversation in a quarter. Each request sounds simple, and each runs straight into the shape of Genesys Cloud CX conversation data: deep, nested, spread across several APIs, and far too large to page through one screen at a time.
Conversation Detail – Conversation Detail Collector inside the app – was built for exactly this. Sign in with a read-only OAuth client, optionally tick one or more divisions, pick a start and end date and time in UTC, and press Collect. The server gathers every matching conversation as a complete analytics conversation detail record, enriches it, resolves IDs to names, and offers two downloads: a single-sheet Excel workbook with one row per conversation, and a JSON file holding every full nested record plus a meta summary.
02
Synchronous queries or asynchronous jobs? Genesys is clear
Genesys Cloud offers two doors into the same conversation detail data. The query endpoint, POST /api/v2/analytics/conversations/details/query, is built for users who need the most up-to-date data and a response right now. The price of speed is documented: shorter intervals – seven days unfiltered, 32 days filtered – smaller pages, and an explicit note that it is not intended for bulk export workloads. Since December 2020 it accepts interval start dates up to 558 days in the past, and Genesys recommends the asynchronous jobs endpoint for historical queries.
The jobs endpoint, POST /api/v2/analytics/conversations/details/jobs, is designed for data-export integrations. You submit a query and receive a jobId, poll until the state is FULFILLED, then read the results through a cursor rather than numbered pages, with page sizes of up to 10,000. The trade-off is freshness: the data behind jobs can lag real time by hours to a full day. For a date-range export that is the right bargain, so Conversation Detail is built on jobs, and uses the query endpoint for one thing only – a one-record probe for totalHits that drives a determinate progress bar.
Read this diagram as text
A three-band diagram, read top to bottom: an illustrative date range split into windows, the pipeline each window runs through, and the two downloads produced at the end.
- Top band, "Date range · UTC, inclusive · illustrative 31 days", headed "Split into windows of at most seven days".
- The range is drawn as a bar of five consecutive segments: "Window 1 · job", "Window 2 · job", "Window 3 · job", "Window 4 · job" and a shorter final segment "W5".
- Middle band, "Per window", headed "Submit, wait, read by cursor, enrich", shows six steps joined by arrows from left to right.
- The steps are: "Submit" ("details/jobs"), "Poll · 4 s" ("until FULFILLED"), "Cursor pages" ("500 per page"), "Scan" ("De-dupe, divisions"), "Harvest" ("Attributes, paced") and "Flow data" ("Optional", drawn dashed).
- Bottom band, "After the last window": a "Resolve IDs to names" box has arrows to two outputs.
- The two outputs are "Excel · one row each" and "JSON · full nested records + meta".
03
What the native Interactions view export already offers
Genesys Cloud CX has a capable export path of its own, and we recommend it wherever it fits. The Interactions view can be filtered by queue, user, wrap-up code, direction, MOS and much more, with custom date ranges of up to 31 days, and exported to CSV or PDF on demand or on a schedule. With the Reporting > Custom Participant Attributes > View permission, the export can include custom participant attributes. Limits are documented: conversations under 24 hours old export at up to 10,000 per 12-hour period, and older ones at up to 1,000,000 per export.
Conversation Detail does not replace that. It answers a different brief: an arbitrary date range collected in one run, the full nested routing history of each conversation preserved in JSON, participant attributes merged into one column per key, and, optionally, the Architect flow variables and DTMF entry trail for each call, extracted from historical flow execution data. It is aimed at analysts building datasets, auditors and integration teams, rather than at day-to-day performance monitoring.
04
Engineering the collector: windows, cursors and patience
Every collection runs as a detached server-side job. The range is split into windows of at most seven days, each one an asynchronous analytics details job. The engine submits the job, polls every four seconds for up to about 15 minutes until it is FULFILLED, then cursor-pages the results 500 at a time. Because the jobs API streams by cursor there is no offset-paging cap; conversations are de-duplicated across window boundaries and counted against a 250,000-record safety cap per collection, beyond which the result is marked truncated.
Division scoping uses a server-side segmentFilters predicate on divisionId. If an org's job API rejects that dimension, the app falls back to an unfiltered job and applies a record-level filter on divisionIds regardless, so results are identical either way – the fallback simply scans more, which the Scanned tile makes visible. Live progress streams to the browser: submitting, Genesys preparing, scanning, harvesting, flow data, resolving names. Refresh, navigate away or lose the network and the page reattaches; only the Cancel button stops a run.
Rate limits are treated as a design input, not an error. Genesys documents that services impose their own limits and answer with HTTP 429 and a Retry-After header. Every call in a session rides an adaptive pacer that starts at roughly 4.5 requests per second, slows by half again on each 429, honours Retry-After with jitter, and eases back after sustained success. Tokens refresh proactively before expiry, so long runs never die halfway. Sizing guidance is published in the guide: around 10,000 conversations is of the order of 40 minutes of harvesting.
05
Enrichment: participant attributes and the IVR entry trail
Two enrichment passes turn analytics records into business datasets. First, participant attributes – the key/value pairs your flows write with Set Participant Data, such as account numbers, intents and verification outcomes – are fetched once per kept conversation from the live conversation object, GET /api/v2/conversations/{conversationId}. Each participant keeps its own map, and a merged conversation-level map joins differing values with a pipe. A junk-key filter drops auto-written keys that embed GUIDs, so only human-named attributes become Excel columns. Conversations beyond the live API's retention are recorded as attributes not resolved; their analytics fields remain complete.
Second, and opt-in per run, the app reads Architect historical flow execution data. For each conversation that traversed a flow it queries the flow instances, batches them into download jobs and extracts every author-declared variable with its final value, plus each Collect Input and Menu step as a sequence of attempts. The result reads like a story: Account Number: ∅ → 703986 (2 tries, 1 failed). Variables are classified structurally by flow action type – caller input and assignments first, lookup outputs second – so the extraction adapts to any org's flows without guessing from names.
The limits are respected, not hidden. Flow data exists only where execution data storage was enabled when the call ran, and Genesys retains it for 10 days. An enrichment cache, namespaced per OAuth client, keeps each finished conversation's attributes and flow extraction, so overlapping re-runs are much faster and previously collected flow data outlives that window.
Read this diagram as text
A three-column diagram, read left to right: four Genesys Cloud sources feed a central enrichment engine, which writes four groups of columns into one Excel row per conversation.
- Left column, "Genesys Cloud CX · sources", headed "Four APIs, one record", lists four sources.
- The sources are: "Analytics detail jobs"; "Live conversation object", for attributes; "Flow execution data · optional", read through instance query jobs; and "Name lookups" for "users · queues · wrap-ups · skills · flows · divisions".
- Each source has an arrow into the middle column, "QVCCS engine", headed "Enrich", whose box lists "Merge attributes", "Extract variables" and "Resolve names", with the notes "Paced · cached" and "Read-only".
- Four arrows lead from the engine to the right column, "Excel · one sheet", headed "One row per conversation".
- "Fixed columns": "ID · start · agents · queues · wrap-ups · ANI".
- "IVR columns": "Inputs with every attempt · retries".
- "One column per flow variable": "Caller input first, lookup outputs second"; and "One column per attribute key": "Set Participant Data keys, junk filtered".
- The banner beneath reads: "Flat for pivot tables and BI – while the JSON download keeps every participant, session and segment."
06
Flattened for BI, complete for engineers
The Excel workbook is deliberately flat: one Conversations sheet, one row per conversation, a frozen bold header. Fixed columns come first – conversation ID, start and end in UTC, duration, direction, media types, participants and purposes, agent, queue, wrap-up, flow and division names alongside their IDs, customer ANI and DNIS, external contact IDs and whether attributes were resolved. Then come the IVR columns, one column per flow variable and one per participant-attribute key. Multiple values within a conversation join with commas, so a pivot table or BI import works first time.
Flattening always loses something, which is why the JSON download keeps every full nested record – participants, sessions, segments and metrics – plus a meta summary that carries totals, resolved name maps and the sorted attribute and variable column lists that downstream tooling needs. Guards protect both formats: the workbook is capped at 1,000,000 rows and 16,000 dynamic columns, and very large sources go to JSON. Finished collections stay downloadable and are owner-scoped to the OAuth client that created them; a Delete data button purges your own collections when a piece of work is done.
07
Built, tested and supported by the whole practice
Conversation Detail was designed and proved the way we deliver for clients. Requirements came from real reconciliation and IVR-audit work; the design records why jobs beat queries for this brief; the engine has mock-fetch integration tests covering the job lifecycle, windowing, enrichment and the job registry; and negative paths – failed, cancelled or expired jobs, 422s on flow-data batches, permission gaps – each have a defined, logged outcome. The client is strictly read-only: every POST is a query or job submission, and nothing in the org is ever created, changed or deleted.
The app is part of the QVCCS App Suite included with every Managed Professional Services tier, and it pairs with Conversation Analyser: shortlist interesting conversation IDs here, then dissect each one there. When the dataset is the start of a bigger reporting or data-warehouse project, we muster the team from our own bench – Business Analysts to define the measures, a Solution Architect for the data model, Senior Developers for the pipelines – and take end-to-end ownership of the outcome.
How it compares
Native export paths and Conversation Detail
All three read the same Genesys Cloud conversation data; they are optimised for different jobs.
| Aspect | Native Genesys Cloud CX | QVCCS Conversation Detail |
|---|---|---|
| Synchronous detail query | Up to 7 days unfiltered or 32 days filtered per query, start dates up to 558 days back; not intended for bulk export. | Used only for a one-record totalHits probe that drives the progress bar. |
| Asynchronous detail jobs | Recommended for historical queries; cursor paging up to 10,000 per page; data can lag real time by hours to a day. | Ranges split into seven-day windows, one job each, polled, cursor-paged and de-duplicated across windows. |
| Interactions view export | CSV or PDF, on demand or scheduled; custom ranges up to 31 days; up to 1,000,000 older conversations per export. | One run over an arbitrary range, up to 250,000 records per collection, with JSON and Excel downloads. |
| Participant attributes | Exportable from views with the Custom Participant Attributes permission; job results carry attributes, truncated to 1,024 characters. | Fetched per conversation from the live object, kept per participant, merged per conversation, junk keys filtered, one column per key. |
| IVR variables and DTMF | Historical flow execution data in Architect, with flow execution history and Replay Mode, retained for 10 days. | Optional extraction of every flow variable and each input's attempt trail into columns, cached beyond the 10-day window. |
| Rate limits | Services answer with 429 and Retry-After; clients are expected to back off. | Adaptive per-session pacer, Retry-After honoured with jitter, proactive token refresh. |
| Output shape | Tabular view columns chosen in the view. | Flat single-sheet workbook plus the complete nested JSON and a meta summary. |
Limits quoted for native features are from current Genesys documentation and may change; check the linked articles.
The takeaways
- Built on the asynchronous analytics jobs Genesys recommends for historical and bulk detail data.
- Arbitrary date ranges collected in one detached, resumable run with live progress.
- Participant attributes and IVR entry trails become columns your analysts can filter.
- A flat workbook for BI and the complete nested JSON for engineers, from the same run.
- Strictly read-only, rate-limit aware and owner-scoped, with on-demand purge.
Conversation Detail is part of the QVCCS App Suite, included with every Managed Professional Services tier and built by the same certified team that designs, builds and supports Genesys Cloud CX solutions.
Sources
- Analytics Conversation Detail Endpoint API query interval change – Genesys Cloud Resource Centerhelp.genesys.cloud
- Conversation detail record jobs – Genesys Cloud Developer Centerdeveloper.genesys.cloud
- Conversation detail queries – Genesys Cloud Developer Centerdeveloper.genesys.cloud
- Conversation Data Model – Genesys Cloud Developer Centerdeveloper.genesys.cloud
- Export view data – Genesys Cloud Resource Centerhelp.genesys.cloud
- Interactions view – Genesys Cloud Resource Centerhelp.genesys.cloud
- Historical execution data overview – Genesys Cloud Resource Centerhelp.genesys.cloud
- Limits – Genesys Cloud Developer Centerdeveloper.genesys.cloud