appscript.dev
Blog Sheets

How I built a team OKR tracker that updates itself

Northwind's quarterly goals wired to live data — no quarterly OKR-update meeting needed.

By Awadesh Madhogaria · Published Oct 12, 2025

Northwind sets OKRs every quarter, and for a long time we also maintained them every quarter — by hand, in a meeting, the day before review. Everyone scrambled to find their latest numbers, the spreadsheet was stale by the time we opened it, and the meeting was mostly data entry.

An OKR is only useful if it reflects reality on the day you look at it. Ours reflected reality once a quarter, briefly, and then drifted. The “current” figures were whatever someone had typed in last, updating them was a chore so it happened late and in a rush, and the review meeting was spent gathering numbers rather than discussing them. The frustrating part was that the numbers existed all along — in Stripe, in survey results, in other sheets. They were simply not connected to the goals they measured. So I wired the OKRs to the data they already came from.

How it works

The result is a self-updating tracker: the targets are set by humans, and the progress is read from live sources. An Objectives sheet holds the quarterly targets, a KeyResults sheet has a current column that is auto-filled, and each current value is pulled from its real source — revenue from Stripe, NPS from a survey sheet, and so on. Nobody types a progress number any more; they only set the goal:

  1. At the start of a quarter, the team writes objectives and key results, with targets, into the two sheets.
  2. Each key result names its data source.
  3. A daily script visits each source and writes the latest figure into the current column.
  4. The script computes percent-to-target for every key result.
  5. It rolls those up into an overall percent for each objective.
  6. The team dashboard simply reads that roll-up — see Build an OKR tracker with progress rollups.

By the time anyone opens the dashboard, it is already current. The hard part here is not the maths — it is the wiring. Each key result needs a source that is genuinely machine-readable. Revenue and survey scores were easy, since they already lived in clean sheets or APIs. But some goals we cared about had no such source, and that turned out to be a useful signal: if a key result cannot be wired to data, either it needs a real measure or it is too vague to be a key result. So the tracker quietly improved how we write OKRs, not just how we track them.

What changed culturally

This was the real payoff, and it surprised me. OKR-update meetings became OKR-discussion meetings, because the numbers were already on the dashboard, correct, before anyone sat down. Instead of an hour of “what was that figure again?”, we spent the hour on the only thing that mattered: what to actually do about where the numbers were.

The lesson generalises. If a metric already exists in a system somewhere, a human should never be re-typing it into a goal sheet. Wire the goal to the source — and you will find that meetings about goals become meetings about decisions.