This article covers how the scoring bands work, how to build the formula in Sheets so it ties across tabs, and where the model breaks down in practice.
What the Google re:Work OKR Score Bands Actually Mean
Google's re:Work documentation, published in 2015 and unchanged as of June 2026, defines 3 scoring zones:
| Score Range | Label | What it signals |
|---|---|---|
| 0.0 - 0.3 | Failed | Barely started or blocked |
| 0.4 - 0.6 | Made progress | Meaningful effort, fell short |
| 0.7 - 1.0 | Delivered | Hit or exceeded the target |
| 1.0 | Perfect (suspicious) | Target may have been sandbagged |
The 0.7 threshold is the core design decision. John Doerr describes it in Measure What Matters (2018) as "the sweet spot of ambitious realism" - you should expect to fall short of a well-set OKR roughly 30% of the time. If your team routinely scores 0.9+ across all objectives, either execution is genuinely exceptional or the key results were set too conservatively to begin with.
For FP&A, the practical read is this: a 0.72 average OKR score on a revenue growth objective that maps to $18.5M ARR target means you closed $13.3M actual. That's not a pass/fail flag - it's a planning input. The 28% shortfall feeds directly into your next-cycle top-line assumptions and customer acquisition cost models.
Building the OKR 0.0-1.0 Scoring Formula in Google Sheets
The raw score for a key result is just actual / target, capped at 1.0. The complication is that most OKR trackers sit in a separate tab from your financial model, so you're managing cross-tab pulls and weighted averages across multiple objectives.
A basic key result score, pulling actuals from your Actuals tab and targets from Assumptions:
=MIN(1, Actuals!C14 / Assumptions!$C$14)
For a weighted objective score across 3 key results (equal weights here, but adjust to taste):
=SUMPRODUCT(OKR_Tracker!E4:E6, OKR_Tracker!D4:D6) / SUM(OKR_Tracker!E4:E6)
For the full org average across all objectives in a quarterly board pack view:
=AVERAGEIF('OKR_Tracker'!B:B, Assumptions!$B$3, 'OKR_Tracker'!F:F)
Where column B is the quarter label and column F is the weighted objective score. The Assumptions!$B$3 reference keeps the quarter selector in one place so it drives every calculation downstream.
One note on capping: MIN(1, ...) is technically correct per the re:Work model, but in practice you may want to preserve scores above 1.0 in a separate column to flag sandbagged targets for the planning review. A score of 1.23 on a revenue key result is a material planning signal that MIN silently discards.
Connecting the OKR Score Model to Your Three-Statement Model
The reason to wire OKR scores into Sheets rather than a standalone tool is that the scores are inputs, not outputs. A 0.68 COGS efficiency OKR - against an $8.2M COGS budget where you hit $8.8M actual - changes your gross margin assumptions for the next planning cycle.
Here's a formula that converts an OKR score into a budget adjustment factor on your P&L tab, pulling from the tracker:
=IF(
VLOOKUP("COGS Efficiency", OKR_Tracker!$A:$F, 6, FALSE) >= 0.7,
1,
1 + (0.7 - VLOOKUP("COGS Efficiency", OKR_Tracker!$A:$F, 6, FALSE)) * Assumptions!$D$5
)
Assumptions!$D$5 holds your sensitivity coefficient - how much budget pressure a 0.1 miss on that OKR generates. A 14.2% EBITDA target that came in at 12.1% actual because COGS ran hot by $0.6M is a specific story. The OKR score (let's say 0.63 on COGS efficiency) is the summary statistic that ties the narrative together for the board deck without requiring the reader to do arithmetic on variance tables.
The three-statement link is most useful at the Cash Flow tab level. FCFF projections depend on EBITDA assumptions, which depend on margin assumptions, which depend on whether operational OKRs are trending toward 0.7+ or sitting at 0.5 with two quarters left. Pulling a SUMPRODUCT of operational OKR scores weighted by their P&L exposure gives you a single leading indicator for the cash flow model.
=SUMPRODUCT(
'OKR_Tracker'!F2:F10,
'OKR_Tracker'!G2:G10
) / SUMIF('OKR_Tracker'!B2:B10, "<>", 'OKR_Tracker'!G2:G10)
Where column G is the P&L dollar exposure for each objective. This gives you a dollar-weighted OKR health score - more useful than a simple average when one objective covers $6.2M of revenue and another covers $400K of an R&D initiative.
Where the Google re:Work OKR Scoring Model Breaks Down
A few failure modes that matter for financial models specifically.
Binary key results score badly. A key result like "launch the new pricing tier by Q3" scores either 0.0 or 1.0. That's fine for goal-tracking software, but it breaks your weighted average in a model where every other input is continuous. The fix is to decompose binary KRs into milestones (design complete, UAT complete, launched, 30-day retention threshold hit) and score each sub-milestone at 0.25.
Score timing mismatches with accrual periods. OKR scoring typically happens at quarter-end, but your accrual model closes on different days. A key result scored 0.7 at Dec 31 based on preliminary revenue numbers may revise to 0.65 when the final month accrual is posted. If you're using OKR scores as inputs to next-cycle assumptions, build a one-cycle lag: use the finalized prior-quarter score, not the current-quarter preliminary.
Aggregating up loses signal. A 0.65 org average can mask a 0.9 on a relatively minor objective and a 0.4 on the single KR that drives 60% of next year's revenue plan. The org average is a board slide number. For actual planning, you want the weighted-by-revenue-exposure score, not the unweighted mean.
If you're refreshing OKR-linked cells each quarter automatically, see How to Refresh OKR Sheets in Google Sheets (2026) for the trigger-based approach.
ModelMonkey can pull OKR actuals from HubSpot or Notion and write them directly into your tracker tab on a defined schedule, so the scores update before you open the model rather than after. Try ModelMonkey free for 14 days - it works in both Google Sheets and Excel.