Naboria RMA — Technology Stack
An omnichannel campaign management platform with ML budget optimization, geo lift measurement, and real-time syncing across Meta, Google, and Naboria Ads.
Back to Stack OverviewCampaign Management Flow
How campaigns are created, synced to ad platforms, and monitored in real time.
Multi-Channel Campaign Sync
Push Active campaigns are pushed to Meta every 5 minutes — budget changes, status updates, and audience targeting. Pull Performance insights are pulled from Meta and Naboria Ads every 15 minutes into ClickHouse for real-time dashboards.
ML Pipeline
How raw performance data becomes budget recommendations, forecasts, and incrementality measurements.
ML Optimization & Measurement Flow
ML Four distinct ML pipelines run on different schedules — forecasting and geo lift every 6 hours, budget reallocation daily, and attribution on demand. All outputs land in ClickHouse and are served through the Go API.
Campaign Alerting
Five automated conditions continuously monitor campaign health and flag anomalies.
Alert Monitoring Flow
Alert The scheduler checks all active campaigns against 5 conditions every 15 minutes. When triggered, alerts are persisted to PostgreSQL and dispatched to configured notification channels — Slack, email, or custom webhooks.
Geo Lift & Experimentation
Measure true incremental impact with geo-based Difference-in-Differences and A/B experiments.
Incrementality Measurement
Components
Every piece of the Naboria RMA stack and what it does.
Go / Chi
A fast REST API handling campaign CRUD, multi-tenant auth, channel syncing, and background scheduling — all in a single binary.
Next.js + React
A TypeScript SPA with Tailwind CSS, Leaflet maps for geo lift visualization, and a JWT-aware API client with automatic 401 redirect.
PostgreSQL
Stores the campaign lifecycle — campaigns, budgets, creatives, audiences, experiments, alerts, and multi-tenant organization hierarchy.
ClickHouse
Time-series performance storage using SummingMergeTree and ReplacingMergeTree — campaign metrics, forecasts, budget recommendations, and geo lift results.
Redis
Session cache and rate limiting for the API layer, keeping hot data fast and reducing database load.
Prophet
Generates 7-day performance forecasts every 6 hours — used for pacing alerts and budget planning.
Hill Curves + SLSQP
Fits diminishing-returns curves to historical spend and uses constrained optimization to allocate budget where marginal return is highest.
DID + Permutation Tests
Geo-based Difference-in-Differences with permutation tests for statistical rigor — proving true incremental lift across treatment and control markets.
A/B Testing
Two-proportion z-test for comparing variant performance with statistical significance — applied to creative, audience, and channel experiments.
Time-Decay WLS
Weighted least squares attribution model with time-decay weighting — allocating credit across channels based on recency and contribution.
Dagster
Schedules all ML pipelines — forecasting, budget allocation, geo lift, and attribution — with job-level observability and retry logic.
Caddy
Path-based routing — /api and /auth to the Go server, everything else to Next.js — with automatic TLS via Let's Encrypt.
Meta Marketing API
Full bi-directional sync via Graph API v21.0 — push campaigns and budgets, pull daily insights and creative-level performance.
Naboria Ads API
Pulls onsite ad performance via the Meta-compatible /api/insights endpoint — unifying onsite and offsite metrics in one dashboard.