Bulk-export your workspace's conversations as CSV or JSON for retention, analytics, or compliance handover. Admin and Owner roles only.
/app/conversation-exports with
format (csv or json) and optional
filters (agent_id, from,
to).ConversationExport row is inserted with
status=pending and
BuildConversationExportJob is queued.storage/app/private/exports/conversations/{uuid}.{format}.status=ready, the file size +
row count are stamped, and expires_at is set 7
days out./app/conversation-exports/{id}/download. The
endpoint streams the file with the right MIME and rejects
the request if the export is not ready, expired, or belongs
to another workspace.
Each row carries the conversation's lifecycle metadata, the
visitor's lead profile (email / phone / name / status), and
every message in the conversation. CSV format flattens the
transcript to first_user_message +
last_assistant_message for spreadsheet use; JSON
keeps the full message array per conversation.
Exports expire 7 days after they're created. The
conversations:prune-exports Artisan command runs
nightly at 02:15 UTC and deletes both the DB row and the file.
Re-trigger the export if you need it again after expiry.
The build job only reads conversations whose
agent_id belongs to the requesting workspace.
Download requests verify workspace_id match before
streaming. A leaked export id is harmless without an authed
session in the right workspace.
The job has a 600-second hard timeout. Workspaces with very large conversation volume should narrow with date / agent filters; we'll lift the timeout if buyers ask. The export file is held on the application's local private disk; very large files may push the disk usage warning thresholds on shared hosts.