What you'll build
By the end of this guide, you'll have a single onboarding form that collects a new hire's I-9 document, bank details or a voided cheque, and a signed NDA, all stored in admin-only fields that regular teammates can't see. HR reviews and verifies each submission from a Kanban pipeline, sensitive fields anonymize themselves automatically once your retention window closes, and new hires check their status from their own portal page without ever seeing anyone else's paperwork.
When to use this
You're onboarding new hires across multiple departments and paperwork is scattered across email attachments and shared drives
You need to collect I-9s, bank details, and signed NDAs without exposing them to every teammate who opens the record
Compliance requires you to delete or anonymize sensitive onboarding data after a set retention period, and you don't want to track that manually
HR needs one pipeline to see who's submitted, who's still under review, and who's fully verified
New hires keep emailing to ask "did you get my documents?" and you want them to check a status page instead
Note: The automatic anonymization step in this workflow uses the Automatic data anonymization add-on, available on Enterprise plans. Everything else in this guide (admin-only fields, logic, email templates, the PDF, and the portal) works on any plan.
Part 1 — Build the intake form with Magic Create
Start from your Formaloo homepage rather than an empty form editor. Magic Create builds the entire field structure, including the admin-only fields, from one plain-language prompt.
💡 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.
1. Open Magic Create: From your Formaloo homepage, click Magic Create.
2. Describe the form: Paste a prompt describing a new hire onboarding form that collects full legal name, preferred name, personal email, start date, department, job title, and mailing address, then an I-9 identity document upload, a yes/no question asking whether the new hire wants to upload a voided cheque instead of typing bank details, bank account holder name, routing number, and account number, a voided cheque upload, an NDA agreement yes/no question with a typed signature field, and a GDPR data processing consent yes/no question. Explicitly describe the I-9 upload, bank fields, and NDA signature as admin-only, and ask for three additional admin-only fields: a status dropdown (Submitted, HR review, Verified, Anonymization scheduled, Complete), an assignee field, and an internal notes field.
3. Click Create: Formaloo generates the form in seconds.
4. Verify the fields: Your form should look like this, Magic Create will have generated most of it. Verify each field and field ID matches exactly.
Field (question form) | Field ID | Type |
What's your full legal name? | full_legal_name | Short text |
What's your preferred name? | preferred_name | Short text |
What's your personal email address? | personal_email | Short text |
What's your start date? | start_date | Date |
Which department are you joining? | department | Dropdown |
What's your job title? | job_title | Short text |
What's your mailing address? | mailing_address | Long text |
Upload your I-9 identity and work authorization document | i9_document_upload | File upload (admin-only) |
Do you want to upload a voided cheque instead of entering your bank details manually? | prefers_voided_check | Yes/No |
What's your bank account holder name? | bank_account_name | Short text (admin-only) |
What's your bank routing number? | bank_routing_number | Short text (admin-only) |
What's your bank account number? | bank_account_number | Short text (admin-only) |
Upload a voided cheque or bank confirmation letter | voided_check_upload | File upload (admin-only) |
Have you read and do you agree to the non-disclosure agreement? | nda_consent | Yes/No |
Type your full legal name as your digital signature for the NDA | nda_signature | Short text (admin-only) |
Do you consent to Formaloo storing and processing your personal data for onboarding and payroll purposes, in line with our data retention policy? | gdpr_consent | Yes/No |
You must consent to data processing to continue with onboarding | gdpr_consent_blocker | Statement |
Onboarding status | status | Dropdown (admin-only) |
Assigned HR reviewer | assignee | Assignee field (admin-only) |
Internal HR notes | internal_notes | Long text (admin-only) |
💡 Want internal fields, status, assignee, notes, invisible to the person filling out the form? Admin-only fields are the mechanism. Link it any time a step involves a field that only your team should see or edit: what are admin-only fields and how they help.
5. Publish the form: Click Publish in the island bar at the top of the editor.
Part 2 — Set up the logic with Magic Logic
This is where the form starts reacting to what the new hire answers, swapping bank fields for a cheque upload, revealing the NDA signature only after consent, and blocking submission if data processing consent is declined.
💡 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 is logic in Formaloo.
1. Open Advanced logic: In the form settings panel on the right side of the form editor, open Advanced logic and go to the Logic tab.
2. Open Magic Logic: Click Magic Logic in the top right corner of the Logic panel.
3. Describe your rules: Paste this prompt: "Hide bank account holder name, bank routing number, and bank account number by default if prefers_voided_check is Yes, and show voided_check_upload instead. Hide nda_signature by default, show it if nda_consent is Yes, and make nda_consent required. Hide gdpr_consent_blocker by default, show it and make gdpr_consent required if gdpr_consent is No. On submit, assign the assignee field to the HR team."
4. Generate and review the rules: Click Generate rules. Review each rule the AI previews, then approve, redo, or cancel it.
5. Add the status trigger: Once approved, add one more rule manually: if status is changed to Verified, send email using your "Your paperwork has been verified" template to the personal_email field.
6. Save your logic: Click Save in the top right corner.
Part 3 — Create the email templates
Build the three emails this workflow needs before wiring up when they send.
1. Open custom email templates: Click your profile icon, go to Apps and integrations, and open Custom email templates.
2. Create the confirmation email: Click Add new template, name it "Onboarding documents received," write a subject line like "We've received your onboarding paperwork, @preferred_name," and use an AI block to generate a short, reassuring confirmation that references @job_title and @start_date without listing raw sensitive values.
3. Create the HR notification email: Add a second template named "New hire paperwork ready for review," addressed internally, referencing @full_legal_name, @department, and @start_date, with a CTA linking to the record.
4. Create the verification email: Add a third template named "Your paperwork has been verified," a warm confirmation to @preferred_name that their paperwork is verified ahead of @start_date.
5. Save each template.
Part 4 — Turn on email notifications
Now connect each template to the moment it should fire.
1. Open Notify: From the right sidebar of the form builder, click Notify.
2. Route the confirmation email: Under Send email to respondent, turn on the toggle, select the "Onboarding documents received" template, and confirm personal_email is the field it sends to.
3. Route the HR notification: Under admin notifications, forward the notification to your custom "New hire paperwork ready for review" template instead of the default email, and hit Publish.
4. Confirm the status-change email: The "Your paperwork has been verified" email fires from the logic rule you added in Part 2, not from this panel, so no further setup is needed here.
Part 5 — Build the PDF template
Generate a compliance summary for every submission that avoids reproducing raw sensitive values.
1. Open custom PDF templates: Click your profile icon, go to Apps and integrations, and open Custom PDF template.
2. Add a new template: Click Add new template, switch the editor to HTML view, and paste your onboarding compliance summary HTML.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New Hire Onboarding & Compliance Summary</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital@1&display=swap');
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
background: #ffffff;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
color: #1a1a1a;
}
.page {
max-width: 760px;
margin: 0 auto;
padding: 60px 72px;
}
.header {
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid #ececec;
padding-bottom: 28px;
margin-bottom: 40px;
}
.header-title {
font-size: 22px;
font-weight: 600;
letter-spacing: -0.01em;
color: #111111;
}
.header-meta {
text-align: right;
font-size: 12px;
color: #999999;
line-height: 1.6;
}
.header-meta strong {
color: #444444;
font-weight: 500;
}
.section {
margin-bottom: 36px;
}
.section-title {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.12em;
color: #aaaaaa;
font-weight: 600;
margin-bottom: 16px;
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0 32px;
}
.field {
padding: 10px 0;
border-bottom: 1px solid #f0f0f0;
}
.field.full {
grid-column: 1 / -1;
}
.field-label {
font-size: 11px;
color: #999999;
margin-bottom: 4px;
}
.field-value {
font-size: 14px;
color: #1a1a1a;
font-weight: 500;
}
.status-badge {
display: inline-block;
font-size: 11px;
font-weight: 600;
padding: 3px 10px;
border-radius: 20px;
background: #eef6f0;
color: #2f7a4d;
}
.status-badge.pending {
background: #fbf3ea;
color: #a5651c;
}
.inset {
background: #f9f9f9;
border-left: 3px solid #d8d8d8;
padding: 18px 22px;
border-radius: 4px;
font-size: 13px;
color: #555555;
line-height: 1.6;
}
.inset + .inset {
margin-top: 12px;
}
.signature {
font-family: 'Playfair Display', Georgia, serif;
font-style: italic;
font-size: 20px;
color: #333333;
margin-top: 6px;
}
.privacy-note {
background: #f9f9f9;
border-left: 3px solid #d8d8d8;
padding: 18px 22px;
border-radius: 4px;
font-size: 12px;
color: #777777;
line-height: 1.7;
margin-top: 8px;
}
.footer {
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid #ececec;
padding-top: 20px;
margin-top: 48px;
font-size: 11px;
color: #aaaaaa;
}
</style>
</head>
<body>
<div class="page">
<div class="header">
<div>
<div class="header-title">New hire onboarding & compliance summary</div>
</div>
<div class="header-meta">
Reference: <strong>ONB-@rowid</strong><br>
Submitted: <strong>@created_at</strong>
</div>
</div>
<div class="section">
<div class="section-title">Employee details</div>
<div class="grid">
<div class="field">
<div class="field-label">Full legal name</div>
<div class="field-value">@full_legal_name</div>
</div>
<div class="field">
<div class="field-label">Preferred name</div>
<div class="field-value">@preferred_name</div>
</div>
<div class="field">
<div class="field-label">Personal email</div>
<div class="field-value">@personal_email</div>
</div>
<div class="field">
<div class="field-label">Start date</div>
<div class="field-value">@start_date</div>
</div>
<div class="field">
<div class="field-label">Department</div>
<div class="field-value">@department</div>
</div>
<div class="field">
<div class="field-label">Job title</div>
<div class="field-value">@job_title</div>
</div>
<div class="field full">
<div class="field-label">Mailing address</div>
<div class="field-value">@mailing_address</div>
</div>
</div>
</div>
<div class="section">
<div class="section-title">Work authorization</div>
<div class="grid">
<div class="field full">
<div class="field-label">I-9 identity & work authorization document</div>
<div class="field-value"><span class="status-badge">Received, on file</span></div>
</div>
</div>
<div class="privacy-note">
The uploaded document is stored as an admin-only attachment. It is not reproduced in this summary and is only viewable by HR reviewers inside the onboarding portal.
</div>
</div>
<div class="section">
<div class="section-title">Payroll setup</div>
<div class="grid">
<div class="field full">
<div class="field-label">Bank details</div>
<div class="field-value"><span class="status-badge">On file, admin-only</span></div>
</div>
</div>
<div class="privacy-note">
Account and routing numbers are stored as encrypted, admin-only fields and are intentionally omitted from this document. HR reviewers can verify the exact figures directly in the onboarding record.
</div>
</div>
<div class="section">
<div class="section-title">Legal agreements</div>
<div class="inset">
<strong>Non-disclosure agreement:</strong> Agreed and signed electronically.
<div class="signature">@nda_signature</div>
</div>
<div class="inset">
<strong>Data processing consent:</strong> The employee has consented to Formaloo storing and processing their personal data for onboarding and payroll purposes, in line with the organization's retention policy. Sensitive fields on this record will be automatically anonymized once the configured retention period elapses.
</div>
</div>
<div class="footer">
<div>Confidential — HR use only. Not for external distribution.</div>
<div>[Organization name]</div>
</div>
</div>
</body>
</html>
3. Name and save it: Name it "New hire onboarding & compliance summary" and click Save.
4. Design it to protect sensitive data: The template should state that the I-9 document and bank details are "on file, admin-only" instead of reproducing the file or the account numbers, since a PDF can't mask values field by field. Keep the NDA signature (a typed name) and the GDPR consent confirmation, since neither is a raw financial or identity document.
📖 See how to send custom PDFs with email notifications if you'd like HR to receive the PDF automatically when a record is verified.
Part 6 — Turn on automatic data anonymization
This is what actually deletes sensitive answers once your retention window closes, without anyone manually clearing fields.
1. Open form settings: From the island toolbar at the top of the form editor, open the form settings icon.
2. Find privacy and compliance: Scroll down to the Privacy and compliance section.
3. Turn on anonymization: Enable the anonymization toggle and set "Anonymize after (days)" to a retention window that comfortably outlasts your typical onboarding review time, up to 3,350 days.
4. Select the fields to anonymize: Use Select fields to choose i9_document_upload, bank_account_name, bank_routing_number, bank_account_number, voided_check_upload, and nda_signature. This can't be undone once the retention window closes.
💡 Need to point a client or compliance team to Formaloo's data protection stance? Link whenever a workflow handles sensitive personal data: GDPR at Formaloo.
Part 7 — Activate the portal and add HR roles
Turn the project into a portal so new hires get a place to submit and check status, and HR gets a controlled review space.
💡 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 and select Activate portal.
2. Run the setup wizard: Click Manage user, open the Setup wizard, and create a new user directory for new hires, since this is the external, submitter-facing role.
3. Enable sign-in: Configure user login and sign-up in the wizard. If your plan supports SSO (available on Enterprise), configure it here so new hires log in with company single sign-on instead of a separate password. Confirm this is available on your plan before relying on it.
4. Connect the profile: Connect the new user directory profile to the onboarding form so each new hire's submission is tied to their portal login.
HR reviewers are internal users, not portal roles, since the Assignee field only works with workspace members or teams. Add them as workspace members and group them into an "HR" team instead of routing them through the setup wizard.
💡 Want to assign work to a group instead of naming one person every time? Teams let you route submissions to everyone on a team you define: what is a team in Formaloo and how to manage it.
Part 8 — Restrict page access so only HR sees sensitive pages
Build the pages both groups need, then lock down who can see each one.
1. Build the new hire pages: Add a form page ("Submit your onboarding documents") and a table page ("My onboarding status") filtered to each new hire's own record.
2. Restrict "My onboarding status" to its owner: Switch to Edit mode on the table's data block, click Options, scroll to Manage access, select the profile field, and toggle on Allow users to view only 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" restriction: how to let users view and edit their own data in your portal.
3. Build the HR pages: Add a Kanban page ("All onboarding records") grouped by status, a pipeline page ("My assigned reviews") restricted to each reviewer's assigned records, status-filtered tables for Submitted, HR review, and Verified, and a "Records nearing anonymization" table filtered to Anonymization scheduled.
4. Restrict the HR pages to the HR team: On each HR page, click the three-dot menu next to the page name, select Access, and under workspace team members, restrict access to the HR team.
💡 Want a whole page in your portal visible only to a specific role? This covers page-level access restriction: how to restrict users' access to pages in your portal.
5. Publish the portal: Publish and share the portal link with new hires and your HR team.
Note: Custom domains for your portal are available on the Business plan or via the Brand removal add-on, so your onboarding portal can live at your own URL instead of a formaloo.com address.
What you now have
New hires submit one form and never have to email HR to check on their paperwork. Sensitive fields, the I-9 upload, bank details, and NDA signature, stay invisible to anyone outside HR, and the compliance summary PDF never reproduces the raw values. Once your retention window closes, those fields anonymize themselves automatically, so nobody has to remember to delete anything. HR works from one Kanban pipeline instead of a shared inbox, and new hires get a self-serve status page instead of a reason to follow up.
Used by an HR team to onboard new hires across multiple departments without exposing bank details or ID documents to anyone outside HR.
Ready-to-use templates
Don't build this from scratch, we've already put it together for you.
Employee request workflow — Internal request management for HR and ops teams. If you also need a general intake path for non-onboarding HR requests, this template routes them by type and tracks approvals the same way this guide's onboarding form does.
Patient intake & consent workflow for healthcare — A two-page intake and consent form with an admin Kanban pipeline. It follows the same consent-gate and admin-only pattern this guide uses for the NDA and GDPR consent questions.
Learn more how-tos
Keep sensitive records from piling up indefinitely This guide's Part 6 leans on the same retention mechanism covered in full detail here, including how the day-count window actually works. → How to automatically anonymize records after form submission in Formaloo
Screen candidates before they ever reach onboarding Pairs naturally with this guide as the stage before it, so hires only reach this onboarding form after passing an AI-assisted screening pipeline. → How to build an AI-powered job application pipeline with candidate screening in Formaloo
Apply the same consent-gate pattern to another regulated intake Uses the same conditional consent and admin Kanban pipeline pattern as this guide, applied to patient intake instead of new hire onboarding. → How to build a patient intake and consent workflow for healthcare clinics in Formaloo
What's next
Give each department its own reviewer view If HR splits onboarding review by department, roles let each reviewer see only their department's records instead of the full pipeline. → How to create and assign user roles in your portal
Track how long HR review is taking Add a due date tied to submission so overdue verifications surface automatically instead of getting lost in the pipeline. → How to use the Due date field in Formaloo
Sync verified hires into your existing HR system Once a record hits Verified, sync it to a spreadsheet your payroll or HRIS process already reads from. → How to connect and sync your forms to Google Sheets (one-way)

