Automated Report Distribution System

A scheduled automation engine that refreshes Excel reports, uploads them to cloud storage, and emails shareable links on a cron schedule. It replaced hours of repetitive manual work every day.

0% Automated Delivery
0 manual Steps Required
0/7 Daily Scheduling
Screenshot coming soon

What was broken.

Every morning, the same ritual played out. Staff would log in, open a set of Excel reports, manually refresh data connections, save the files, upload them to a shared drive, compose individual emails with download links, and send them to the right stakeholders. This happened every single workday, without exception.

The process wasn't complicated, it was tedious. And because it was tedious, it was fragile. Reports went out late. The wrong version got attached. Someone forgot to refresh the data before uploading. Recipients had no way of knowing whether they were looking at yesterday's numbers or today's. There was no audit trail and no consistency.

The team at the institution knew this was a problem, but they treated it as a cost of doing business. "That's just how we've always done it." Meanwhile, skilled staff were spending the first hour of every day on work that a well-configured script could handle in seconds.

Manual Refresh Every Morning

Staff manually opened and refreshed Excel reports every day. This repetitive, error-prone process ate up the first hour of every workday.

Inconsistent Delivery Times

Reports arrived at different times depending on who was handling them that day. Stakeholders never knew when to expect their data.

Human Error in Distribution

Wrong attachments, stale data, missed recipients. Manual processes meant mistakes were inevitable and often went unnoticed.

No Audit Trail

Nobody could say with certainty when a report was sent, whether the data was current, or who received it. Accountability was nonexistent.

How we solved it.

01

Process Audit & Workflow Mapping

We sat down with the team and mapped every step of their morning routine: which reports, which recipients, what format, what schedule. We documented every manual touchpoint and figured out which steps could be automated.

What stood out: the team was spending 60+ minutes daily on a workflow with zero decisions. Pure mechanical repetition.
02

Report Refresh & Cloud Upload Pipeline

We built a Node.js engine using ExcelJS to open and refresh reports programmatically, then used the Microsoft Graph API and OneDrive API to upload files to cloud storage and generate shareable links. No human intervention needed.

03

Email Distribution Engine

We designed HTML email templates with embedded shareable links and sent them through Nodemailer with SMTP and Azure authentication. Each report type gets its own template, recipient list, and delivery schedule, all configurable without touching code.

04

Scheduling, Logging & Resilience

I wrapped everything in node-cron for time-based scheduling, added error logging with retry logic so failed uploads or emails get re-attempted automatically, and built a configuration layer so the team can adjust schedules and recipients without calling me.

The system logs every action: report refreshed, file uploaded, email sent. That's the audit trail that never existed before.

Technologies Used

Node.js Microsoft Graph API ExcelJS node-cron Nodemailer SMTP Azure Authentication OneDrive API

Still sending reports by hand?

Let's talk about how automation could give your team their mornings back.

Start a Conversation

What it actually does.

Automated Excel Refresh

Reports are opened and refreshed programmatically using ExcelJS. Data connections pull the latest numbers without anyone lifting a finger.

OneDrive Upload & Link Generation

Updated reports are uploaded to OneDrive via the Microsoft Graph API, and shareable links are generated automatically for each file.

Cron-Based Scheduling

Reports run on configurable cron schedules: daily, weekly, or custom intervals. The system handles timing so staff never have to think about it.

HTML-Formatted Email Templates

Stakeholders receive clean, professional HTML emails with embedded links, not raw file attachments. Each report type has its own branded template.

SMTP & Azure Auth Support

Supports both traditional SMTP and modern Azure authentication for sending emails. Compatible with institutional security policies.

Error Logging & Retry Logic

Every action is logged. If an upload fails or an email bounces, the system retries automatically and alerts the team only if human intervention is truly needed.

See it in action.

The numbers speak.

0%
Automated Delivery
Zero human steps required
0 errors
Distribution Mistakes
No more wrong files or missed recipients
0+
Minutes Saved Daily
Staff redeployed to higher-value tasks
0 days
Consistent Delivery
Reports land on time, every single day
I used to start every morning with 30 minutes of report wrangling before I could do any real work. Now the reports are in everyone's inbox before I even get my coffee. It's the kind of thing you don't realize how much it was costing you until it's gone.
OA
Operations Analyst The Institution

What I learned.

01

The biggest time sinks are the ones nobody questions

This workflow had been running manually for years. Everyone accepted it as just part of the job. Nobody had stopped to calculate that five people spending 30 minutes a day on it added up to over 1,000 hours a year. The first step wasn't building anything. It was making the hidden cost visible.

02

Reliability matters more than speed

The team didn't care whether reports went out at 6:00 AM or 7:00 AM. What they cared about was knowing it would happen, every time, without fail. The retry logic and error logging weren't afterthoughts; they were the whole point. Fast but flaky automation is worse than no automation at all.

03

Configuration is a feature, not a nicety

The first version had schedules and recipients hardcoded. Within a week, the team needed to add a new report and change a delivery time. Making schedules, templates, and recipient lists all configurable turned a one-off script into a system the team could own without calling me.

Want this for
your institution?

Every project starts with a conversation. Tell us about the repetitive workflows taking up your team's time, and let's figure out what automation could look like for you.

No pitch. No pressure. Just a conversation about what might work.