Generate PDFs from Excel, one per row
Bring the spreadsheet you already have. Papely reads it row by row, fills your own PDF with each one, and emails every document to the address in your email column.
No credit card · 20 free documents a month
| name | course | completed_on | |
|---|---|---|---|
| Amara Osei | [email protected] | Data Protection | 03/07/2026 |
| Luca Bianchi | [email protected] | Data Protection | 03/07/2026 |
| Priya Raman | [email protected] | Fire Safety | 2026-07-10 |
| Tom Weber | [email protected] | Fire Safety | 10.07.2026 |
The part nobody wants to do by hand
You already have both halves: the PDF your organization approved, and the list of people it has to go to. What is left is the mechanical bit — open the file, replace four values, save it under the right name, attach it, send it, and repeat another 179 times. The work is not hard. It is just work where one wrong paste puts somebody else's name on somebody's certificate, and where nobody can tell you afterwards which of the 180 never arrived.
Where the rows come from
Four ways in, one unit throughout: a row is a document.
- .xlsx
- An Excel file from your computer. Papely reads the first sheet and takes its first row as the column headers.
- .csv
- The export button of whichever system already holds the list — your CRM, your LMS, your ERP, your event platform.
- Google Sheets
- The Papely add-on works inside the sheet itself: pick the rows, map the columns and generate without exporting anything. Available on every plan.
- your own system
- When the rows live in your product rather than in a file, the REST API and the MCP server produce the same documents from your code.
Your columns, and what each one becomes
Papely proposes a match by column name and shows you every column with its target before anything is imported, so you correct what it got wrong and leave out what you do not need. An unmapped column is ignored — an export with thirty columns you never use is fine.
The columns you bring
- name
- One of the two columns Papely always looks for. It is the person: it prints on the document and it greets them in the email.
- The other one — where this row's document is sent. A row with the cell empty still produces its PDF; it just is not emailed, and it never brings down the rest of the run.
- course
- Any text column lands on the field of the same name: a course, a product, a city, an order number, a job title.
- completed_on
- Read as a date rather than as text, so how the cell happens to be formatted does not decide how the date looks on the document.
- certificate_id
- A text column can also feed a QR field: Papely turns the value of the cell into the code printed on that document.
And these two, which you never typed
They are not in your file and Papely does not write anything back into it. They are what Papely keeps on its side once the documents are out — one line per row you imported.
- status
- What happened to that row's email. It moves on its own as delivery is confirmed, so a wrong address stops being a silent failure and becomes a line you can act on.
- downloaded
- When that recipient opened the link to their document. This column exists because the document travels as a link and not as an attachment.
How many rows fit
A project holds up to 500 rows and 100 columns, and one run turns all of them into documents you download as a single ZIP. How many you can produce per month is a matter of plan: 20 documents on Free, 1,000 on Pro, and generation packs on top when a particular run needs more than that.
The row comes back with an answer
Generating the files is where most of this category stops. But a list is only finished when each document has reached its person, so Papely keeps the thread from the row you imported through to the document that was downloaded.
- Each document travels as a link, not an attachment. There is no size limit to worry about, corporate filters quarantine it far less often, and the recipient can download it again without writing to ask you to resend.
- You read it per recipient — sent, delivered, bounced, downloaded — instead of as one number for the whole batch.
- Papely does not record whether the email was opened. Delivery and download are things the system actually observes; an open is not, so it is deliberately left out rather than reported as if it were reliable.
| row | status | downloaded |
|---|---|---|
| Amara Osei | — | |
| Luca Bianchi | 12:11 | |
| Priya Raman | — | |
| Tom Weber | — |
180 certificates, one afternoon
A training team exports its attendance list from the LMS: name, email, course, completion date. The certificate is the PDF the organization already issues — same typeface, same seal, same signature at the bottom. One import, one run: 180 certificates, each emailed to its student, and a report showing who has already downloaded theirs and which two addresses bounced, so somebody can go and fix those two.
Change the PDF and the columns and it is the same afternoon for invoices, badges, payslips, policies or membership cards.