Every month, over 100 restaurants sent their numbers in as Excel files. A P&L for each one, and a scorecard rating each restaurant and its manager. Someone then spent days copying those numbers into the same reports management asked for every month.

I automated it. Now the files get dragged in and the dashboards update themselves. Everyone assumes the dashboard is the hard part. It isn’t. Charts take days. The hard part is making sure the number on the chart is the number in the file, every single month.

The files don’t agree with each other

When a person reads an Excel file, they figure things out without thinking. They know which tab has the numbers, which column is May, and that a blank cell means “not sent yet” while 0.00 means “scored zero”. A program knows none of that.

And the files change. A row gets renamed between March and April. A percentage arrives as text. A restaurant sends a corrected file and the original is still sitting in the folder. A dashboard built on top of that still draws a number, and it looks just as confident as a correct one.

So before building any charts, I went through every workbook and mapped where each number lives. Every label gets matched to one fixed list of names. When the system sees a label it doesn’t know, it doesn’t guess. It flags it and someone decides. When a corrected file arrives, the new one counts and the old one stays on record, so a report from last month can still be explained.

“It ran fine” doesn’t mean the data is there

One quarter, every file uploaded without an error. The dashboards looked healthy. Then I checked the database directly and the records for that quarter weren’t there. A report built from missing data doesn’t show an error. It just looks smaller.

So now an upload isn’t done until the system has checked that every number it expected actually landed. Missing files get chased, duplicates get caught before they’re counted twice.

Check it from both ends

Before handing it over, I took the full quarter and compared every store’s total against the finance team’s own figures. All 303 matched. I also traced individual numbers back to the exact row they came from, because a total can match while a number sits on the wrong restaurant.

There is AI in the system. Managers can ask it which stores stand out or what changed since last quarter. But it only ever reads numbers that have already been checked. It never adds anything up. A finance total that’s wrong but looks right is the one mistake you can’t afford.