Cloud Storage Exports
Continuously export traces, observations, and scores from AI Evals to your own AWS S3 bucket on a schedule.
Cloud Storage Exports
Cloud Storage Exports push your project's trace, observation, and score data from AI Evals into an AWS S3 bucket you own — on a repeating schedule. Each run exports only rows that arrived since the previous run, so the feature acts as an incremental, append-only pipeline into your data warehouse or analytics system.
Access via Settings → Exports in your project, then open the Cloud Storage Exports tab.
For one-off, on-demand downloads from a data table, see Batched Exports instead.
How It Works
- You configure one or more export automations in project settings.
- AI Evals polls for due exports and fans out one processing job per automation.
- Each run reads from the AI Evals data store within a time window, compresses the result, and writes Hive-partitioned files to your S3 bucket.
- The run cursor advances only on success, so a failed run retries cleanly from where it left off.
Each export is project-scoped and exports one data type (traces, observations, or scores).
Create an Export
Click Create export on the Cloud Storage Exports settings page. A three-step wizard opens.
Step 1 — Data
| Field | Description |
|---|---|
| Name | A unique label shown in the exports list and audit log. |
| Export type | The data grain: Traces, Observations, or Scores (see Export types). |
| SQL Filter (Optional) | A SQL WHERE-clause body that restricts which rows are exported. Leave empty to export all rows. |
The SQL filter uses the same column vocabulary as the Logs page SQL filter for the selected export type.
Click Continue to validate the filter and advance.
Step 2 — Destination
Choose how AI Evals authenticates to your bucket, then fill in the bucket details.
Authentication
| Method | Description |
|---|---|
| Role assumption (recommended) | AI Evals assumes a cross-account IAM role you create. No credentials are stored. |
| Static access keys | Use an AWS access key/secret. The secret is encrypted at rest and never shown again after saving. |
Additional destination fields:
| Field | Description |
|---|---|
| Bucket | Your S3 bucket name. |
| Prefix | Optional path prefix within the bucket (e.g. ai-evals/exports/prod). |
| Region | AWS region of the bucket (e.g. us-east-1). |
| Format | Output file format: JSON Lines (gzip), CSV, or JSON (see Output format). |
Click Test & continue to verify that AI Evals can write to the destination. A probe object is written and deleted at s3://<bucket>/<prefix>/.testai-probe. The wizard advances automatically on success.
Step 3 — Schedule
| Field | Description |
|---|---|
| Interval | How often the export runs: Every 5 minutes, Every 15 minutes, Every hour, Every 6 hours, or Every day. |
Click Save export to create the export. It becomes active immediately.
IAM Setup for Role Assumption
When using Role assumption, the wizard walks you through three steps.
Step 1 — Create a cross-account IAM role with the displayed trust policy.
The wizard generates a trust policy JSON pre-loaded with the per-export External ID and the AI Evals principal ARN. In the AWS console, go to IAM → Roles → Create role → Custom trust policy and paste it.
The External ID is unique to each export and acts as a confused-deputy guard — the role can only be assumed for this specific export.
Step 2 — Attach the displayed permission policy to the role.
The wizard generates a minimal permission policy scoped to exactly your bucket and prefix. Open the role (IAM → Roles → your role → Permissions → Add permissions → Create inline policy → JSON) and paste it.
Step 3 — Paste the role ARN.
Copy the ARN from the role's summary page (IAM → Roles → your role) and paste it into the Role ARN field, then click Test & continue.
Export Types
| Export type | What it contains | Grain |
|---|---|---|
| Traces | Top-level requests tracked by your application | One row per trace |
| Observations | Individual spans and LLM calls within traces | One row per observation |
| Scores | Evaluation results — LLM-as-judge, human, or custom scores | One row per score |
Output Format
| Format | Description |
|---|---|
| JSON Lines (gzip) | One JSON object per line, gzip-compressed. Best for streaming ingestion, Spark, and fine-tuning datasets. |
| CSV | Comma-separated, gzip-compressed. Nested objects are flattened into dot-notation columns. |
| JSON | A JSON array per file, gzip-compressed. |
All files are gzip-compressed regardless of format.
S3 File Layout
Files land under the following path:
<prefix>/<project-slug>-<projectId>/<type>/date=YYYY-MM-DD/<window-tag>-part-NNNNN.<ext>.gz| Segment | Description |
|---|---|
<prefix> | The prefix you configured (omitted if empty). |
<project-slug>-<projectId> | Human-readable project name slug plus unique project ID. |
<type> | traces, spans, or scores. |
date=YYYY-MM-DD | Hive-style date partition (UTC). Files always fall within a single calendar date. |
<window-tag> | Compact ISO-8601 window range: 20260617T130000Z-20260617T140000Z. Lexicographically sortable. |
part-NNNNN | Part index within the window (files are rolled over at ~256 MB). |
.<ext>.gz | .jsonl.gz, .csv.gz, or .json.gz based on the chosen format. |
Example:
ai-evals/exports/prod/review-agent-proj_abc123/spans/date=2026-06-17/20260617T130000Z-20260617T140000Z-part-00000.jsonl.gzThe date= prefix makes the layout compatible with Hive metastore, AWS Glue, and Spark partition discovery out of the box.
Managing Exports
From the Cloud Storage Exports settings page:
| Action | How |
|---|---|
| View status and run history | Click any row, or click View status in the row actions menu. |
| Edit configuration | Click the row actions menu → Edit. |
| Pause / resume | Click the row actions menu → Pause or Resume. |
| Delete | Click the row actions menu → Delete. |
Export Status
| Status | Meaning |
|---|---|
| Active | The export is enabled and running on schedule. |
| Paused | The export is disabled and will not run until resumed. |
| Error | The most recent run failed. Open the status panel to see the failure reason. |
The status panel shows per-run history including rows exported, bytes written, duration, and any failure reason.
Permissions
| Action | Required Role |
|---|---|
| View exports and run history | All project roles |
| Create / edit / delete exports | Owner or Admin |
| Pause / resume exports | Owner or Admin |
Notes and Limitations
- AWS S3 only. Other cloud storage providers are not supported in the current release.
- One export, one data type. A single export automation covers traces, observations, or scores. Create separate automations to export multiple data types into the same bucket.
- Cursor safety. The export cursor advances only after a successful run. A failed run retries (up to 5 attempts with exponential backoff) and resumes from where it left off — no rows are skipped or duplicated.
Batched Exports
On-demand, one-off exports of traces, human reviews, datasets, dataset runs, and experiment results for offline analysis.
BrowserStack Local & API Registration
Test private or internal endpoints by routing requests through a secure BrowserStack Local tunnel, and register an API with an OpenAPI spec.