QVCCS innovation · Analytics and insight

Participant data: the busiest dataset in your Genesys Cloud org, finally analysed

Every Architect flow, bot and agent script writes its working state into participant data: verification flags, lookup results, intents, outcomes. Genesys Cloud keeps that map on every conversation. We built Participant Data Analytics to warehouse it across the whole organisation and answer the question flows cannot: has this outcome improved or decayed over time?

QVCCS Innovation teamParticipant Data Analytics user guide →

Participant data, warehoused On the left, three Genesys Cloud conversations each carry key and value pairs of participant data, such as Verified equals true. Arrows feed them into a central warehouse tile that keeps every key from every day. On the right, a stacked daily share chart shows one value of one key growing over time, the trend verdict the app reports. QVCCS INNOVATION · ANALYTICS Participant data, warehoused CONVERSATION Verified = true CONVERSATION Intent = Billing CONVERSATION Verified = false WAREHOUSE Every key, every day TIMELINE Improving
  • Did you know participant data attributes are name and value strings that persist when a call transfers from one Architect flow to another, while ordinary flow variables, such as the caller's number in Call.Ani, do not?

  • Did you know Genesys documents that participant data set after the customer disconnects, for example by an agent script during wrap-up, is synchronised in Conversation Services but not in Analytics Services?

  • Did you know analytics conversation detail jobs return participant attributes, with keys and values truncated to 1,024 characters, while the response schema of the synchronous conversation details query leaves attributes out?

  • Did you know Genesys gives participant data shown in an interaction's details a time to live of 60 days, after which it can only be accessed when exported?

01

08:55: did verification get better after the August release?

Picture the contact centre manager of a retail service line at 08:55 on a Monday. In August the IVR team changed the identification and verification step: a new data action looks the caller up by their number, and if that fails a bot asks for the account number. The flow records the result with a Set Participant Data action, Account Verified = true or false, on every call. The question on the manager's desk is simple. Did more callers get verified after the change, or fewer? And did the change quietly stop some other key being written at all?

The data to answer it already exists. Genesys Cloud keeps participant data on the conversation, so every one of those calls carries its verification flag, its intent, its lookup results and whatever else the flows, bots and agent scripts chose to write. What is missing is a way to look at that map across thousands of conversations and many weeks, key by key and day by day. That gap is where Participant Data Analytics lives.

02

What Genesys Cloud gives you natively, and does well

Genesys treats participant data as a first-class part of the conversation. In Analytics Workspace, an interaction's Details tab has a Participant Data section where quality managers and evaluators can expand each participant's attributes and copy values, which is exactly what you need when reviewing a single call. For bulk work, the Interactions view export has an Include Custom Attributes option, governed by the Reporting > Custom Participant Attributes > View permission. Genesys notes that this attribute data is only available for conversations processed by the overnight data pipeline.

Developers have the Platform API too. The analytics conversation details jobs return participant attributes for every conversation in an interval, and a participant attributes search endpoint exists for finding conversations. These are the right building blocks. What none of them is designed to do is hand a manager a catalogue of every key the organisation writes, how often each value occurs on each day, and a plain-English verdict on whether a target value is rising or falling. That needs a dataset that accumulates, not a view that is queried and closed.

03

The insight: treat the participant-data map as a dataset

Our starting point was the shape of the data itself. On the analytics record each participant carries an attributes map: string keys, string values, written by many authors. Merge those maps per conversation and you have one row per call with a sparse, evolving set of columns. Some keys are booleans, some are short enumerations such as an intent, and some are identifiers, phone numbers or free text. A useful tool has to classify them automatically and treat each class differently.

Two subtleties shaped the design. First, the analytics record holds the attribute map as it stood when the conversation ended, so a flow that writes Verified=false and then overwrites it with true contributes one true; mid-call history is not available from this source. Second, coverage matters as much as values. If a key stops being written, a naive chart shows its values collapsing. So the app always keeps a visible (not set) bucket, and by default computes shares against all conversations in each time bucket, so a coverage change can never masquerade as a change in outcomes.

