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.

QVCCS Innovation teamConversation Detail user guide →

Every conversation, flattened – Conversation Detail On the left, a stack of nested Genesys Cloud conversation detail records, each showing conversation, participants, sessions and segments. A thick arrow labelled analytics jobs carries them to the right, where they become a flat table with a royal header row and one row per conversation. INNOVATION · ANALYTICS Every conversation, flattened Conversation Participants Sessions Segments ANALYTICS JOBS One row per conversation
  • 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.

Windowed asynchronous analytics jobs Top: an illustrative 31-day UTC date range split into five windows of at most seven days, each its own asynchronous conversation detail job. Middle: the per-window pipeline – submit the job, poll every four seconds until FULFILLED, cursor-page the results 500 at a time, de-duplicate and division-filter, harvest participant attributes, and optionally collect flow data. Bottom: after the last window, names are resolved and the collection is offered as JSON and Excel downloads. DATE RANGE · UTC, INCLUSIVE · ILLUSTRATIVE 31 DAYS Split into windows of at most seven days Window 1 · job Window 2 · job Window 3 · job Window 4 · job W5 PER WINDOW Submit, wait, read by cursor, enrich SUBMITdetails/jobs POLL · 4 Suntil FULFILLED CURSOR PAGES500 per page SCANDe-dupe, divisions HARVESTAttributes, paced FLOW DATAOptional AFTER THE LAST WINDOW Resolve IDs to names Excel · one row each JSON · full nested records + meta
A date range is split into windows of at most seven days, each one an asynchronous analytics job that is submitted, polled and read by cursor.
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.

  1. Top band, "Date range · UTC, inclusive · illustrative 31 days", headed "Split into windows of at most seven days".
  2. 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".
  3. Middle band, "Per window", headed "Submit, wait, read by cursor, enrich", shows six steps joined by arrows from left to right.
  4. 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).
  5. Bottom band, "After the last window": a "Resolve IDs to names" box has arrows to two outputs.
  6. 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.

Four Genesys Cloud sources converge on one flat row per conversation On the left, four Genesys Cloud API sources: asynchronous analytics conversation detail jobs, the live conversation object for participant attributes, historical flow execution data for IVR variables and DTMF inputs, and name lookups for users, queues, wrap-up codes, skills, flows and divisions. They feed a central enrichment engine that merges attributes, extracts flow variables and resolves names. On the right, the output: one row per conversation made of fixed conversation columns, IVR columns, one column per flow variable and one column per attribute key, with the complete nested record kept in JSON. GENESYS CLOUD CX · SOURCES Four APIs, one record Analytics detail jobs /api/v2/analytics/conversations/details/jobs Live conversation object /api/v2/conversations/{id} · attributes Flow execution data · optional /api/v2/flows/instances/query · jobs Name lookups users · queues · wrap-ups · skills · flows · divisions QVCCS ENGINE Enrich Merge attributes Extract variables Resolve names PACED · CACHED READ-ONLY EXCEL · ONE SHEET 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 One column per attribute key Set Participant Data keys, junk filtered Flat for pivot tables and BI – while the JSON download keeps every participant, session and segment.
Analytics jobs, the live conversation object, flow execution data and name lookups converge on one flat row per conversation.
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.

  1. Left column, "Genesys Cloud CX · sources", headed "Four APIs, one record", lists four sources.
  2. 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".
  3. 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".
  4. Four arrows lead from the engine to the right column, "Excel · one sheet", headed "One row per conversation".
  5. "Fixed columns": "ID · start · agents · queues · wrap-ups · ANI".
  6. "IVR columns": "Inputs with every attempt · retries".
  7. "One column per flow variable": "Caller input first, lookup outputs second"; and "One column per attribute key": "Set Participant Data keys, junk filtered".
  8. 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.

AspectNative Genesys Cloud CXQVCCS Conversation Detail
Synchronous detail queryUp 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 jobsRecommended 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 exportCSV 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 attributesExportable 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 DTMFHistorical 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 limitsServices 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 shapeTabular 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.

Read the user guide Managed Professional Services

Last reviewed

Questions about what you have read?

Clients, partners and people introduced to us can reach the specialists behind our applications and articles directly.

Who to contact