Logo
Apdf tutorials September 2026 4 min read

Freelancers: A Proposal Workflow Without Per-Seat Tools

The proposal-software world is priced for sales teams: per seat, per month, for a pipeline you don't have. So freelancers send PDFs from their inbox and live with the silence — was it read? Forwarded? Is the quiet a “no,” or just a busy week?

You don't need the suite; you need the signal. This is a proposal workflow sized for one person, built entirely on the free plan — and honest about where its edges are.

What you'll build
One live proposal, and the two moments that matter delivered as data: Opened 12 minutes after you hit send · came back at 21:21 and spent 85s on the price page
Everything in this tutorial works on the free plan
1

Send the link, not the file

Upload the proposal privately, mint one link per person on the client side — the decision maker and whoever else was cc'd:

curl -X POST https://apdf.io/api/docs \
  -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
  --data-urlencode "file=https://your-site.example/proposal-studio-karla.pdf" \
  --data-urlencode "name=Website Redesign Proposal — Studio Karla" \
  -d "is_public=0"

curl -X POST https://apdf.io/api/docs/3830a-3553a-b6eb8/links \
  -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
  -d name="Karla Weiss" -d email="karla@studiokarla.example"

Prefer clicks to curl? The whole flow — upload, share, watch — also lives in the dashboard; the API is just the same thing scriptable.

2

Read the week's signals

Two days after sending, the sessions tell the story no inbox ever does:

curl -s "https://apdf.io/api/docs/3830a-3553a-b6eb8/analytics/sessions" \
  -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" |
jq -r '.data[] | "\(.recipient.name): \(.pages_viewed)/5 pages · \(.total_duration_ms)ms · \(.created_at)"'

Karla Weiss:  2/5 pages · 110000ms · 2026-07-22 21:21:10
Robert Menke: 2/5 pages · 34000ms  · 2026-07-22 10:41:10
Karla Weiss:  5/5 pages · 185000ms · 2026-07-21 09:42:10
  • The 12-minute open. You sent at 09:30; Karla read all five pages at 09:42 for three minutes. She was waiting for it — good sign, no action yet.
  • The forward. Robert (her partner) skimmed the scope and the price the next morning. Your proposal is being discussed internally.
  • The evening return. Karla came back at 21:21 — and the session detail shows exactly where:
"pages": [
    { "page": 3, "views": 1, "duration_ms": 25000, "viewed": true },
    { "page": 4, "views": 1, "duration_ms": 85000, "viewed": true }
]

Timeline check, then 85 seconds on the Investment page, at night, on a return visit. That's someone deciding — tomorrow morning's short, warm email (“happy to split the phases differently if that helps”) writes itself.

3

Run the three-slot pipeline

The free plan tracks 3 documents at a time — which maps neatly onto a freelance pipeline: your three live proposals. When one closes, archive it and the slot frees up:

curl -X POST https://apdf.io/api/docs/3830a-3553a-b6eb8/archive \
  -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json"

Archiving also closes the viewer for that proposal — a tidy end state for a signed deal. For a lost one, consider revoking the links instead: the old price shouldn't keep circulating.

4

Know the edges — and when you've outgrown them

  • Checking is manual on the free plan — a sessions call with your coffee (or the link roster's last_viewed_at for a two-second glance). Push notifications on opens and reads are automations, which is where Pro starts.
  • History is 14 days — plenty for a live proposal's decision window; not an archive of your year.
  • 25 links per document — a client-side stakeholder list, not a mailing list.

If you're sending enough proposals that these edges chafe, the 14-day Pro trial (no card) is the test drive — but the point of this workflow is that the signal itself was never behind the paywall.

Where to go from here

Same one-person workflow, sharper tools.

Ready to see who reads?