Scenario Planning
7
Minutes Read
Published
October 5, 2025
Updated
October 5, 2025

How to build a dynamic scenario planning model in Google Sheets for your startup

Learn how to build scenario planning models in Google Sheets to create dynamic financial forecasts and analyze the impact of different business decisions.
Glencoyne Editorial Team
The Glencoyne Editorial Team is composed of former finance operators who have managed multi-million-dollar budgets at high-growth startups, including companies backed by Y Combinator. With experience reporting directly to founders and boards in both the UK and the US, we have led finance functions through fundraising rounds, licensing agreements, and periods of rapid scaling.

The Foundational Shift: From Static Files to a Dynamic Model

For many early-stage startups, financial forecasting lives in a sprawling folder of spreadsheets. Files named “Forecast_v4_Best_Case” and “Budget_v5_FINAL” are copied, tweaked, and emailed around, creating a web of outdated assumptions and broken links. This manual “clone and tweak” approach is not just time-consuming; it introduces significant risk when making critical decisions about runway and hiring. The constant duplication makes it nearly impossible to maintain a clear, single source of truth. As a result, founders spend more time wrestling with file versions than analyzing business drivers. Moving away from this fragile system is a necessary step for building a more resilient financial operation. This is core scenario planning work.

The most common pain point for founders managing their own finances is the sheer effort required to update multiple scenarios. The foundational shift is conceptual: moving from the “Clone and Tweak” method to a “Single Source of Truth” model. Instead of having separate files for best, base, and worst-case scenarios, you build one master model that can dynamically display any scenario based on a single input.

This is achieved by creating a dedicated “Control Panel” tab. This sheet centralizes all key business assumptions, like new monthly recurring revenue, customer churn rates, or hiring plans for your SaaS, E-commerce, or Professional Services company. Your main financial model then reads exclusively from this panel. Change an assumption in the Control Panel, and the entire model updates instantly. This approach dramatically reduces the time spent on updates and eliminates version control errors. While dedicated FP&A platforms like Pigment, Anaplan, and Cube offer this sophistication, a well-structured Google Sheet provides a powerful and accessible starting point for financial modeling in Google Sheets without the immediate cost and complexity. If you prefer Excel, see our guide on Scenario Planning in Excel.

How to Build Scenario Planning Models in Google Sheets (No Code)

You can build a powerful dynamic forecasting template without writing a single line of code. The process relies on structuring your assumptions correctly and using a few key Google Sheets functions. This approach directly addresses the challenge of building an automated structure without a technical background.

  1. Create a `Control Panel` Tab: This sheet will be the heart of your model. Structure it with your key business drivers as rows and your scenarios as columns. This isolates your assumptions from your calculations, making the model easier to manage and audit. For example:
    • Column A: Assumption Name (e.g., 'New Customers per Month', 'Avg. Revenue per Customer', 'Monthly Churn %')
    • Column B: Base Case (e.g., 10, $500, 2.5%)
    • Column C: Best Case (e.g., 15, $550, 2.0%)
    • Column D: Worst Case (e.g., 5, $450, 4.0%)
  2. Build a Scenario Selector: On your main financial model tab, pick a cell to be your scenario selector, for instance, cell B1. Use Data Validation (from the Data menu) to create a dropdown list. For the criteria, select "List from a range" and source it from the header row of your Control Panel (e.g., 'Control Panel'!B1:D1). Now you can switch between 'Base Case', 'Best Case', and 'Worst Case' with a single click, preventing typos and ensuring valid inputs.
  3. Use `Named Ranges` for Readability: To make your formulas clean and resilient, use Named Ranges. Highlight your scenario selector cell (B1), go to Data > Named ranges, and name it SelectedScenario. This way, your formulas will read as the intuitive SelectedScenario instead of the cryptic 'Model'!B1, making them far easier to understand and debug.
  4. Connect Your Model with `INDEX/MATCH`: Finally, connect your model to the Control Panel using an INDEX/MATCH combination. This is the engine of your model. For any cell in your model that depends on a dynamic assumption, this formula will pull the correct value from your assumptions table. It is generally preferred over VLOOKUP because it does not break if you insert or reorder columns in your source table. To pull the 'Monthly Churn %', the formula would be:
  5. =INDEX('Control Panel'!B:D, MATCH("Monthly Churn %", 'Control Panel'!A:A, 0), MATCH(SelectedScenario, 'Control Panel'!1:1, 0))
  6. This formula works by first finding the correct row for "Monthly Churn %" and the correct column for the `SelectedScenario` (e.g., 'Best Case'). It then returns the value at the intersection of that row and column. The rest of your model can now use standard functions like SUM or be summarized with PIVOT tables, all powered by these dynamic inputs. For more complex situations, you may need to explore multi-variable scenario modeling.

