← Blog

June 22, 2026

Automated: Annotation spreadsheet with qualitative and quantitive input.

Most analytics tools have some version of an annotations feature. Shopify has one built into its analytics. Google Analytics has one. You drop a note on a date, “ran a sale,” “got press,” and it shows up on the chart so future-you knows why the line moved.

Accurate annotations are some of the cheapest context you can give a business, a way to remember why a number jumped or dipped months after the fact.

But each only sees its own platform. Shopify’s annotations only know about Shopify. The things that actually move numbers come from everywhere. A campaign we talked through in Slack. A press mention someone dropped in a channel. A big wholesale order. An unusual expense sitting in QuickBooks. The moment the context you care about spans more than one tool, a single-platform log stops being enough.

So instead of picking which platform to commit our annotations to, I decided keep them somewhere neutral. Somewhere that could be written to via API, so a monthly job could populate it without anyone hand-entering rows. Somewhere the team could open and edit as easily as any other doc. And somewhere the data stayed portable, so it would outlive any one tool we happen to be using.

That turned out to be a plain Google Sheet, sitting right next to the KPI ledger I built earlier. The numbers in one place, the reasons in another.

At the end of each month a script scans our Slack for three kinds of things:

  • predefined events I’ve told it to watch for, the ones I already know can move the business
  • anything that reads like a large campaign, a press mention, or a notable purchase
  • expenses pulled straight from QuickBooks

Each one lands as a row with the date, what happened, and where it came from. Over time that becomes a running history of every event that nudged the numbers. A sample of what that looks like:

DateTypeWhat happenedSource
2026-05-20Press / partnerA partner featured us in their newsletter, driving significant Shopify revenue and traffic. Invisible in our own analytics, it lands as direct traffic.Slack
2026-06-01Strategy decisionPaused Meta ad spend at ~1.0x ROAS.Slack
2026-05-01Cost / expenseQuarterly royalty payment hit COGS (~$2.7k). Lumpy by nature, not a new cost.QuickBooks
2026-05-13MeasurementFixed a broken membership tracking step.Slack

The rows I’ve found most useful have surprised me: the strategy decisions with no system marker, and the measurement fixes. The kind of thing no single tool would ever surface on its own.

Adding a source later doesn’t mean rebuilding anything. A plain sheet doesn’t care where a row came from, so Shopify, QuickBooks, and Slack can all point at the same place, and so can whatever we add next.

It’s the same pattern I keep landing on. When a job has to run on its own every month, I’d rather it be a small script writing to a sheet I own than a feature locked inside someone else’s tool.

Now when a number moves, the why is already captured.

#essays #building-in-public #ai #automation