Data Exports
Data Exports gives every ShipHero customer weekly full exports and delta exports every six hours at no additional cost. Accounts that need fresher data can upgrade to the paid tier. Use the data_exports Public API query to find completed runs and download account-scoped Parquet files.
Tables and columns in Data Exports can change over time. ShipHero may add new tables or columns, and occasionally rename or remove them. Every change is listed in the changelog below. Read Handling schema changes before you build an integration on top of these files.
Changelog
Changes to Data Exports, newest first, including tables and columns that are added, renamed, or removed.
2026 October 2nd: Deprecated Recurring Data Exports in favor of Data Exports.
2026 September 28th: Added the migration guide for moving from lakehero_data_export and recurring_data_export to data_exports.
2026 September 25th: Added the paid tier with daily full exports and delta exports every 30 minutes.
2026 September 15th: Expanded access to the data_exports query to all customers.
Tiers
| Tier | Full exports | Delta exports | Availability |
|---|---|---|---|
| Free | One per week | One every six hours | Every account, enabled by default |
| Paid | One per day | One every 30 minutes | Contact ShipHero Support to request the paid tier |
The data_exports query, arguments, and response format are the same on both tiers. Only the export frequency changes.
Export schedule and file format
- Full exports run weekly on the free tier and daily on the paid tier. For an explicit timestamp range, the API returns the first completed full export from each UTC week (free tier) or UTC day (paid tier) touched by that range. The selected run may be earlier than
timestamp_frombecause it represents that week’s or day’s full export. - On the free tier, delta exports use six-hour UTC slots starting at
00:00,06:00,12:00, and18:00. Each export can include changes from up to eight hours before the run. - On the paid tier, delta exports use 30-minute UTC slots starting on the hour and the half hour.
- The API returns the first completed delta export in each matching slot.
- Files use Parquet format with Snappy compression.
- In some cases, a table can contain more than one file. Download every entry in
filesto read the complete table for that run. - Signed URLs expire after 24 hours. Run the query again when a URL expires.
Request arguments
The data_exports query accepts these arguments:
export_typesis required. PassFULL,DELTA, or both.timestamp_fromis an optional inclusive ISO 8601 timestamp.timestamp_tois an optional exclusive ISO 8601 timestamp. It requirestimestamp_from. If omitted whentimestamp_fromis present, it defaults to the current time.modulesoptionally limits the response to specific export modules. When provided, it must contain at least one module.
Omit both timestamps to request the latest eligible export for each requested type. Send both timestamps in UTC.
For an explicit range, timestamp_from must be before the current time. When you provide timestamp_to, it must be later than timestamp_from.
Supported module filters
| Module | GraphQL value |
|---|---|
| Orders | ORDERS |
| Shipments | SHIPMENTS |
| Returns | RETURNS |
| Products | PRODUCTS |
| Inventory | INVENTORY |
| Purchase orders | PURCHASE_ORDERS |
| 3PL | THREEPL |
| Users | USERS |
| Labor | LABOR |
Public API example
The following query requests full and delta exports in a UTC range and limits the results to the Orders and Shipments modules.
query DataExports(
$exportTypes: [DataExportType!]!
$timestampFrom: ISODateTime
$timestampTo: ISODateTime
$modules: [DataExportModuleName!]
) {
data_exports(
export_types: $exportTypes
timestamp_from: $timestampFrom
timestamp_to: $timestampTo
modules: $modules
) {
request_id
data {
full {
run_id
modules {
name
tables {
name
files {
signed_url
size
created_at
}
}
}
}
delta {
run_id
modules {
name
tables {
name
files {
signed_url
size
created_at
}
}
}
}
}
}
}Use these variables with the query:
{
"exportTypes": ["FULL", "DELTA"],
"timestampFrom": "2026-08-10T00:00:00Z",
"timestampTo": "2026-08-11T00:00:00Z",
"modules": ["ORDERS", "SHIPMENTS"]
}To request the latest full export without a timestamp range, send only the required export type:
{
"exportTypes": ["FULL"]
}Reading the response
fullcontains the selected full export runs.deltacontains the selected delta export runs.run_ididentifies the export run.modules[].nameis the lower-case module name, such asorders.tables[].nameidentifies a table in the module.files[]contains every Parquet file part for the table.signed_urlis the temporary file URL.sizeis the file size in bytes.created_atis the file creation time in UTC.
If no data matches the requested range or module filters, the corresponding full or delta list is empty.
If ShipHero cannot find a complete export for a selected period, the query fails instead of returning partial data.
Authentication and access
The query requires the view:data_exports scope. Authenticate with a Developer User created through the third-party developer flow or a regular user account with Data Exports enabled.
Learn more
- Available data tables lists the tables in each module.
- Handling schema changes explains how to build an integration that keeps working when tables and columns change.
- Migrating to
data_exportscovers moving from the deprecatedlakehero_data_exportandrecurring_data_exportqueries.