Spreadsheet Automation for Startups Using Google Apps Script

Once your dynamic model is built, manual tasks can still create bottlenecks. Switching scenarios via the dropdown works, but it can be clunky during a presentation. More importantly, manually updating your model with actuals from your accounting software (like QuickBooks for US companies or Xero for UK startups) or payment processor is tedious and error-prone. This is the appropriate time to introduce Google Apps Script to automate these repetitive tasks, creating a more robust system for cash flow modeling in Sheets.

What founders find actually works is introducing automation incrementally. Do not try to automate everything at once. Start with simple user interface improvements and then move to data connections. This tiered approach allows you to gain value quickly without getting bogged down in complex code. For most pre-seed to Series B startups, the goal is practical efficiency, not building an enterprise-grade system. The following automations address the most common friction points in spreadsheet automation for startups.

Automation #1: The One-Click Scenario Switcher

To make your model more interactive and presentation-friendly, you can replace the dropdown with clickable buttons. Using the Insert > Drawing tool in Google Sheets, you can create shapes that look like buttons, label them 'Best Case', 'Base Case', and 'Worst Case', and then assign a script to each one.

This requires a simple Google Apps Script function. Open the Script Editor (Extensions > Apps Script) and paste in the following code. This central function takes a scenario name as input and writes it to your SelectedScenario cell.

/**
* Sets the value of the 'SelectedScenario' named range.
* @param {string} scenarioName The name of the scenario to activate (e.g., 'Base Case').
*/
function setScenario(scenarioName) {
// Get the active spreadsheet
const ss = SpreadsheetApp.getActiveSpreadsheet();

// Find the named range for the scenario selector
const scenarioCell = ss.getRangeByName('SelectedScenario');

// Check if the named range exists before setting the value
if (scenarioCell) {
scenarioCell.setValue(scenarioName);
} else {
// Log an error if the named range isn't found
SpreadsheetApp.getUi().alert('Error: Named range "SelectedScenario" not found.');
}
}

// Create separate functions to assign to each button
function setBaseCase() {
setScenario('Base Case');
}

function setBestCase() {
setScenario('Best Case');
}

function setWorstCase() {
setScenario('Worst Case');
}

Save the script. Then, back in your sheet, right-click on each button you drew, click the three-dot menu, select 'Assign script', and enter the corresponding function name (setBaseCase, setBestCase, or setWorstCase). Now, clicking a button instantly updates your entire financial model.

Automation #2: Pulling in Live Data

Manually exporting CSVs from Stripe, QuickBooks, or Xero to update your actuals is a major time sink and a common source of errors. A simple script can automate this by pulling data from another Google Sheet where you might paste your exports. This ensures your scenario analysis is always grounded in the latest performance data.

The SpreadsheetApp.openById() method in Google Apps Script allows one sheet to access data from another without manual copying. For example, a script could open a sheet containing a Stripe MRR export and copy the latest month's value into your model's 'Actuals' column.

/**
* Pulls the latest Monthly Recurring Revenue (MRR) figure
* from a separate 'Stripe Data' Google Sheet.
*/
function pullStripeMRR() {
// The ID of the Google Sheet containing your Stripe data export.
// You can find this in the sheet's URL.
const sourceSheetId = 'YOUR_SOURCE_SHEET_ID_HERE';
const ss = SpreadsheetApp.getActiveSpreadsheet();
const modelSheet = ss.getSheetByName('Financial Model');

try {
// Open the source spreadsheet by its ID
const sourceSpreadsheet = SpreadsheetApp.openById(sourceSheetId);
const sourceDataSheet = sourceSpreadsheet.getSheetByName('MRR Export');

// Get the last row with content in the first column (assuming dates are in column A)
const lastRow = sourceDataSheet.getLastRow();

// Get the latest MRR value (assuming it's in column B)
const latestMRR = sourceDataSheet.getRange(lastRow, 2).getValue();

// Define where to put this value in your main model (e.g., cell C10)
const targetCell = modelSheet.getRange('C10');
targetCell.setValue(latestMRR);

} catch (e) {
SpreadsheetApp.getUi().alert('Could not pull Stripe MRR. Check source sheet ID and permissions.');
}
}

