---
id: "10.13"
title: "Growth metrics"
dept: marketing-and-growth
status: needs-you
owner: Param
branded: false
last_verified: 2026-10-26
sources:
  - "brand-directions/book/content/j.js j-1 what-we-count, onboarding-funnel, events"
  - "brew origin/main a559de6: public/index.html:1-2; build.js:222-226, 236, 1009; brief-status.js:1-6; digest.js:10-12, 192; treg.js:119"
  - "handbook content/product/product-metrics.md, content/ai-and-models/cost-per-brand.md"
  - "memory: brew-access-rules, brew-prod-backend, brew-live-stores"
---

# Growth metrics

## Answer

The numbers that say whether Brew is growing, from a visit to a brand handing off work every week and what each brand costs; almost none are counted today, no targets exist, and Param must pick the few we count first.

## Today

### What can be counted now

| Record | What it holds | Source |
|---|---|---|
| Who started each read | `private/created.json`: the email and the time, per brand | [src: brew/build.js:236] |
| Visitors log since 23 Oct | Every signed in email that opens a brand, with its access kind; nothing earlier | [src: memory brew-access-rules] |
| Sessions and an access log table on production | Sign ins on feed.joinsquareup.com | [src: memory brew-prod-backend] |
| Briefs sent to our team | Each status step with its time and who moved it | [src: brew/brief-status.js:1-6] |
| Briefs shared with the brand's own team | Copied, never sent, so no record that counts them | [src: brew/brief-status.js:6] |
| Monday digest | When it went and to how many | [src: brew/digest.js:192] |
| Plays ready emails | One sent key per email and kind | [src: brew/build.js:1009] |
| Spend per brand and month | Outside data and model spend files | [src: brew/treg.js:119] [src: handbook content/ai-and-models/cost-per-brand.md] |

### What cannot be counted now

| Gap | Source |
|---|---|
| Visits to the landing, the demo or the docs: no analytics on our own pages | [src: brew/public/index.html:1-2] [src: git grep gtag googletagmanager fbq origin/main] |
| Hearts, makes and hand offs as events in one log: no usage analytics | [src: handbook content/product/product-metrics.md] |
| Read asks that come by DM or email: no shared list | [src: no source found in memory or brew origin/main] |
| Any target for any metric | [src: brand-directions/book/content/j.js j-1 what-we-count] |

The only firm count today is five design partners on production [src: memory brew-live-stores].

## Tomorrow

Proposed for Param, from the old book's funnel and the product metrics.

| Metric | Version | Tag | Definition |
|---|---|---|---|
| Visits | v1 | New | People who open the landing or the ask page, per week |
| Read asks | v1 | New | Store links sent to us, from any channel, per week |
| Sign ins | v1 | New | Work emails accepted; refusals counted apart |
| Reads started | v1 | New | New brands with a starter, per week |
| Reads finished | v1 | New | Reads that end with every step done |
| Activation | v1 | New | A new brand that hearts one, makes one and hands off one in its first week |
| Weekly hand off stores | v1 | New | Stores where anyone hands off a pick in a Monday to Sunday week; the north star in [product metrics](/product/product-metrics) |
| Second Monday | v1 | New | Share of new brands that open Today again the next Monday |
| Cost per brand | v1 | New | Model and data dollars per brand per month, from [cost per brand](/ai-and-models/cost-per-brand) |
| Cost per new brand | v1 | New | Campaign spend plus read cost, divided by activated brands |
| Approved posts | v2 | New | Share of hand offs that become a scheduled post |
| Measured share | v3 | New | Share of shipped picks with a result |
| Paying brands | v1 | New, once pricing is set | Brands on a paid plan |

Rules: these numbers stay inside the team; progress shown to a founder is about what they did, never their sales [src: brand-directions/book/content/j.js j-1 what-we-count].

## How we do it

Proposed, until Param decides:

1. Count every Friday, by hand until analytics exist, and write the week's row below.
2. Sign ins: open the visitors log as staff at `GET /api/admin/visitors` on feed.joinsquareup.com, and count new official emails this week [src: memory brew-access-rules].
3. Reads started: count brands whose `private/created.json` is dated this week. Production stores these as rows in Cloud SQL, so ask an engineer for a read only query; never write to production to count.
4. Briefs sent to our team: read each brand's brief statuses from the ops view.
5. Never count test brands, Cozy Snugglet and Zenant, or our own staff emails.

| Week | Visits | Read asks | Reads started | First hand offs | Weekly hand off stores | Notes |
|---|---|---|---|---|---|---|
| | | | | | | First row once Param picks the metrics |

## Numbers

This document owns every metric in Tomorrow. All are Proposed. None has a target, and none should get one until four weeks of counts exist.

## Open

1. **Which three do we count first?** Proposal: read asks, reads started and weekly hand off stores.
2. **Do we add analytics to the landing and the ask page?** Proposal: yes, one GA4 property with four events: ask, sign in, read started, first hand off; no ad pixel until paid is decided.
3. **Do team hand offs count?** Proposal: yes; log a quiet event when Share with my team copies a brief, so both hand offs count the same.
4. **Who counts on Friday?** Proposal: Param, until a dashboard exists.
5. **When do targets come?** Proposal: after four weeks of counts, Param sets one target for weekly hand off stores only.