How participant data converges on one warehouse On the left, Architect flows, bot flows, agent scripts and the Conversations API all write participant data, which Genesys Cloud keeps as string key and value pairs in participants[].attributes on the conversation's analytics record. In the middle, the Genesys Public API calls that read it: one asynchronous conversation details job per UTC day with cursor-paged results, plus the queues and skills lists that turn ids into names; the synchronous details query is shown crossed out because its response schema leaves attributes out. On the right, everything lands in one Participant Data Analytics warehouse with Catalogue, Timeline, Movers and Conversations tabs. GENESYS DATA MODEL Many writers, one map Architect flows Bot flows Agent scripts Conversations API CONVERSATION participants[ ] · customer · ivr · acd · agent participants[ ].attributes Verified: "true" · Intent: "Billing" String values · end-of-call state in analytics Natively: per interaction, or in exports GENESYS PUBLIC API Read-only harvest POST /api/v2/analytics/conversations/details/jobs ONE ORG-WIDE JOB PER UTC DAY GET …/details/jobs/{jobId}/results CURSOR PAGES · ATTRIBUTES INCLUDED GET /api/v2/routing/ queues GET /api/v2/routing/ skills IDS AND GUIDS IN VALUES → NAMES POST …/conversations/details/query Synchronous: schema has no attributes GET-only client, one allowlisted query POST Only coverage gaps are fetched ONE VIEW The warehouse PARTICIPANT DATA ANALYTICS Each conversation stored once Catalogue Timeline Movers Conversations SHARED BY EVERY TAB Filter · key rules · saved views Excel export Coverage calendar records what is held Raw rows never modified by rules Harvest a range once, extend it forever: the warehouse keeps what it has fetched and only fills the gaps
Flows, bots, scripts and the API write participant data; the analytics details jobs read it, and one warehouse serves every tab.
Read this diagram as text

Three columns show participant data written into the Genesys data model, read by the Genesys Public API and landing in one Participant Data Analytics warehouse.

  1. Left panel, "Genesys data model: many writers, one map": Architect flows, Bot flows, Agent scripts and the Conversations API all write into the conversation record.
  2. The conversation holds participants (customer, ivr, acd, agent) and participants[].attributes, with examples Verified: "true" and Intent: "Billing"; notes say values are strings, analytics holds the end-of-call state, and natively they are seen per interaction or in exports.
  3. The conversation arrows into the middle panel, "Genesys Public API: read-only harvest", starting with the analytics conversation details jobs call, one org-wide job per UTC day.
  4. The job results call is read in cursor pages, with attributes included.
  5. The routing queues and routing skills lists turn ids and GUIDs in values into names.
  6. The synchronous conversation details query is crossed out, because its schema has no attributes.
  7. Notes say the client is GET-only with one allowlisted query POST, and only coverage gaps are fetched.
  8. The job results and the name lookups arrow into the right panel, "One view: the warehouse", where Participant Data Analytics stores each conversation once and offers Catalogue, Timeline, Movers and Conversations tabs.
  9. Every tab shares filter, key rules, saved views and Excel export; a coverage calendar records what is held and raw rows are never modified by rules.
  10. A banner says: harvest a range once and extend it forever, as the warehouse keeps what it has fetched and only fills the gaps.

04

How we engineered the harvest

Participant Data Analytics signs in with an OAuth client-credentials grant that needs analytics:conversationDetail:view, plus routing:queue:view and routing:skill:view so ids resolve to names. You choose a UTC day range and press Harvest range. The app compares the request with the organisation's coverage intervals and fetches only the gaps. Each gap is split into one-day windows, and for each window it submits one org-wide asynchronous job to /api/v2/analytics/conversations/details/jobs, with no flow filter, so every conversation in every media type is included. It polls until Genesys has compiled the job, then cursor-pages the results 1,000 at a time.

Each conversation is reduced to its merged participant-data map, start time, media types, direction, divisions, first ACD queue and a coarse disposition: handled by an agent, abandoned in queue, or contained because it never reached a queue. Rows are stored once, keyed by conversation id, and the trailing six hours of covered time are re-scanned for stragglers without double-counting. A window that reaches the 100,000-conversation cap is stored but deliberately not marked covered, so a re-run picks up the remainder. Requests are capped at 92 days; longer histories are simply consecutive harvests.

Flows routinely write routing skill ids, and sometimes queue ids, into participant-data values. The app keeps a per-organisation lookup refreshed from /api/v2/routing/skills and /api/v2/routing/queues at every harvest, and translates values that are exactly one GUID, or a short list of GUIDs, into names. Free text is never rewritten. Throughout, the Genesys client is GET-only apart from one allowlisted POST, the job submission, which is itself a read query. The client secret is encrypted at rest for the life of the session, and every stored row is scoped to the organisation that harvested it.

