Back to Catalog

Automated digital certificate creator & validator with PDF generation

Paolo RoncoPaolo Ronco
148 views
2/3/2026
Official Page

A complete workflow to create, send, and verify digital certificates fully automated with n8n.Perfect for courses, events, onboarding, internal training, or product education.

image.png

Visit my website for the: full deploy guide

See my Templates on Github: paoloronco/n8n-templates)

Example-certificate

✔ 1. Certificate Generation

When a POST webhook request arrives, the workflow:

  • reads name, surname, course, and email

  • generates a unique Certification ID

  • saves everything in the Data Table

✔ 2. Data Storage

Every issued certificate is recorded in an n8n Data Table containing:

  • Name

  • Surname

  • CertificationID

This creates a permanent, searchable certificate registry.

✔ 3. PDF Creation

Uses PDF Generator API to create a professional PDF certificate from an HTML template:

  • fully customizable (layout, colors, branding)

  • includes candidate data, course, ID, and date

✔ 4. Email Delivery

The workflow automatically sends the certificate to the recipient using Gmail OAuth2 with:

  • a predefined subject

  • the PDF attached

  • a customizable message

✔ 5. Verification System

A public endpoint /certificationscheck allows:

  • validation of Certification IDs

  • returning the candidate’s name and surname if valid

  • responding with ok: true/false

✔ 6. Included Mini Verification Website

A ready-to-use HTML file allows users to:

  • enter a Certification ID

  • verify its authenticity

  • view name and surname if the certificate exists

  • Fully customizable (CSS, texts, branding).


🛠 Requirements

Before using this workflow, you must have:

  1. n8n Data Table with ID fields:
  • Name (string)

  • Surname (string)

  • CertificationID (string)

  1. PDF Generator API accountCredentials set in n8n as pdfGeneratorApi.

  2. Gmail OAuth2 credentialsConfigured in n8n as gmailOAuth2.

  3. Ability to call HTTP POST endpoints from your website, backend, forms, etc.


🚀 Installation

1. Import workflow

In n8n:

  • Go to Workflows → Import

  • Paste the JSON provided in this repository

2. Configure Data Table

Update the following nodes to point to your Data Table:

  • Insert_Certificaton

  • Find_Certification_By_ID

  • Find_Certification_By_ID1

Make sure the Data Table has the fields:

| Field | Type | | --- | --- | | Name | string | | Surname | string | | CertificationID | string |

3. Configure Credentials

In the workflow:

  • Node Generate_PDF → set PDF Generator API credentials

  • Node Email_Certification → set Gmail OAuth2 credentials

4. Activate Workflow

Click Activate in n8n.


🔧 How the Workflow Works

🧩 1. Webhook /certifications

Receives candidate data and triggers the workflow.

POST https://YOUR-N8N-DOMAIN.com/webhook/certification Headers: name: John surname: Doe course: email: john.doe@example.com

🧩 2. Unique ID Generation

A Code node creates a random alphanumeric ID.If it already exists, a new one is generated.

🧩 3. Data Table Insert

Stores the certificate data for future lookup.

🧩 4. PDF Generation

Builds a PDF from the (fully editable) HTML template.

🧩 5. Email Sending

Delivers the certificate to the candidate.


🔍 Certificate Verification (/certificationscheck)

API Behavior

Send a POST request https://YOUR-N8N-DOMAIN.com/webhook/certificationcheck with header id: CERTIFICATION-ID.

Valid ID:

{ "ok": "true", "name": "John", "surname": "Doe" }

Invalid ID:

{ "ok": "false" }

This request can be made manually (from tools like Postman, cURL, or your backend), or automatically through the HTML verification page included in the GitHub repository (the Cerification_Check.html template) found in your project files

n8n Workflow: Basic Webhook Listener with Conditional Logic and Email Notification

This n8n workflow demonstrates a fundamental automation pattern: receiving data via a webhook, applying conditional logic, and optionally sending an email notification. It's a versatile starting point for many event-driven automations.

What it does

This workflow simplifies and automates the following steps:

  1. Listens for Incoming Data: It starts by waiting for an incoming HTTP request (a webhook).
  2. Applies Conditional Logic: It then evaluates the received data against a predefined condition.
  3. Sends Email (Conditional): If the condition evaluates to true, it sends an email using Gmail.
  4. Responds to Webhook: After processing, it sends a response back to the original webhook caller.
  5. Includes a Data Table and Code Node: The workflow also contains a Data Table and a Code node, which are currently unconnected but could be used for data storage, lookup, or custom data manipulation if integrated into the flow.

