Skip to main content

How to build a GDPR-compliant new hire onboarding and document collection workflow in Formaloo

Learn how to build a GDPR-compliant new hire onboarding workflow in Formaloo, with admin-only I-9, bank, and NDA fields, automatic anonymization, and an HR-only portal.

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 &amp; 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 &amp; 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

What's next

Did this answer your question?