05

Catalogue, timeline, movers: from keys to verdicts

Analysis starts on the Catalogue: one row per key seen in the chosen range, classed as BOOLEAN, ENUM (up to 12 distinct values) or TEXT/ID, with coverage as a percentage of conversations, distinct values, the first and last day it was written and its top value buckets. Above the table, schema drift banners list keys that appeared or stopped being written inside the range, with a day of slack at either end so partial days do not raise false alarms. A key that vanished on the Tuesday a flow was published is a flow-change fingerprint you can click straight into.

Clicking a key opens its Timeline: a stacked chart of value shares per day, or per hour when the range is three days or less. A target bucket is picked automatically and can be changed from the legend. The verdict combines the mean share in the first half of the range against the second half with a least-squares slope, and reads like the demo's Account Verified = True: 37.3% to 53.3% of calls, improving, +0.9 points a day. It is called stable when the halves differ by under two points and the slope is under 0.15 points a day. A second share basis, calls carrying the key, rescues low-coverage keys whose (not set) band would otherwise drown the signal.

The Movers board turns that into a watchlist of large sparkline cards, either keys you pick or, with nothing picked, every eligible boolean or enum key ranked by the size of its move multiplied by the square root of its volume, so a five-point move on 4,000 calls outranks a 20-point wobble on 40. The Conversations tab lists the calls themselves with their full raw maps, up to 500 rows per page. A filter builder stacks conditions over participant data and routing context such as queue, media and division, applies to every tab and the Excel export, and can be saved as a named view. Range, filter and selections all live in the URL, so every analysis is a shareable link.

06

Volatile keys, and rules that tame them reversibly

Real organisations have flows that write a timestamp into the key name itself, minting a new key on every call: EnteredAccountNumber followed by a date and time. Left alone, such a family floods the catalogue and the key pickers, and every member appears to arrive and vanish on the same day. Participant Data Analytics detects these families automatically, by a shared stem with a trailing date, timestamp or long-digit suffix and at least three members, and flags them with an amber chip for review.

A key rule is a case-insensitive glob such as EnteredAccountNumber_* with one of two actions. Ignore removes matching keys from every view and export. Fold renames them to one stable key, which usually rescues the signal: the events are real, only the key name is wrong. Rules apply at read time, at write time and through a rebuild of the per-day aggregate, and raw stored conversations are never modified, so deleting a rule brings the keys straight back. The panel previews how many keys a pattern matches before you commit, so a typing slip cannot destroy anything.

Folding a volatile key family, then reading the trend On the left, a flow that stamps a timestamp into the key name mints a new key on every call, such as EnteredAccountNumber followed by a date and time. A key rule with the glob pattern EnteredAccountNumber_* folds the whole family into one stable key, without changing the raw stored conversations. On the right, an illustrative timeline for one key shows the target value's daily share rising, with the first-half and second-half means and a least-squares slope behind the improving, decaying or stable verdict. KEY RULES Fold the family, keep the signal EnteredAccountNumber_2026-08-12T05:51:40Z EnteredAccountNumber_2026-08-12T05:53:02Z EnteredAccountNumber_2026-08-12T06:10:17Z ONE NEW KEY PER CALL · FLOODS CATALOGUE AND DRIFT RULE Fold Pattern EnteredAccountNumber_* → EnteredAccountNumber EnteredAccountNumber One real key with a coverage timeline · reversible TIMELINE · ILLUSTRATIVE Did it improve or decay? Share of all calls per day · target bucket = True FIRST HALF MEAN SECOND HALF MEAN True False (not set) — always shown Verdict: Δ of the halves plus slope in pts/day → improving Rules apply at read time, write time and rebuild – stored conversations are never altered, so a rule can always be undone
A fold rule turns a timestamped key family into one real key; the timeline verdict then compares the two halves of the range.
Read this diagram as text

