Privacy-First Architecture

Certificate generation runs on your device.

MailMyCertificate was designed around a simple idea: organizers should not need to upload participant data just to generate certificates. Optional Sheets import and Gmail delivery send data through our backend.

Built because privacy should be part of the workflow — not an afterthought.

Local Processing

Certificate generation happens directly inside your browser using your own device.

Browser-side generation

CSV files and generated PDFs stay in your browser for generation and download. Public Sheets imports are fetched through our backend; Gmail delivery sends recipient details and PDF attachments through our backend to Google.

Minimal Trust Required

The product is intentionally engineered to minimize how much user data ever leaves the browser.

This Privacy Policy explains how MailMyCertificate handles data when you use the application. By using the platform, you agree to the practices described below.

1. Local-First Processing & Data Sovereignty

MailMyCertificate is developed by Akshat Thakur and follows a local-first architecture. Certificate templates, participant data, generated PDFs, and workflow progress are processed directly inside your browser whenever possible.

Unlike many traditional SaaS tools, MailMyCertificate is intentionally designed to reduce dependency on external cloud storage for core certificate generation workflows.

Complete Local Processing

  • Certificate templates are stored locally inside your browser storage (IndexedDB).
  • CSV and Google Sheets imports are processed 100% on the client side.
  • PDF generation occurs exclusively within your browser using client-side Web Workers and pdf-lib.
  • Generated certificates remain on your device until you manually send or download them.
  • Local browser storage data persists across page reloads. You can clear it manually via browser storage settings or using the app's "Clear Data" option.

What We Do Not Do With Participant Data

  • We do not permanently upload or store participant rosters on MailMyCertificate servers.
  • We do not retain participant names, emails, or personal information in any permanent database.
  • We do not permanently store generated certificate PDFs.
  • We do not use Workspace API data (Gmail, Google Sheets) for secondary purposes like analytics, marketing, or machine learning.
  • We do not access your Google Sheets or Gmail after the immediate operation completes.

2. Information We Collect

MailMyCertificate does not intentionally collect or sell participant information.

Some limited technical information may be collected automatically for operational and security purposes, including:

  • Browser type and version
  • Device information
  • Error logs and crash diagnostics
  • Usage analytics, which may be associated with the Google account email used for Gmail delivery

Any monitoring or diagnostics services used by the platform are configured to avoid intentionally storing Personally Identifiable Information (PII) wherever reasonably possible.

3. Browser Storage & Local Data

MailMyCertificate may store temporary workflow data locally inside your browser using technologies such as IndexedDB or Local Storage.

This may include:

  • Uploaded certificate templates
  • Participant lists
  • Generated certificate references
  • Workflow progress and session recovery data

This local data exists only on your device and can typically be removed by clearing your browser storage.

4. Google Workspace API Usage & Guaranteed Data Handling

MailMyCertificate uses the following Google APIs to deliver its core functionality.

Gmail API (gmail.send scope)

  • Purpose: Send personalized certificates directly through your Gmail account to event participants.
  • Data Sent to Backend: When you request email delivery, the backend temporarily receives recipient email address, email subject, email body, and the PDF certificate file necessary to compose and send the message via Gmail API on your behalf.
  • Temporary Processing: The backend uses your Gmail OAuth credentials to submit the composed email through Google's Gmail API. This email data is processed only for the duration of the send operation and is not intentionally retained in any permanent MailMyCertificate database or log file.
  • No Inbox Access: This application requests the gmail.send scope plus OpenID and profile/email scopes to identify the connected account. It never reads, modifies, stores, or deletes existing emails in your Gmail inbox and cannot access Gmail history.
  • After Send: Once the email is transmitted through Gmail, MailMyCertificate does not retain a copy of the sent message, recipient address, or email content.

Google Sheets Import (Public CSV Export — No OAuth Scope Required)

  • How it works: When you provide a publicly accessible Google Sheets URL, MailMyCertificate retrieves the sheet's public CSV export through our backend. No Google Sheets OAuth scope or API access is required. The CSV data is returned to your browser for parsing and use in the certificate workflow.
  • Requirement: The sheet must be set to "Anyone with the link can view" by you before import. MailMyCertificate only accesses publicly shared sheets and never requests private or non-shared sheets.
  • Data Handling: After retrieving the CSV export, the data is passed to your browser for parsing. Imported participant data is stored locally in your browser's IndexedDB and is never permanently retained on MailMyCertificate servers.
  • No Authentication Required: This feature does not request or use any Google Sheets API scope, Google OAuth token, or access to your Google account.

Recipient Email Sources — No Leads Database or Lead Generation

MailMyCertificate does NOT provide any of the following:

  • A leads database or shared contact database
  • Lead generation or lead sourcing services
  • Email address suggestions or recipient recommendations
  • Email scraping or automated email discovery services
  • Recipient list sharing or distribution between users

Recipients enter the system entirely from you:

  • CSV files you upload: Stored locally in your browser's IndexedDB, never uploaded to our servers
  • Public Google Sheets you specify: Imported once per session using a public CSV export (no OAuth required)

