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.
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 your Customer Success Manager to enable it |
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.
Available data tables
Data Exports can include the following tables. The API returns the tables present in the selected run after applying any module filters.
Orders
orders, main order records with customer information, totals, and statusline_items, SKUs and quantities for each orderorder_tags, tags applied to orders_order_history, order updates and status changes
Shipments
shipments, shipment records with tracking and carrier datashipped_line_items, line items included in each shipmentshipping_labels, metadata for generated shipping labelsshipment_attributes, shipment-level key and value attributesshipped_line_item_lots, links between shipped items and inventory lotsshipped_items, physical items included in shipments
Returns
returns, return authorization recordsrma_labels, shipping labels associated with returnsreturn_items, items included in each return
Products
products, product records and attributesproduct_tags, tags applied to productsproduct_images2, product image URLs and display orderlots, lot tracking informationwarehouse_products, warehouse-specific product datakitting_map, kit and bundle componentsassembly_map, assembled products and their component quantitiesproduct_cases, case pack configurations
Inventory
bins, warehouse storage binsitem_bins, product quantities by binlocation_change_log, inventory movements between binslocation_types, location classificationscycle_count_v2_batches, cycle count batchescycle_count_v2_batch_items, items in cycle count batchescycle_count_v2_batch_discrepancies, discrepancies found during cycle counts
Purchase orders
purchase_orders, purchase order recordspurchase_order_line_items, items in each purchase ordervendors, supplier recordsproducts_vendors, product and vendor relationships
3PL metadata
warehouse_to_customers, relationships between 3PL warehouses and customers
Users
users, user accounts, roles, and permissions
Labor
activities, labor activities performed by WorkforceHero workersalerts, alerts generated during worker activitiesjobs, warehouse job definitionsshifts_management, warehouse shift definitionsspecial_projects, non-standard warehouse projectswarehouses, warehouses enabled for the Labor moduleworkers, WorkforceHero worker records
Additional tables may be added over time.
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.
Migrating to data_exports
ShipHero provides three GraphQL queries for Data Exports:
| Query | Status | Response |
|---|---|---|
lakehero_data_export | Deprecated | Flat file list |
recurring_data_export | Deprecated | Flat file list |
data_exports | Recommended | Files grouped by type, run, module, and table |
These are separate GraphQL queries, not API versions selected through a version parameter.
Why migrate
The data_exports query allows integrations to:
- Request
FULL,DELTA, or both export types explicitly. - Retrieve the latest eligible export or multiple runs within a time range.
- Filter exports by module.
- Identify completed exports with a
run_id.
The same query works for free and paid accounts. The account plan changes the export frequency, not the API contract.
New query
query DataExports(
$exportTypes: [DataExportType!]!
$timestampFrom: ISODateTime
$timestampTo: ISODateTime
$modules: [DataExportModuleName!]
) {
data_exports(
export_types: $exportTypes
timestamp_from: $timestampFrom
timestamp_to: $timestampTo
modules: $modules
) {
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
}
}
}
}
}
}
}Omit both timestamps to request the latest eligible export. Provide timestampFrom and timestampTo to retrieve exports within a specific period.
How to migrate
Migration is the same for lakehero_data_export and recurring_data_export because both use the previous flat response format. Update the integration as follows:
- Replace the previous query with
data_exports. - Replace
dateandrun_hour_utcwithtimestamp_fromandtimestamp_to. - Select
FULL,DELTA, or both usingexport_types. - Read tables from
full[].modules[].tables[]ordelta[].modules[].tables[]. - Use the containing
fullordeltacollection instead of detecting the export type from the filename or URL. - Use
run_idto identify runs that have already been processed. - Process every entry in
tables[].files. A table may contain multiple Parquet files; process all returned files together to load the complete table.
For recurring DELTA loads, request a time range and process every returned run. Each DELTA export covers an eight-hour window (previously 48 hours), so exports will contain overlapping changes. Requesting only the latest DELTA may skip intermediate exports. Make loads idempotent to handle the overlap.
Frequency and access
- Free accounts receive weekly
FULLexports andDELTAexports every six hours. - Paid accounts receive daily
FULLexports andDELTAexports every 30 minutes. - All Data Export queries require the
view:data_exportsscope and a user with Public API and Data Exports enabled. - Signed URLs expire after 24 hours. Run the query again to generate new URLs when necessary.