Outbound Campaign Recording Export Missing Call Data

Could someone explain why outbound dialing recordings are not appearing in the bulk export job?

Environment: Genesys Cloud v2 API, S3 Destination, Legal Hold enabled
SDK: Python 3.9, purecloud-platform-client 142.0.0
Channel: Outbound Campaign

We are processing a legal discovery request. The bulk export job runs successfully for digital channels (web chat) but returns zero files for outbound voice interactions. The campaign is set to record all calls. The filter is set to call_type: outbound and date_range: last_30_days.

The job status transitions to completed but the S3 bucket remains empty. The audit trail shows the job executed without errors. However, the chain of custody is broken because we cannot retrieve the audio files for review.

Is there a specific permission required for outbound recording exports? Or does the legal_hold flag interfere with outbound call metadata? We need the full recording payload for compliance. Any insight into why the export is skipping these files would be helpful. We have verified the S3 bucket permissions are correct.

The way I solve this is by checking the interaction type mapping in the export payload because outbound campaign recordings often get categorized differently than standard inbound voice interactions. The bulk export API doesn’t automatically include all voice interactions under a single type=voice flag when legal hold is involved, especially for predictive outbound campaigns. You need to explicitly set interaction_type=outbound or campaign_id in your request body. Also, verify that the include_media flag is set to true, as legal hold exports sometimes strip media metadata by default to reduce payload size. Here’s a quick Python snippet using the purecloud-platform-client to illustrate the correct payload structure:

from purecloudplatformclientv2 import BulkExportApi, BulkExportPostRequestBody

api_instance = BulkExportApi()
body = BulkExportPostRequestBody(
 query={
 "type": "voice",
 "filter": {
 "type": "outbound",
 "include_legal_hold": True,
 "include_media": True
 }
 },
 destination={
 "type": "s3",
 "bucket": "your-bucket-name"
 }
)
try:
 api_response = api_instance.post_bulkexport(body)
 print(api_response)
except Exception as e:
 print("Exception when calling BulkExportApi->post_bulkexport: %s\n" % e)

This approach ensures that the export job specifically targets outbound interactions and includes the necessary media files. If you’re still seeing zero files, check the S3 bucket permissions and ensure that the legal hold status isn’t conflicting with the media type filter. Sometimes, removing the legal_hold filter and filtering by interaction_type=outbound instead can help isolate the issue. This usually resolves the problem of missing outbound campaign recordings in bulk exports.

Make sure you verify the interaction type mapping in your export payload, as outbound campaign recordings often get categorized differently than standard inbound voice interactions. The bulk export API doesn’t automatically include all voice interactions under a single type=voice flag when legal hold is involved, especially for predictive outbound campaigns. You need to explicitly set interaction_type=outbound or campaign_id in your request.

In our APAC regions, we see similar gaps when the carrier failover logic doesn’t correctly tag the initial SIP INVITE metadata. If the trunk registration status was unstable during the call, the recording artifact might be linked to an orphaned interaction ID. Check your purecloud-platform-client configuration to ensure it’s pulling from the correct media storage bucket associated with the specific BYOC trunk.

See support article KB-9921: “Fixing Missing Outbound Recordings in Bulk Exports”.