abhilashbera.dev › work › marketing-automation-saas
Marketing Automation SaaS
SaaS · Full Stack · Automation
A multi-tenant platform that connects advertising accounts, normalises their data into one schema, and turns scheduled reports into something nobody has to assemble by hand.
- Year
- 2025
- Role
- Architecture · Backend · Frontend
- Status
- In production
- Stack
- Next.js · Node.js
Problem
Performance teams were rebuilding the same report every week. Ad spend lived in six different platforms, each with its own schema, currency handling and rate limits. Exports were reconciled by hand in spreadsheets, so numbers disagreed and reports arrived late.
Solution
A connector layer authenticates each ad platform over OAuth and pulls metrics on a schedule into a normalised PostgreSQL model. A job queue handles backfills, retries and rate limits per provider. On top sits a report builder where a team defines a template once, and delivery runs itself.
Features
- 01
Platform connectors
OAuth onboarding with token refresh, per-tenant credential isolation and provider-aware rate limiting.
- 02
Normalised metrics model
One schema across providers — spend, impressions, conversions and currency reconciled at ingest.
- 03
Scheduled reporting
Templates render to dashboards, PDF and email on a cron the client controls.
- 04
Multi-tenant workspaces
Row-level tenant scoping, invitations and role-based access across every surface.
- 05
Backfill & recovery
Idempotent sync jobs replay historical windows without duplicating rows.
Screens
Technology
Frontend
- Next.js
- TypeScript
- Tailwind CSS
- Recharts
Backend
- Node.js
- Express
- BullMQ
- OAuth 2.0
Data
- PostgreSQL
- Redis
- S3
Infrastructure
- Docker
- AWS ECS
- GitHub Actions
Architecture
01Client
Next.js App
Dashboard · Report builder
Email / PDF
Scheduled delivery
02Service
API Gateway
Auth · Tenant scope
Worker Pool
Sync · Render jobs
03Data
PostgreSQL
Normalised metrics
Redis
Queue · Cache
04External
Ad Platforms
OAuth connectors
Object Storage
Report artifacts
Request flow — left to right
Result
Weekly reporting went from a manual half-day to a scheduled job. Agencies onboard a new advertising account in minutes instead of a support ticket, and the reconciliation arguments stopped because every number now comes from one model.
- Ad platforms connected
- 6
- Manual reporting per week
- ~4h → 0
- Sync job success rate
- 99.5%