There are many ways to import Stripe data to Google Sheets. To make this fully automatic, use Triggers. In the Apps Script editor, go to the 'Triggers' section (clock icon) and create a new, time-based trigger that runs the pullStripeMRR function daily or weekly. This is one of the most effective scenario analysis tools for founders, as it removes a critical manual step and keeps the forecast current.

Ensuring Trust: How to Audit Your Dynamic Model

Complexity can create doubt. With formulas and scripts running behind the scenes, a common fear is making critical cash and hiring decisions on faulty numbers. A complex model is useless without trust, so a simple, regular audit process is essential. This does not require a formal finance background; it is about applying logical checks to ensure the model behaves as expected.

A scenario we repeatedly see is founders building a model, using it for a fundraise, and then neglecting it until the next crisis. A living model requires a simple audit discipline to remain a reliable decision-making tool.

1. Perform a Baseline Reconciliation

Your 'Base Case' scenario should closely mirror your actual historical performance. Pull a profit and loss statement from your accounting tool (QuickBooks for US-based companies, Xero in the UK) for the last three months. Compare the key lines. Do your model's outputs for revenue, cost of goods sold, and payroll align with these historicals? If they are significantly different, your core assumptions are disconnected from reality. For specific guidance on SaaS revenue recognition, see this overview from Deloitte's guidance.

2. Stress-Test the Logic

Make a single, dramatic change in your Control Panel and observe the result. This tests the integrity of your formula connections. For example, if you double your churn rate in the 'Worst Case' scenario, does your projected cash runway decrease accordingly? If you triple your marketing spend, do new leads and customer acquisition costs move in the expected direction? If the outputs do not change or move counterintuitively, there is likely a broken formula link somewhere in the model. This simple check validates the model's internal logic.

3. Practice Good Documentation

Clarity is crucial for trust, especially when collaborating or handing the model over. Use cell comments (right-click, `Comment`) to explain non-obvious formulas or the reasoning behind specific assumptions. Create a 'Changelog' tab to record major changes, noting the date, the change made, and why. This builds institutional memory and makes it possible for another team member, or an investor, to understand and trust your work without a lengthy handover.

Practical Takeaways for Your Startup

The transition from scattered, static spreadsheets to a dynamic, centralized model is a significant operational upgrade for any startup. It provides the clarity needed to navigate uncertainty and make faster, more confident decisions about hiring, spending, and strategy.

The key is to start simply. Begin by building the no-code version with a Control Panel and the INDEX/MATCH structure, which alone solves the most pressing issue of version control. Only introduce Google Apps Script automation when a specific manual task becomes a consistent bottleneck. Finally, maintain trust in your model by regularly performing simple audits: reconcile with historicals, stress-test the logic, and document your key assumptions. The goal is not a perfect model, but a reliable and agile tool to help you manage your startup budgeting spreadsheet and forecast effectively. For additional methods and resources, see the topic hub on Scenario Planning.

Frequently Asked Questions

Q: Why is INDEX/MATCH better than VLOOKUP for scenario planning?

A: INDEX/MATCH is more flexible and robust. VLOOKUP requires the lookup value to be in the first column of your table and can break if you insert or delete columns. INDEX/MATCH looks up values independently of column order, making your model much easier to update and maintain over time.

Q: Can I connect this Google Sheet directly to my accounting software?

A: Direct connections to platforms like QuickBooks or Xero typically require third-party add-ons (like Zapier or Supermetrics) or more advanced use of their APIs, which involves more complex coding. For most startups, a semi-automated approach of pasting data exports into a designated sheet is a practical and effective starting point.

Q: How often should I audit my financial model?

A: A lightweight audit should be performed monthly, especially the reconciliation against actuals. This ensures your baseline assumptions remain grounded in reality. A deeper stress test of the model's logic is wise to conduct quarterly or whenever you make significant changes to your business strategy or the model's structure.

This content shares general information to help you think through finance topics. It isn’t accounting or tax advice and it doesn’t take your circumstances into account. Please speak to a professional adviser before acting. While we aim to be accurate, Glencoyne isn’t responsible for decisions made based on this material.

Curious How We Support Startups Like Yours?

We bring deep, hands-on experience across a range of technology enabled industries. Contact us to discuss.