How to Follow Up on Proposals at the Perfect Time
Most follow-ups are scheduled by the calendar: "it's been three days, better check in." But the buyer isn't on your calendar — they're reading the proposal at 9:40 on a Tuesday, stalling on the pricing page, coming back to it Thursday night. Those are the moments a follow-up lands; everything else is noise.
This playbook maps the four signals a tracked proposal sends to the play each one deserves — and shows you how to wire the sharpest one, the pricing stall, to a live alert.
Instrument the proposal
Everything below requires one change to how you send: a tracked recipient link per contact instead of an attachment.
curl -X POST https://apdf.io/api/docs/4352c-99928-25aa1/links \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-d name="Alex Moreau" \
-d email="alex@clientco.example"
From that link, the proposal streams its signals: opens, page-by-page reading, dwell times, returns. The rest of this tutorial is deciding what each signal means.
Know the four moments — and their plays
- The first open — usually minutes after your email; a courtesy click, not a decision. Play: do nothing. Pouncing here reads as desperate. Log it and wait for a real signal.
- The real read — most of the document, minutes of attention. Play: check in within 24 hours, while your scope is still fresh in their head. Wire it with a completion-rate condition — the CRM-task tutorial builds exactly this.
- The pricing stall — a long pause on the money page. They're not confused; they're negotiating with themselves. Play: address the number proactively — a note on payment options or scope flexibility, before the silent "too expensive" hardens. Built below.
- The re-open — they came back, often to compare or to show a decision-maker. Play: call now. The re-open alert tutorial catches it live.
And the fifth non-moment: silence. A link that was never opened is a deliverability or interest problem — resend with a different angle instead of "just following up".
Wire the pricing-stall alert
The sharpest play needs two conditions stacked: the right page, held long enough to mean something.
- Go to Automations → New Automation and pick Page Read under “When this happens…”.
- Under “Only if…” add “Page number equals” — your pricing page (here: 3) — and “Time on page at least” 30 seconds.
- Under “Then do this…” paste your webhook or Zapier hook URL and save.
A quick skim past pricing stays silent — but 47 seconds on page 3 delivers this:
{
"automation": {
"id": "5dca5-abc46-2e796",
"name": "Stalled on the pricing page"
},
"document": {
"doc_id": "4352c-99928-25aa1",
"name": "Q3 Services Proposal",
"viewer_url": "https://docs.apdf.io/studio/4352c-99928-25aa1",
"file_pages": 3
},
"trigger": {
"matched_event": "page:read",
"conditions_evaluated": true
},
"event": {
"session_id": "sPriceStall00X01",
"viewer_id": "aMxV3nKj9qLp2wSe",
"recipient": {
"name": "Alex Moreau",
"email": "alex@clientco.example"
},
"data": {
"page": 3,
"duration_ms": 47000
}
},
"session": {
"total_duration_ms": 59000,
"pages_viewed": 2,
"completion_rate": 66.7
},
"timestamp": "2026-07-23T07:36:55+00:00"
}
The payload names the moment — who, which page, how long — so the follow-up can too: “Happy to walk through how the investment splits across the two phases…” beats “just checking in” every time.
Where to go from here
Each play from the map has its own build-out — wire the ones your pipeline needs.