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.
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.
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.
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.
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_atfor 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.
Related tutorials
Real Estate: Share Exposés Securely and Spot Serious Buyers
Ten people request the exposé; one is a buyer. Per-prospect links tell them apart: a 22-second price peek is a looker, a return visit with 95 seconds on the floor plan and two minutes on the price page is a phone call — and the day it sells, one loop turns every circulating copy off.
A/B Test Two Versions of Your Sales One-Pager
End the which-version argument with data: split the contact list down the middle, give each half its own variant behind tracking links, and let dwell time call it — 13.5 versus 43.4 seconds average, two re-opens to zero, and the outcome-story variant ships to the rest of the list.
Track Investor Updates: Know Who Actually Reads Them
Monthly updates go out into silence — reading behavior is the RSVP investors never send. Per-investor links on each update build an opens matrix and a depth ranking, and three months later your next raise starts with a warmest-first call list instead of a gut feeling.