About MailMyCertificate
MailMyCertificate is a free, open-source bulk certificate generator built by Akshat Thakur. It turns a template image and a participant list into personalized PDF certificates, generated inside your browser and delivered through your own Gmail account. It began as a Python script written overnight for a college event with more than 300 participants.
It is maintained as a single-developer open-source project under the MIT licence, not a funded product. That shapes every decision on this page: no accounts to create, no participant data to upload, no pricing page, and no roadmap promises that depend on someone else's money.
Content freshness: Last updated · First published
The Story
During a college club event, there were 300+ participants who needed certificates.
Google Forms gave messy spreadsheet data. Names, emails, timestamps — plus plenty of unnecessary fields.
Existing tools felt frustrating. Canva was too manual. Most tools required uploading participant data or charged per certificate.
So a Python script was built overnight. It uploaded blank certificate templates, let you position text with X/Y coordinates, and imported CSV files.
Generated PDFs locally. Then SMTP automation to send emails with Gmail app passwords.
Realized every organizer faces this same problem. That's how MailMyCertificate came to be — rebuilt as open source, free, and privacy-first.
name,email,timestamp John Doe,john@email.com,2024-03-15 Jane Smith,jane@email.com,2024-03-15 ...
# Position text at X,Y coordinates
draw_text("John Doe", x=150, y=200)
draw_text("Participation", x=150, y=250)
save_pdf("john_certificate.pdf")# Send via Gmail SMTP
server.login(email, password)
server.sendmail(email, recipient, msg)
attach_pdf("john_certificate.pdf")While rebuilding it, I kept a few things non-negotiable.
No participant uploads
I didn't want organizers uploading participant data to random servers just to send certificates.
Runs locally
Everything runs inside the browser so generation stays fast and private.
Built from a real workflow
The tool follows the same workflow I originally used during college events and hackathons.
Less setup, more shipping
No accounts, no dashboards, no unnecessary setup. Upload, generate, send.
Open Source
Tools that handle participant data should be transparent. Every line of code is publicly available — inspect how we handle data, verify our privacy claims, or host your own version.
View on GitHubHow does the local-first architecture actually work?
"Privacy-first" is easy to claim and hard to verify, so here is the mechanism rather than the marketing. Three parts of the system matter, and all of them are inspectable in the public repository.
PDF generation runs in your browser
Certificates are rendered client-side with pdf-lib inside a Web Worker, which keeps the interface responsive while a batch is processing. Your template image and participant names are never sent anywhere to be composited. The practical consequence: if you disconnect your network after loading the page, generation still completes.
Participant rows live in IndexedDB on your device
Imported CSV and Google Sheets data persists locally through Dexie, which is what lets you close the tab mid-batch and pick the session back up. Clearing your browser storage deletes it permanently, because there is no server-side copy to restore from.
The backend only touches email at send time
A small Flask API on Vercel handles the Gmail OAuth exchange and the send call. It requests only the gmail.send scope, so it cannot read your inbox or contacts. It receives a message and its attachment at the moment you send, and stores neither.
Analytics deliberately exclude participant data
Google Tag Manager records product events such as which step of the wizard was reached. Participant names, email addresses and template files are never included in an analytics payload.
The full technical detail, including what Google receives during OAuth, is written up in the privacy policy. If you would rather read code than prose, the repository is the authoritative answer.
Who is MailMyCertificate for?
It is built for the person who has to get certificates out of the door after an event has already finished, usually without a budget and usually in a hurry.
A good fit
- Hackathon and tech-fest organizers issuing winner and participation batches
- College clubs and student societies with no software budget
- Workshop, bootcamp and webinar hosts collecting sign-ups via Google Forms
- NGOs and non-profits running training or volunteer programmes
- Teams who cannot upload participant personal data to a third-party vendor
- Anyone who already has a certificate design and just needs the merge step
Not a good fit
- Credentials needing a public verification portal or QR-scannable registry — see the Certifier comparison
- Enterprise LMS or HR system integration through an API
- Editing a PDF template directly, since templates are PNG or JPG images
- Teams needing shared cloud sessions, because sessions are device-local
- Organisations requiring a vendor contract, SLA or paid support line
Being direct about the second column saves you the worse outcome: discovering a missing capability the evening before certificates are due.
Frequently asked questions about the project
These are the questions that arrive most often by email and on GitHub.
- Is MailMyCertificate free to use?
- Yes, MailMyCertificate is completely free forever. There are no hidden charges, paywalls, or premium tiers. The tool is open source and runs entirely in your browser.
- Who built MailMyCertificate?
- MailMyCertificate was created by Akshat Thakur, a full-stack engineer and open-source contributor. It started as a Python automation script for a college event and evolved into a web tool to solve the bulk certificate problem for event organizers worldwide.
- Where is my data stored?
- Your data never leaves your device. Certificate PDFs, CSV data, and templates are all generated and stored locally in your browser using IndexedDB. MailMyCertificate servers never see your participant data.
- Can I use MailMyCertificate for commercial events?
- Absolutely. The MIT license allows commercial use, modification, and distribution. Whether you're running a hackathon, workshop, conference, or corporate training event, MailMyCertificate is built for it.
- How many certificates can I generate?
- The practical limit depends on your browser's memory and your internet connection (for email sending). Most users process 50–500 certificates in a batch. Larger batches are possible but may take longer.
- Do you store participant emails?
- No. Participant emails are only used temporarily in your browser to populate the email queue during sending. We never store, log, or analyze email addresses or participant data.
- Can I contribute to the project?
- Yes! MailMyCertificate is fully open source on GitHub. Contributions, bug reports, and feature requests are always welcome. See the GitHub repository for contribution guidelines.
- How do I send certificates via email?
- You can connect your Gmail account via OAuth. MailMyCertificate acts as a client to your Gmail account, sending certificates on your behalf. No additional credentials or app passwords needed.
"I already solved this problem for myself…
then rebuilt it properly for everyone else."
— Akshat Thakur, creator of MailMyCertificate
Keep reading
Related workflows and answers from the rest of the site.
- Full step-by-step guideThe complete walkthrough: template setup, field mapping, generation and Gmail delivery.
- Privacy policyExactly what stays on your device, what Google receives, and what is never collected.
- Contact the maintainerQuestions, bug reports and feature requests, answered by the person who wrote the code.
- MailMyCertificate vs CertifierAn honest side-by-side, including the cases where Certifier is the better choice.
- Blog & guidesArticles on certificate creation, bulk delivery, best practices, and tool comparisons.
- Contact the maintainerQuestions, bug reports and feature requests, answered by the person who wrote the code.