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 Automations → New 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: Rather skip the catch hook? The official Apdf app for Zapier has a trigger for every reader event and creates the automation itself when you turn the Zap on.
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?