---
title: "Automate Snowflake Reports in Google Sheets"
canonical: "https://www.owox.com/blog/articles/automate-snowflake-google-sheets"
updated: "2026-10-05"
---

# Automate Snowflake reports in Google Sheets with OWOX Data Marts

To report from Snowflake in Google Sheets, publish the query once as a Data Mart and attach a Google Sheets report that runs on a schedule. Readers open a sheet that is already current, they need no Snowflake login, and each refresh is one short run on a warehouse you chose.

[Snowflake](/blog/topics/snowflake) · Updated October 1, 2026 · [Ievgen Krasovytskyi](/team/ievgen-krasovytskyi) · 6 min read

![Automate Snowflake reports in Google Sheets with OWOX Data Marts](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/thumbnail/1-mtkwtr.png/public)

Most Snowflake data ends its journey in a [spreadsheet](/product/spreadsheets). The marketing lead wants spend and revenue by channel in the sheet she already uses, finance wants the same numbers in theirs, and neither is going to log in to Snowflake to get them.

The question is how the numbers get there. A CSV export is out of date by the afternoon. A spreadsheet connected live to Snowflake runs a query every time someone touches it. The route in this guide is neither: **one query, published once, written into the sheet on a schedule**. It uses [OWOX Data Marts](https://www.owox.com/app-signup) on top of Snowflake, and the SQL was validated on Snowflake.

## What goes wrong without a shared definition

The spreadsheet is rarely the problem. The path into it is.

*   **Exports drift.** Each one is a snapshot, and nobody can say which snapshot a chart was built from.
*   **Logic forks.** One analyst counts refunded orders, another does not. Both sheets say “revenue”.
*   **Every question is a ticket.** The analyst becomes the refresh button.
*   **Live connections are paid for by the query.** In Snowflake a warehouse bills for every second it is awake, so a sheet that re-queries on open keeps it awake.

All four have the same fix: put the definition in one place, and deliver from there.

## How the pieces fit

Three objects do the work.

**A Data Mart** is a SQL query, a table or a view that an analyst publishes under a business name, with documented fields. It lives on your Snowflake storage; nothing is copied elsewhere.

**A destination** is where results are delivered. Google Sheets here, though the same Data Mart can also go to Data Studio, Slack or email.

**A report** connects them: this Data Mart, these columns, that tab, on this schedule.

The split matters because it separates two kinds of change. The analyst changes the logic in the Data Mart. The reader changes what they do with the numbers in the sheet. Neither can break the other’s work.

## The Turning Point

OWOX Data Marts

See your first report built in real time. _15 minutes._

1.  Connect your data warehouse
2.  Pick your metrics
3.  Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

[Book a Demo](/book-a-call)

We'll use your actual use case

## Step 1: connect Snowflake, on its own warehouse

Add a storage of type [Snowflake](/data-storages/snowflake). The [setup guide](https://docs.owox.com/docs/storages/supported-storages/snowflake/) asks for an account identifier, a warehouse name and one of two authentication methods: a key pair, which it recommends, or a username with a programmatic access token.

The guide also recommends a **dedicated warehouse** for OWOX Data Marts, and for a reporting workload that is worth doing properly:

```
CREATE WAREHOUSE reporting_wh
  WAREHOUSE_SIZE = 'XSMALL'
  AUTO_SUSPEND = 60
  AUTO_RESUME = TRUE;
```

An X-Small warehouse uses 1 credit per hour and bills per second with a 60-second minimum. With auto-suspend at a minute, a report that runs once a day costs about a minute of X-Small time a day, and it has its own line when you look at credits by warehouse. [Snowflake pricing explained](/blog/articles/snowflake-pricing-cost-control) has the rates and the query for that.

## Step 2: publish the query as a Data Mart

Create a Data Mart on the Snowflake storage and choose its input: SQL, an existing table or an existing view. A report of sessions, orders and revenue by channel and day looks like this:

```
SELECT
  s.date,
  s.source_medium,
  COUNT(DISTINCT s.session_id) AS sessions,
  COUNT(DISTINCT o.order_id) AS orders,
  SUM(p.price * o.quantity) AS revenue
FROM ecommerce.public.sessions s
LEFT JOIN ecommerce.public.orders o
  ON s.session_id = o.session_id
LEFT JOIN ecommerce.public.products p
  ON o.product_id = p.product_id
WHERE s.date >=
  DATEADD(day, -90, CURRENT_DATE())
GROUP BY s.date, s.source_medium;
```

The query is checked against Snowflake before it is saved, and the output schema is read from it. That schema is where you make the Data Mart usable by someone who has never seen the tables: an alias and a one-line description for each field, so “revenue” says what it includes.

![SQL Data Mart in OWOX Data Marts on Snowflake, with the SQL definition type selected, the query in the editor and a “Valid SQL code” check – one analyst-owned definition for every report](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/screens/1.png/public)

OWOX Data Marts does not transform the data or rewrite the SQL. If the joins are heavy, build the result as a table in Snowflake on a schedule and publish that table, so each report reads a finished result.

Ad platform data follows the same pattern. If campaigns are loaded into Snowflake by a connector, as in [Facebook Ads to Snowflake](/blog/articles/facebook-ads-to-snowflake-data-marts), the connector’s table is already a Data Mart and can be reported from directly.

## Step 3: add Google Sheets as a destination

Create a destination of type Google Sheets once for the team. The [destination guide](https://docs.owox.com/docs/destinations/supported-destinations/google-sheets/) gives two ways to connect it: Google OAuth with your own account, or the JSON key of a Google Cloud service account. The spreadsheets that reports write to are then shared with that account.

## Step 4: create the report and choose its columns

On the Data Mart’s **Destinations** tab, create a report under the Google Sheets destination. Give it a title, paste the link to the tab it should fill, or create a new sheet from the form, and pick the columns.

![New Google Sheets report form in OWOX Data Marts on a Snowflake Data Mart of Facebook Ads data, asking for the document link with sheet ID and listing the columns to include – each report takes only the fields its reader needs](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/screens/2.png/public)

Choosing columns per report is how one Data Mart serves several audiences. The performance team takes campaign and ad set detail. The leadership summary takes five fields. Both read the same definition.

When the report runs, the rows are **written into the sheet**. The report owns only the columns it writes: headers and data in that range are replaced on each refresh, and whatever sits to the right of it, formulas, comments, a pivot, is preserved.

![Destinations tab of a Snowflake Data Mart in OWOX Data Marts listing Data Studio, Email, Slack and a Google Sheets report with a successful last run – one definition, several places to read it](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/screens/3.png/public)

## Step 5: schedule it

On the **Triggers** tab, add a report run trigger with the cadence the data deserves: daily before the team starts, weekly on Monday, or more often if the source really changes that fast. **Run History** then lists each run with its time and status, which is where you look first if someone says the sheet looks old.

## Letting people pull the data themselves

Scheduled reports cover fixed deliverables. For everything else there is the [OWOX Data Marts extension](https://workspace.google.com/marketplace/app/owox_data_marts/94902851409) for Google Sheets. A business user opens it in a spreadsheet, picks a published Data Mart, chooses columns, adds filters and sorting, and runs it.

![OWOX Data Marts extension open in Google Sheets with a Data Mart selected and controls for columns, filters, slices, sort and row limit – a business user builds their own pull from a published definition](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/screens/4.png/public)

The extension can keep that pull on a schedule too, so the sheet a person built for themselves stays current.

![Google Sheet filled by the OWOX Data Marts extension, with the selected columns in the sidebar and a scheduled refresh set to daily at 09:00 – self-service that still reads the governed Data Mart](https://cdn.owox.com/www/content-marketing-article/automate-snowflake-google-sheets/screens/5.png/public)

They never see the SQL and never need a Snowflake login. They can only reach what an analyst has published, which is the control that makes self-service safe. There is an [Excel add-in](https://marketplace.microsoft.com/en-us/product/WA200011946) for teams that work there.

## Structuring the sheet for the people who read it

A few habits keep a reporting spreadsheet usable after the third month.

*   **One imported tab per report, untouched.** Build charts and summaries on separate tabs that reference it.
*   **Put your own columns to the right.** They survive every refresh.
*   **Name tabs for the reader.** “Channels, daily” beats “Sheet7”.
*   **Say where it comes from.** A line with the Data Mart’s name and refresh time saves the question.

For the wider picture of where this layer sits, [Snowflake as a reusable reporting layer](/blog/articles/snowflake-reusable-reporting-layer) covers the analyst’s side and [self-service marketing analytics on Snowflake](/blog/articles/snowflake-self-service-marketing-analytics) covers the marketing team’s. The same route on Databricks is described in [Databricks to Google Sheets](/blog/articles/databricks-to-google-sheets).

## Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

*   No AI hallucinations
*   Analyst-governed definitions
*   Every number traces to SQL

[Get started free](https://www.owox.com/app-signup)

## FAQ

## Frequently Asked Questions

Why keep the query in Snowflake and only the result in Google Sheets?

Because the two change for different reasons. The analyst changes the logic in one place, the Data Mart, and every sheet that reads it follows. The reader works with rows in a spreadsheet, adds their own columns to the right, and cannot alter the definition. Nobody needs a Snowflake login to read the numbers, and no copy of the SQL lives in a spreadsheet.

What are the steps to deliver Snowflake data to Google Sheets on a schedule?

Connect Snowflake as a storage in OWOX Data Marts, ideally on its own small warehouse. Publish a SQL query, table or view as a Data Mart and describe its fields. Add Google Sheets as a destination, create a report that names the tab to fill and the columns to include, then add a report run trigger. Run History shows each run with its time and status.

How do readers know what a column in the sheet means?

Each Data Mart has an output schema where the analyst gives every field an alias in business language and a description. Those definitions belong to the Data Mart, so every report built on it uses the same names, and the reader does not have to open the SQL to learn what a number includes.

Why write the rows into the sheet and not connect the sheet live to Snowflake?

A live connection runs a query whenever someone opens or refreshes the sheet, and in Snowflake a warehouse bills for every second it is awake. A scheduled report runs once, writes the rows, and lets the warehouse suspend. Twenty readers of that sheet cost one run. The data is as fresh as the schedule you chose.

How can I schedule automatic data refreshes from Snowflake Data Marts to Google Sheets with OWOX?

On the Data Mart's Triggers tab, add a report run trigger and choose the cadence: daily, weekly or at an interval, in the time zone you pick. Each run executes the query on Snowflake and rewrites the report's range in the sheet. Columns you added to the right are left in place.

What does OWOX Data Marts do in a Snowflake to Google Sheets setup?

It publishes and delivers. An analyst's SQL query, table or view becomes a named Data Mart on your Snowflake storage; a report writes its rows into a Google Sheets tab on a schedule; and business users can pull a published Data Mart themselves with the Sheets extension. It does not transform the data or rewrite the SQL.

How does a published Data Mart improve Snowflake reporting in Google Sheets?

It gives every sheet the same source. The definition of a metric is written once, in the Data Mart, with a description for each field. Each report takes the columns its reader needs from that definition, so the marketing sheet and the finance sheet agree, and a change to the logic is made in one place.

What are the drawbacks of exporting CSV files from Snowflake to Google Sheets?

A CSV export is a snapshot: it is out of date as soon as the data changes, and nobody can tell which snapshot a chart was built from. Each export is made by hand, so the logic can differ from one analyst to the next, and several versions of the file circulate at once. A scheduled report replaces the export with one definition and a known refresh time.

## Who wrote this

![Ievgen Krasovytskyi](https://cdn.owox.com/www/webflow/68404586b341508a789a4aa5_.png/public)

[Ievgen Krasovytskyi](/team/ievgen-krasovytskyi) · Head of Marketing

Ievgen Krasovytskyi is the Head of Marketing at OWOX, leading strategy across content, SEO, product marketing, and AI-powered automation. With deep expertise in analytics infrastructure, data warehouses, and marketing technology, he builds systems that connect marketing performance to business outcomes. Ievgen writes about SaaS growth, analytics workflows, and the future of AI in marketing operations.

[LinkedIn](https://www.linkedin.com/in/ievgen-krasovytskyi-a38a1253/) · [All articles](/team/ievgen-krasovytskyi)

[Snowflake](/blog/topics/snowflake)

## Related articles

[Snowflake · How to Load Facebook Ads Data into Snowflake with OWOX Data Marts · October 1, 2026](/blog/articles/facebook-ads-to-snowflake-data-marts)

[Snowflake · How to Load Google Ads Data into Snowflake with OWOX Data Marts · October 1, 2026](/blog/articles/google-ads-data-snowflake-owox)

[Snowflake · How to Load TikTok Ads Data into Snowflake with OWOX Data Marts · October 1, 2026](/blog/articles/tiktok-ads-data-snowflake)

[See all articles →](/blog/articles)

## Book a call

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Schedule a meeting

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Links

Pages this page links to, on this site and on docs.owox.com. Where the page has a Markdown twin, its address follows the link.

- [Snowflake](https://www.owox.com/blog/topics/snowflake) — /blog/topics/snowflake.md
- [Ievgen Krasovytskyi](https://www.owox.com/team/ievgen-krasovytskyi) — /team/ievgen-krasovytskyi.md
- [spreadsheet](https://www.owox.com/product/spreadsheets) — /product/spreadsheets.md
- [OWOX Data Marts](https://www.owox.com/app-signup)
- [Book a Demo](https://www.owox.com/book-a-call) — /book-a-call.md
- [Snowflake](https://www.owox.com/data-storages/snowflake) — /data-storages/snowflake.md
- [setup guide](https://docs.owox.com/docs/storages/supported-storages/snowflake)
- [Snowflake pricing explained](https://www.owox.com/blog/articles/snowflake-pricing-cost-control) — /blog/articles/snowflake-pricing-cost-control.md
- [Facebook Ads to Snowflake](https://www.owox.com/blog/articles/facebook-ads-to-snowflake-data-marts) — /blog/articles/facebook-ads-to-snowflake-data-marts.md
- [destination guide](https://docs.owox.com/docs/destinations/supported-destinations/google-sheets)
- [Snowflake as a reusable reporting layer](https://www.owox.com/blog/articles/snowflake-reusable-reporting-layer) — /blog/articles/snowflake-reusable-reporting-layer.md
- [self-service marketing analytics on Snowflake](https://www.owox.com/blog/articles/snowflake-self-service-marketing-analytics) — /blog/articles/snowflake-self-service-marketing-analytics.md
- [Databricks to Google Sheets](https://www.owox.com/blog/articles/databricks-to-google-sheets) — /blog/articles/databricks-to-google-sheets.md
- [Snowflake · How to Load Google Ads Data into Snowflake with OWOX Data Marts · October 1, 2026](https://www.owox.com/blog/articles/google-ads-data-snowflake-owox) — /blog/articles/google-ads-data-snowflake-owox.md
- [Snowflake · How to Load TikTok Ads Data into Snowflake with OWOX Data Marts · October 1, 2026](https://www.owox.com/blog/articles/tiktok-ads-data-snowflake) — /blog/articles/tiktok-ads-data-snowflake.md
- [See all articles →](https://www.owox.com/blog/articles) — /blog/articles.md
