Home Bulk & teams
Bulk PDF generation, mail merge, REST API · Starter, Growth & Scale

Bring your data. Walk away with a thousand finished documents.

The modern mail merge alternative for teams. Drop in a CSV, Excel file, JSON payload, Google Sheet, or HubSpot list — anything with rows. EZdoc maps it to a template you build alongside your own data and renders the whole bulk PDF batch in minutes. No design hand-off. No copy-paste marathon.

Fed by CSV Excel JSON Zapier HubSpot Google Sheets
Delivered as A bundled .zip Emailed to each recipient Saved to Google Drive
From $19/mo 1,000+ docs per batch Sign up, generate today — no trial period to wait out
The work this is for

If somebody on your team is doing one of these by hand, stop.

These are the workflows EZdoc replaces most often. Every one of them used to be a half-day. Now it's a CSV upload and a coffee.

Certificates & awards

Course completions, recognition, employee anniversaries — anywhere you need 200 versions of the same A4 with one variable.

A bootcamp ran 800 cohort certificates in 8 minutes from a Google Sheet — used to take a designer half a day in Illustrator.
Template + CSV mergeGrowth plan

Client onboarding kits

MSA, SOW, project brief, kick-off checklist — generated and personalised the moment a deal closes in your CRM.

A studio wired EZdoc to HubSpot — closed-won fires a webhook, the client gets a 4-doc PDF kit within 30 seconds.
API + webhooksGrowth / Scale

Monthly statements & invoices

Every customer in your billing system gets a branded statement on the first of the month — without a single manual step.

An accounting firm generates ~1,200 statements monthly from QuickBooks via API. End-of-month closes 4 days earlier.
API · scheduledScale plan

Personalised proposals

Sales reps fill a form, EZdoc generates a fully-branded proposal with their numbers, the client's name, and a custom cover.

A SaaS sales team cut proposal turnaround from 2 days to 8 minutes. Rep types, EZdoc renders, deal moves.
Form-fill + templateGrowth plan

Compliance & HR letters

Offer letters, NDAs, policy acknowledgements — every new hire gets a packet, signed and filed, before they walk in the door.

A 200-person ops team ships every offer letter in 4 minutes end-to-end, including signature collection.
Template + e-signScale plan

White-label microsites

One-page event pages, RSVP cards, leave-behinds — generated in bulk for every client, agent, or event.

A real-estate group spins up 250 listing microsites/week at agent.firm.com — fully branded per agent.
HTML + custom domainScale plan
One template, every row

Variables wired to your data, not your weekend.

Mark the spots that change once. Every row of your CSV, sheet, or API call flows through with values formatted, dates parsed, currencies aligned.

How a job runs

Three steps. One coffee. Done.

1. Make a template

Generate one document, mark the variables. Or upload an existing PDF and we'll detect them.

~3 minutes, once
2. Upload your data

CSV, Excel, JSON, Google Sheets, or hit the API. We map columns to variables in 10 seconds.

412 rows · 8 columns
3. Get the ZIP

One PDF per row, named your way, in a single download. Or push to S3, Drive, or your webhook URL.

412 PDFs · 3m 12s
For your stack

An API your developers won't quietly resent.

Predictable schemas, idempotent jobs, signed webhooks, sane retries. Wire EZdoc to your CRM, billing system, or onboarding flow and stop pretending Word docs scale.

One endpoint, all formats

Pass a template ID and a JSON payload. Get a PDF, DOCX, or HTML URL back. Same call.

Webhooks that don't lie

We retry, sign, and order delivery. Every webhook includes the original job ID and row index.

Idempotency keys

Re-fire the same job a hundred times — get the same result back, with the same URL. Safe to retry on a flaky network.

SDKs for the usual suspects

Node, Python, Ruby, Go, PHP. Or hit the raw HTTP API — it's a couple of POSTs.

generate-batch.js node.js
// Generate 412 statements from a CSV upload const job = await ezdoc.batches.create({ template: "tpl_q4_statements", source: { type: "csv", file: csvBuffer }, output: { format: "pdf", name: "stmt_{{customer.last}}" }, webhook: "https://api.bright.co/ezdoc/done", idempotencyKey: "q4-2024-statements" }); // → { id: "job_3vK9…", status: "running", count: 412 } const result = await ezdoc.batches.wait(job.id); // → { status: "done", zip: "https://…/q4.zip", duration: 192 }
Plans for teams

Pay once a month. Generate as much as you actually need.

Every paid plan ships with bulk merge, the API, smart variables, reusable templates, and the 171-template library. The API isn't an upsell.

Free tier
$0forever

For one-offs and lumpy use. People often start here, then move up when they realise they're using it weekly.

  • 3 AI generations on signup
  • 25 pages / month
  • 171 starter templates
  • No bulk merge
See PAYG details
Starter
$19/month

For solo operators and small teams just getting their first batches running.

  • 1,000 pages / mo · 8 AI generations
  • Reusable templates + smart variables
  • Bulk CSV / Excel / JSON merge
  • REST API access
Sign up for Starter
Scale
$99/month

For high-volume teams generating thousands a month.

  • 20,000 pages / mo · 40 AI generations
  • Priority generation queue
  • SFTP + custom domain delivery
  • 10,000 API requests/hr
Sign up for Scale

Past 20,000 pages a month or need a contracted SLA? Talk to a human →

A team that switched

Continuum Academy: 800 certificates in 8 minutes.

"It used to be a half-day of mail-merging in Word. Now it's a CSV upload at 9, ZIP in my inbox by 9:08. The whole ops team got their afternoon back."

JR
Jordan R.
Head of Operations · Continuum Academy
8 min
to render 800 certificates from CSV
~$0.10
per generated certificate, all-in
4 days
faster end-of-cohort wrap-up
0
manual mail-merges since switching

Stop hand-merging documents.
Let your data do the work.

Sign up and generate today. Pay monthly, cancel any time — most teams don't.

Just need one document tonight? See pay-as-you-go →