Logo
Apdf tutorials July 2026 4 min read

How to Create HubSpot Tasks from PDF Engagement

The quote goes out, the prospect reads it — and HubSpot knows nothing. Whoever works the deal next sees a contact record frozen at “quote sent”, while the actual buying signal happened yesterday in a PDF viewer.

In this tutorial you'll close that gap without code: when a prospect really reads your quote — not a two-second bounce — a follow-up task appears in HubSpot, on the right contact, by itself.

What you'll build
An automation that fires only on real reads (80%+ completion), a Zap that matches the reader to their HubSpot contact, and a task your team actually sees: Task: Follow up — Alex Moreau read the full Q3 quote (82s, 100%)
Free plan for tracking · automations need Pro (14-day trial, no card)
1

Send the quote through recipient links

Upload the quote and mint one link per prospect — the recipient's email in the payload is what will match the HubSpot contact later:

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"
2

Fire only on real reads — with a condition

A task for every two-second bounce would train your team to ignore the tasks. Conditions fix that: trigger on reading activity, but only when the session has covered most of the document.

  1. Go to AutomationsNew Automation and pick Page Read under “When this happens…”.
  2. Under “Only if…” add the condition “Completion rate at least” and set it to 80%.
  3. Under “Then do this…” paste your Zapier catch-hook URL (next step) and save.
The automation builder with the Page Read trigger selected and an Only if condition set to completion rate at least 80 percent
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.

The trigger fires at most once per reading session, and only when the condition holds — here's the real payload for a full read:

{
    "automation": {
        "id": "ac732-a57e5-671d7",
        "name": "Create CRM task on a real read"
    },
    "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": "sHubTask0RealRd1",
        "viewer_id": "aMxV3nKj9qLp2wSe",
        "recipient": {
            "name": "Alex Moreau",
            "email": "alex@clientco.example"
        },
        "data": {
            "page": 1,
            "duration_ms": 21000
        }
    },
    "session": {
        "total_duration_ms": 82000,
        "pages_viewed": 3,
        "completion_rate": 100
    },
    "timestamp": "2026-07-23T07:17:09+00:00"
}
3

Turn the payload into a HubSpot task

  1. In Zapier, create a Zap with the trigger Webhooks by Zapier → Catch Hook; its URL is what you pasted in step 2. Open your link once so Zapier learns the payload shape.
  2. Add HubSpot → Find Contact and search by Event Recipient Email — that binds the read to the right person.
  3. Add HubSpot → Create Engagement (type: Task), associate it with the found contact, and compose the title from the payload: Follow up — Event Recipient Name read Document Name.
  4. Turn the Zap on. Real reads now file their own follow-ups.
Tip: Put the session numbers (Session Total Duration Ms, Session Completion Rate) into the task notes — the rep opens the task already knowing how seriously the quote was read.

Where to go from here

One signal, one task — the same pipeline covers every play your CRM should know about.

Ready to see who reads?