# Building the Metrics Table in Airtable **From Chapter 12.3 of *The 4-Hour Side Hustle*.** One row per month. Eight inputs, four formulas, and a refusal to add a fifth metric. Twenty minutes, and it's the last piece of your Brain. You need `metrics.csv` from this bundle. --- ## Step 1 — Import 1. Open `Command Center` → table tabs → **+** → **Import data** → **CSV file**. 2. Upload `metrics.csv` with **"Use first row as header"** on. 3. Rename the table `Metrics`. One example row: Marcus's month fourteen. Leave it until the formulas check out — it's the only way to know they're right. --- ## Step 2 — Field types | Field | Type | Notes | |---|---|---| | **Month** | Single line text | Primary. Format `2026-01` — text, not date, so it sorts correctly and never shifts by timezone | | **Revenue** | Currency | 2 decimals | | **Payment Processing** | Currency | 2 decimals | | **Software** | Currency | 2 decimals | | **Profit** | Currency | 2 decimals | | **Hours Worked** | Number | 1 decimal | | **New Subscribers** | Number | 0 decimals | | **Sales Count** | Number | 0 decimals | **On costs being split into two fields:** processing fees scale with revenue and the software bill doesn't, and contribution margin needs the processing figure on its own. These are the same two categories your bookkeeping rules already sort transactions into in 12.2, so nothing new is being tracked. **On `Hours Worked`:** this is the only number you enter by hand, and it has to be. No system can observe it, and the whole book turns on it. Log it weekly in the Sunday review from your block adherence — five seconds, and it's what makes the other three numbers mean anything. --- ## Step 3 — The four formulas ### `Revenue per Hour` ``` IF({Hours Worked} > 0, {Revenue} / {Hours Worked}, BLANK()) ``` Format as **Currency**, 2 decimals. On the example row: **$102.29**. *This is the number the book exists to move.* ### `Contribution Margin %` ``` IF({Revenue} > 0, ({Revenue} - {Payment Processing}) / {Revenue}, BLANK()) ``` Format as **Percent**, 0 decimals. On the example row: **95%**. Note it uses `Payment Processing`, **not** total costs. Contribution margin asks what's left after the costs that scale with each sale; your software bill is fixed and belongs in profit, not here. Using total costs would give 90% and answer a different question. ### `Minutes per Subscriber` ``` IF({New Subscribers} > 0, ({Hours Worked} * 60) / {New Subscribers}, BLANK()) ``` Format as **Number**, 1 decimal. On the example row: **18.5 minutes**. This is your organic acquisition cost in the only currency you're actually short of. It's also the floor any paid traffic has to beat. ### `90-Day Value` ``` IF({Sales Count} > 0, {Revenue} / {Sales Count}, BLANK()) ``` Format as **Currency**, 2 decimals. On the example row: **$347.80**. **This one is honest rather than exact, and it's worth knowing why.** True 90-day value is what a customer is worth across the three months *after* they first buy — and you cannot calculate that until you have three months of orders to look back on. For your first quarter, revenue divided by customers is the stand-in: it answers the same question with the data that actually exists. **From month four, replace it.** Add a step to the monthly scenario from 12.2 that searches `Orders` for the trailing ninety days, sums `Amount`, divides by the number of distinct customers in that window, and writes the result in. At that point it stops being a formula and becomes a populated number, like Revenue. **Do not build a proper cohort model** — a Customers table, first-purchase dates, per-cohort rolling windows. More correct, costs an evening plus permanent maintenance, and feeds a number you look at once a month to decide whether you can afford to buy a customer. The trailing figure answers that well enough. --- ## Step 4 — Two views ### `Last 12 months` (Grid) Sort `Month` descending. Show all twelve formula and input fields. Your working view, and the one the annual zoom-out uses. ### `Trend` (Grid, or an Interface chart) Sort `Month` ascending, showing `Month`, `Revenue per Hour`, `Contribution Margin %`. **Revenue per hour is the only line worth watching over a year.** If it's flat across twelve months, no amount of weekly optimization will fix it and something structural is wrong — usually the Chapter 2 problem, still. --- ## Verify against the example row Marcus's month fourteen: $1,739 revenue, $89 processing, $77 software, 17.0 hours, 55 subscribers, 5 sales. | Field | Expected | |---|---| | Revenue per Hour | **$102.29** | | Contribution Margin % | **95%** | | Minutes per Subscriber | **18.5** | | 90-Day Value | **$347.80** | If any come back blank, a Currency or Number field imported as text. Airtable fails that silently. Delete the example row once all four are right. --- ## Refuse the fifth metric You will be tempted by open rates, follower counts, impressions, time-on-page, engagement rate. Don't. Not because they're meaningless, but because **a metric you look at and don't act on is a small recurring tax on your attention** — and attention is your actual scarce resource at four hours a week. **The test for any candidate:** *what decision would a change in this number cause me to make?* If you can't answer in one sentence, it's a number to look at once a quarter, not a number for the dashboard. --- ## Checklist - [ ] `Metrics` table in the `Command Center` base - [ ] `Month` is **text** in `YYYY-MM`, not a date field - [ ] Costs split into `Payment Processing` and `Software` - [ ] All four currency fields set to Currency, not text - [ ] Four formulas added - [ ] All four verified against the example row - [ ] Example row deleted afterwards - [ ] `Hours Worked` added to the Sunday review checklist - [ ] `90-Day Value` upgrade diarised for month four - [ ] Two views built - [ ] No fifth metric