seigfred
back to work
data pipeline live

Client Performance Warehouse

A pipeline that pulls Facebook and Google ad performance from three Google Sheets, normalizes it through n8n into a Supabase warehouse — then a custom app I built, MBT Frontend, turns that data into a ready-to-send client email.

n8nSupabaseGoogle SheetsFacebook & Google AdsMBT Frontend

The problem

Each client's ad performance — mostly Facebook and Google — lived across separate Google Sheets, each in a different shape. Building a single client report meant exporting from each sheet, reconciling mismatched columns, and assembling the email by hand, every reporting cycle.

What I built

A pipeline that collects and cleans the numbers, plus a custom app I built from scratch that turns them into a finished email.

  • Ingestion — n8n pulls from three Google Sheets fed by Facebook and Google ad data.
  • Normalization — the mismatched fields from each source are mapped into one consistent schema as they land.
  • Warehouse — records are batch-upserted into Supabase, so re-runs are idempotent and never duplicate.
  • The app — I built MBT Frontend, a custom app that reads the warehouse and generates a ready-to-send email with each client's data.

Outcome

Building a client report went from manual exporting-and-pasting to opening the app and sending. The Supabase warehouse also became a clean source of truth that other tools can build on.

3ad sources unified
0manual exports
Readyto-send emails
// proof

See it running

// next

Still exporting and stitching reports by hand?