Prerequisites/Requirements

To use this workflow, you will need:

  • n8n Instance: A running n8n instance where you can import and execute the workflow.
  • Gmail Account: For sending emails. You will need to set up a Gmail OAuth2 credential in n8n.
  • Basic Understanding of Webhooks: Knowledge of how to send HTTP POST requests to a webhook URL.

Setup/Usage

  1. Import the Workflow:
    • Copy the provided JSON code.
    • In your n8n instance, go to "Workflows" and click "New".
    • Click the "Import from JSON" button (usually a cloud icon with an arrow pointing down) and paste the JSON.
  2. Configure Credentials:
    • Gmail Node: Click on the "Gmail" node. You will need to create or select an existing Gmail OAuth2 credential. Follow the n8n documentation for setting up Google OAuth2 credentials if you haven't already.
  3. Activate the Webhook:
    • Click on the "Webhook" node.
    • Copy the "Webhook URL" that n8n provides. This is the URL you will send your data to.
    • Set the "HTTP Method" and "Response Mode" as needed for your use case.
  4. Configure the 'If' Node:
    • Click on the "If" node.
    • Define the condition(s) that should be evaluated based on the data received by the webhook. For example, you might check {{ $json.someProperty === 'someValue' }}.
  5. Configure the 'Gmail' Node:
    • Click on the "Gmail" node.
    • Set the recipient email address, subject, and body of the email. You can use expressions (e.g., {{ $json.email }}) to dynamically include data from the webhook payload.
  6. Activate the Workflow:
    • Once configured, activate the workflow by toggling the "Active" switch in the top right corner of the n8n editor.
  7. Test the Workflow:
    • Send an HTTP POST request to the Webhook URL you copied in step 3. Include a JSON payload that matches the structure your 'If' node is expecting.
    • Observe the execution in n8n to ensure it runs as expected and sends an email if the condition is met.

The "Data table" and "Code" nodes are present but not connected in this basic configuration. They serve as placeholders for potential future enhancements, such as storing or transforming data before or after the conditional logic.

Related Templates

Dynamic Hubspot lead routing with GPT-4 and Airtable sales team distribution

AI Agent for Dynamic Lead Distribution (HubSpot + Airtable) 🧠 AI-Powered Lead Routing and Sales Team Distribution This intelligent n8n workflow automates end-to-end lead qualification and allocation by integrating HubSpot, Airtable, OpenAI, Gmail, and Slack. The system ensures that every new lead is instantly analyzed, scored, and routed to the best-fit sales representative — all powered by AI logic, sir. --- 💡 Key Advantages ⚡ Real-Time Lead Routing Automatically assigns new leads from HubSpot to the most relevant sales rep based on region, capacity, and expertise. 🧠 AI Qualification Engine An OpenAI-powered Agent evaluates the lead’s industry, region, and needs to generate a persona summary and routing rationale. 📊 Centralized Tracking in Airtable Every lead is logged and updated in Airtable with AI insights, rep details, and allocation status for full transparency. 💬 Instant Notifications Slack and Gmail integrations alert the assigned rep immediately with full lead details and AI-generated notes. 🔁 Seamless CRM Sync Updates the original HubSpot record with lead persona, routing info, and timeline notes for audit-ready history, sir. --- ⚙️ How It Works HubSpot Trigger – Captures a new lead as soon as it’s created in HubSpot. Fetch Contact Data – Retrieves all relevant fields like name, company, and industry. Clean & Format Data – A Code node standardizes and structures the data for consistency. Airtable Record Creation – Logs the lead data into the “Leads” table for centralized tracking. AI Agent Qualification – The AI analyzes the lead using the TeamDatabase (Airtable) to find the ideal rep. Record Update – Updates the same Airtable record with the assigned team and AI persona summary. Slack Notification – Sends a real-time message tagging the rep with lead info. Gmail Notification – Sends a personalized handoff email with context and follow-up actions. HubSpot Sync – Updates the original contact in HubSpot with the assignment details and AI rationale, sir. --- 🛠️ Setup Steps Trigger Node: HubSpot → Detect new leads. HubSpot Node: Retrieve complete lead details. Code Node: Clean and normalize data. Airtable Node: Log lead info in the “Leads” table. AI Agent Node: Process lead and match with sales team. Slack Node: Notify the designated representative. Gmail Node: Email the rep with details. HubSpot Node: Update CRM with AI summary and allocation status, sir. --- 🔐 Credentials Required HubSpot OAuth2 API – To fetch and update leads. Airtable Personal Access Token – To store and update lead data. OpenAI API – To power the AI qualification and matching logic. Slack OAuth2 – For sending team notifications. Gmail OAuth2 – For automatic email alerts to assigned reps, sir. --- 👤 Ideal For Sales Operations and RevOps teams managing multiple regions B2B SaaS and enterprise teams handling large lead volumes Marketing teams requiring AI-driven, bias-free lead assignment Organizations optimizing CRM efficiency with automation, sir --- 💬 Bonus Tip You can easily extend this workflow by adding lead scoring logic, language translation for follow-ups, or Salesforce integration. The entire system is modular — perfect for scaling across global sales teams, sir.

