How do I make an expense reimbursement form in Notion?

Build a Notion expense reimbursement form: a database with amount, date, purpose and receipt, a form view for claims, and a Status button for approvals.

Nookesh KarriNovember 12, 20266 min read
Light cover card with the title 'How do I make an expense reimbursement form in Notion?' in dark text and a blue accent bar

To make an expense reimbursement form in Notion, create a database with properties for the claimant, date, amount, category, business purpose and receipt, then add a Form view to it. Each submitted claim becomes a row. Add a Status property and a button so a manager can approve claims and finance can mark them paid.

The form is the easy part. The database behind it is where the approval workflow lives.

What a Notion expense reimbursement form needs to collect

A Notion expense reimbursement form needs enough detail for someone else to approve the claim without asking questions. In the US, that also means the records an accountable plan expects.

IRS Publication 463 says adequate records show the amount of each separate expense, the time, the place, and the business purpose. Build the field list from that:

Form question Question type What it becomes in Notion
Your name or email Short text or email Text or email property
Expense date Date Date property
Amount Number Number property, formatted as currency
Category Multiple choice Select property
Business purpose Long text Text property
Where it was spent Short text Text property
Receipt File Files & media property

Notion’s forms help page says a form’s question type “is the equivalent of the property type”. Design the database first and the form follows.

Step 1: build the expenses database

The expenses database holds one row per claim. Create a new full-page database called “Expense claims” and add the properties from the table above.

Five settings matter:

  1. Set the Amount number property to a currency format. Notion’s database properties page says number properties “can also be formatted as currency”.
  2. Make Category a select with options like Travel, Meals, Software and Office supplies. Keep the list short.
  3. A Created time property gives you an honest submission date, because it’s auto-generated and can’t be edited.
  4. Add a Status property. Notion groups status options under To-do, In Progress and Complete. Use Submitted under To-do, Approved under In Progress, and Paid and Rejected under Complete.
  5. If managers in your workspace review claims, add a Person property called Approver.

Keep Status and Approver off the form. They’re for your team.

Step 2: add the form view

The form view turns the database into a claim form that anyone can fill out. Click New view, pick Form, and add a question for each property the employee fills in.

  • Mark name, date, amount, category and business purpose as Required.
  • Write help text under Business purpose, like “Client lunch with Acme to review the Q4 contract”. Vague purposes like “meeting” slow approvals down.
  • On the submit screen, set the confirmation body to tell people when claims get paid.

Then share it. Forms shared with Anyone on the web with link work for contractors without Notion accounts, but those responses are anonymous. That’s why the name or email question is required.

Step 3: handle receipts

Receipts are the weak spot of a native Notion expense reimbursement form. The Files & media property lets you upload files and images, but Notion’s forms help page doesn’t describe file questions or say how large an upload can be.

Test before you launch. Open the form in a logged-out browser, submit a claim with a phone photo of a receipt and a PDF invoice, and check that both show up in the row.

If uploads fail, ask people to paste a receipt link into a URL question, or use a form builder that stores files elsewhere. nDBForms, on its Pro plan, saves uploads of up to 10 MB per file to your own Google Drive and writes the link to the Notion page. The Google Drive upload guide shows that set-up.

Step 4: add an approval button

An approval button lets a manager approve a claim in one click instead of editing the Status by hand. Notion’s buttons help page says the Edit pages in action “will edit pages and properties in a database of your choosing”.

  1. Add a Button property to the database called Approve.
  2. Choose Edit pages in and pick this page.
  3. Set Status to Approved.
  4. Add a second button, Mark paid, that sets Status to Paid.

Buttons work on all plans, though some actions are paid-only. The page lists “Send mail to” and “Send webhook” as paid. Anyone with Full access or Can edit permission can click a button, so limit edit access to approvers.

Then build two views: To approve, filtered to Status is Submitted, and To pay, filtered to Approved. Finance works from the second one.

Step 5: flag late claims

A late-claim flag stops old receipts from slipping through. Under IRS rules, an accountable plan’s safe harbor gives employees 60 days after an expense is paid or incurred to account for it, and 120 days to return any excess.

Add a formula property called Late?:

if(dateBetween(prop("Created time"), prop("Expense date"), "days") > 60, "Late", "")

The if() function returns the first value when the condition is true. Filter the To approve view on this column and decide case by case.

Why it matters: Publication 463 says amounts that aren’t adequately accounted for or returned are treated as paid under a nonaccountable plan, and the employer reports them in box 1 of Form W-2. Your own policy can set a shorter window. This isn’t tax advice, so check the deadline with your accountant.

What a Notion form can’t do here

Native Notion forms can’t route claims to different approvers based on the answers unless you’re on a Business or Enterprise plan. Even there, conditional logic only works on multiple choice questions.

My take: for a small team, skip routing. One approver and the two filtered views above beat a complex workflow nobody maintains.

The real limitation: Notion doesn’t total claims per person per month on its own. You need a grouped view, or a relation to a People database with a rollup. And unlike dedicated expense tools, Notion won’t read a receipt to fill in the amount.

If you need branching on a cheaper plan, nDBForms offers logic rules on Pro and sends an email notification for each new submission. For more on related set-ups, see file uploads in Notion forms, conditional logic in Notion forms, and form email notifications.

FAQ

Can employees attach receipts to a Notion form?

A Files & media property stores uploaded files, but Notion’s forms help page doesn’t describe file questions or size limits. Test an upload from a logged-out browser before you rely on it.

How do I approve expense claims in Notion?

Add a Status property with Submitted, Approved, Rejected and Paid options, then add a button that uses the Edit pages in action to set the status in one click.

Do employees need a Notion account to submit a claim?

No, if you share the form with anyone on the web with the link. Those responses are anonymous, so add a name or email question.

How long do employees have to submit expenses?

Your policy sets that. In the US, IRS Publication 463 gives a safe harbor of 60 days after the expense to account for it under an accountable plan.

Sources