Work

Outbound Sales Performance & Deliverability Dashboard

Automation
Full Stack
Backend Heavy
Next.js
Data
The sales dashboard's performance table, breaking a month down day by day across sends, replies, positive replies, bookings, and meetings held

The problem this solves

If you run cold email for clients, two things go wrong over and over.

First, nobody can answer “how did we do?” quickly. The sending tool knows how many emails went out. The CRM knows who replied. The calendar knows who actually showed up. None of them agree, so someone exports three spreadsheets every morning and stitches the story together by hand. Even then, the numbers still mean something different for each client.

Second, inboxes burn out silently. A few sending addresses start landing in spam. Nothing breaks, no alert fires. Replies just slowly dry up. By the time anyone notices, weeks of sending have gone into the void and the domain’s reputation is already damaged.

This dashboard fixes both: it answers the first question in about five seconds, and it handles the second one on its own.

One number for every client

Every client’s sending workspace lives in one view. Adding a new one takes a minute, with no hunting for API keys, because the system creates each workspace’s own credentials from a single admin key.

Pick a client, pick a date range, and the day is right there: emails sent, replies, positive replies, meetings booked, meetings held. The same definitions for every client, tracked day by day instead of disappearing at month end. That’s the whole morning reporting routine, gone.

Leads a rep can actually work

Leads arrive from the CRM with their history attached: not just the contact, but when the first call went out and when the first text did. Speed-to-lead stops being something people argue about in meetings and becomes a column you can sort. Tags, statuses, and filters turn the list into something a rep works from, instead of another report to read.

Inbox health, watched around the clock

Underneath the campaign numbers is the part that decides whether outbound works at all: the inboxes.

Every sending address is scored on deliverability and warmup health, then rolled up by domain, so one bad address can’t quietly poison a whole domain while campaigns keep sending through it.

And it doesn’t just report the problem, it fixes it. Senders that drop below your threshold are automatically pulled out of live campaigns and put back into warmup. Once they recover, they go back to work. You set the score line and the time window; the system does the swapping on a schedule. Nobody has to sit and watch a leaderboard of email addresses.

Runs itself, and shows its work

Everything runs on its own clock. A built-in scheduler checks every minute, fires whatever’s due, and runs one job at a time, so overlapping syncs queue up instead of colliding. Every run is logged with its outcome, and anything that failed can be retried with a click. No terminal, no developer.

How it’s built

A multi-tenant model keeps each client’s data and credentials fully separate while presenting them through one interface. Dedicated sync pipelines pull from the email platform, the CRM, and the calendar on independent schedules. Per-sender scoring drives the warmup automation, which attaches and detaches senders through the sending platform’s API while skipping campaign types that can’t accept it. A single unified execution log covers every pipeline, so failures surface as history rather than silence, and the scheduler’s queueing keeps concurrent syncs from stepping on each other. The whole thing sits behind authenticated access, with the automated trigger endpoints deliberately carved out so external cron can reach them.

The result

The daily “how did we do?” question takes about five seconds to answer. And the inbox problems that used to get discovered weeks later, in a reply rate that quietly collapsed, now get caught and corrected while nobody’s watching.

Send me a message

Tell me a little about what you're building and I'll get back to you.