Multi-Level Document Approval & Audit Workflow
This workflow automates a document approval process using Supabase and Gmail.
Who it’s for
- Teams that need structured multi-level document approvals.
- Companies managing policies, contracts, or proposals.
- Medical document need multiple lavel of review and approval.
How it works
- Form Trigger – A user submits a document via the form.
- Supabase Integration – The document is saved in the
documents
table.
- Supabase Storage – The document is saved in the bucket.
- Workflow Levels – Fetches the correct approval level from
workflow_levels
.
- Assign Approvers – Matches approvers by role from the
users
table.
- Approval Record – Creates an
approvals
record with a unique token and expiry.
- Email Notification – Sends an email with Approve / Reject links.
- Audit Logs – Records every approval request in
audit_logs
.
- Repeat - repeat the flow till all the aproval level is comepted
How to set up
- Configure your Supabase credentials.
- Create tables as per data model given.
- Create a storage bucket in Supabase Storage.
- Connect your Gmail account.
- Adjust approval expiry time (
48h
default).
- Deploy and test via the Form Trigger.
Customization
- Add multiple approval levels by chaining
workflow_levels
.
- Replace Gmail with Slack, Teams, or another notification channel.
- Adjust audit logging for compliance needs.
- Update the endpoint http://localhost:5678/webhook-test/ based on instance and env (remove test if you run in prod)
- Update the bucket name.
Important steps
1. Form Submit
- Triggered when by submiting form
- Captures form parameters:
Title
(Document Title)
Description
(Document Description)
file
(Document need for approval)
2. Webhook Entry Point
- Triggered when an approver clicks the Approve or Reject link in email.
- Captures query parameters:
token
(approval token)
decision
(approved/rejected)
3. Approval Data Retrieval & Update
- Fetch approval record from Supabase (approvals) using
token
.
- Update approval status:
Approved
→ moves to next workflow level or final approval.
Rejected
→ document marked as rejected immediately.
- Records
acted_at
timestamp.
4. Decision Check
- IF Node checks whether the decision is approved or rejected.
- Reject Path → Update document status to Rejected in
documents
.
- Approve Path → Continue workflow level progression.
5. Workflow Level Progression
- Fetch details of the current workflow level.
- Identify the next level (
workflow_levels
) based on level_number
.
✅ If Next Level Exists:
- Retrieve approvers by
role_id
.
- Generate unique approval tokens.
- Create new approval records in
approvals
.
- Send email notifications with approval/reject links.
❌ If No Next Level (Last Level):
- Update document status to Approved in
documents
.
6. Audit Logging
- Every approval action is logged into
audit_logs
table:
document_id
action
(e.g., approval_sent
, approved
, rejected
)
actor_email
(system/approver)
details
(workflow level, role info, etc.)
📨 Email Template
Approval request email includes decision links:
<p>Please review the document:</p>
<p>
<a href="http://localhost:5678/webhook-test/doc-approval?token={{$json.token}}&decision=approved">✅ Approve</a> |
<a href="http://localhost:5678/webhook-test/doc-approval?token={{$json.token}}&decision=rejected">❌ Reject</a>
</p>
Happy Automating! 🚀