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.

Template gallery

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.

Logo section

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 header content

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

Click to upload a custom background image

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.

#FBF7EF Pick any color — saves with the template like everything else here.
Certificate body

Certificate wording

Click a token above to insert it at your cursor. Tokens are replaced with each participant's data when generating.

Certificate footer

Signing authorities (up to 3)

Typography

Font, size, weight, colour and italics for each piece of text on the certificate.

Drag any box to move it, or drag its bottom-right corner to resize. Objects can freely overlap one another — stack one on top of another, then reposition or resize either one — click Arrange objects again when you're done.

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

Get a blank starter file with the expected column headers.
Format guide — what each column expects
Required: Student Name, Institute Name.
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.
A date that isn't valid under its own format (e.g. a month over 12) is left blank rather than blocking that row — check the Upload Log tab after saving to see exactly which rows had an issue and why.

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

Nobody's marked Present yet. Go to Responses and mark attendance — present students show up here automatically.

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
Required: Student Name, Institute Name.
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.
A date that isn't valid under its own format (e.g. a month over 12) is left blank rather than blocking that row — a row marked Present still needs a usable Date of Attendance, though, or it's rejected (see above). Check the Upload Log tab after uploading to see exactly which rows had an issue and why.

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).
* Includes Present + Date of Attendance columns

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.

Organization logo

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.

Exact print preview — this is a rasterized snapshot, identical to what the PDF and printer will produce.
Print preview
Each download link is shown once here — it isn't stored anywhere retrievable in plaintext. Copy it now if you need it.

Downloading gives you a spreadsheet you can email to an institute's own point of contact, who can then hand out links offline — useful when you'd rather not email each student individually.

Upload a roster for

Optional trailing Present column: Yes/No, blank = Pending. A row marked Present must also have a Date of Attendance — it becomes this institute's attendance date, printed as {{Date of Attendance}} on the certificate. An optional Program Name column becomes {{Program Name}} the same way.

Email ID and mobile number must each be unique — rows with an email or mobile already on file will be skipped.

Date format guide
DD-MM-YYYY (dashes) = day first, used as-is. MM/DD/YYYY (slashes) = month first, converted automatically. An invalid date under its own format comes in blank — check the Upload Log tab afterward for exactly which rows and why.

— or —

Sheet must be published to the web (File → Share → Publish to web).

Record a new visit for

Same institute, same POC, but a different day or a different batch of students? Record it as its own visit — the roster you upload next gets linked to exactly this one, kept separate from any other visit's students.

Edit visit —
Pick what to bring in from

Checked items replace that part of the template you're currently editing — everything else in your current design stays as it is. Nothing is saved yet; review the preview and use Save (or Save as new) when you're happy with it.