What you'll build
By the end of this guide, you'll have a single form that handles an entire expense claim from submission to payout. Employees submit a claim, their manager approves or rejects it from admin-only fields on the same record, and finance processes payment without ever touching a second form. Status changes drive automatic routing, branded email notifications, and three PDF documents (a manager decision record, a finance processing record, and an employee expense report). A role-based portal gives employees, managers, and finance each their own filtered view of the pipeline.
When to use this
Expense approvals live in email threads and spreadsheets, and claims regularly get lost between "sent to my manager" and "reimbursed"
You want one audit trail per expense instead of separate forms for submission, approval, and payment
Finance has no visibility into which approved claims are still waiting to be paid
Employees keep asking "where's my reimbursement?" because they have no way to check status themselves
You need a PDF record of every decision and payment for compliance or audit purposes
Part 1 β Build the expense claim form
This is the only form in the entire workflow. Employees fill out the public section when they submit a claim. The manager and finance sections are admin-only. They live on the same record, so a manager or finance reviewer just opens the submission and fills in their part instead of juggling a separate form. Magic Create can generate the whole structure, admin-only sections included, from one prompt.
1. Create a new project: From your Formaloo homepage, start a new project with Form. It comes with one form already attached, which is the fastest starting point for this workflow.
2. Open Magic Create: From your Formaloo homepage, click Magic Create. Describe your form in text (or paste the prompt below), then click Create.
Build an expense reimbursement form. Public section: full name, email address, department (single choice), expense category (single choice: Travel, Meals, Equipment, Software, Other), what the expense is for (short text), amount (number), date incurred (date), receipt upload (file), and an optional project or cost center (short text). Add an admin-only manager section: assigned manager (assignee field), decision (single choice: Approved, Rejected), approval notes (long text). Add an admin-only finance section: finance reviewer (assignee field), payment method (single choice: Bank transfer, Company card, Check), payment reference number (short text), payment date (date), finance notes (long text). Add an admin-only status section: expense status (dropdown: Manager review, Finance processing, Processed, Rejected, On hold) and internal notes (long text).
3. Verify your fields: Your form should now look like the table below. Magic Create will have generated most of this structure automatically. Open each field's settings and check that the field ID matches exactly, since logic, emails, and PDFs all reference these IDs.
Field (question form) | Field ID | Type | Section |
What is your full name? |
| Short text | Public |
What is your email address? |
| Public | |
What department are you in? |
| Single choice | Public |
What is the expense category? |
| Single choice | Public |
What is this expense for? |
| Short text | Public |
How much are you claiming? |
| Number | Public |
What date was this expense incurred? |
| Date | Public |
Please upload your receipt. |
| File upload | Public |
Which project or cost center does this relate to? |
| Short text | Public, optional |
Assigned manager |
| Assignee | Admin only |
Decision |
| Single choice: Approved / Rejected | Admin only |
Approval notes |
| Long text | Admin only |
Finance reviewer |
| Assignee | Admin only |
Payment method |
| Single choice | Admin only |
Payment reference number |
| Short text | Admin only |
Payment date |
| Date | Admin only |
Finance notes |
| Long text | Admin only |
Expense status |
| Dropdown: Manager review / Finance processing / Processed / Rejected / On hold | Admin only |
Internal notes |
| Long text | Admin only |
π See what admin-only fields are and how they help for how these fields behave differently from public ones.
4. Publish the form: Click Publish in the island bar at the top of the editor.
Part 2 β Create your email templates
Four templates fire automatically as the claim moves through the workflow: a manager notification when a claim comes in, a finance notification when it's approved, a rejection notice to the employee, and a reimbursement confirmation once it's paid. Build all four now so they're ready to attach to logic in Part 4.
1. Open the email template editor: Click your profile icon β Apps & integrations β Custom email templates β Add new template.
2. Build each of the four templates: Give each a name, subject line, and design, using answer piping (@field_id) to personalize the content. Save each one.
New expense submitted (to manager): subject "New expense claim from @employee_name: @expense_category, @amount." Summarizes the claim and tells the manager to open the record, review the receipt, and fill in their decision.
Approved for processing (to finance): subject "Approved for processing: @employee_name, @amount (@expense_category)." Summarizes the claim and the approving manager, and tells finance to fill in payment details and mark it Processed.
Expense not approved (to employee): subject "Your expense claim has not been approved: @expense_category, @amount." Pipes in
@approval_notesas the reason and invites the employee to resubmit or follow up with their manager.Reimbursement confirmed (to employee): subject "Your reimbursement is on its way: @amount (@expense_category)." Confirms
@payment_method,@payment_reference, and@payment_date, and notes that the PDF expense report is attached.
π See how to create and send custom email templates for the full template editor walkthrough, including how AI can generate the HTML design from a prompt.
Part 3 β Create your PDF templates
Three PDF templates turn the record into a document at each key moment: a manager decision record, a finance processing record, and an employee-facing expense report. Logic generates all three automatically later. You're just building them here.
1. Open the PDF template editor: Click your profile icon β Apps & integrations β Custom PDF templates β Add new template.
2. Build each of the three templates: Use the AI block to generate a design from a prompt, or switch to HTML view and paste your own code. Use answer piping to pull in field values.
Manager decision record: expense details plus a decision banner (approved or rejected) and approval notes. Kept for manager and HR records.
Finance processing record: an amount summary, payment details table, and a three-step approval chain (employee, manager, then finance). Kept for finance's audit trail.
Employee expense report: a reimbursement confirmation with a payment summary and approval timeline. Attached to the confirmation email the employee receives.
π See how to create PDF templates to turn responses into documents for the full editor walkthrough.
Part 4 β Automate approvals and routing with advanced logic
This is where the workflow comes together. One set of logic rules routes the record from manager to finance to payout, fires the right email at each step, and generates the right PDF. Magic Logic can generate all of it from a single prompt describing every condition.
1. Open Magic Logic: In the form editor, open Advanced logic from the form settings panel on the right side, then go to the Logic tab. Click Magic Logic in the top right corner.
2. Describe the full workflow in one prompt: Paste the prompt below and click Generate rules.
When the form is submitted: set expense status to "Manager review," assign the record to the manager field, and send the "New expense submitted" email to the manager. Hide payment method, payment reference number, payment date, and finance notes by default. When decision is changed to "Approved": show payment method, payment reference number, payment date, and finance notes; set expense status to "Finance processing"; assign the record to the finance reviewer field; and send the "Approved for processing" email to the finance reviewer. When decision is changed to "Rejected": set expense status to "Rejected" and send the "Expense not approved" email to the employee's email field, piping in the approval notes as the reason. When expense status is changed to "Processed": generate the employee expense report PDF and send the "Reimbursement confirmed" email to the employee's email field with that PDF attached.
3. Review and approve each rule: The AI previews every rule it built. Approve, redo, or cancel each one individually, then make any manual adjustments, for example confirming the correct email template is selected for each "Send email" action, and the correct PDF template for the "Generate PDF" action.
4. Save your logic: Click Save in the top right corner.
π See what is logic in Formaloo and how to add advanced logic to your form for more on how On submit and On update rules work. For the full list of supported variables, see how to dynamically pull form data into custom emails, PDFs, and AI prompts.
Part 5 β Set up the portal for employees, managers, and finance
Turn the project into a portal so each role only sees what's relevant to them: employees see their own claims, managers see their team's queue, and finance works from a Kanban pipeline.
1. Activate the portal: Open your project, click the gear icon in the top-right corner, and select Activate client portal. Click Manage users, then Setup wizard, and connect a user directory.
2. Add user roles: In your user directory, add three roles: Employee, Manager, and Finance. This lets you control page access and data filters by role.
π See how to create and assign user roles in your portal for the full walkthrough.
3. Build the employee pages: Add a Submit an expense page with the form block. Add My claims, a table filtered to the logged-in user's email address, showing category, amount, date, and status. Add Rejected claims, the same filter plus status = Rejected, showing the manager's approval notes so employees can see why and resubmit.
π‘ Pro tip: Each employee sees only their own submissions on these pages. No one else's records appear. See how to let users view and edit their own data in your portal.
4. Build the manager pages: Add Pending my approval, a table filtered to manager = logged-in user and status = Manager review, sorted oldest first. Add All my team's claims, filtered to manager = logged-in user across all statuses. Add Approved by me, filtered to manager = logged-in user and decision = Approved, to track which approved claims are still moving through finance.
π‘ Pro tip: Each manager sees only claims assigned to them, not any other manager's queue. See how to let users view and edit their own data in your portal.
5. Build the finance pages: Add All expenses, a Kanban board grouped by expense status with five columns (Manager review, Finance processing, Processed, Rejected, On hold). Dragging a card between columns updates the status and triggers the matching logic automatically. Add Ready to process, a table filtered to status = Finance processing, sorted oldest first. Add Processed, filtered to status = Processed, showing payment method, reference, and date as an audit log. Add Expense overview, a chart of claimed amounts grouped by category and department.
π See how to create a Kanban board and how to sort and filter your submissions data for the underlying data views used on these pages.
What you now have
Employees submit a claim once and can always check its status without asking anyone. Managers approve or reject from the same record they were notified about. No second form, no copy-pasting into email. Finance works from a single Kanban queue instead of a shared inbox, and every decision and payment produces a PDF for the audit trail. What used to be a scattered email-and-spreadsheet process is now one form, one pipeline, and three roles that each see exactly what they need.
Ready-to-use templates
Don't build this from scratch β we've already put it together for you.
Employee request workflow β routes internal requests by type and tracks approvals from one view. Swap in the expense-specific fields and decision logic from this guide to turn it into a dedicated reimbursement workflow.
Scholarship & grant application with scoring and approval β a multi-stage review workflow with automated approval and rejection emails. The same approve/reject branching pattern used here for managers applies directly.
Patient intake & consent workflow for healthcare β conditional admin-only sections, a PDF export, and an admin Kanban pipeline, structured the same way as the manager and finance sections in this guide.
What's next
Catch claims that stall in review Once your workflow is live, set up the reminder campaigns from the optional section above so nothing sits untouched for too long. β How to send an email campaign and collect data with AI agents
Give finance faster ways to work the queue As claim volume grows, refine the Ready to process and Processed table views with additional filters and sorts. β How to sort and filter your submissions data
Make the finance Kanban easier to scan Add visual cues to the All expenses board so overdue or high-value claims stand out at a glance. β How to enable upvoting on Kanban and gallery boards
Learn more how-tos
See the same approve/reject pattern applied to internal requests This workflow's manager decision gate is a specific case of a more general pattern. β How to build a dual-approval request workflow
See admin-only sections and conditional PDFs in a different context The finance section's hide-until-approved logic mirrors how conditional sections work elsewhere. β How to build a patient intake and consent workflow for healthcare clinics
See a multi-stage pipeline with automated routing at hiring scale If you like how status drives the Kanban here, this workflow applies the same idea to a higher-volume pipeline. β How to build an AI-powered job application pipeline with candidate screening
