Skip to main content
Observe exports your data in open formats, so you can keep it in your own platform and combine it with your other sources. Table exports give you the complete data model day by day. Time-series exports give you the KPI series behind the console. For enterprise delivery requirements, discuss custom exports with Corbado.

1. Table exports

Table exports write the configured tables as Apache Parquet files, compressed with Zstandard, once per day.
  • Schedule: each export covers one day in the project’s time zone and is written after 01:00 local time on the following day.
  • Completeness: an export appears in the list only after all its files are written. Large tables are split into several files.
  • File metadata: every file comes with its size, checksum and creation time. If an export is regenerated, file names stay the same and the creation time changes, so use the creation time to detect a reload.
  • Retention: completed exports stay available for 365 days. One list request covers up to 92 days.
  • Activation: table exports are enabled per project. Contact us to enable them.

Existing export files

Older ob_flow and ob_email_link_sub_flow files can contain duplicate IDs from sessions with multiple device snapshots. Newly generated files select one snapshot per row. Existing files are not rewritten automatically: deduplicate by id, or ask Corbado to regenerate the affected table and dates. A regenerated file reflects the current classification state, so check its creation time before reloading it.

List and download with the CLI

--dir keeps the <table>/<file>.parquet layout, which makes loading per table straightforward.

List and download with the API

The response lists exports by table and date, each with its files. Request a download link per file with GET /observe/tableExports/{filename}/downloadLink, URL-encoding the slashes in the file name. Links are short-lived, so request each link directly before downloading the file. Both paths need a key with the table exports read permission.

2. Time-series exports

Time-series exports write the pre-calculated KPI series of the console as files. Start them in the console under Observe → Settings → Exports or with POST /observe/timeSeries/export.
  • Formats: CSV or Apache Parquet, one file per series, up to 20 series per request.
  • Dimensions: exclude dimensions you do not need. Their values are summed, so totals stay correct.
  • Ranges: hourly data for up to 92 days, daily data for up to 731 days and monthly data without a limit.
  • Processing: the API generates files while streaming newline-delimited JSON progress over the open HTTP request. Keep the connection open until a completed or failed event arrives. Disconnecting can cancel generation. A project can run two exports at the same time.
  • Availability: files can be downloaded for 7 days through short-lived links.
List exports with GET /observe/timeSeries/exports and check one with GET /observe/timeSeries/exports/{exportID}. After completion, request a link for each file with GET /observe/timeSeries/exports/{exportID}/files/{fileName}/downloadLink. After an interrupted request, check the export status before starting another export.

Interpret the files

New exports include a columnGuide captured when the export is created, including the meanings of the series-specific dimensions and configured custom-tag names. The console’s export details show this guide; older exports may omit it. Read columns by name rather than position. Time-series exports now include customTag1 through customTag20; the ob_time_series_data table export includes the corresponding custom_tag_1 through custom_tag_20 and ID columns. Additional tag columns shift later column positions. Unconfigured slots are empty or null, and previously generated files keep their original schema. Each row represents one bucket and retained dimension combination. Sum value for totals instead of counting rows. Zero-value rows are omitted; missing dimensions are empty in CSV and null in Parquet, which does not mean zero or non-engaged. time is the UTC bucket start; timeLocal has no offset and uses the export’s recorded timezone. Use time for joins and sorting because local times can repeat at the end of daylight saving time. API range boundaries use UTC with an exclusive end; the console converts selected local dates for you.

3. Per-user export and deletion

To answer a data subject request, export or delete the Observe data of individual users by the user ID your integration sends. See User data export and deletion for permissions, the external-ID mapping and the request-to-completion workflow. noData means the job found no matching data at execution, including on a repeated deletion. Older completed jobs may omit the result. Per-user exports include session password-manager detections with the manager name and earliest reported client time. Deletion removes those session detections and the user-to-client-environment mapping. Accumulated client-environment sightings remain as browser-level records after that user link is removed and are not included in the per-user export. Deletion covers the user data stored by Observe. Copies you have already loaded into your own platform need their own deletion step. Use the current stored form of the external user ID for per-user requests, including any policy-driven hashing. For joins with your own records, reproduce the same hashes or keep a mapping. Policy-driven deletion of account references is separate from a user-data deletion request: retained journeys can remain after their identifier or user ID lookup paths have been removed.

Connect your data platform

Load exports into your warehouse or lakehouse.

Data model

Tables, keys and time columns.