Use Case
Contract PDFs from onboarding flows
Auto-fill vendor agreements, NDAs, MSAs, W-9s, and contractor contracts from the data you already collect in your onboarding form. Skip the "download blank PDF, fill it, scan it, send it back" step entirely.
Who this fits
- Multi-business operators and agencies. Vendor onboarding, contractor agreements, NDAs at scale. The contract is template-driven; the variables come from the onboarding form.
- SaaS apps with B2B sales. Order forms, MSAs, DPAs that ride on top of the same customer-info form your sales team already collects.
- Staffing / freelance marketplaces. Independent contractor agreements with the worker, statement-of-work PDFs for the engaging customer.
- HR / payroll platforms. W-9 (US) and W-8BEN (non-US) tax forms auto-filled from contractor onboarding data.
The pattern, end-to-end
The shape is a webhook handler that listens to the onboarding form's "submitted" event, fills the relevant contract template, stashes the result, and emails the contractor or vendor a signing link:
- Onboarding form → your webhook handler (Tally, Typeform, Formspark, Clerk, your own HTML form posting to a route). Verify signature.
- Handler → object storage: fetch the contract template (NDA / MSA / W-9 / etc., chosen based on the onboarding answers).
- Handler → PDFops:
POST /api/fill-formwith the template + the onboarding answers as field values. - Handler → object storage: stash the filled contract with a non-guessable key (it contains PII — see auth-boundary note in the blog walkthrough).
- Optional: Handler → e-signature provider: upload the filled PDF to DocuSign / Dropbox Sign / HelloSign and trigger the signing flow. Or email a download link if the contractor signs offline.
Concrete walkthrough with code: Auto-filling a W-9 from a contractor-onboarding webhook on Vercel Edge — ~60 lines of TypeScript, includes the auth-boundary footgun (TIN in URL) and how to harden it.
Try it
Use the sample template (it has customer_name + total but the call shape is identical for any AcroForm template):
curl -X POST https://pdfops.dev/api/fill-form \
-F "pdf=@nda-template.pdf" \
-F 'fields={"party_name":"Acme Co","effective_date":"2026-05-19","term_years":"2","jurisdiction":"Delaware"}' \
-o filled-nda.pdf
Author your NDA / MSA / W-9 template in any PDF editor (Acrobat, Mac Preview, LibreOffice Draw, pdftk). Rename the AcroForm fields to short predictable names (party_name, effective_date, tin, scope_of_work) so your calling code is stable across template revisions. Full reference at the fill-form docs.
Variations
- NDAs. Party names, effective date, term length, jurisdiction. ~5-7 fields.
- MSAs. Parties, scope, payment terms, IP assignment language toggle, term, termination notice. ~10-15 fields, often with a toggle field driving a checkbox in the rendered output.
- Vendor onboarding packets. Multi-page bundle of NDA + W-9 + ACH form. Use
/api/fill-formper template, then/api/mergeto assemble the packet. - Contractor agreements (1099). Combined W-9 + scope-of-work + payment-terms PDF. Same pattern: fill each, merge.
- Service agreements / SOWs. Parties, deliverables, milestone dates, milestone amounts. Fixed-row count works for ≤8 milestones; for more, see the FAQ on computed line items.
- International contractor onboarding. W-8BEN for non-US persons. Same fill-form call shape against the IRS's fw8ben.pdf template (already AcroForm-enabled by the IRS).
FAQ
Why generate contract PDFs from form data?
Data quality (form-validated input beats hand-typed PDF entries) and friction (asking someone to fill the same data twice is the most common onboarding-abandon point). The underlying contract is templated; the variables come from data you already have.
Does PDFops handle e-signature?
No — that's a separate problem. DocuSign / Dropbox Sign / HelloSign do it well. PDFops sits upstream: fill the contract, hand the filled PDF to your e-sign provider. The integration is typically "PDFops returns bytes → your code uploads to e-sign envelope API."
Which contract types fit?
Anything with fixed legal language + a small set of variable fields. NDAs, MSAs, vendor onboarding packets, independent-contractor agreements, service agreements, W-9 / W-8BEN. Legal owns the fixed copy; ops populates the blanks per-contract.
How do I keep templates current when legal updates them?
Templates are regular PDFs with AcroForm fields. Legal edits the text in their PDF editor; the field names stay the same so calling code doesn't change. Version the template files; tag each generated PDF with a footer like "NDA v2.3.1 / generated 2026-05-19" to anchor to a specific template revision.
What about computed line items (SOW milestones)?
Fixed-line-count templates (≤8 milestones) work for most cases. For more, combine fixed sections with /api/merge — generate the milestones page separately and merge into the master contract.
Get higher-tier access
Anonymous tier (100/IP/month) is fine for evaluation. For production volume across a vendor / contractor portfolio, join the waitlist — keys with 1,000-10,000/month quotas are coming, free during beta with locked-in pricing post-beta. The form's message field is where you describe your onboarding flow + monthly volume.
← PDFops home · Docs · Blog