reporting
The self-running weekly report
One threshold, four parts, and a report that sends itself
By Samer Azar, Fractional CFO · 2026-07-09 · 6 min read
Key Takeaway: Starting this Monday, an email will land in my inbox at 8am that reads my numbers, works out what changed, and tells me where I'm needed. The first one arrived this week as a test. I built it out of ordinary parts: one query per source, one history table, one threshold, and a rule that everything ends in a move. Here is the anatomy, the three mistakes I already made, and how to build your own.
Dear reader,
I used to check my numbers the way most founders do.
When something felt wrong.
The problem is timing. By the time something feels wrong, it went wrong weeks ago.
So last week I built the thing I keep telling everyone else to build.
This week, an email landed in my inbox that no human sent.
It had read every number I track. It knew what changed since last week. It flagged the two places that need me, then closed with this week's moves, in order.
Here is the real one, numbers blurred on purpose:

Every Monday at 8am from now on. Four parts: what happened, what changed, what needs a human, what to do next.
Which best describes you?One click. It tells me who I'm writing for and makes these issues sharper. |
Quick one while you're here: one click tells me who I'm writing for, and it makes these issues sharper.
Part 1: the sources
The reason nobody watches their numbers weekly is boring.
They live in five different systems. Pulling them together loses to whatever is on fire that morning.
So the first component does the chore:
One script.
Each source pulled through its API.
Everything lands in one snapshot. Same order, same definitions, every week.
I never log into anything.
Now the first mistake, because I made it within days.
My analytics counter was reporting our own internal test transactions as real events. I only caught it because two sources disagreed about the same number.
The fix became a rule. Rank your sources before the first report:
Payments table beats analytics counter.
Accounting system beats spreadsheet.
When two disagree, the higher rank wins.
And pull live at run time, never from a saved export. An export was true the day someone downloaded it, and nobody remembers when that was.
See what I'm building →Part 2: the history table
Every Monday from now on, the snapshot gets written into a table in a database. One row per week.
Why a table and not a file:
A file gets overwritten, renamed, or lost. A table only grows.
You can't query a file. "How does this compare to a month ago" is one line of code against a table.
The week-over-week deltas come out of it for free. A number on its own tells you nothing. The same number next to last week's tells you where you're going.
Mistake number two happened right here.
My first test send almost wrote itself into that table as week one. Test data, sitting as the baseline every future week would be measured against. I caught it in the logs and added one guard: test runs never write history.
The table is still empty today. The first real row lands Monday.
And when the report ran with nothing to compare against, it printed a dash where the deltas go. I'd rather see "no data yet" than a number that isn't real.
One more honesty feature: the footer prints how old each source's data is. Stale sources show up at a glance.
Part 3: the $1,000 rule
Twenty highlighted numbers is the same as zero, because you stop reading either way.
So the system gets one threshold. The rule I ran for years as a CFO, now written into code:
Any unexpected variance above $1,000 gets a written explanation of its cause. Below that, nothing.
Your threshold might be $500 or $10,000. The written-explanation part is the part that matters.
Here is why I'm strict about this one. Mistake number three, and it's the one that started this whole build.
A few weeks ago, a report of mine showed four new leads. I was pleased with them.
They did not exist. A tracking bug invented them.
That incident is why this machine treats its own output with suspicion:
Can't read a source? It prints "unknown, verify." It never fakes a green tick.
Nothing crossed the threshold? It says so and shuts up.
Part 4: it ends in a move
The last section of the email is a short list. This week, do these, in this order.

The moves section, recreated with sample data so it's readable. Flags first, then the list. A quiet week says so.
That list is the entire reason the report gets read. If a report doesn't tell you what to do, you stop opening it within a month, like every dashboard you have ever been given.
And it watches few numbers. Distill a business to five or ten, watch them weekly, and it gets easier to run. I've seen it at every company I've worked with.
Build it this weekend
Nothing here is exotic. If you can write a script, or sit next to someone who can:
List your sources. Every place a number you care about lives.
Write one script per source, pulling through the API into a single snapshot.
Create one table for history. Run date, source, metric, value. Four columns.
Set one threshold. Anything that moved more than your number gets a line of explanation.
Wire an email template to a scheduled job. Monday, 8am.
The tools are commodities. The four-part structure is the hard part.
I pointed the first one at my own numbers. You debug on yourself before you touch anyone else's numbers.
Now read it again, wearing your founder hat
Your sources are Shopify, the accounting tool, the bank feed, and a supplier-terms email from last year.
Your history table is the gap between money going out and money coming back, week by week.
Your threshold is a customer paying slower than usual, or stock sitting longer than it should.
And your move is the one action this week that frees the most cash.
It's the same architecture pointed at different numbers.
Watching a founder's cash that way, every week, is what I'm building next. It's called Cash Actions, built in the open for founders who run on Shopify, and it opens with a founding group of twenty.
The deposit is refundable if I don't deliver, so the risk stays mine.
This is what Cash Actions will watch for you →The cash version watches a few of the seven levers that drive a business's cash. I broke all seven down in one long read here, if you want the full map.
Boring until the Monday it isn't
Last week I wrote about the boring reps of teaching an AI to work, and how the payoff arrives all at once. This week it did.
Steal these today, no code required:
Score the next report you receive against the four parts.
Adopt the $1,000 rule at your own threshold.
Write down every place your numbers live. If the list is longer than three, you know why you only look when something feels wrong.