Logo
Apdf tutorials October 2026 4 min read

How to Review the Whole Reading History Before the Sales Call

Every sales playbook says “come prepared” and means the CRM: past emails, deal stage, last activity. But the sharpest prep artifact is newer than all of that — how the prospect read your proposal this week: which pages held them, which they skipped, where they returned.

If the proposal went out behind a tracked link, that history is three API calls away. This is the five-minute pre-call ritual, on real (and realistically messy) data.

What you'll build
A prospect's complete reading history condensed into the sentence you open the call with: Full read at 07:17, back twenty minutes later for the pricing page → today's call is about the number
Everything in this tutorial works on the free plan
1

Pull the history

One call lists every session the document has had — Alex's morning, newest first:

curl -s "https://apdf.io/api/docs/4352c-99928-25aa1/analytics/sessions" \
  -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" |
jq -r '.data[] | "\(.created_at) · \(.pages_viewed)/3 pages · \(.total_duration_ms)ms"'

2026-07-23 07:36:55 · 2/3 pages · 59000ms
2026-07-23 07:17:09 · 3/3 pages · 82000ms
2026-07-23 07:14:01 · 0/3 pages · 0ms
2026-07-23 06:54:41 · 0/3 pages · 0ms
2026-07-23 06:54:38 · 0/3 pages · 0ms

Read it bottom-up and a story forms: two zero-page opens at 06:54 (your email landed; the double-tap is a preview or a hurried click), another bounce at 07:14, then the real engagement — a full read at 07:17 and a return visit twenty minutes later. Zero-page rows aren't noise to delete; they're the “saw it, wasn't ready” beats of the timeline.

2

Zoom into the two visits that matter

The session detail endpoint turns each visit into a per-page record. The 07:17 read, balanced across all three pages:

GET /api/docs/4352c-99928-25aa1/analytics/sessions/{sessionId}

"pages": [
    { "page": 1, "views": 1, "duration_ms": 21000, "viewed": true },
    { "page": 2, "views": 1, "duration_ms": 34000, "viewed": true },
    { "page": 3, "views": 1, "duration_ms": 27000, "viewed": true }
]

And the 07:36 return — a very different shape:

"pages": [
    { "page": 1, "views": 1, "duration_ms": 12000, "viewed": true },
    { "page": 2, "views": 0, "duration_ms": 0,     "viewed": false },
    { "page": 3, "views": 1, "duration_ms": 47000, "viewed": true }
]

First visit: due diligence. Second visit: straight past the scope to 47 seconds on the pricing page. He isn't re-reading your deliverables — he's sitting with the number.

3

Write the three-line brief

Condense it into the note that sits next to your phone:

ALEX MOREAU — Q3 Services Proposal — call 14:00

Trajectory: opened on arrival → full read 07:17 (82s, all pages)
            → RETURNED 07:36 straight to pricing (47s)
Hot page:   3 (pricing) — visited twice, never lingered on scope
Open with:  payment structure / phasing — not a scope walkthrough

The discipline: the brief informs your agenda, never your script. “Happy to walk through how the investment splits across phases” is prepared; “I saw you re-read the pricing page” is surveillance. Same data, opposite calls.

Tip: Prefer the brief written for you? With the workspace connected over MCP, the triage question and the agent-drafted follow-up are this exact ritual, delegated.

Where to go from here

Prep is one use of the history — here are the others.

Ready to see who reads?