The shape of it
1
Resolve once, store the IDs
Backfill Unif IDs onto your existing rows. Do this once; everything after is keyed on IDs.
2
Export nightly with a job
One export job per entity and market, collected by webhook.
3
Load as an append-only fact table
Key on entity, period and currency. Never overwrite a historical row.
1. Backfill IDs
Resolve rather than enrich for a backfill — you only need identity at this stage, and resolution is cheaper.not_found count means your source list is decaying,
and that is worth knowing before it shows up as missing rows downstream.
2. Export nightly
An export job shards past the 1,000-row search depth and hands you a file.The
Idempotency-Key is doing real work here. If your scheduler retries the task — and
eventually it will — the same key returns the original job instead of running and charging for a
second export.previous_month or an explicit date range over last_30d for warehouse loads. A preset
means a different window on every run, so the same job run twice produces two incomparable files.
3. Collect on the webhook
download_url is valid for 24 hours. Pull the file into your own storage rather than pointing
a downstream job at it.
4. Model it as append-only
The schema mistake to avoid is a table with one row per shop that gets overwritten. Metrics are period-scoped, so an overwrite destroys the ability to compare.Joining to your own data
Operating the pipeline
Watch completeness
Track the average
meta.completeness per load. A sustained drop is an upstream change worth
catching before dashboards look wrong.Alert on job.failed
A silent pipeline and a healthy one look identical until someone asks why the numbers stopped.
Reconcile row counts
Compare
job.result_count against rows landed. A gap means a load problem, not a data problem.Keep credits in view
Export jobs are the largest line in most workspaces.
GET /usage/events attributes cost by
endpoint.