Certificate template
Set up logos, the certificate wording, and the three signing authorities. This is saved once and reused for every certificate.
How it helps: design the certificate's look once — logos, wording, signatures, layout — then every certificate generated from here uses it automatically, with no per-student re-design.
Start from a template
Loads a starting design (wording, layout, colors, border) — your own logos, signatures, and event details still go on top. Choosing one replaces your current unsaved wording and layout.
My saved templates
Templates you've saved with your own logos and wording — click one to load it into the designer, the same way the starting designs above work.
A .json file previously downloaded from a saved template's "Download" button — here or on another Certify install. You'll get to pick which parts of it (logos, wording, signatories, typography, layout…) to bring into what you're currently building, rather than replacing everything. Or pick an image (PNG/JPG/WEBP/GIF) to use it directly as this template's background — same as uploading it in the Background card below, just also reachable from here.
Organization logos (up to 3)
Click a box to upload a logo (PNG/JPG, transparent background works best). Logo 2 (center) is required — the certificate needs at least one; Logos 1 and 3 are optional and disappear completely from the final certificate if left empty.
Sponsor logos (auto-fills Logo 2)
When a student's "Sponsoring Organization" matches a name below, their certificate's Logo 2 is automatically swapped to that sponsor's logo — no manual swapping per batch. Leave empty and Logo 2 above is used for everyone, as before.
Certificate title
Just the number/code — "Regn No: " is added automatically, always. If it ends in digits, generating certificates for more than one student at once numbers them sequentially from here (this one gets the number as typed, the next student gets +1, and so on) — drag the printed result into position and style it below, in Typography.
Border
Leave off for the default double-line look, or set a single-color border of your own.
Background
Uploaded images are automatically scaled to fit and cover the full certificate canvas. If nothing is uploaded, pick one of the built-in styles below as the default.
Certificate wording
Click a token above to insert it at your cursor. Tokens are replaced with each participant's data when generating.
Signing authorities (up to 3)
Typography
Font, size, weight, colour and italics for each piece of text on the certificate.
This preview is pixel-accurate — the same image is used for both PDF download and printing.
Participant data
Bring in the responses from your Google Form / Sheet. CSV upload is the most reliable option.
How it helps: a quick standalone way to bring in a batch of participants for the Generate tab — separate from an institute's own roster upload, for when you already have a file ready outside that flow.
1. Import CSV
Format guide — what each column expects
Dates (Date of Birth, Date of Attendance) — the separator decides the format:
DD-MM-YYYY(dashes) — day first, e.g.05-03-2015= 5th March 2015. Used exactly as written, no reinterpretation.MM/DD/YYYY(slashes) — month first, e.g.12/25/2020= 25th December 2020 (the common Excel/Google Sheets US-locale export shape). Converted automatically to the correct date.
Email ID and mobile number must each be unique — a row whose email or mobile is already on file will be skipped (or, for the same institute, treated as an update to that student's existing record).
In Google Sheets: File → Download → Comma Separated Values (.csv)
Generate certificates
Preview a certificate for anyone marked Present on the Responses tab, then export as a print-ready PDF — one at a time or in bulk.
How it helps: the actual issuance step — this is where a saved template plus a Present student turns into a real certificate, a stored student-portal copy, and a unique Registration Number, one at a time or as a batch.
Select participant
Certificate Range Currently Selected
—
You can change or create a new certificate range from the Certificate Numbering section in Settings.
Bulk generate
0 participants loaded.
Shows exactly what the downloaded PDF / printed page will look like.
Certificate Batch History
Every certificate generated from this tool, permanently logged so admins can look one up later — exactly as it looked when generated — without regenerating from scratch.
How it helps: browse what you generated, batch by batch, and reprint a past batch's exact design if you need it again.
Certificate Log
A flat, filterable record of every certificate issued — registration number, participant, registering institute, date of attendance, and date of issuance — kept in the database so it can be shared or audited at any time.
How it helps: search or filter by name/number/institute/date and export the result — for verification, audits, or handing a list to someone else.
Certificate Ranges
Every Registration Number actually stored on a certificate, grouped into the distinct ranges they fall into — e.g. if the numbering prefix or period was changed partway through, each period shows as its own range here.
How it helps: "what ranges of certificate numbers have we actually used, and what's the very last one issued" — a quick answer without hunting through Certificate Log by eye.
Certificate ranges in use
Generation Log
One row per "Generate" click — what was attempted, how many certificates actually went through, and why, if it wasn't everyone. Kept even for runs that partly or fully failed, so nothing "just disappears" from view.
How it helps: the one place that shows failures — a partly/fully failed run, a skipped student and why, or a certificate that saved but whose email didn't send.
Upload Log
One row per roster/participant-data upload — covers both the Institutes page's "Upload completed roster" and the Participant Data tab's "Save participant data" (they go through the same upload). Shows exactly which rows were skipped and why, so a failed or partial upload can be debugged after the fact instead of only ever showing up once, in the browser, at upload time.
How it helps: "why didn't my upload fully work" — for either CSV (a roster uploaded via Institutes, or a file saved via Participant Data), which exact rows were skipped and why, without re-inspecting the file yourself.
Institutes
Register a participating institute, get a unique student-registration link for them, and email it to their point of contact.
How it helps: set up a school/institute once — its registration link, current POC, program, and visit date live here.
Offline roster collection (alternative to the online form)
Some institutes would rather fill one shared spreadsheet than have each student fill the web form. Send them this blank format — once they email it back, upload it against that institute below and every row appears in Responses exactly like an online submission. This admin format includes optional Present and Date of Attendance columns (leave both blank for Pending) so you can mark attendance for the whole batch right in the file — a row marked Present must also carry a Date of Attendance, which becomes this institute's attendance date and is what {{Date of Attendance}} prints on the certificate; a Present row with no date is rejected. Certificate-downloaded always starts as No either way and can only change once a student actually downloads one.
Format guide — what each column expects
Dates (Date of Birth, Date of Attendance) — the separator decides the format:
DD-MM-YYYY(dashes) — day first, e.g.05-03-2015= 5th March 2015. Used exactly as written, no reinterpretation.MM/DD/YYYY(slashes) — month first, e.g.12/25/2020= 25th December 2020 (the common Excel/Google Sheets US-locale export shape). Converted automatically to the correct date.
Email ID and mobile number must each be unique — a row whose email or mobile is already on file will be skipped (or, for the same institute, treated as an update to that student's existing record).
Register a new institute
Registered institutes
Institute Visits
One row per actual batch visit — the same institute can send different classes on different days, with a different POC, program, or student count each time. A row is created automatically from every roster upload that accepts at least one student.
How it helps: "which institute visited when, with how much, and under which POC" — a full history. The Institutes page can't answer this: it stores only one POC/date/program per institute, and each new visit overwrites it, so only the most recent visit is ever visible there.
Roster and Certificate Download Information
Every student registration collected across all institutes — from the online form, an institute's own roster link, or a Participant Data CSV. Mark attendance and track certificate downloads here; accounts and certificates are issued automatically from the Certificate Generation tab.
How it helps: the master list of every student — mark Present, fix a typo'd field, and see each one's Created/Presence/Generated/Regenerated/Downloaded timestamps in one place.
Settings
App-wide configuration, kept here so it's admin-editable without server access.
How it helps: everything that applies across the whole app rather than one student or institute — your password, outgoing email (SMTP), email wording, and the certificate numbering scheme.
Change your password
Admin accounts are created directly (no self-signup) — change yours here any time.
App branding (logo & "Certify" wordmark)
Shown on every page — sidebar, login, registration form, student portal. Change it here only.
Shown below the logo everywhere — sizing it here applies on every page.
The text shown in the browser tab on every page. Leave blank to use the default.
A separate image from the logo above and from the email template's logo — upload a different one here if you want. A square image works best, ideally 32×32 or 64×64px, PNG/ICO/SVG. Non-square or larger PNGs are automatically center-cropped and resized for you.
Certificate numbering
The "Registration Number" printed on every certificate. A real, persistent counter — every certificate actually issued (any tab, any admin) gets the next number and advances it, so numbers never repeat across batches. Year/month are whatever you pick here to match the EVENT, not today's date — nothing changes them automatically.
Same day/month/year picker used everywhere else in this app — a certificate number only ever carries year+month, never a day, so there's no day field here.
Your own label for where you expect this range to end — purely informational. Numbering is never stopped or warned by this; it keeps going past it with no interruption. Shown on the Certificate Ranges page.
Next certificate will be: —
Lowering "Next number" below one that's already been issued risks a real duplicate — only do this to fix a wrong seed value before anything has actually gone out under it.
Email (SMTP)
Sends student credentials and institute invites. Gmail needs a 16-character App Password (Account → Security → 2-Step Verification → App passwords), not your normal password.
Email templates
Pick which email to edit. Only the subject and intro text are editable — the logo, branding, and structured details (credentials, reset link) are added automatically.
Click a token above to insert it at your cursor. Tokens are replaced with the real value when this email is sent.
Every email of this one type gets silently duplicated to each address below — e.g. add yourself here to see exactly what a student receives, without every other email type (invites, password resets) also coming to you. Switch "Which email" above to set different addresses per type.
Exactly how this email renders — same logo/branding/layout code the real send uses, with sample values in place of tokens. Updates as you type; nothing here is sent or saved.