What you'll build
A single attestation form that compliance bulk-loads with one row per employee, so each person opens their own record, confirms they've read the policy, and signs. Every signature auto-updates that employee's status, a filtered view of everyone still outstanding powers a reminder email campaign, and a Reports group gives compliance a live, department-by-department completion picture they can hand straight to an auditor.
When to use this
Rolling out a new or updated policy company-wide and needing proof that every employee actually signed off, not just that an email went out.
Chasing hundreds of people for a signature by hand and losing track of who's already responded.
Preparing for an audit and needing a complete, exportable record of every acknowledgment with a timestamp and signature attached.
Running a recurring compliance requirement, like an annual code-of-conduct or security policy refresh, where you need the same tracking every cycle.
Reporting completion rates to leadership by department instead of guessing from a spreadsheet.
Part 1 — Build the attestation form
This is the form every employee opens to sign off on the policy. The fastest way to build it is with Magic Create, describe the fields you need in plain text and Formaloo generates the whole form in seconds.
1. Open Magic Create: From your Formaloo homepage, click Magic Create.
2. Paste the form prompt: Describe the form you need and click Create:
Build a policy attestation form for employees to sign off on a company policy. Include: full name (short text), work email (short text), department (dropdown), policy name (short text), a yes/no question asking whether they've read the full policy in its entirety, a short static text block reminding them to go back and read the policy if they answer no, a signature field for them to sign the attestation, and a yes/no question asking them to confirm they attest to the policy. Also add these admin-only fields: an attestation status dropdown with options Pending, Acknowledged, and Escalated; an assignee field for the compliance owner; an internal notes long text field; and a due date field for the acknowledgment deadline.
Your form should look like this. Magic Create will have generated most of it. Verify each field and field ID matches exactly.
💡 Want a fully-built form in seconds instead of dragging fields one by one? Magic Create builds your form, fields, and field IDs from a plain-language prompt. This is the cornerstone article for every workflow that starts with "describe your form to the AI." How to create any form with AI using Magic Create in Formaloo
Public-facing fields
Field (question form) | Field ID | Type |
What's your full name? |
| Short text |
What's your work email address? |
| Short text |
Which department are you in? |
| Dropdown |
Which policy are you attesting to? |
| Short text |
Have you read the full policy document in its entirety? |
| Yes/No |
(reminder shown only if "No") |
| Static text |
Sign to confirm your attestation |
| Signature |
Do you attest that you have read, understood, and agree to comply with this policy? |
| Yes/No |
Admin-only fields
Field (question form) | Field ID | Type |
Attestation status |
| Dropdown (admin-only) |
Assignee |
| Assignee field (admin-only) |
Internal notes |
| Long text (admin-only) |
Acknowledgment due date |
| Date (admin-only) |
💡 Want to know exactly what the Assignee field can do, assign to a person, a team, or either? This is the atomic reference for that field type. What is the Assignee field in Formaloo and how to use it
Part 2 — Set up the read-confirmation and status logic
This is where the form stops anyone from signing until they've actually confirmed they read the policy, and where an employee's signature automatically flips their status for compliance. Magic Logic writes all of this from a plain-text description, so you don't have to build each rule by hand.
💡 Want your form to show, hide, skip, or require fields based on what someone just answered? This is the foundational guide to logic in Formaloo, what it is, and the difference between logic and calculation. What is logic in Formaloo
1. Open Advanced logic: In the form settings panel on the right side of the form editor, click Advanced logic, then go to the Logic tab.
2. Launch Magic Logic: Click Magic Logic in the top right corner of the panel.
3. Paste the logic prompt: Describe the rules and click Generate Rules:
When "Have you read the full policy document in its entirety?" equals No, show "Please go back and read the full policy before continuing" and keep "Sign to confirm your attestation" and "Do you attest that you have read, understood, and agree to comply with this policy?" hidden. When it equals Yes, hide the reminder and show both the signature field and the attestation question. Both the signature field and the attestation question are required once visible. When "Sign to confirm your attestation" is answered and "Do you attest that you have read, understood, and agree to comply with this policy?" equals Yes, set "Attestation status" to Acknowledged.
4. Review and approve: The AI previews each rule. Approve, redo, or cancel individually, then make any manual adjustments.
5. Save: Click Save in the top right corner of the panel.
Part 3 — Create your email templates
The campaign needs four emails: an invite when compliance adds someone to the campaign, a reminder for anyone still outstanding, a confirmation once an employee signs, and an internal notice to whoever's tracking that employee down. Build all four templates now, you'll wire up exactly when each one fires in the next Part.
💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? This is the foundational guide to building and sending custom email templates. How to create and send custom email templates
1. Open Custom Email Templates: Click your profile icon, go to Apps and Integrations, and find Custom Email Templates.
2. Create the attestation request: Click Add New Template, name it "Attestation request," clear the body, add an AI block, and paste this prompt:
Write a clear, professional email to an employee letting them know a company policy requires their sign-off. Tone: factual, minimal, no scare language. Mention the policy name, that it takes under two minutes to review and sign, and the acknowledgment due date. Include a clear call to action to open their attestation. Keep it under 90 words.
Set the subject line to Action needed: please acknowledge @policy_name, then save.
3. Create the outstanding reminder: Repeat the steps above for a second template named "Outstanding attestation reminder," subject Reminder: your policy attestation is still outstanding, with this prompt:
Write a short, courteous reminder to an employee who hasn't yet signed off on a policy. Tone: warm but direct, not scolding. Reference the policy name and the due date, and note this is a friendly follow-up, not an escalation. Include a CTA to complete the attestation now. Keep it under 80 words.
4. Create the confirmation email: Repeat again for a third template named "Attestation confirmed," subject You've acknowledged @policy_name, with this prompt:
Write a brief, warm confirmation thanking the employee for completing their attestation. Confirm no further action is needed and that a signed record has been saved for compliance. Keep it under 60 words, factual and appreciative.
5. Create the compliance notification: Repeat once more for a fourth template named "Compliance completion notice," subject @full_name acknowledged @policy_name, with this prompt:
Write a short, factual internal notification to the compliance assignee confirming an employee has completed their policy attestation. Include the employee's name and department, and note the signed record is available in the dashboard. Keep it under 50 words, no persuasive language needed.
💡 Want to pull a submitter's own answers into later questions, emails, or PDFs? Answer piping is how Formaloo passes data using @field_id variables. How to use answer piping in Formaloo
Part 4 — Wire up when each email sends
With all four templates built, this Part sets the actual trigger for each one, so the right email fires at the right moment without anyone in compliance clicking send manually.
1. Set the attestation request trigger: In Advanced logic, open the On Submit section for the admin row-creation action and add a rule: when this row is created for the campaign, send the "Attestation request" email to @work_email.
Note: Since compliance bulk-adds employee rows rather than employees submitting fresh, this is the create/On Submit action fired from compliance's own row-creation step, not the employee's action.
2. Set the confirmation and compliance-notice triggers: Open the On Update section and add two rules: when "Attestation status" changes to Acknowledged, send the "Attestation confirmed" email to @work_email, and separately, send the "Compliance completion notice" email to @assignee.
3. Leave the reminder manual: Don't wire the "Outstanding attestation reminder" template to logic. You'll send it as a targeted email campaign against everyone still Pending in Part 6, that's what actually gives compliance control over timing.
Part 5 — Build the attestation PDF record
Every completed attestation needs a signed, audit-ready record. This PDF captures the employee, the policy, their read confirmation, and their signature in one document.
💡 Want every form submission to generate a polished, branded document automatically? This is the foundational guide to building a PDF template from a submission. How to create PDF templates to turn responses into documents
1. Open Custom PDF Template: Click your profile icon, go to Apps and Integrations, and click Custom PDF Template, then Add New Template.
2. Switch to HTML view: Paste the code below and give the template a name like "Policy attestation record."
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Policy Attestation Record</title> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Source+Serif+Pro:ital@1&display=swap'); * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #ffffff; color: #1a1a1a; } .doc { max-width: 760px; margin: 0 auto; padding: 60px 72px; } .header { display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 2px solid #1a1a1a; padding-bottom: 24px; margin-bottom: 40px; } .header h1 { font-size: 22px; font-weight: 600; letter-spacing: -0.01em; } .header .ref { text-align: right; font-size: 12px; color: #999; } .header .ref strong { display: block; font-size: 14px; color: #1a1a1a; font-weight: 600; } .section { margin-bottom: 32px; } .section-title { font-size: 10px; text-transform: uppercase; letter-spacing: 0.12em; color: #aaa; font-weight: 600; margin-bottom: 14px; } .field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; } .field-grid.full { grid-template-columns: 1fr; } .field { padding-bottom: 10px; margin-bottom: 10px; border-bottom: 1px solid #eee; } .field .label { font-size: 11px; color: #999; margin-bottom: 3px; } .field .value { font-size: 14px; color: #1a1a1a; font-weight: 500; } .consent-block { background: #f9f9f9; border-left: 3px solid #ccc; padding: 16px 20px; font-size: 12px; line-height: 1.6; color: #555; margin-top: 8px; } .signature-block { margin-top: 20px; display: flex; justify-content: space-between; align-items: flex-end; } .signature-box { border-bottom: 1px solid #1a1a1a; min-width: 260px; padding-bottom: 8px; } .signature-box .sig { font-family: 'Source Serif Pro', Georgia, serif; font-style: italic; font-size: 22px; color: #1a1a1a; } .signature-box .caption { font-size: 10px; color: #999; margin-top: 6px; text-transform: uppercase; letter-spacing: 0.08em; } .status-badge { display: inline-block; font-size: 11px; font-weight: 600; letter-spacing: 0.04em; color: #1a1a1a; background: #eee; border-radius: 999px; padding: 4px 12px; } .footer { margin-top: 56px; padding-top: 20px; border-top: 1px solid #eee; display: flex; justify-content: space-between; font-size: 10px; color: #aaa; } </style> </head> <body> <div class="doc"> <div class="header"> <h1>Policy Attestation Record</h1> <div class="ref"> Reference <strong>ATT-@rowid</strong> </div> </div> <div class="section"> <div class="section-title">Employee</div> <div class="field-grid"> <div class="field"> <div class="label">Full name</div> <div class="value">@full_name</div> </div> <div class="field"> <div class="label">Work email</div> <div class="value">@work_email</div> </div> <div class="field"> <div class="label">Department</div> <div class="value">@department</div> </div> <div class="field"> <div class="label">Acknowledgment due date</div> <div class="value">@due_date</div> </div> </div> </div> <div class="section"> <div class="section-title">Policy</div> <div class="field-grid full"> <div class="field"> <div class="label">Policy attested to</div> <div class="value">@policy_name</div> </div> </div> </div> <div class="section"> <div class="section-title">Attestation</div> <div class="field-grid"> <div class="field"> <div class="label">Read policy in full</div> <div class="value">@read_policy_confirmed</div> </div> <div class="field"> <div class="label">Attestation confirmed</div> <div class="value">@attestation_confirmed</div> </div> </div> <div class="consent-block"> By signing below, the employee named above confirms they have read this policy in full, understand its requirements, and agree to comply with it. This record, together with the signature captured below, serves as the employee's official acknowledgment for compliance and audit purposes. </div> </div> <div class="section"> <div class="section-title">Signature</div> <div class="signature-block"> <div class="signature-box"> <div class="sig">@employee_signature</div> <div class="caption">Employee signature</div> </div> <span class="status-badge">Acknowledged</span> </div> </div> <div class="footer"> <span>Confidential, internal compliance record</span> <span>[Organization name]</span> </div> </div> </body> </html>3. Save the template.
4. Attach it to the confirmation email: Go back to the "Attestation confirmed" email template from Part 3, and in its PDF attachment setting, select "Policy attestation record" so the signed document reaches the employee the moment they're marked Acknowledged.
Part 6 — Set up your portal and page access
This is where compliance, the employees, and anyone reviewing completion data each get the view that fits them, and nothing more.
💡 Want to give clients, applicants, or teammates their own space to submit and track requests? This is the foundational guide to building a portal and controlling who can see it. How to create a portal and manage users' access
1. Activate the portal: From your project, click the Settings (gear) icon, select Activate Portal, then Manage User to open the Setup Wizard, and connect a user directory to this form for employees to log in with their work email.
2. Restrict the employee page to their own row: Switch to Edit Mode on the "Your policy attestation" page's data block, click Options, scroll to Manage Access, select the work_email profile field, and toggle on Allow users to view only their data and Allow users to edit their data.
💡 Want each logged-in user to see only their own submissions, not everyone else's? This is the foundational guide to the "view only their data" access restriction. How to let users view and edit their own data in your portal
3. Restrict compliance pages to your compliance team: Compliance team members are workspace members, not portal sign-ups. On each Compliance and Reports page, click the three-dot menu, select Access, and under internal users choose Specific teams, then select your Compliance team.
💡 Want a whole page in your portal visible only to a specific role, not just specific data within a page? This covers page-level access restriction. How to restrict users' access to pages in your portal
Note: If you don't have a Compliance team set up yet, create one first so you can select it here.
4. Restrict "My assigned attestations" to each assignee: On that page's data block, open Options → Manage Access, select the assignee field, and toggle on Allow assignees to view only their data and Allow assignees to edit their data.
Project pages
Group | Page | Access level | Data block | Filter | Sort |
Employees | Your policy attestation | External employee, view and edit only their own attestation row | Form (own row) | Own submission only, matched by login email | N/A |
Compliance | All attestations | Compliance team, full visibility, all departments | Kanban | None | Grouped by Attestation status |
Compliance | Outstanding attestations | Compliance team, full visibility, all departments | Table | Attestation status = Pending | Due date, soonest first |
Compliance | Overdue attestations | Compliance team, full visibility, all departments | Table | Attestation status = Pending AND due date has passed | Due date, most overdue first |
Compliance | My assigned attestations | Compliance team member, filtered to rows assigned to them | Table | Assignee = logged-in user | Due date, soonest first |
Compliance | Acknowledged records | Compliance team, full visibility, all departments | Table | Attestation status = Acknowledged | Newest first |
Reports | Completion by department | Compliance leadership, full visibility, read-only | Chart (bar) | None | Grouped by department |
Reports | Completion trend | Compliance leadership, full visibility, read-only | Chart (line) | Attestation status = Acknowledged | Grouped by week |
Reports | Audit export | Compliance leadership, full visibility, read-only | Table | None | Grouped by department, then employee name |
Running the reminder campaign
Once employee rows are loaded and the campaign is live, run the "Outstanding attestation reminder" template as a targeted send against the Outstanding attestations page. This reaches everyone still Pending without touching anyone who's already signed.
💡 Want an AI agent to send outreach emails and turn the replies into structured data automatically? This is the foundational guide to AI-agent email campaigns, no manual follow-up, no scattered inboxes. How to send an email campaign and collect data with AI agents in Formaloo
What you now have
A single form that doubles as your live employee roster for this policy, with each person's own signature gating their status change automatically. Compliance never has to guess who's outstanding, the filtered pages and reminder campaign do that job. And when an auditor asks for proof, you have a signed PDF per employee plus a department-level completion chart ready to show, instead of a spreadsheet someone has to reconstruct by hand.
What's next
Turn a signed attestation into a lasting record Once employees are signing off, you may want every acknowledgment emailed and archived automatically as proof for future audits. → How to email a signed form or contract as a PDF
Anonymize old attestation records once they're no longer needed Policy acknowledgments often only need to be retained for a set period, after that, personal details can be automatically stripped from the record. → How to automatically anonymize records after form submission in Formaloo
Route policy exceptions into their own review If an employee flags they can't comply with part of a policy, you can send that case into a dedicated approval workflow instead of leaving it stuck in the attestation form. → How to build an approval workflow in Formaloo
Ready-to-use templates
Don't build this from scratch, we've already put it together for you.
Patient intake & consent workflow for healthcare — A two-page intake and consent form built around the same e-signature pattern as this campaign. Swap patient details for employee details and you have most of the attestation structure already in place.
Employee request workflow — Internal request routing for HR and ops teams. The admin-only status, assignee, and notes pattern used here mirrors exactly what this attestation campaign relies on for tracking.
Scholarship & grant application with scoring and approval — A multi-stage approval workflow with a role-based portal. Useful as a reference if your policy attestation ever needs a review step before it's marked complete.
Learn more how-tos
See a similar sign-off pattern in a healthcare setting If your organization needs a consent or intake flow with the same e-signature logic, this is a close parallel to Part 5 of this article. → How to build a patient intake and consent workflow for healthcare clinics
Add a review step before a request is considered complete If some attestations need a second look before compliance signs off entirely, this covers building a formal dual-approval stage. → How to build a dual-approval request workflow
Turn outreach into structured data the same way this campaign does The reminder campaign in this article uses the same underlying mechanism as outbound lead qualification, reaching a filtered list and collecting a response back into your data. → How to build an AI-powered lead qualification system

