A weekly metrics report template for startups that people read

Our launch post on LinkedIn did about 1,200 impressions in a couple of days. It felt like a good week. Then our engineer bot looked at the analytics and reported that the post had sent us zero visits, and that we had zero real signups.

The report was the problem. We'd been counting the number that went up and ignoring the one that mattered. The same day we rewrote the week around a single goal (ten real teams using the product) and put a founders page live.

That's the job of a weekly metrics report. It should make a bad week obvious on Monday, not three weeks later.

The six sections, in order

# Section What goes in it Why it's there
1 The goal One number against its target ("4 of 10 real teams") Everyone should know the score in two seconds
2 What moved The two biggest changes, up or down, one sentence each on why This is the part everyone reads
3 The table 6-8 metrics, same rows every week: this week, last week, change So trends are visible and nothing quietly drops off
4 Last week's to-dos Each one: done, not done, or dropped Plans that don't happen are a metric too
5 What broke Jobs that didn't run, data that's missing, numbers you don't trust A gap you report is better than a number you guessed
6 Decisions needed Each with a default and a date So the report ends in action

Section 4 is the one most templates leave out, and it's the one that caught us. Our weekly check of how AI answer engines describe us came back the same three weeks in a row. We were named in 1 of 15 answers, and Bing still had 0 of our pages indexed. In week three the report also noted that none of week two's to-dos had been done. So the flat number said nothing yet about whether the plan worked. Nobody had worked it, and only the to-do section showed that.

The template

Copy this and keep the order.

WEEKLY METRICS, week of [date]

GOAL: [metric] is [x] of [target]. ([up/down/flat] from [last week])

WHAT MOVED
- [Metric] [up/down] [from -> to]. Why: [one sentence].
- [Metric] [up/down] [from -> to]. Why: [one sentence].

TABLE
| Metric | This week | Last week | Change | Source |
| ...    |           |           |        |        |

LAST WEEK'S TO-DOS
- [ ] / [x] [to-do], [owner]

WHAT BROKE OR IS MISSING
- [job / data / number], [what we did about it]

DECISIONS NEEDED
- [decision]. Default: [option], starting [date] unless someone says otherwise.

What goes in the table depends on your stage. For an early product, something like: site visits, signups, activated (did the thing that matters once), still active after a week, paying, revenue, failed payments. Pick definitions once and write them at the bottom of the first report. If "active" changes meaning in week six, the trend is broken.

12 of 20paying teams (up from 11)

Rules that keep it honest

  • Every number has a source column. If a number has no source, it doesn't go in.
  • Reach (impressions, views, followers) gets its own line, below results. It never counts as a result.
  • Show raw numbers next to percentages. "Signups up 40%" is less honest than "10 to 14."
  • A missing number says "missing" and why. Never carry last week's number forward.
  • The top three lines can be read in thirty seconds.
  • The report says when it didn't run.

That last rule is from a real Saturday. Our team's model plan hit its weekly limit, and six scheduled jobs didn't run, including the summary that would have told us. A bot can't write "I couldn't run" when the model is what's missing. So a scheduled report needs a plain alarm that doesn't depend on AI, and the next report should list what was skipped.

An example: a five-person team's first Monday report

This is an example, with made-up numbers.

  1. On Friday the founder writes in a thread: "Every Monday at 09:00, post a metrics report using this template. Goal is 20 paying teams. Pull signups and activation from analytics and paying teams and failed payments from billing."
  2. The first Monday report comes back with the goal line "12 of 20 paying teams (up from 11)," two moves (signups 31 to 22, "a newsletter mention the week before didn't repeat"; failed payments 1 to 3, "two expired cards"), a seven-row table with sources, and one gap: "Activation data missing, the analytics export failed. Numbers above don't include it."
  3. The founder changes two things. The bot had written "signups down 29%"; they ask for "31 to 22" first, with the percentage after. They also delete a line about follower count from the table and move it under "Reach."
  4. The founder approves posting it in the team thread as is. The bot offers to email a shorter version to investors. Since that leaves the company, it asks first, and the founder approves after cutting the failed-payment line.

The edits in step three go into the bot's instructions, so the second report needs none of them.

#metrics
Reports bot

Monday 09:00 report. Goal: 12 of 20 paying teams (up from 11). Signups down 29%. Failed payments 1 to 3, two expired cards. Activation data missing, the analytics export failed.

You
You

raw numbers first, move followers to Reach

Reports bot

Done. Signups 31 to 22 (down 29%). Followers moved under Reach. I've saved both changes to my instructions. Want a shorter version emailed to investors?

Reports bot
Approval needed

Email investor summary

ApproveDeny
You
You

Approved, without the failed-payment line.

An example thread, shortened.

How to set it up in Caret

We run our own weekly checks this way, on a schedule, posted into a team thread.

  1. Create a bot (Claude Code or Codex, the model you want, on your own Claude or ChatGPT plan) and give it an owner, usually the founder.
  2. Write its job: the template above, the definitions, and where each number lives.
  3. Connect your data tools and Slack through connected apps. Threads are bridged to Slack both ways, so the report lands where your team reads.
  4. Add a schedule such as "Mondays 09:00." Its memory lasts between conversations, so it can fill in "last week" itself.
  5. Ask for a file when you want one: a Word doc, an Excel sheet or a short deck, attached in the thread.
  6. Anything that leaves the team, like the investor email, goes through approvals. An admin approves or denies with one click.

Every bot works on its own computer in Caret Cloud, so the 09:00 report runs whether your laptop is open or not. Caret's Team plan is $40 a bot a month, with a 7-day trial.

Asks to start with:

"Post this week's metrics report and list anything you couldn't pull."

"Compare the last four reports and tell me which to-dos keep slipping."

"Turn this report into a three-slide deck for the investor update."

FAQ

What should a weekly startup metrics report include? One goal number, the two biggest changes with reasons, a fixed table of six to eight metrics with sources, last week's to-dos, what broke, and decisions needed.

How do I automate a weekly metrics report to Slack? Give a bot the template, the data sources and a schedule like Monday 09:00. Have it post in a thread bridged to Slack, and add a plain alarm in case the run fails.

Which metrics should an early-stage startup track weekly? Visits, signups, activation, retention after a week, paying customers, revenue and failed payments. Keep impressions and followers on a separate reach line.

For more on putting reports on a schedule, see automated weekly reports with AI. Put a bot on it: start your 7-day trial or download the Mac app.

See it in CaretAutomated Weekly Reports With AI BotsCaret (caretbot.com) runs automated weekly reports with AI. Bots on a schedule pull your metrics, check AI answers and post the report to Slack.

More from the blog

Account research before a sales call: a one-page brief templateAn AI agent approval policy template you can copy todayHow to organize AI agents on a small team: our five-bot org chart