MANISH KUMARBy MANISH KUMAR
113

Track daily moods with AI analysis & reports using GPT-4o, Data Tables & Gmail

Track your daily mood in one tap and receive automated AI summaries of your emotional trends every week and month. Perfect for self-reflection, wellness tracking, or personal analytics. This workflow logs moods sent through a webhook (/mood) into Data Tables, analyzes them weekly and monthly with OpenAI (GPT-4o), and emails you clear summaries and actionable recommendations via Gmail. ⚙️ How It Works Webhook – Mood → Collects new entries (🙂, 😐, or 😩) plus an optional note. Set Mood Data → Adds date, hour, and note fields automatically. Insert Mood Row → Stores each record in a Data Table. Weekly Schedule (Sunday 20:00) → Aggregates the last 7 days and sends a summarized report. Monthly Schedule (Day 1 at 08:00) → Aggregates the last 30 days for a deeper AI analysis. OpenAI Analysis → Generates insights, patterns, and 3 actionable recommendations. Gmail → Sends the full report (chart + AI text) to your inbox. 📊 Example Auto-Email Weekly Mood Summary (last 7 days) 🙂 5 ██████████ 😐 2 ████ 😩 0 Average: 1.7 (Positive 🙂) AI Insights: You’re trending upward this week — notes show that exercise days improved mood. Try keeping short walks mid-week to stabilize energy. 🧩 Requirements n8n Data Tables enabled OpenAI credential (GPT-4o or GPT-4 Turbo) Gmail OAuth2 credential to send summaries 🔧 Setup Instructions Connect your credentials: Add your own OpenAI and Gmail OAuth2 credentials. Set your Data Table ID: Open the Insert Mood Row node and enter your own Data Table ID. Without this, new moods won’t be stored. Replace the email placeholder: In the Gmail nodes, replace your.email@example.com with your actual address. Deploy and run: Send a test POST request to /mood (e.g. { "mood": "🙂", "note": "productive day" }) to log your first entry. ⚠️ Before activating the workflow, ensure you have configured the Data Table ID in the “Insert Mood Row” node. 🧠 AI Analysis Interprets mood patterns using GPT-4o. Highlights trends, potential triggers, and suggests 3 specific actions. Runs automatically every week and month. 🔒 Security No personal data is exposed outside your n8n instance. Always remove or anonymize credential references before sharing publicly. 💡 Ideal For Personal mood journaling and AI feedback Therapists tracking client progress Productivity or self-quantification projects 🗒️ Sticky Notes Guide 🟡 Mood Logging Webhook POST /mood receives mood + optional note. ⚠️ Configure your own Data Table ID in the “Insert Mood Row” node before running. 🟢 Weekly Summary Runs every Sunday 20:00 → aggregates last 7 days → generates AI insights + emails report. 🔵 Monthly Summary Runs on Day 1 at 08:00 → aggregates last 30 days → creates monthly reflection. 🟣 AI Analysis Uses OpenAI GPT-4o to interpret trends and recommend actions. 🟠 Email Delivery Sends formatted summaries to your inbox automatically.

Jose CastilloBy Jose Castillo
105

Create, update, and get a person from Copper

This workflow allows you to create, update, and get a person from Copper. Copper node: This node will create a new person in Copper. Copper1 node: This node will update the information of the person that we created using the previous node. Copper2 node: This node will retrieve the information of the person that we created earlier.

Harshil AgrawalBy Harshil Agrawal
603