Pulseboard: campaigns without tab hell
A performance agency cut reporting grind and started catching CPA spikes the same day — across Meta, Google, and TikTok.
Duration
12 weeks
Team
2 engineers · 1 analyst part-time
Stack
TypeScript · Next.js · Postgres · Queues · Ads APIs
Media buyers were living in twelve browser tabs. Budgets lived in one place, creatives in another, client decks in a third. By the time someone noticed a CPA spike, the week was already burned.
Pulseboard pulls Meta, Google, and TikTok into one campaign board: spend, ROAS, pacing, and creative fatigue signals. Nightly API sync keeps numbers honest without CSV rituals.
Alert rules fire when CPA jumps, budgets overrun, or ads go cold. Client pages and scheduled Slack / PDF digests replaced the Sunday report scramble.
Twelve weeks from kickoff to full agency rollout. Reporting prep dropped by roughly sixty percent. Anomalies show up the same day.
Architecture
Meta Ads
API
Google Ads
API
TikTok Ads
API
Nightly sync
queues · normalize
Pulseboard
ROAS · fatigue
Alerts / reports
Slack · PDF
- Meta Ads→Nightly sync
- Google Ads→Nightly sync
- TikTok Ads→Nightly sync
- Nightly sync→Pulseboard
- Pulseboard→Alerts / reports
Timeline · what shipped when
W1–W2
Metrics & access
- Defined KPIs: spend, CPA, ROAS, pacing, fatigue
- OAuth apps for Meta / Google / TikTok
- Client account mapping
W3–W6
Ingest & model
- Nightly sync workers + retry queues
- Normalized campaign / ad-set / creative schema
- Historical backfill (90 days)
W7–W9
Board & alerts
- Unified dashboard for buyers
- CPA / pacing / fatigue alert rules
- Slack notifications to account rooms
W10–W12
Client reports
- Branded client pages
- Scheduled PDF + Slack digests
- Agency-wide rollout + playbook
Delivered
- Multi-network campaign dashboard
- Nightly Ads API sync with monitoring
- Alert engine for CPA / pacing / fatigue
- Client report pages + scheduled digests
Impact
- ~60% less time spent assembling weekly reports
- CPA spikes caught same day instead of week-end
- Buyers operate from one board, not twelve tabs