Blob Storage Export
Blob storage export writes a project's trace data to your own bucket or container on a schedule, for analytics, warehousing or backup.
| Options | |
|---|---|
| Destinations | AWS S3, S3 Compatible Storage (for example MinIO), Azure Blob Storage |
| Schedule | Hourly, Daily or Weekly |
| File types | JSONL, CSV, JSON |
| Export modes | Full history, Today, Custom date |
| Datasets | Traces, observations, scores, and a joined Standardized Export |
Needs the scheduled-blob-exports entitlement: included in the Team and
Enterprise cloud plans and every self-hosted plan. Viewing the settings needs
read access to Integrations (notification and analytics integrations),
and changing them needs write access (the Owner role has both). See
Members & Roles.
Set up the export
Open the settings
Go to Project Settings > Integrations and open the Blob Storage card.
Choose the destination
| Field | Notes |
|---|---|
| Storage Provider | AWS S3, S3 Compatible Storage or Azure Blob Storage |
| Bucket Name / Container Name | Where files are written |
| Endpoint URL | S3-compatible and Azure only. For Azure, https://<account>.blob.core.windows.net. |
| Region | For S3, for example us-east-1 |
| Force Path Style | Turn on for MinIO and some other S3-compatible providers |
| Access Key ID / Secret Access Key | For S3 and S3-compatible storage. On self-hosted deployments with AWS S3, leave both empty to use the host's credentials, such as an IAM role. |
| Authentication Method | Azure only. Shared Key (Account Key) uses the storage account name and key. Service Principal (Entra ID App) uses Tenant ID (Directory ID), Client ID (Application ID) and Client Secret. Grant the app Storage Blob Data Contributor on the container. |
| Export Prefix | Optional path inside the bucket. End it with /, for example ants-exports/. |
Credentials are encrypted at rest. Changing the destination asks for step-up verification when it is enabled.
Choose what and when
| Field | Notes |
|---|---|
| Export Frequency | Hourly, Daily or Weekly |
| File Type | JSONL, CSV or JSON |
| Export Mode | Full history exports everything in the project. Today starts from the day you set it up. Custom date starts from Export Start Date. |
| Filter Attributes to Export | Limits the Standardized Export to the attributes you pick in Attributes to Export. The raw datasets always include every column. |
| Enabled | Turns the schedule on or off |
Save and validate
Select Save, then Validate. Validate uploads a small test file to confirm that the credentials and permissions work.
What lands in your storage
Each export writes four datasets, each in its own folder:
| Folder | Contents |
|---|---|
traces | One row per trace |
observations | One row per observation (model calls, tool calls, spans) |
scores | One row per score |
standardized | One row per observation with its trace fields and scores attached, ready for analysis without joins |
File names
A scheduled file is named after the end of the interval it covers, in UTC, with colons replaced by dashes:
On an hourly schedule, that file covers 13:00 to 14:00 UTC. Daily and weekly schedules write one file per UTC day, so a weekly run writes up to seven files per dataset. A day with no data writes no file.
Files are replaced, never appended. A later export of the same interval (a retry or a Re-export All) overwrites the file under the same name. Load each file as a replacement for its interval, and detect changes by last-modified time, not by file name.
Run manifests
Every run also writes one manifest at the project root:
The manifest lists the run's status, triggeredBy (schedule, manual or
reexport), the window it covered, exportFrequency, totals (file count
and rows per dataset), the files written per dataset, any error, and an
entry per interval in intervals. A failed run still gets a manifest. To load
incrementally, pick up manifests you have not processed, check status, and
load the listed files.
Timing
A scheduled export stops 30 minutes behind the clock and exports only complete intervals. Observations can arrive a little after their trace, and the delay lets a trace settle before its interval is written. For example, on an hourly schedule the 13:00 to 14:00 file is written after 14:30 UTC.
A large backlog, such as a first Full history export, is caught up in daily chunks within one run.
Run Now and Re-export All
| Action | What it does |
|---|---|
| Run Now | Exports the configured range (from the export mode's start) up to about five minutes ago, in daily chunks. Files are named after the time the run started (2026-09-26T00-31-00.jsonl, then .part-00001.jsonl and so on), so they sit next to the scheduled files instead of replacing them. Each click writes a new full copy. It does not move the schedule. |
| Re-export All | Rewrites the whole configured range with the current attribute selection, using the scheduled file names, so existing files are replaced in place. Use it after changing Attributes to Export so all files share one schema. |
The runs table shows each run's Status (queued, running, success, no data, partial failure or failed), Triggered by, Date range, Run time and Failure reason.
Choosing a file type
All three formats carry the same data.
- JSONL (one JSON object per line) is the safest choice when a tool reads a whole folder as one table.
- CSV repeats the header row in every file. Check that your reader skips the header in each file, not only the first.
- JSON writes one array per file.
When reading a dataset folder, match on your data file extension so manifests at the project root are not read as rows.