Throughline
One connector interface, every system in sync.
A multi-connector ETL platform that syncs QuickBooks, Copper, Basecamp, and PandaDoc into PostgreSQL and Airtable behind one shared connector interface.
- language
- Python 3.11, Next.js dashboard
- connectors
- 5 (QuickBooks, Copper, Basecamp, PandaDoc, Airtable)
- interface
- 4-method connector ABC + plugin registry
- history
- 428 commits, Oct 2025 to Mar 2026
- repo
- Private (shares a repo with Manifest)
The problem
A PR and podcast company ran on four disconnected SaaS tools with no unified view of a client, and every new integration historically cost roughly 2,000 lines of bespoke code. Throughline put all four behind one interface feeding a single source of truth.
How it is built
-
One interface, every integration for free
Every connector implements the same four methods and registers through a decorator. A new source inherits incremental sync, retry queues, health checks, and dual-destination writes without touching the sync engine. The connector entry point is about 50 lines; the full package (API client, transformer, schema) runs 700 to 2,200.
-
Incremental sync with per-connector checkpoints
A sync-metadata table records the last successful timestamp per connector and entity type, so each run fetches only what changed. The architecture docs report a 53 to 97% reduction in API calls in production; that figure is self-reported and not independently instrumented in the repo.
-
A Postgres MDM layer for contact identity
A master_contacts table uses generated columns to normalize email, phone, and name, and cross-links QuickBooks, Copper, Basecamp, and PandaDoc identifiers into a single row, so a contact is one entity instead of four disconnected records.
By the numbers
self-reported marks figures stated in docs or commit history that the source brief could not reproduce from the repository alone. Everything else is traceable to code.
Where this honestly stands
Shipped to production. The connector platform is solid; the documented efficiency gains are self-reported (no instrumentation export in the repo), and test coverage sits below its 80% target.
Want the parts that are not in a public repo? I will walk you through the architecture and the decisions on a call.