Abhilash
Back

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
Reporting dashboard with connected advertising accounts and scheduled report list

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

Report builder with a block palette and live preview
Report builder — templates render to dashboard, PDF and email
Connected advertising sources with OAuth status per account
Source connections — token state visible per tenant

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%