Signal.
Growth engine for a DTC brand — One dashboard where organic search and Meta spend stop arguing — rankings, ROAS and budget pacing wired to the same source of truth, refreshed every hour.
Overview
Verre was flying blind across four tools: Ads Manager for spend, Search Console for rankings, GA for sessions, a spreadsheet to reconcile the lies. We built Signal — a growth cockpit fed by the Meta Marketing API and Search Console API, normalised through a BigQuery + dbt pipeline, served by a Next.js app on Vercel.
The build
Hourly ETL pulls ad-set spend, CPM and conversions from Meta; a nightly job snapshots keyword positions. dbt models blend them into one attribution table, so ROAS is computed the same way everywhere — no more channel-flattering math.
- Meta Marketing API + Search Console ingestion
- BigQuery warehouse, dbt models, tested SQL
- Budget pacing with automatic ad-set pause rules
- Server components, edge-cached KPI reads
The outcome
Blended ROAS is now a number the founders trust. Wasted prospecting spend was cut in week two, and three money keywords moved to page one after the technical-SEO sprint the data pointed at.
For the first time paid and organic are one conversation, not two reports.
Under the hood
Hourly workers pull Meta Marketing API and Search Console into BigQuery; dbt models normalise attribution, and a Next.js app on Vercel reads pre-aggregated marts so every number is one query deep.
- Meta + GSC ingestion with token rotation
- dbt-tested models — ROAS defined once, everywhere
- Pacing rules auto-pause underperforming ad sets
- Looker Studio marts for the founders' weekly
Also considered GA4 + spreadsheets — rejected: sampled data and channel-flattering attribution.