Data isolation: All recipient data is scoped to your session and cannot be accessed by other MailMyCertificate users.

No Email Warming, Automated Sending, or Reputation Services

MailMyCertificate does NOT provide:

  • Email warming, inbox warming, or sender reputation optimization services
  • Automated email sequences, background email jobs, or scheduled sending
  • Simulated email activity, artificial engagement metrics, or deliverability enhancement
  • Any mechanism for unsolicited commercial email or cold outreach

How email sending works: All emails are sent immediately and synchronously when you explicitly click "Send". You control each send operation — MailMyCertificate does not autonomously generate, schedule, or send emails. The queue system manages rate limiting and reliability (preventing Gmail API rate limits from being exceeded), not email warming or reputation building.

AI/ML & Foundational Model Compliance (2026 Mandate)

Critical Guarantee: Data accessed from Google Workspace APIs (Gmail, Google Sheets) will never be used, transferred, or sold to train, improve, or create any foundational, generative, or large language models, or any other machine learning or artificial intelligence systems. We are prohibited from using your data for any AI training purposes.

Google API Services User Data Policy — Limited Use Disclosure

MailMyCertificate's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.

Specifically, MailMyCertificate limits its use of Google user data to providing and improving user-facing features that are visible and prominent in the application's interface. We do not use Google user data for serving advertisements, and we do not allow humans to read user data except with affirmative user consent, for security purposes, or to comply with applicable law.

5. Hosting & Infrastructure

MailMyCertificate may use third-party hosting and infrastructure providers such as Vercel for website delivery, uptime, analytics, and security.

These providers may temporarily process technical request information such as IP addresses, browser metadata, and performance logs as part of normal web infrastructure operations.

However, participant certificate data is not intended to be permanently stored on these infrastructure services.

5.1 Data Protection & Security Measures

MailMyCertificate implements multiple layers of security to protect your data during the certificate generation and email delivery workflow.

Transport Security

  • HTTPS only: All communication between your browser and our servers is encrypted using HTTPS. Unencrypted HTTP connections are not accepted.
  • OAuth tokens in transit: Google OAuth tokens are sent over HTTPS between your browser and the Flask API. They are not included in URLs or browser local storage.

Session & Credential Security

  • Encrypted session cookie: OAuth credentials are encrypted before being placed in Flask's signed session cookie. The cookie is held by your browser and is HttpOnly, Secure in production, and SameSite=Lax; it is not a server-side session store.
  • Session-scoped credentials: The encrypted credential payload is carried by the session cookie and is sent to the API with requests. Logout clears the cookie; expiry follows the configured Flask session lifetime. The API does not intentionally write OAuth tokens to its database or file system.
  • CSRF protection: All state-changing operations (sending emails, logout) are protected by cryptographic CSRF tokens validated on the server.
  • OAuth state validation: The OAuth callback verifies a server-generated state parameter to prevent cross-site request forgery during login.

Access Controls

  • Requested scopes: We requestgmail.sendfor sending, along with OpenID and profile/email scopes to identify the connected account. We do not request Gmail inbox read access.
  • Not intentionally persisted: OAuth credentials are not intentionally written to a database or file system; encrypted credentials are carried in the session cookie.
  • Production hardening: Debug endpoints and verbose error messages are disabled in production. Internal errors are sanitized before being returned to clients. Specific hardening measures include:
    • No stack traces or internal error details exposed to users
    • Request logging excludes sensitive data (tokens, OAuth credentials)
    • Monitoring and alerting configured for suspicious activity
    • Infrastructure runs on secure, managed platforms with security scanning
    • Dependencies are regularly audited for known vulnerabilities

5.2 Recipient Consent & Email Preferences

MailMyCertificate is designed for sending certificates to event participants who have implicitly consented to receive communications from the event organizer.

Consent & Organizer Responsibility

  • Organizer-provided recipients: Recipients are supplied by the organizer from participant data the organizer provides. MailMyCertificate does not independently verify consent or contact preferences.
  • Your responsibility: The organizer is responsible for ensuring that all use of recipient information and email communications complies with applicable laws and regulations in their jurisdiction, including requirements regarding consent, notification, and opt-out mechanisms.
  • Product context: MailMyCertificate is designed for organizer-initiated delivery of event-related communications (primarily certificates) to participants whose information the organizer has provided.

Unsubscribe & Preference Management

  • No built-in unsubscribe or preference system: MailMyCertificate does not provide unsubscribe links, preference management, suppression lists, or recipient opt-out functionality.
  • Recipient contact: Recipients who wish to manage their communication preferences or opt out of future communications should contact the event organizer directly.
  • Product design: MailMyCertificate is designed for organizer-initiated certificate delivery rather than subscription-based or recurring communications. Compliance with applicable email communication laws and regulations is the organizer's responsibility.

5.3 Data Sharing, Disclosure & Prohibited Uses

