← Back to case studies
Case study — data platform Delivered

Three spreadsheets were running the firm. One place — backed up daily.

A credit-advisory firm was running its whole operation on roughly 130,000 records spread across three disconnected spreadsheets — with no audit trail, no backups, and call-centre data that never reached analytics. I consolidated it into one self-hosted relational platform with an automated pipeline feeding the warehouse.

  • ~130k records out of three breaking spreadsheets into one database.

  • Call-centre data reaches a report every 15 minutes.

  • Daily backups and a verified restore path — safe to grow.

The problem

The business lived in three large, disconnected spreadsheets — around 130,000 records that were edited by hand, joined with lookups, and quietly hitting row limits. There was no audit trail, no backup strategy, and no safe way to grow: one bad paste could lose data nobody could recover.

Separately, the call-centre data sat in the telephony provider's database, but it never reached analytics. The off-the-shelf transfer tool kept failing because the provider enforces a hard limit of two concurrent connections — so reporting was always stale or simply missing.

What I built

A self-hosted database platform on the firm's own cloud: NocoDB over PostgreSQL, behind a reverse proxy with automatic HTTPS and Google SSO locked to the company domain, with daily backups pushed to object storage and a verified restore path. Non-technical staff get a familiar spreadsheet-like UI; the data underneath is finally relational, access-controlled, and auditable.

For the call-centre data I replaced the failing transfer with a scheduled job that syncs 27 tables into the warehouse every 15 minutes. It runs single-connection by design to respect the provider's two-connection limit, uses watermarks for incremental loads, and de-duplicates with merge-on-write — so analytics stay current without ever exhausting the source.

A separate contract panel ties the legal workflow to the sales CRM via webhooks, syncing statuses both ways.

Stack

NocoDB · PostgreSQL · Google Cloud · Cloud Run · BigQuery · Python · Docker · Traefik · Next.js · Express

Book a free 30-min call