Exporting contact center data to a data warehouse
Verified 2026-10-02 · 58 sources · tier 2–3
Amazon Connect can stream contact records to an Amazon Data Firehose delivery stream or a Kinesis data stream, and Genesys Cloud delivers lakehouse data in Parquet format to Amazon S3 1034. NICE CXone stores contact center data in a Snowflake data warehouse that customers access through Data Share, and Webex Contact Center exposes task and agent records through a GraphQL Search API 5056.
Amazon Connect
Streaming contact records and agent events
In the Amazon Connect console, data streaming sends contact records to either an Amazon Data Firehose delivery stream or a Kinesis data stream, chosen per instance 10. Agent events go to a Kinesis data stream, and the procedure offers no Firehose option for them 4. To stream into a Kinesis stream encrypted with a customer managed KMS key, the key policy must allow the instance's service-linked role kms:GenerateDataKey 20. AWS advises granting this before using the key to avoid missing data 20.
Delivery semantics for contact records
Amazon Connect delivers contact records at least once, so a downstream store can receive the same contact record more than once 5. A contact record may also be delivered again when new information arrives after initial delivery, for example when contact attributes are updated with update-contact-attributes 9. WarmTransfer's reading of the sources is that a warehouse loading contact records from Kinesis or Firehose should upsert on ContactId and keep the most recent version instead of appending blindly 7. AWS adds new fields to the contact record data model in backward-compatible changes and recommends that consuming applications ignore unknown new fields 8. A contact record is available for 24 months from the time the associated contact was initiated 6.
Transfers and chained records
When an agent transfers a customer to another agent or queue using quick connects, Amazon Connect creates a new contact record with initiation method TRANSFER 21. The InitialContactId property holds the original identifier of a transferred contact, which allows chained contact records to be grouped into 1 interaction 19. See also Amazon Connect contact records and streams.
Agent event stream behavior
Agent event stream EventType values are STATE_CHANGE, HEART_BEAT, LOGIN and LOGOUT 1. Amazon Connect publishes a HEART_BEAT event every 120 seconds if no other agent event was published during that interval 3. Agent events continue to be published for up to an hour after an agent has logged off 2.
Analytics data lake
Data lake data is refreshed after a record is created, with a small processing delay, and should be available in less than an hour 17. The data lake keeps a rolling 25-month window of accessible data, with the cutoff date updating at 12 AM UTC 11. This window is fixed and cannot be changed, so data needed for longer must be copied to storage the customer controls before it ages out 15. AWS suggests running a scheduled query that writes each table to the customer's own S3 bucket, for example with CTAS or UNLOAD, and then applying S3 Lifecycle rules 14. For retention, the contact_record and contact_statistic_record tables age by disconnect_timestamp, and agent_statistic_record ages by interval_end_time 13.
Data lake tables are shared by adding a data share to a target (consumer) AWS account, which can be the account that hosts the instance or a different account 16. From the CLI, tables are associated to an account with batch-associate-analytics-data-set, where each DataSetIds value is a table name such as contact_record 12.
Historical metrics API
The historical metrics API retrieves historical metric data for only the last 3 months, so it is not a long-range export mechanism 18.
Genesys Cloud
Synchronous and async conversation detail queries
Since 16 December 2020, the synchronous Analytics Conversation Detail endpoint accepts interval start dates only up to 558 days in the past, including today 42. For historical queries, Genesys recommends the async endpoint /api/v2/analytics/conversations/details/jobs instead of the synchronous detail query 23. For recent conversation data, Genesys recommends using the notifications service where possible rather than polling the detail query 38.
Async jobs are created with POST /api/v2/analytics/conversations/details/jobs, and job status is read with GET /api/v2/analytics/conversations/details/jobs/{jobId} 29. Before submitting a job, GET /api/v2/analytics/conversations/details/jobs/availability returns the date and time up to which the analytics datalake is available 28. Results are retrieved a page at a time from GET /api/v2/analytics/conversations/details/jobs/{jobId}/results, and each response carries an optional cursor for resuming 30. A job response carries dataAvailabilityDate, which means data is available up to at least that datetime, and conversations after it may be missing from the result 25.
The interval of an async job selects all conversations that had activity during the interval, not only those that started in it 24. Setting startOfDayIntervalMatching restricts the result to conversations that started after the beginning of the interval start date (UTC) 41.
Conversation detail model
A conversation contains a list of participants, each with a participantId and a purpose and, for users, a userId 35. Each participant contains a list of sessions, and each session has a sessionId and a mediaType 37. Each session contains a list of segments and a list of session metrics, giving a conversation > participant > session > segment hierarchy 36. See also Cross-platform CDR normalization model.
Other analytics exports
User (agent) detail data has its own async export, POST /api/v2/analytics/users/details/jobs, separate from conversation detail jobs 43. POST /api/v2/analytics/dataextraction/downloads/bulk returns download URLs for analytics data warehouse files 26.
Data lakehouse export
The lakehouse export path delivers structured data in Parquet format to Amazon S3 approximately every 5 to 10 minutes 34. Lakehouse extraction has a 72-hour extraction window, with short-term snapshots covering up to the latest 3 days of conversation data 31. We infer that an export pipeline down for longer than that window likely needs to backfill the gap from async conversation detail jobs 22. The export is enabled under Menu > Analytics > Analytics Settings > Lakehouse Settings tab > Enable, after the service order and permissions are in place 32.
Recordings and events
The recording bulk actions integration exports recordings of any media type, screen recordings, attachments and metadata to a customer bucket 39. This recording bulk export runs either automatically through policies or on demand through the Recording Bulk Job API, and it can export archived recordings without restoring them first 40. The Amazon EventBridge integration sends events from the topics a customer subscribes to into AWS EventBridge, where they appear as JSON 27.
NICE CXone Data Share
Data Share gives customers access to CXone data in Snowflake or for pulling into an external data store 50. It requires a separate licence enabled through the customer's NICE account representative 44.
| Snowflake account | Hosting | Refresh |
|---|---|---|
| Customer-owned | AWS, Azure or Google Cloud in any region 47 | Sub-database replication every minute, data available after a lag of up to 1 hour 48 |
| NICE-provided | AWS or Azure in the same region as the CXone instance 45 | Managed by NICE on a schedule the customer cannot configure 46 |
A customer-owned Snowflake account can hold up to 25 customisable CXone data shares with selectable secure views, while a NICE-provided account gets 1 share per system without view selection 49.
Webex Contact Center
Search API
The Search API is a GraphQL interface whose taskDetails query operates on Customer Session Records (CSRs) and Customer Activity Records (CARs) 56. Its agentSession query operates on Agent Session Records (ASRs) and Agent Activity Records (AARs) 53. See also The Analyzer record model.
When fetching raw AAR or CAR data, the from-to query span cannot exceed 30 days 55. Raw taskDetails and agentSession data is returned 250 records per page, with at most 100,000 taskDetails records retrievable by pagination, and aggregation queries return 1,000 per page 54. A taskLegDetails query over Call Leg Records (CLRs) is labelled Queue Based Reporting Early Access and pages 500 raw records at a time up to 100,000 57.
Recordings and transcripts
Recordings and email transcripts are retrieved through the List Captures API, which requires the cjp:config_read or cjp-analyzer:read scope 52. A webhook subscription for the capture:available event notifies a client when a new recording is ready, with a payload containing the taskId and a link to the downloadable recording 51.
Comparing freshness across platforms
WarmTransfer's reading of the sources is that warehouse exports fall into roughly 3 freshness tiers: event streams for seconds-scale data (Connect Kinesis, Genesys EventBridge), managed batch shares at minutes up to an hour (Genesys Parquet every 5-10 minutes, CXone Data Share, Connect data lake), and query APIs whose freshness the documentation read does not quantify (Genesys detail jobs, Webex Search) 58.
Applicability
Applies to: Amazon Web Services Amazon Connect, Genesys Cloud, NICE CXone Mpower, and Cisco Webex Contact Center. Deployments: multi-tenant. Sources checked 2026-10-02. The 558-day limit on the Genesys Cloud synchronous detail endpoint applies since 16 December 2020 42. As of 2026-10-02, Genesys documents the Parquet export path as available now and a fuller lakehouse platform with Apache Iceberg tables and direct SQL querying as coming in the future 33. The Webex Contact Center taskLegDetails query is labelled Queue Based Reporting Early Access 57.
What remains uncertain
The overall lookback period of the Webex Contact Center Search API, its query span outside raw data fetches, its required scopes and its rate limits are not covered by the sources below. The documented 30-day span applies when fetching raw AAR or CAR data 55. WarmTransfer's reading of the sources is that the documentation read does not quantify the data freshness of Webex Search or of Genesys detail jobs 58. Concurrent job limits, result expiry, page size and maximum interval for Genesys Cloud async conversation detail jobs are not covered by the sources below. The typical lag of dataAvailabilityDate is not covered by the sources below. A job response's dataAvailabilityDate means data is available up to at least that datetime 25. The delivery semantics and the list of supported topics for the Genesys Cloud Amazon EventBridge integration are not covered by the sources below. Webex Contact Center webhook event types for tasks and agents as a streaming export path are not covered by the sources below. A webhook subscription for the capture:available event notifies a client when a new recording is ready 51. Bulk data export options, such as data feeds or a data lake product, for vendors not documented in the claims above are not covered by the sources below. The availability date of the Genesys lakehouse platform with Apache Iceberg tables and direct SQL querying is not covered by the sources below. Genesys describes that platform only as coming in the future 33. Full Amazon Connect data lake table schemas and integration options that avoid a separate ETL pipeline are not covered by the sources below. The claims document only table names and their age timestamp columns 13. NICE CXone reporting and data extraction APIs other than Data Share are not covered by the sources below.
See also
Related to
- Amazon Connect contact records and streams — Amazon Connect contact record and agent event streaming; and the analytics data lake; are the AWS export paths covered here; that topic holds the deeper Connect data model.
- Contact center KPI definitions and calculation — Warehoused records are the input for KPI calculation outside vendor reporting.
- Cross-platform CDR normalization model — Once exported; vendor records (Connect contact records; Genesys conversation details; Webex CSR/CAR; CXone Data Share views) need normalising into a common interaction and agent-session model.
- Troubleshooting Webex Contact Center reporting discrepancies — Search API raw-record exports are a common source of mismatches against Analyzer reports.
Sources
- 1Amazon Connect agent event stream EventType values are STATE_CHANGE, HEART_BEAT, LOGIN and LOGOUT.Agent event streams data model in Connect Customer · AgentEvent, EventType · Checked 2026-10-02
- 2Amazon Connect agent events continue to be published for up to an hour after an agent has logged off.Agent event streams data model in Connect Customer · Introduction, Note under HEART_BEAT · Checked 2026-10-02
- 3Amazon Connect publishes an agent HEART_BEAT event every 120 seconds if no other agent event was published during that interval.Agent event streams data model in Connect Customer · Introduction, HEART_BEAT bullet · Checked 2026-10-02
- 4In the Amazon Connect data streaming settings, agent events are sent to a Kinesis data stream; the procedure offers no Firehose option for agent events.Enable data streaming for your Connect Customer instance · To enable data streaming for your instance, step 6 (Agent Events) · Checked 2026-10-02
- 5Amazon Connect delivers contact records at least once, so a downstream store can receive the same contact record more than once.Data model for Connect Customer contact records · Important things to know, second bullet · Checked 2026-10-02
- 6An Amazon Connect contact record is available for 24 months from the time the associated contact was initiated.Data model for Connect Customer contact records · Important things to know, second bullet, final sentence · Checked 2026-10-02
- 7Because Amazon Connect contact records are delivered at least once and are redelivered when updated, a warehouse loading them from Kinesis or Firehose should upsert on ContactId and keep the most recent version instead of appending blindly.inferredData model for Connect Customer contact records · Important things to know, second bullet (premise) · Checked 2026-10-02
- 8AWS adds new fields to the Amazon Connect contact record data model in backward-compatible changes and recommends that consuming applications ignore unknown new fields.Data model for Connect Customer contact records · Important things to know, first bullet · Checked 2026-10-02
- 9Amazon Connect may deliver a contact record again when new information arrives after initial delivery; for example, updating contact attributes with update-contact-attributes causes a new contact record to be delivered.Data model for Connect Customer contact records · Important things to know, second bullet · Checked 2026-10-02
- 10Amazon Connect data streaming can send contact records either to an Amazon Data Firehose delivery stream or to a Kinesis data stream, chosen per instance in the console.Enable data streaming for your Connect Customer instance · To enable data streaming for your instance, step 5 (Contact records) · Checked 2026-10-02
- 11The Amazon Connect analytics data lake keeps a rolling 25-month window of accessible data, with the cutoff date updating at 12 AM UTC.Data retention in the Connect Customer analytics data lake · Data retention in the Connect Customer analytics data lake, first paragraph · Checked 2026-10-02
- 12From the CLI, Amazon Connect data lake tables are associated to an account with batch-associate-analytics-data-set, where each DataSetIds value is a table name such as contact_record.Access Connect Customer data lake · Option 2: Use CLI or CloudShell, steps 1-3 · Checked 2026-10-02
- 13For data lake retention, Amazon Connect ages the contact_record and contact_statistic_record tables by disconnect_timestamp, and agent_statistic_record by interval_end_time.Data retention in the Connect Customer analytics data lake · Table name / Age timestamp column table · Checked 2026-10-02
- 14AWS suggests keeping Amazon Connect data lake data beyond the window by running a scheduled query that writes each table to the customer's own S3 bucket, for example with CTAS or UNLOAD, and then applying S3 Lifecycle rules.Data retention in the Connect Customer analytics data lake · Retaining data past the 25-month window, second paragraph · Checked 2026-10-02
- 15The Amazon Connect data lake's 25-month retention window is fixed and cannot be changed; data needed for longer must be copied to storage the customer controls before it ages out.Data retention in the Connect Customer analytics data lake · Retaining data past the 25-month window · Checked 2026-10-02
- 17Amazon Connect analytics data lake data is refreshed after a record is created, with a small processing delay, and should be available in less than an hour.Connect Customer data lake · Connect Customer data lake, first paragraph · Checked 2026-10-02
- 18The Amazon Connect GetMetricDataV2 API retrieves historical metric data for only the last 3 months, so it is not a long-range export mechanism.GetMetricDataV2 - Amazon Connect API Reference · GetMetricDataV2, opening description · Checked 2026-10-02
- 19The Amazon Connect InitialContactId property holds the original identifier of a contact that was transferred, which allows chained contact records to be grouped into one interaction.Agent event streams data model in Connect Customer · Contact object, InitialContactId · Checked 2026-10-02
- 20To stream Amazon Connect data into a Kinesis stream encrypted with a customer managed KMS key, the key policy must allow the instance's service-linked role kms:GenerateDataKey, and AWS advises doing this before using the key to avoid missing data.Enable data streaming for your Connect Customer instance · Use server-side encryption for the Kinesis stream; Step 2: Construct a policy statement · Checked 2026-10-02
- 21In Amazon Connect, when an agent transfers a customer to another agent or queue using quick connects, a new contact record is created with initiation method TRANSFER.Agent event streams data model in Connect Customer · Contact object, InitiationMethod, TRANSFER value · Checked 2026-10-02
- 22Because Genesys lakehouse extraction only covers a 72-hour window, an export pipeline that is down for longer than that likely needs to backfill the gap from async conversation detail jobs.inferredGenesys Cloud data lakehouse · Data retention / extraction window section (premise) · Checked 2026-10-02
- 23Genesys recommends the Analytics Conversation Detail async endpoint (/api/v2/analytics/conversations/details/jobs) instead of the synchronous detail query for historical queries.Analytics Conversation Detail Endpoint API query interval change · Announcement body, recommendation paragraph · Checked 2026-10-02
- 24For a Genesys Cloud async conversation detail job, the interval selects all conversations that had activity during the interval, not only those that started in it.platform-client-sdk-python: AsyncConversationQuery · interval property · Checked 2026-10-02
- 25A Genesys Cloud async conversation detail job response carries dataAvailabilityDate, meaning data is available up to at least that datetime; conversations after it may be missing from the result.platform-client-sdk-python: AnalyticsConversationAsyncQueryResponse · data_availability_date property · Checked 2026-10-02
- 26Genesys Cloud provides POST /api/v2/analytics/dataextraction/downloads/bulk, which returns download URLs for analytics data warehouse files.platform-client-sdk-python: AnalyticsApi · post_analytics_dataextraction_downloads_bulk · Checked 2026-10-02
- 27The Genesys Cloud Amazon EventBridge integration sends events from the topics a customer subscribes to into AWS EventBridge, where they appear as JSON.About the Amazon EventBridge integration · Overview · Checked 2026-10-02
- 28Genesys Cloud exposes GET /api/v2/analytics/conversations/details/jobs/availability to look up the date and time up to which the analytics datalake is available, before submitting a job.platform-client-sdk-python: AnalyticsApi · get_analytics_conversations_details_jobs_availability · Checked 2026-10-02
- 29Genesys Cloud async conversation detail jobs are created with POST /api/v2/analytics/conversations/details/jobs, and job status is read with GET /api/v2/analytics/conversations/details/jobs/{jobId}.platform-client-sdk-python: AnalyticsApi · post_analytics_conversations_details_jobs; get_analytics_conversations_details_job · Checked 2026-10-02
- 30Results of a Genesys Cloud async conversation detail job are retrieved a page at a time from GET /api/v2/analytics/conversations/details/jobs/{jobId}/results, and each response carries an optional cursor for resuming.platform-client-sdk-python: AnalyticsApi · get_analytics_conversations_details_job_results · Checked 2026-10-02
- 31Genesys Cloud lakehouse data extraction has a 72-hour extraction window, with short-term snapshots covering up to the latest three days of conversation data.Genesys Cloud data lakehouse · Data retention / extraction window section · Checked 2026-10-02
- 32The Genesys Cloud lakehouse export is enabled in the admin UI under Menu > Analytics > Analytics Settings > Lakehouse Settings tab > Enable, after the service order and permissions are in place.Genesys Cloud data lakehouse · Enabling the export path section · Checked 2026-10-02
- 33As of 2026-10-02, Genesys documents the Parquet export path as available now and a fuller lakehouse platform with Apache Iceberg tables and direct SQL querying as coming in the future.Genesys Cloud data lakehouse · Licensing and status / future platform section · Checked 2026-10-02
- 34The Genesys Cloud data lakehouse export path delivers structured data in Parquet format to Amazon S3 approximately every 5 to 10 minutes.Genesys Cloud data lakehouse · Format and delivery section · Checked 2026-10-02
- 35In the Genesys Cloud analytics conversation detail model, a conversation contains a list of participants, each with a participantId and a purpose and, for users, a userId.platform-client-sdk-python: AnalyticsParticipantWithoutAttributes · participant_id, purpose, user_id properties · Checked 2026-10-02
- 36Each Genesys Cloud analytics session contains a list of segments and a list of session metrics, giving a conversation > participant > session > segment hierarchy.platform-client-sdk-python: AnalyticsSession · segments and metrics properties · Checked 2026-10-02
- 37Each Genesys Cloud analytics participant contains a list of sessions, and each session has a sessionId and a mediaType.platform-client-sdk-python: AnalyticsParticipantWithoutAttributes · sessions property · Checked 2026-10-02
- 38For recent Genesys Cloud conversation data, Genesys recommends using the notifications service where possible rather than polling the detail query.Analytics Conversation Detail Endpoint API query interval change · Announcement body, recommendation paragraph · Checked 2026-10-02
- 39The Genesys Cloud AWS S3 recording bulk actions integration exports recordings of any media type, screen recordings, attachments and metadata to a customer S3 bucket.About the AWS S3 recording bulk actions integration · Page introduction · Checked 2026-10-02
- 40The Genesys Cloud S3 recording bulk export runs either automatically through policies or on demand through the Recording Bulk Job API, and it can export archived recordings without restoring them first.About the AWS S3 recording bulk actions integration · Page introduction and capability list · Checked 2026-10-02
- 41A Genesys Cloud async conversation query can set startOfDayIntervalMatching to include only conversations that started after the beginning of the interval start date (UTC).platform-client-sdk-python: AsyncConversationQuery · start_of_day_interval_matching property · Checked 2026-10-02
- 42Since 16 December 2020, the Genesys Cloud synchronous Analytics Conversation Detail endpoint accepts interval start dates only up to 558 days in the past, including today.Analytics Conversation Detail Endpoint API query interval change · Announcement body, change description · Checked 2026-10-02
- 43Genesys Cloud user (agent) detail data has its own async export, POST /api/v2/analytics/users/details/jobs, separate from conversation detail jobs.platform-client-sdk-python: AnalyticsApi · post_analytics_users_details_jobs · Checked 2026-10-02
- 51A Webex Contact Center webhook subscription for the capture:available event notifies a client when a new recording is ready, with a payload containing the taskId and a link to the downloadable recording.The A-Z of Webex Contact Center APIs: Capture APIs · Captures webhook section · Checked 2026-10-02
- 52Webex Contact Center recordings and email transcripts are retrieved through the List Captures API, which requires the cjp:config_read or cjp-analyzer:read scope.The A-Z of Webex Contact Center APIs: Capture APIs · List Captures section · Checked 2026-10-02
- 53The Webex Contact Center Search API agentSession query operates on Agent Session Records (ASRs) and Agent Activity Records (AARs).GraphQL sample README (reporting-samples/graphql-sample) · agentSession query section · Checked 2026-10-02
- 54The Webex Contact Center Search API returns raw taskDetails and agentSession data 250 records per page, with at most 100,000 taskDetails records retrievable by pagination; aggregation queries return 1,000 per page.GraphQL sample README (reporting-samples/graphql-sample) · Pagination Support table · Checked 2026-10-02
- 55When fetching raw AAR or CAR data through the Webex Contact Center Search API, the from-to query span cannot exceed 30 days.GraphQL sample README (reporting-samples/graphql-sample) · Fetching Raw Data section · Checked 2026-10-02
- 56The Webex Contact Center Search API is a GraphQL interface whose taskDetails query operates on Customer Session Records (CSRs) and Customer Activity Records (CARs).GraphQL sample README (reporting-samples/graphql-sample) · taskDetails query section · Checked 2026-10-02
- 57The Webex Contact Center Search API has a taskLegDetails query over Call Leg Records (CLRs), labelled Queue Based Reporting Early Access, paging 500 raw records at a time up to 100,000.GraphQL sample README (reporting-samples/graphql-sample) · TaskLegDetails Query section; Pagination Support table · Checked 2026-10-02
- 58Across the platforms reviewed, warehouse exports fall into roughly three freshness tiers: event streams for seconds-scale data (Connect Kinesis, Genesys EventBridge), managed batch shares at minutes up to an hour (Genesys Parquet every 5-10 minutes, CXone Data Share, Connect data lake), and query APIs whose freshness the documentation read does not quantify (Genesys detail jobs, Webex Search).inferredConnect Customer data lake · Connect Customer data lake, first paragraph (one of several premises) · Checked 2026-10-02
Documents
About the Amazon EventBridge integration
About the AWS S3 recording bulk actions integration
Access Connect Customer data lake
Agent event streams data model in Connect Customer
Analytics Conversation Detail Endpoint API query interval change
Connect Customer data lake
Data model for Connect Customer contact records
Data retention in the Connect Customer analytics data lake
Data Share
Enable data streaming for your Connect Customer instance
Genesys Cloud data lakehouse
GetMetricDataV2 - Amazon Connect API Reference
The A-Z of Webex Contact Center APIs: Capture APIs
GraphQL sample README (reporting-samples/graphql-sample)
platform-client-sdk-python: AnalyticsApi
platform-client-sdk-python: AnalyticsConversationAsyncQueryResponse
platform-client-sdk-python: AnalyticsParticipantWithoutAttributes
platform-client-sdk-python: AnalyticsSession
platform-client-sdk-python: AsyncConversationQuery
Cite this page
APA
WarmTransfer. (2026, October 2). Exporting contact center data to a data warehouse. WarmTransfer. https://warmtransfer.net/knowledge/ccaas-data-export-warehousing
BibTeX
@misc{warmtransfer-ccaas-data-export-warehousing,
title = {Exporting contact center data to a data warehouse},
author = {{WarmTransfer}},
year = {2026},
url = {https://warmtransfer.net/knowledge/ccaas-data-export-warehousing},
note = {Verified 2026-10-02}
}