90-day growth audit
A structured pass over offer, site, channels, and operations before you start a sprint. If the scoreboard is blank, marketing is not the first fix.
Block half a day. Paste the homepage hero, last three article ledes, and last ten outbound notes next to the four-line offer. Red is the work.
This audit is week 0 of the 90-day sprint. Do not buy a channel while the mismatch list is still long.
flowchart LR
O["Offer"] --> S["Site"]
S --> C["Two channels"]
C --> P["SOPs"]
P --> N["Five numbers"]
If you cannot name last month’s qualified conversations, you have a counting problem.
Offer (days 1 to 7 of the sprint)
- Who, job, unique value proposition (UVP), proof: written on one page
- Homepage hero matches those four lines
- One primary call to action (CTA)
- Article ledes and outbound notes marked against the offer. Mismatches listed
Site can close it
- Work page leads with a case that matches the offer
- Contact form asks only what the first reply uses
- A long URL with JavaScript off still shows the words (not an empty shell)
- Unknown paths 404. They do not 200 a thin app shell
Two channels, same sentence
- Two channels chosen (typical studio pair: search + outreach)
- Search pages teach toward the offer. They do not invent a second company
- Outbound uses the same who / what / proof, one URL, one ask
- If paid exists, the landing promise matches the homepage
Operations
- Intake standard operating procedure (SOP) exists: capture, store, owner, same-day reply
- Every inbound is a row. Screenshots in a group chat do not count
- Service level agreement (SLA) is a number, measured last week
Five numbers (last 30 days)
Write actual counts. Zero is a valid answer. Blank is not.
| Number | Last 30 days | Source |
|---|
| Qualified conversations | | |
| Proposals sent | | |
| Close rate (won / sent) | | |
| Site contact completions | | |
| Hours to first human reply (median) | | |
- Table filled. Customer acquisition cost (CAC) is optional until paid spend or a sales hire exists