Two panels show a key rule folding a family of timestamped keys into one key, and an illustrative timeline used to judge whether that key's value improved or decayed.

  1. Left panel, "Key rules: fold the family, keep the signal": three example keys, such as EnteredAccountNumber_2026-08-12T05:51:40Z, differ only by an embedded timestamp.
  2. A note warns this makes one new key per call, which floods the catalogue and drift.
  3. The three keys feed a "Fold" rule with the pattern EnteredAccountNumber_* mapped to EnteredAccountNumber.
  4. The result is one real key, EnteredAccountNumber, with a coverage timeline, and the fold is reversible.
  5. Right panel, "Timeline · illustrative: did it improve or decay?", shows ten daily stacked bars of share of all calls per day, with the target bucket set to True and segments for True, False and (not set), which is always shown.
  6. Across the ten days the True share grows; a dashed line marks the first-half mean and a higher dashed line marks the second-half mean.
  7. The verdict box reads: change of the halves plus slope in points per day gives "improving".
  8. A banner says rules apply at read time, write time and rebuild, stored conversations are never altered, and a rule can always be undone.

07

How the team built it, and what it gives you

Participant Data Analytics followed the QVCCS method. Our Senior Business Consultant turned the questions managers actually ask about flow outcomes into user stories with Given/When/Then acceptance criteria; the Solution Architect set the statistical semantics down in writing before a line of code, so every verdict has an exact definition; Senior Developers built to the Senior Platform Practice Lead's engineering standards with four-eyes review; and our Systems Integration Tester proved the harvest against failure paths such as capped windows, missing permissions and stragglers. A synthetic demo organisation with planted improvement, decay, drift and a volatile key family keeps every feature testable without customer data. It is the same multidisciplinary squad, mustered from our own bench, that delivers client projects.

For a client, the result is a living record of what their flows decide. Managers see whether verification, containment or bot outcomes are moving in the right direction. Flow authors see the day a key stopped being written, and the families of badly named keys to fix at source. Analysts get filtered workbooks with the filter recorded on an About sheet. Because the warehouse keeps what it has harvested and fills only gaps, a small regular harvest keeps the history growing long after any single export would have been closed and forgotten.

How it compares

Participant data in native Genesys Cloud CX and in QVCCS Participant Data Analytics

Native facts are as documented in the Genesys Cloud Resource Center and Developer Center.

AspectNative Genesys Cloud CXQVCCS Participant Data Analytics
One conversationParticipant Data section on an interaction's Details tab in Analytics Workspace, with copy-to-clipboard.Conversations tab with each call's full raw map, a must-carry-key filter and up to 500 rows per page.
Bulk extractionInteractions view export with Include Custom Attributes, for conversations processed by the overnight pipeline; 31-day custom date range in the view.Org-wide harvest through analytics details jobs, one per UTC day, fetching only coverage gaps, up to 92 days per request.
Key inventoryKeys appear per interaction or as attribute data in an export file.Catalogue of every key in range: class, coverage, distinct values, top values, first and last day written.
Change over timeExported files for analysis in downstream tools.Daily or hourly timelines with an improving, decaying or stable verdict, a movers board and schema drift banners.
History60-day time to live for participant data in interaction details; afterwards available through export.Accumulating warehouse: each conversation stored once, coverage calendar shows exactly what is held.
API surfaceDetails jobs include attributes, truncated to 1,024 characters; the synchronous details query schema has no attributes.Built on the jobs; defensive caps of 150 keys and 300 characters per conversation.
Messy keysKey names are whatever each flow author wrote.Automatic volatile-family detection and reversible ignore or fold rules.
AccessRole-based permissions for each user in the Genesys Cloud UI.Read-only OAuth client credentials; analytics:conversationDetail:view required.

Participant Data Analytics complements the native views. Values are stored unredacted for analysis, so the warehouse deserves the same care as call recordings.

The takeaways

  • Every participant data key the organisation writes, catalogued with coverage, values and the days it was active.
  • Plain-English trend verdicts answer whether a flow outcome improved or decayed over time.
  • Schema drift banners expose the day a flow change stopped, or started, writing a key.
  • Reversible key rules fold timestamped key families into one real signal.
  • A gap-aware, read-only warehouse that grows with a small regular harvest.

Participant Data Analytics 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

Sources

  1. View participant data attributeshelp.genesys.cloud
  2. Set Participant Data actionhelp.genesys.cloud
  3. Export view datahelp.genesys.cloud
  4. Interactions viewhelp.genesys.cloud
  5. Conversation detail record jobsdeveloper.genesys.cloud
  6. Conversation detail queriesdeveloper.genesys.cloud
  7. Analytics API explorerdeveloper.genesys.cloud

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