MailMyCertificate does not sell, rent, trade, or otherwise disclose Google user data to any third party except as strictly necessary to provide the service (e.g., transmitting your email through Google's own Gmail API on your behalf).

We explicitly do NOT use Google user data for:

  • Advertising: No targeted, personalized, retargeted, or interest-based advertising of any kind.
  • Data brokering or resale: We never sell or transfer user data to data brokers, information resellers, or any party for commercial gain.
  • Credit or lending decisions: User data is never used to determine creditworthiness or for lending purposes.
  • Unrelated databases: We never combine or build datasets unrelated to MailMyCertificate's user-facing certificate generation and delivery features.
  • AI/ML model training: Google user data is never used to train, improve, or develop generalized or non-personalized artificial intelligence or machine learning models.
  • Surveillance or tracking: We do not use Google user data for profiling, monitoring, or tracking individuals beyond what is needed to deliver the certificate email they requested.

Summary: Gmail permission is used to send certificate emails on your behalf. OpenID/profile data identifies the connected account; the account email and a hashed account identifier are also stored with usage aggregates in the backend analytics database. Email content and attachments are transmitted to Google's Gmail API to complete each send.

5.5 Analytics & Google Tag Manager

MailMyCertificate uses Google Tag Manager (GTM) and Google Analytics (GA4) for client-side usage measurement. The backend also maintains usage aggregates associated with the connected Google account email and a hashed account identifier.

Critical: Workspace Data Exclusion

GUARANTEED: No data accessed from Google Workspace APIs (Gmail, Google Sheets, participant information, certificate content, or email addresses) is ever sent to Google Analytics, Google Tag Manager, or any third-party analytics service.

Analytics data collected is limited to:

  • Locally generated visitor ID and page/navigation events
  • Page path and navigation flow (no personal data)
  • Feature usage (e.g., "template_uploaded", "certificate_generated") with aggregate counts only
  • Browser type and device category (non-identifying)
  • Error events (no PII or sensitive data included)

The client analytics event code does not intentionally send participant row data or certificate contents. The backend analytics database does store the connected Google account email and a hashed account identifier with usage aggregates; its cleanup/retention schedule is not defined in this codebase.

Data Retention for Analytics

Google Analytics retention depends on the property configuration, which is not available in this repository. The custom backend analytics database has no retention cleanup schedule in the inspected code. Contact us to ask about analytics data deletion.

6. Data Retention & Deletion

MailMyCertificate minimizes data retention wherever possible.

Browser-Side Data

  • Storage mechanism: Participant lists, templates, and certificate references are stored in your browser's IndexedDB and localStorage.
  • Persistence: This data persists across page reloads within the same browser session. It allows you to resume work if the page is accidentally refreshed.
  • Manual deletion: You can clear this data at any time by:
    • Using the app's Settings → "Clear Data" option
    • Clearing your browser's site data for mailmycertificate.tech
    • Using your browser's storage management tools
  • No persistent participant-row database: CSV-based rows are stored in browser IndexedDB. Public Sheets data passes through the backend during import, and Gmail send requests temporarily include recipient details and PDF attachments.

Backend Data

  • Gmail Send Operations: When you send a certificate email, the backend temporarily receives the recipient address and email content to compose and transmit the message. This data is not intentionally retained in a permanent database after the send operation completes.
  • OAuth Credentials & Session Security: Google OAuth access and refresh tokens are encrypted inside Flask's signed session cookie, which is held by the browser. The cookie has the following protections:
    • HttpOnly flag: The cookie is not readable through browser JavaScript
    • Secure flag: Tokens are only transmitted over HTTPS
    • SameSite="Lax": Limits when browsers send the cookie on cross-site requests; state-changing API calls also validate a CSRF token in production
    • Session lifetime: Cookie expiry follows the configured Flask permanent-session lifetime
    • Storage: OAuth tokens are carried in the encrypted cookie and are not intentionally written to a database, local storage, or files
  • Analytics Events: Usage events and aggregates are recorded for product improvement. The backend analytics database associates records with the connected Google account email and a hashed account identifier. Participant row data and certificate contents are not intentionally included in client event payloads. See "Analytics & GTM" below.

Requesting Data Deletion

If you have questions about data retention or believe any personal information has been retained on MailMyCertificate servers, you may:

  • Revoke OAuth access: Visit your Google Account Permissions page and disconnect MailMyCertificate. This immediately invalidates our access to your Gmail account.
  • Clear local data: Clear your browser's IndexedDB and localStorage for mailmycertificate.tech, or use the app's "Clear Data" option.
  • Contact us: Email akshatthakur22@gmail.com or use our Contact page to report data retention concerns. We will respond within 7 days.

7. Open Source Transparency

MailMyCertificate is an open-source project.

Transparency is important for tools that process participant information and certificate workflows. Users may inspect the public source code repository to better understand how the application works.

View GitHub Repository

8. Policy Updates

This Privacy Policy may be updated from time to time to reflect technical improvements, legal requirements, or workflow changes.

Material privacy-related changes will be reflected on this page.

Our Commitment

MailMyCertificate was built to solve a real organizer workflow problem without forcing users to trust unknown servers with participant data.

We keep it simple: generate and send certificates with as little unnecessary data exposure as possible.

Last updated: July 2026