Why does your Google Sheets marketing dashboard keep breaking?
Sheets dashboards break from connector changes, manual exports, fixed ranges, and no shared metric definitions. Why, and when to move to a warehouse and BI.
Written by Linus Tse, founder of Greyfield Data
ยท 7 min read
On this page 8 sections
"We have a Google Sheets-based dashboard that we all look at. It's pretty ad hoc. They automatically get updated, but stuff breaks and it's not ideal." That's a common place for a DTC brand to be, and it's not a failure. A sheet is the fastest way to get everyone looking at the same numbers. It stops working when the sheet is also the place where data lands, gets cleaned, and gets defined.
We move DTC brands from sheets to a warehouse and BI setup, usually with Sigma on top, because it still feels like a spreadsheet. To see what a dynamic view looks like on a synthetic DTC brand, open the CAC apportionment demo.
Key takeaways
- Sheets dashboards usually break in five places: connector field changes, size limits, manual exports, formulas tied to fixed ranges, and no single definition of each metric.
- Automatic refresh doesn't mean correct. A connector can succeed and still write a renamed column, an empty tab, or a partial day.
- A new ratio such as TV spend as a percentage of total spend should be one calculated field, not a new export, a new tab, and a new set of formulas.
- A warehouse with a BI tool on top fixes this by separating three jobs: loading data, modeling it once, and showing it.
- Sheets still have a place as an input, for example a TV or agency spend log that has no API.
Why does a Google Sheets dashboard break?
It breaks because one file is doing three jobs: receiving data, transforming it, and displaying it. Any change upstream ripples straight into the numbers people read.
Connector schema changes
Ad platforms rename, add, and retire fields. When the connector feeding your sheet follows that change, a column shifts or a header changes. Every VLOOKUP or QUERY that pointed at the old column now returns blanks or, worse, the wrong column. Nothing errors, so nobody notices until a number looks off.
Size limits
Google caps a spreadsheet at 20 million cells. Daily ad data by campaign and ad set, across several platforms and a few years, adds up. Long before the cap, large sheets get slow, and people start trimming history to keep them usable.
Manual exports
Some data never arrives by connector. TV, podcast, influencer, and retail data often come as an invoice or a CSV from an agency. Someone has to remember to paste it in, in the right format, every week. When they're on holiday, the dashboard is quietly a week behind.
Formulas tied to fixed ranges
A formula like =SUM(B2:B400) works until row 401 arrives. Named ranges and open-ended ranges help, but every new tab copies old patterns, and one hard-coded range is enough to understate a month.
No single definition
This is the one that causes arguments. If "total spend" is calculated in four tabs, it can include agency fees in one and exclude them in another. Two people can look at "the dashboard" and quote different CAC. See why Shopify, finance, and marketing report different revenue for the same problem on the revenue side.
Why is every new question a new export?
In a sheet, the data and the calculation live together. So a new question means new data shaped a new way.
Take TV spend as a percentage of total spend. In a sheet, you often end up popping into Google Sheets, creating an export, setting it up, and then writing formulas that line up TV invoices with platform spend by week. Next month someone asks for it by month, or excluding retail, and you do it again.
In a warehouse with a semantic layer or a BI model on top, spend from every channel already sits in one table with a channel column. The ratio is one calculated field:
TV share of spend = SUM(spend WHERE channel = 'TV') / SUM(spend)
Here is that calculation on an illustrative month. The numbers are synthetic.
| Channel | Spend | Share of total |
|---|---|---|
| Meta | $90,000 | 45.0% |
| $50,000 | 25.0% | |
| TV | $40,000 | 20.0% |
| Podcast | $20,000 | 10.0% |
| Total | $200,000 | 100.0% |
Once that field exists, anyone can slice it by week, month, region, or campaign without another export. That's what "do things a bit more dynamically" means in practice: the definition is written once, and the view changes around it.
Google Sheets vs warehouse and BI: what changes?
The main change is that loading, modeling, and display become separate layers, each with an owner. When something breaks, it breaks in one layer, and you can see where.
| Google Sheets dashboard | Warehouse with BI on top | |
|---|---|---|
| Where data lands | Tabs written by connectors or pasted by hand | Raw tables loaded on a schedule |
| Where metrics are defined | In formulas, often per tab | Once, in the model or semantic layer |
| A new ratio | New export, new tab, new formulas | One calculated field |
| Size | Capped at 20 million cells per spreadsheet | Years of order and ad history at campaign or order level |
| When a source changes | Silent blanks or shifted columns | Load or test fails in one place, with an alert |
| Freshness | Hard to tell when each tab last updated | Freshness checked per source |
| History | Often trimmed to stay fast | Kept, so you can restate past months |
| Access control | Share the file, or don't | Row and column permissions by role |
| Cost | Low to start | Warehouse, loader, and BI subscriptions, plus setup |
A warehouse isn't free, and for a small brand with three channels a well-kept sheet can be the right call. The move pays off when people spend more time fixing the sheet than reading it. Our reporting time calculator puts a number on that time for your team.
Do you have to give up spreadsheets?
No. Most of the people reading the dashboard like spreadsheets, and they don't need to stop.
Two patterns work well. First, keep sheets as inputs for data that has no API, such as a weekly TV and agency spend log, and load that sheet into the warehouse like any other source. Second, use a BI tool that feels like a spreadsheet. We use Sigma for this, so marketing can still write formulas, but on modeled warehouse data rather than pasted exports.
What changes is where the definition lives. "Total spend" and "TV share of spend" are defined once, upstream, and every view reads the same definition. That's the job of a semantic layer.
What does the move look like?
Setup is the heavy part, and ongoing work is lighter once definitions are agreed. The order matters more than the tools.
- List the numbers people actually read today, and write down how each one is calculated.
- Agree one definition per metric, including what's in and out of "spend".
- Load each source into the warehouse with a connector. See how to choose an ingestion tool.
- Load the manual sources, such as TV invoices, from a single, shared input sheet with fixed columns.
- Model spend, orders, and customers into a few clean tables.
- Rebuild the dashboard in BI, and run it next to the sheet until the numbers match.
- Retire the sheet tabs that the new view replaces.
For which daily numbers to put on the new view, see daily DTC KPIs by channel.
Frequently asked questions
Why does my Google Sheets dashboard show blanks after it refreshes?
Usually because a connector field changed name or position, and a formula still points at the old column. The refresh succeeded, but the formulas no longer find what they expect.
How many rows can Google Sheets handle for marketing data?
Google caps a spreadsheet at 20 million cells, not a row count, so the limit depends on how many columns you have. Large sheets get slow well before that cap.
How do I calculate TV spend as a percentage of total spend?
Divide TV spend by total spend across all channels for the same period, using the same cost rules for both. In a warehouse with BI, that's one calculated field you can slice by week, month, or region.
When should a DTC brand move from Google Sheets to a data warehouse?
When fixing the sheet takes more time than reading it, when two people quote different numbers for the same metric, or when you need order-level data and years of history together.
Can I keep Google Sheets as a data source?
Yes. Sheets work well as an input for data with no API, such as TV or agency spend. Load the sheet into the warehouse on a schedule, with fixed columns, so it's modeled like every other source.
What to do next
Pick the one number that causes the most arguments in your current sheet and write down how each tab calculates it. That's where the move starts.
To see dynamic views on a synthetic DTC brand, including channel CAC and spend shares, try the CAC apportionment demo. If you'd like help planning the move, book a call with Linus.
Part of the Ecommerce reporting guides, a reading path through related articles.

Linus Tse
Founder of Greyfield Data. Built 400+ dashboards. Certified in Sigma, Snowflake, Tableau, and Power BI.
About Linus

