🔬 Track policy and meeting minutes acknowledgments with Gmail and Google Sheets

⚡ 19 views · 🔬 Document Extraction & Analysis

Description

Quick overview

This workflow uses a single n8n webhook to email policy or meeting-minute links via Gmail, track per-recipient acknowledgments in an n8n Data Table, and mirror completed acknowledgments to Google Sheets, while also serving a secret-protected HTML status page of outstanding recipients.

How it works

  1. Receives a webhook request on /policy-ack-tracker and routes it by the action parameter, enforcing a shared secret for distribute and status requests.
  2. For action=distribute, splits the provided audience email list into individual recipients and generates an HMAC-SHA256 token for each person using the document ID and recipient email.
  3. Stores one pending record per recipient in an n8n Data Table (Policy Ack Ledger) and sends each person a Gmail message containing the document link and their unique acknowledgment URL.
  4. For action=ack, looks up the matching ledger entry by docId and email, validates the token, and serves a confirmation landing page to avoid recording from link-scanner visits.
  5. When the recipient clicks confirm (confirm=yes), updates the ledger row to acknowledged with a timestamp, appends the acknowledgment to a Google Sheets “Ack Log” worksheet, and returns a confirmation page.
  6. For action=status, reads all ledger rows and returns an HTML status page grouped by document that lists outstanding recipients and completion counts.

Setup

  1. Set PUBLIC_BASE_URL, HMAC_SECRET, API_SHARED_SECRET, and ACK_LOG_SHEET_ID in the workflow’s configuration values so links, token signing, and authorization work correctly.
  2. Create an n8n Data Table named “Policy Ack Ledger” with the fields used in the workflow (docId, docTitle, docLink, recipientEmail, token, sentAt, ackStatus, acknowledgedAt).
  3. Add Gmail OAuth2 credentials to the Gmail node so the workflow can send acknowledgment emails.
  4. Add Google Sheets OAuth2 credentials, create a spreadsheet with a worksheet named “Ack Log”, and ensure it has columns for docId, docTitle, recipientEmail, acknowledgedAt, and ackStatus.
  5. After activating the workflow, copy the production webhook URL and call it with action=distribute (POST) or action=status (GET) including the shared secret as shown in the workflow’s request parameters.

Requirements

Customization

Additional info

The acknowledgment link proves possession of a token, not identity, so a forwarded link can be confirmed by whoever holds it and the result is an internal compliance record rather than a legal e-signature. Nothing chases anyone: there is no schedule trigger, no reminder mail and no due date field, so follow-up runs off the status page by hand. Distribute is not idempotent, so calling it twice for the same document and audience writes a second set of pending rows and mails everyone again. The Gmail and Sheets nodes are set to continue on error, so a bounced address or a failed append surfaces nowhere, and the distribution response counts the recipients split out of the audience rather than mail actually delivered. Tokens carry no expiry, and reissuing a document under the same docId regenerates the identical token, so an older link keeps working; revoking one means deleting that person’s ledger row by hand, since the workflow has no revoke action.

🔗 Nodes Used

Google Sheets, Webhook, Gmail, Data table

📥 Import

Download workflow.json and import into n8n: Workflow menu → Import from File

📖 Importing guide · 🔑 Credential setup