Skip to content

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

TierFull exportsDelta exportsAvailability
FreeOne per weekOne every six hoursEvery account, enabled by default
PaidOne per dayOne every 30 minutesContact 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_from because 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, and 18: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 files to 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_types is required. Pass FULL, DELTA, or both.
  • timestamp_from is an optional inclusive ISO 8601 timestamp.
  • timestamp_to is an optional exclusive ISO 8601 timestamp. It requires timestamp_from. If omitted when timestamp_from is present, it defaults to the current time.
  • modules optionally 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

ModuleGraphQL value
OrdersORDERS
ShipmentsSHIPMENTS
ReturnsRETURNS
ProductsPRODUCTS
InventoryINVENTORY
Purchase ordersPURCHASE_ORDERS
3PLTHREEPL
UsersUSERS
LaborLABOR

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

  • full contains the selected full export runs.
  • delta contains the selected delta export runs.
  • run_id identifies the export run.
  • modules[].name is the lower-case module name, such as orders.
  • tables[].name identifies a table in the module.
  • files[] contains every Parquet file part for the table.
  • signed_url is the temporary file URL.
  • size is the file size in bytes.
  • created_at is 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