How to See If Clients Actually Read Your Monthly Reports
Every agency carries the same quiet fear: the monthly report — hours of pulling numbers, writing narrative, polishing charts — lands in the client's inbox and evaporates. No reply doesn't mean no problem. The client who stopped reading your reports three months ago is the churn call you get next quarter.
Send each report through a tracked link and the fear becomes a dashboard: who reads, who flicks, who's gone dark — per client, every month, while there's still time to act on it.
One report per client, one link per stakeholder
Each client's report is its own private document; each person on the client side gets their own link. That's what turns “the report was viewed” into “Priya read it Monday, Dev caught up Tuesday”:
curl -X POST https://apdf.io/api/docs \
-H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
--data-urlencode "file=https://your-site.example/reports/july-meridian.pdf" \
--data-urlencode "name=July Report — Meridian Labs" \
-d "is_public=0"
curl -X POST https://apdf.io/api/docs/0e4b8-25426-cdb90/links \
-H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
-d name="Priya Raman" -d email="priya@meridianlabs.example"
Read the account health off the KPIs
One analytics call per client report, and the portfolio sorts itself:
# July Report — Meridian Labs
{ "sessions": 2, "unique_viewers": 2, "avg_duration_ms": 111500, "completion_rate": 88, ... }
# July Report — Brightpath Studio
{ "sessions": 1, "unique_viewers": 1, "avg_duration_ms": 15000, "completion_rate": 50, ... }
# July Report — Okafor Capital
{ "sessions": 0, "unique_viewers": 0, "avg_duration_ms": 0, "completion_rate": 0, ... }
- Meridian is healthy — two stakeholders, nearly two minutes each, 88% completion. The retainer is read, literally.
- Brightpath is drifting — one 15-second flick over two pages. Not angry, not engaged — the most dangerous state, because it looks like silence until renewal.
- Okafor is a flare — zero opens, five days after sending. Check the contact still exists, then pick up the phone. This is next quarter's churn call, available early.
Check whether your ask was ever seen
Reports usually end with a decision request — ours is page 4, “one decision we need from you.” The per-page session data answers a question no reply-silence can: did they even see it? Priya spent 45 seconds on page 4 — she saw the ask and hasn't answered, which is a nudge. Marcus never reached it — his silence isn't a decision, so the ask goes into the body of the next email instead.
Same silence, two completely different follow-ups — that's the difference per-page data makes. (The drop-off tutorial turns this into a habit across all readers.)
Bring the receipts to renewal
Come renewal, the reading history argues for you in both directions: for the engaged client, “your team read every report cover to cover” is evidence the retainer delivers value someone consumes. For the quiet one, three months of unread reports reframes the conversation — not “please renew” but “let's change what we send you, because this format isn't serving you.” Either way you're negotiating from data, not hope.
Where to go from here
The agency stack around this habit.
Related tutorials
Track Who Reads Your Press Kit
Twenty pitches, twenty attached kits, and a silence that could mean anything. Per-journalist links end the blindness: the full read plus asset download says she's writing, the fact-sheet return visit says offer the interview now, and the never-opened rows say re-pitch — not follow up.
Freelancers: A Proposal Workflow Without Per-Seat Tools
Proposal software is priced for sales teams; freelancers just need the signal. A one-person workflow on the free plan: links per contact reveal the 12-minute open, the internal forward, and the 21:21 return visit that camped on the price page — plus the three-slot pipeline trick and honest edges.
Real Estate: Share Exposés Securely and Spot Serious Buyers
Ten people request the exposé; one is a buyer. Per-prospect links tell them apart: a 22-second price peek is a looker, a return visit with 95 seconds on the floor plan and two minutes on the price page is a phone call — and the day it sells, one loop turns every circulating copy off.