Data Export & BI Integration
Bring WorkComposer data into your own tools
The v2 API lets you pull your organization's users, teams, projects, tasks, time entries and attendance into your own reporting stack — so WorkComposer data lives alongside the rest of your business intelligence instead of in a separate tool.
BI tools such as Metabase, Power BI and Looker query SQL data sources natively. The common pattern is to sync WorkComposer data through the REST API into your own database or warehouse (Postgres, MySQL, BigQuery, …) on a schedule, then point your BI tool at that. This guide shows how to do that efficiently with incremental sync.
1. Get an API key
An Owner or Admin can generate a key in the app at Settings → Account → API Access → API Keys. Send it on every request in the X-API-Key header. New to the API? Start with the Quick Start and the interactive API reference.
2. Incremental sync with updatedSince
The entity list endpoints — users, teams, projects and tasks (see the v2 API reference) — accept an updatedSince query parameter (an ISO-8601 timestamp). It returns only records changed at or after that time, so each sync pulls just what changed rather than re-downloading everything.
For a resumable pull, sort by the watermark field and page with the cursor. When you pass updatedSince without an explicit sort, results are ordered by updatedAt ascending automatically — the safe order for advancing a watermark.
# Pull tasks changed since your last sync, oldest change first
curl -G "https://api.workcomposer.com/v2/tasks" \
-H "X-API-Key: your_api_key_here" \
--data-urlencode "projectId=PROJECT_ID" \
--data-urlencode "updatedSince=2026-07-01T00:00:00Z" \
--data-urlencode "sort=updatedAt" \
--data-urlencode "sortDir=asc" \
--data-urlencode "limit=100"
# Follow pagination.nextCursor until pagination.hasMore is false, then persist the highest
# updatedAt you saw as the updatedSince for your NEXT run.Watermark tips. updatedSince is inclusive, so set your next run's value to the maximum updatedAt you received and dedupe by id on your side (an idempotent upsert). The boundary record is re-delivered on purpose so nothing is lost between runs.
3. Time & attendance data
Time entries and attendance are time-series aggregations, so they are pulled by a date range (from / to) rather than by updatedSince. See the time-entries and attendance endpoints in the v2 API reference.
Tracking data can be corrected retroactively (offline sync, approved manual time), so re-pull a trailing window (for example the last few days) on each run rather than assuming a past window is final.
4. What incremental sync does & does not cover
updatedSince is an at-least-once feed of creates and updates to records that still match your request's filters. It is not a complete change log. To stay fully in sync, run a periodic full reconcile (list each resource without updatedSince) alongside your incremental pulls. In particular:
- Deletions are not emitted as change events. (Deleted tasks can be listed with
status=deleted; for other resources, detect removals during the reconcile.) - Filter departures — a record that stops matching a filter (for example a task reassigned to someone else) will not appear in the filtered stream it left.
- Live edits during a pull — a record changed while a multi-page pull is in progress may be picked up on the next run rather than the current one.
A snapshot-consistent, delete-complete change stream is on the roadmap.
5. Rate limits for sync workloads
Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers — watch them and back off when remaining runs low. Incremental sync keeps request volume low by design. If you run a large first sync or a high-frequency pipeline and need a higher ceiling, contact us at support@workcomposer.com and we can raise your organization's daily limit.
6. Using the data in Metabase
Metabase connects to SQL databases (Postgres, MySQL, BigQuery and more). Land the synced WorkComposer data in one of those — a dedicated schema works well — and add it as a data source in Metabase. From there you can build questions and dashboards over WorkComposer entities and time data alongside your other business data. The same approach works for Power BI, Looker and most warehouse-backed BI tools.
Need a hand?
If you are planning an integration and want a steer on the most relevant endpoints, our developer support team is happy to help.
Contact Developer Support