How to build a self-updating weekly report in Google Sheets with Claude
Build it once, schedule it, and your Monday report writes itself. Works on the connectors you already have.
What you're building
A weekly performance report that lives in a Google Sheet and refreshes on its own every Monday: revenue, orders, spend by channel, blended CAC, new vs repeat, week over week, with a plain-English "what changed" summary and anything that moved more than 10 percent flagged.
What you need
Claude (Cowork or Desktop) with connectors enabled
The tools you already report on: Shopify, Meta Ads, Google Ads, Klaviyo
A blank Google Sheet named "Weekly Report"
About 15 minutes, once
Step 1: Connect your sources to Claude
In Claude, open Connectors and enable each source, then authenticate: Shopify, Klaviyo, Meta Ads, Google Ads, and Google Drive (so Claude can write into your sheet).
All four data sources have MCP connectors today, so Claude reads them directly. No CSV exports.
Have a channel without a native connector yet (TikTok Shop, Amazon, your 3PL)? You have three options:
Bridge it through the Zapier MCP
Pipe it into a warehouse (Snowflake, BigQuery) and connect that warehouse's MCP
Export a CSV and drop it into the chat each week (the manual fallback)
Step 2: Point Claude at the sheet and describe the report once
Open your "Weekly Report" sheet, then give Claude this prompt:
You have access to my Shopify, Meta Ads, Google Ads, Klaviyo, and the Google Sheet titled "Weekly Report." Build a weekly performance report in that sheet. Show this week vs last week with percent change for: - Net revenue (Shopify) - Orders (Shopify) - New vs returning revenue (Shopify) - Ad spend by channel (Meta, Google) - Blended CAC (total ad spend divided by new customers) - Email and SMS revenue (Klaviyo) Add a summary line at the top in plain English describing what changed, and flag any metric that moved more than 10 percent. Use live formulas where you can, and label the date range.
Claude reads your live numbers and writes the whole report into the sheet, formulas and all.
Step 3: Review it, then save the prompt
Open the sheet and check the numbers against something you already trust. When it looks right, save the prompt. Next week is a paste, not a rebuild.
Step 4: Schedule it so you never touch it again
In Claude Cowork, save that prompt as a recurring scheduled task:
Frequency: every Monday, early (for example 7am)
Action: update the "Weekly Report" sheet and send you the link plus the one-line summary (email or Slack)
That's the whole thing. The report now builds itself before you're in.
Polar upgrade
Make the pack something you can stand behind
Optional — but for a board pack, this is the part that decides whether the room trusts it.
Run the version above and Claude is joining six tools that each count revenue, spend, and “new vs repeat” a little differently. It works, right up until someone finds two different net-sales numbers and stops trusting the whole pack.
Polar removes that risk: it consolidates the whole business into one governed source, each metric defined once, and hands Claude a single clean feed.
Enable the Polar MCP and swap Step 3’s data sources for:
Prompt
Using the Polar MCP, the Plan tab, and the “Board Pack” sheet, write the same pack, but pull revenue, spend by channel, contribution margin, and new vs repeat directly from Polar’s semantic layer so every number reconciles to one definition. Keep the variance commentary, the top 3 flags, and the charts.
With Polar you can also rebuild the pack under any of its 10 attribution models if the board wants the picture a different way.
Starter prompts to extend it
"Add a cohort tab: 30, 60 and 90 day repeat rate by the product a customer first bought."
"Add a second summary written for my CEO: three sentences, no jargon."
"Break spend and CAC out by campaign, not just channel."
"Add a small chart of revenue by week for the last 12 weeks."
A few honest notes
Check the first run against a number you trust before you rely on it. Verify, then automate.
The report is only as clean as its inputs. If your definitions conflict across tools, fix that first (or let Polar handle it).
Keep the prompt somewhere safe. It is the actual asset here.