Papely
Spreadsheet to PDF

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

attendance.xlsx

nameemailcoursecompleted_on
Amara Osei[email protected]Data Protection03/07/2026
Luca Bianchi[email protected]Data Protection03/07/2026
Priya Raman[email protected]Fire Safety2026-07-10
Tom Weber[email protected]Fire Safety10.07.2026

one row, one PDF

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.

API referencePDF generation API

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.

attendance.xlsx · row 1

The columns you bring

namesystem column
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.
emailsystem column
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.
coursetext
Any text column lands on the field of the same name: a course, a product, a city, an order number, a job title.
completed_ondate
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_idQR
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.

statussent · delivered · bounced
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.
downloadeddate and time
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.
Papely · delivery report
rowstatusdownloaded
Amara Oseidelivered
Luca Bianchidownloaded12:11
Priya Ramandelivered
Tom Weberbounced

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.

Questions

Bring your sheet and your PDF

Import the rows, map the columns once and let every document find its person.

No credit card · 20 free documents a month

Generate PDFs from Excel – One Document per Row | Papely