Logo
Apdf tutorials September 2026 4 min read

How to Get Notified Only for PDF Engagement That Matters

The first automation everyone builds is “notify me when someone opens my document.” The second thing everyone does is mute it — because most opens are courtesy clicks, and a channel full of courtesy clicks trains you to ignore the one open that mattered.

The fix is the Only if box. Conditions turn a firehose into a filter: minimum reading time, completion thresholds, specific pages — evaluated before anything reaches your webhook, so silence actually means nothing happened.

What you'll build
One automation that ignores skims completely — proven with two live readers: 15-second skim → silence · 2m48s cover-to-cover read → exactly one notification
Automations are a Pro feature (14-day trial, no card)
1

Learn the grammar: when, only if, then

Every automation is three decisions, and the builder lays them out as three cards — “When this happens…”, “Only if… (optional)” and “Then do this…”. The middle card is the one this tutorial is about. Five conditions are available, and they stack (all must hold):

Page number equals            — the event happened on this page
Time on page at least         — seconds spent on that page
Total reading time at least   — seconds across the whole session
Pages viewed at least         — distinct pages this session
Completion rate at least      — % of the document seen this session

The first two look at the triggering event; the last three look at the session so far — which is what lets you say “only tell me about real reads” regardless of which page tripped the trigger.

2

Build the real-reads filter

  1. Go to Documents → AutomationsNew Automation and pick Page Read under “When this happens…”.
  2. Under “Only if…” add “Total reading time at least” 120 seconds and “Completion rate at least” 75%.
  3. Under “Then do this…” paste your Webhook URL and save.

Read out loud: “when a page is actually read, but only in sessions that have already spent two minutes and covered three quarters of the document, call my webhook.” A courtesy click can't qualify.

Plan note: Automations are a Pro feature. Every new account can trial Pro for 14 days — no credit card — which covers everything in this tutorial.
3

Prove the filter with two readers

We sent the benchmark report to a reader who skimmed one page for 15 seconds — the webhook stayed silent — and to Elena, who read all eight pages over 2m48s. One notification arrived, carrying everything the follow-up needs:

{
    "automation": {
        "id": "4d9e1-53957-59772",
        "name": "Real reads only"
    },
    "document": {
        "doc_id": "8432e-b4ebb-74433",
        "name": "2026 Client Reporting Benchmark",
        "viewer_url": "https://docs.apdf.io/studio/8432e-b4ebb-74433",
        "file_pages": 8
    },
    "trigger": {
        "matched_event": "page:read",
        "conditions_evaluated": true
    },
    "event": {
        "session_id": "condDeep000000B1",
        "viewer_id": "vDeep0000000000B",
        "recipient": {
            "name": "Elena Novak",
            "email": "elena@novak.example"
        },
        "data": {
            "page": 1,
            "duration_ms": 21000
        }
    },
    "session": {
        "total_duration_ms": 168000,
        "pages_viewed": 8,
        "completion_rate": 100
    },
    "timestamp": "2026-07-23T09:45:34+00:00"
}

Note what didn't happen: Elena's session produced eight qualifying page:read events, and you got one notification, not eight — automations fire at most once per session. The filter controls quality, the dedupe controls volume.

4

Steal these combinations

  • The pricing stall — Page number equals your money page + Time on page at least 30s. Built end to end in the follow-up timing tutorial.
  • The serious read — this tutorial's build: Total reading time + Completion rate. Wire it to CRM tasks and only real reads become follow-ups.
  • The thorough committee — Pages viewed at least n−1 on a long document: someone is reviewing, not browsing.
  • The re-open — not a condition but a payload field: every open carries a visit_number, so your receiver alerts only when it's >1. The re-open tutorial shows the four-line filter.

Where to go from here

Filtered signals are only step one — here's where they go next.

Ready to see who reads?