Skip to main content
ELT CLI that reads the Public API and upserts into DuckDB (local file) or BigQuery. Same list + JSONL export contract as the API guides — without writing the pipeline. Source: github.com/Fan-ID/soundlink-warehouse-connector

When to use

The connector is read-only. It does not create campaigns, change budgets, or import videos.

Prerequisites

  • Python 3.13+ and uv
  • An API key from Settings → Developer → API keys:
    • Campaigns: campaigns:read + metrics:read
    • Soundlinks: soundlinks:read
See Authentication for scopes. Existing keys keep the scopes they were minted with — create a new key if you need soundlinks:read.
Not on PyPI yet. Clone the repo and install with uv sync.

1. Install

Set SOUNDLINK_API_KEY in .env. For BigQuery, install the extra and point the destination:
BigQuery uses Application Default Credentials. Adapter setup and job examples: repo docs.

2. Ping

Same check as GET /v1/ping — any valid key works, regardless of scopes.

3. Sync

Run --mode full once per entity (backfill), then keep incremental on a daily schedule. Re-runs are idempotent (upsert / MERGE on the documented primary keys). To test one resource: --campaign-id <uuid> or --soundlink-id <id>. DuckDB default file: ./data/soundlink.duckdb.

What you get

Join metrics to catalog on campaign_id or soundlink_id. Rows include account_id (your organization) and provider (soundlink). Primary keys and field lists: Campaign metrics and Soundlink metrics. Do not sum listeners across days.

Next

Campaign metrics · Soundlink metrics · JSONL exports · Authentication