# Build an Expense Reimbursement Form With AI Policy Checks

> Build an expense reimbursement form in Lovable with an n8n AI agent that checks each request against your policy, logs it in Sheets and emails the status.

Source: https://learn.ynteractive.com/content/expense-reimbursement-form-ai-approval-lovable-n8n · Updated 2026-10-17 · Free from Stepthrough (https://learn.ynteractive.com)

## Practice it step by step

[Start the free practice](https://learn.ynteractive.com/modules/lovable-n8n-finance)

[Take the free module: why it matters, practice and a quick check →](https://learn.ynteractive.com/courses/ai-for-finance/16)

You do every step yourself in a practice copy of Lovable and n8n. It checks your work as you go, and “Do it for me” finishes any step you get stuck on. Free, about 15 minutes, and nothing touches your real accounts. [Open full screen](https://learn.ynteractive.com/modules/lovable-n8n-finance)

Free · Live now · [AI Automation for Finance](https://learn.ynteractive.com/content/industry/finance) · [Lovable](https://learn.ynteractive.com/content/tool/lovable) · [n8n](https://learn.ynteractive.com/content/tool/n8n) · OpenAI · Google Sheets · Gmail · ~15 min · 93 steps · Advanced

Updated October 17, 2026. Built against the tool’s current screens and checked step by step. [How we check this lesson](https://learn.ynteractive.com/content/about#how-we-check)

Reimbursement requests usually arrive as a text, a photo and a question about when the money comes. In this free lesson you build an [expense reimbursement](https://learn.ynteractive.com/content/glossary/expense-reimbursement) form for Maple Street Bookkeeping in [Lovable](https://learn.ynteractive.com/content/tool/lovable) and connect it to [n8n](https://learn.ynteractive.com/content/tool/n8n). An [AI agent](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets) checks each request against the policy, logs it in Google Sheets and emails the employee the status.

## At a glance

| Question | Answer |
| --- | --- |
| What you build | Build an expense reimbursement form in Lovable for Maple Street Bookkeeping and connect it to n8n — the AI agent checks each request against the policy, saves it to Google Sheets and emails the employee the status. |
| Tools | Lovable and n8n |
| Time | About 15 minutes, 93 steps in 15 parts |
| Level | Advanced |
| Cost | Free |
| Ways to learn it | [Practice it step by step](https://learn.ynteractive.com/modules/lovable-n8n-finance) |

### The 15 parts, in short

1. Sign up: Get started with Lovable.
2. Build the form: Click the prompt box, Describe the form, Open the mode picker, Keep Build mode, and 1 more step.
3. New workflow: Start a new workflow.
4. Webhook trigger: Add the first step, Webhook trigger, Change the response mode, Use a Respond node, and 1 more step.
5. AI Agent: Add the next node, Add the AI Agent, Change the prompt source, Define it manually, and 5 more steps.
6. Chat model: Give the agent a brain, Pick OpenAI, Open the credentials, Create a new credential, and 5 more steps.
7. Sheets tool: Add a tool, Add Google Sheets.
8. Create the spreadsheet: Back to the canvas, Open Google Sheets, Name the spreadsheet, Type the first column header, and 5 more steps.
9. Sheets tool: Add a credential, Create a new credential, Sign in with Google, Choose your account, and 13 more steps.
10. Gmail tool: Add another tool, Add Gmail, Add a credential, Create a new credential, and 10 more steps.
11. Respond node: Add the respond node, Respond to Webhook, Back to the canvas.
12. Publish: Publish the workflow.
13. Add the secret: Open the webhook, Production URL, Copy the URL, Back to the canvas, and 7 more steps.
14. Test the form: Open the form, Fill the form, Submit the form.
15. Publish the app: Open Publish, Publish, Check the spreadsheet.

**Start here first:** [Lovable + n8n: Build a Web App with an AI Backend](https://learn.ynteractive.com/content/lovable-n8n-web-app-ai-backend). This Finance version follows the same build with its own example business.

**Part of:** [AI for Finance Teams](https://learn.ynteractive.com/content/paths/ai-for-finance) (step 16 of 23). Next up: [Guardian: Make Your n8n AI Agent Ask Before It Emails a Customer](https://learn.ynteractive.com/content/guardian-n8n-ai-agent-approval-before-sending-email)

## Watch the 30-second version

A short video from this lesson. Watch, then do it yourself in the free practice copy.

### AI Expense Reimbursement Form in Lovable + n8n for finance teams, step by step

Short · 0:40

For finance and bookkeeping: build an expense reimbursement form in Lovable and connect it to n8n. The AI agent checks each request against the policy, saves it to Google Sheets and emails the employee the status…

**Transcript**

For finance and bookkeeping: build an expense reimbursement form in Lovable and connect it to n8n. The AI agent checks each request against the policy, saves it to Google Sheets and emails the employee the status. Build it yourself, free, one click at a time: learn.ynteractive.com

## What you will build: an expense reimbursement form with an AI backend

The [front end](https://learn.ynteractive.com/content/glossary/frontend-vs-backend) is a clean [web form](https://learn.ynteractive.com/content/glossary/web-form) built in Lovable from a written prompt, with no coding. It is titled Expense Reimbursement Request and has four fields: Name, Email, Expense details and Amount. When someone submits it, the form sends the data to an n8n webhook.

The back end is an n8n workflow: a webhook trigger, an AI Agent with an OpenAI model, a Google Sheets tool, a Gmail tool and a Respond to Webhook node. The agent reads the request and picks one status from the policy: Approved, Needs [receipt](https://learn.ynteractive.com/content/ai-receipt-extractor-n8n-google-sheets) or Needs manager OK. It saves the request as a row in a sheet called Expense Requests and emails the employee the status and what to do next. In the test, an employee asks for $64.18 for printer toner and says the receipt is lost, so the agent marks it Needs receipt.

## Who this is for

This is for office managers, bookkeepers and owners at small businesses who handle employee reimbursements by hand. If you are the person who hears did you get my receipt? every week, a simple form plus an automatic first check saves you the back and forth. You do not need to code. The earlier lessons in this section help, but the lesson walks you through every click.

To follow the lesson you need nothing but a browser. Everything happens in a practice copy. To build it for real afterward you need a Lovable account, an n8n account, an OpenAI API key with a little credit, and a Google account for Sheets and Gmail. Have your written reimbursement policy handy, even if it is only a few lines, because the agent can only check what you give it.

## The reimbursement policy the agent checks

The whole policy lives in a short system message. Needs receipt if the employee says there is no receipt or does not mention one. Needs manager OK if the amount is $100 or more. Approved if it is under $100, with a receipt and a clear business purpose. After that the agent saves the request to the sheet and emails the employee in a friendly, brief way, with no tax advice.

These rules and the $100 limit are examples for the lesson. Replace them with your own policy, such as a per-diem limit or a rule for mileage, and the agent follows the new wording.

## Why it works

The form makes every request arrive in the same shape, so nothing is buried in a text thread. The agent handles the first check the same way every time, and the employee hears back right away instead of waiting for you to get to it. The sheet gives you one list of every request, and the Respond node lets the form confirm the submission.

## Common reimbursement headaches this avoids

- Requests with no receipt. The agent catches it on submission and tells the employee what to send, instead of you finding out weeks later.
- Large amounts slipping through. Anything at or above your limit is marked Needs manager OK, so the right person sees it.
- No record of who asked for what. Every request becomes a row in Expense Requests with the name, email, expense and amount.
- Employees left waiting. The status email goes out right away, so fewer people ask did you get my receipt?

## How to use this at your business

Treat the AI status as a first check, not the final approval. You or a manager still approve the payment, and the Needs manager OK status is there to make sure that happens for larger amounts. Before rolling it out, add your real policy, send a few test requests of each kind, and read the emails the agent writes. Keep receipts in the place your accountant expects, and have them decide how reimbursements are treated in your books.

## Try it yourself, free

Reading the steps is a start. Doing them is how it sticks. The interactive module walks you through every click in a practice copy of Lovable and n8n, checks each step, and never touches your real accounts.

[Start “Build an Expense Reimbursement Form With AI Policy Checks”](https://learn.ynteractive.com/modules/lovable-n8n-finance)

## Step by step: Build an Expense Reimbursement Form With AI Policy Checks

All 93 steps of the interactive module, in order. In the module you watch each one, then do it yourself in a practice copy that checks your work.

### 1. Sign up

1. **Get started with Lovable.** Lovable lets you build web apps by describing what you want. Click **Get started for free**.
   In the first module you built a Custom GPT. In the second, you built an AI agent inside n8n. Now you are going to combine a real web app with an AI-powered backend. Lovable is a tool that builds web apps from a text description.

### 2. Build the form

2. **Click the prompt box.** This is your Lovable dashboard. To start a new project, click the prompt box under **What should we build, Alex?**
   This is your Lovable dashboard. Your projects show up along the bottom. To start a new one, you just describe it.
3. **Describe the form.** This prompt tells Lovable exactly what to build — a reimbursement form that sends data to an n8n webhook. Paste in the prompt on the box.
   This prompt tells Lovable what to build: a clean reimbursement form with name, email, expense details, and amount, sending each request to an n8n webhook URL pulled from a secret config — not hardcoded.
   ```text
   Build a simple, clean expense reimbursement request form for a small bookkeeping firm.
   
   The page should be modern, minimal, and professional.
   
   Include these fields:
   
   Name
   Email
   Expense details
   Amount
   
   Use a clear heading such as:
   Expense Reimbursement Request
   
   Add a short supporting line like:
   Tell us what you spent and we'll email you the status.
   
   WEBHOOK
   When the form is submitted, send the data as a POST request to the n8n webhook URL.
   The data should be sent as JSON with keys: name, email, expense, amount.
   Do not ask me to paste the webhook URL into the page or source code.
   
   SUBMISSION STATES
   While submitting, change the button text to something like:
   Sending...
   
   After a successful submission, show:
   Request received! Check your email for the status.
   
   If the webhook request fails, show a simple friendly error:
   Something went wrong. Please try again.
   
   VALIDATION
   All four fields are required.
   Validate the email format.
   
   Make it responsive for desktop and mobile.
   
   Do not add unnecessary sections, navigation, pricing, testimonials, or other marketing content.
   
   The main purpose of this project is to send reimbursement requests from Lovable to an n8n webhook.
   
   IMPORTANT
   Do not hard-code any webhook URL.
   Reference the N8N_WEBHOOK_URL secret/config value when sending the form submission.
   The actual secret will be added manually later in Lovable Cloud, under Secrets.
   ```
4. **Open the mode picker.** Next to the microphone it says **Build**. That is the mode picker. Click it.
   Before you send it, look at the word Build next to the microphone. That's the mode picker.
5. **Keep Build mode.** **Build** makes changes directly, **Chat** is for questions, **Plan** writes a detailed plan first. Click **Build**.
   Build makes changes directly. Chat is for asking questions and exploring ideas, and Plan writes a detailed plan first, which helps on bigger projects. This form is simple, so click Build.
6. **Build the app.** Click the **send arrow**. Lovable builds the app from your prompt and shows it in a preview. Then we switch to n8n to build the backend.
   Lovable reads your prompt, generates the code, and builds a preview of the app. Nothing is public until you publish it. In a few seconds you have a working reimbursement form. Now we build the AI workflow that checks each request.

### 3. New workflow

7. **Start a new workflow.** Now you are in n8n. Click **Create workflow** to start building the backend.
   Now you are in n8n. This is the workflow automation tool you used in the last module. This time, instead of a chat trigger, we are going to use a webhook — so the form can send data directly to n8n.

### 4. Webhook trigger

8. **Add the first step.** Click **Add first step…** to choose a trigger.
   Every workflow starts with a trigger. Last time we used a chat trigger. This time we want a webhook — an HTTP endpoint the form can POST to.
9. **Webhook trigger.** Click **On webhook call** — the form will send data to this endpoint.
   On webhook call. A webhook is just a URL that waits for incoming data. When an employee submits the form, it sends their name, email, expense, and amount as JSON to this webhook.
10. **Change the response mode.** By default the webhook responds immediately. We need it to wait. Click the **Respond** dropdown.
    One important setting. By default, the webhook responds immediately, before the AI agent even runs. We need it to wait until the agent is done, so the form knows the submission succeeded.
11. **Use a Respond node.** Click **Using 'Respond to Webhook' Node** — this lets the workflow finish before responding.
    Using respond to webhook node. This tells n8n: do not send a response yet. Wait until you hit a dedicated respond node further down the chain. That way the form gets a real confirmation after the AI agent has processed everything.
12. **Back to the canvas.** Webhook is configured. Close the node with the **×**.
    That is the webhook set up. Close the node.

### 5. AI Agent

13. **Add the next node.** Click the **+** on the right edge of the webhook node.
    Now we decide what happens when the form data arrives.
14. **Add the AI Agent.** Click **AI Agent** — it will process the form data, save it to a sheet, and send an email.
    AI Agent. Same node as last time, but now it handles form submissions instead of chat messages. It will read the form data, save it to Google Sheets, and send a personalized reply via Gmail.
15. **Change the prompt source.** This time we are not using a chat trigger. Click the **Source** dropdown.
    This time the prompt does not come from a chat trigger — it comes from the webhook. We need to change the source so we can write our own prompt template.
16. **Define it manually.** Click **Define below** so we can write a custom prompt template.
    Define below. This lets us write a prompt that pulls the form fields directly from the webhook data.
17. **Write the prompt template.** This template pulls the form fields from the webhook data. Paste in the prompt template.
    Here is the prompt template. Those double curly braces are n8n expressions that pull the name, email, expense, and amount from the webhook body, so the agent gets the real details every time.
18. **Add an option.** Scroll down and click **+ Add Option** to add a system message.
    Now we need a system message — the standing instruction that tells the agent what to do with every submission.
19. **System Message.** Click **System Message**.
    System message. This is where we tell the agent how to check each request against the policy, save it to Google Sheets, and email the status via Gmail.
20. **Write the system message.** This tells the agent to check the policy, save the request to Sheets and email the status. Paste in the system message.
    Here is the system message. It gives the agent the policy: approve, needs receipt, or needs manager OK for a hundred dollars or more. Then save the request with the Google Sheets tool and email the employee the status.
    ```text
    You check expense reimbursement requests for Maple Street Bookkeeping, a small bookkeeping firm.
    
    Check each request against this policy and pick one status:
    - Needs receipt: the employee says there is no receipt, or does not mention one.
    - Needs manager OK: the amount is $100 or more.
    - Approved: under $100, with a receipt and a clear business purpose.
    
    Use the google sheets tool to add the request to the google sheet.
    
    Use the gmail tool to email the employee the status and what to do next. Be friendly and brief. Do not give tax advice.
    ```
21. **Back to the canvas.** The agent knows what to do. Close the node with the **×**.
    The agent is configured. It knows to save to Sheets and reply via Gmail. Close the node.

### 6. Chat model

22. **Give the agent a brain.** The agent still needs a language model. Click the **+** under **Chat Model**.
    The agent needs a model to think with.
23. **Pick OpenAI.** Click **OpenAI Chat Model**.
    OpenAI Chat Model. If you did the last module, this part will feel familiar.
24. **Open the credentials.** Click the **Credential** dropdown.
25. **Create a new credential.** Click **+ Create new credential**.
    Create new credential. If you already made one in the last module, you could pick it from the list. We will create a fresh one here.
26. **Paste the key.** Paste in the API key to drop in your OpenAI key. No key yet? Make one at platform.openai.com (add credit first), or in your own n8n pick **Gateway credits** and skip this step.
    If you followed the previous module, you already have one. If not, go to platform dot openai dot com, add credit, and create a key. Or skip it: new n8n accounts include free credits, so in your own n8n you can pick gateway credits instead.
27. **Save the credential.** Click **Save**.
    n8n tests the connection and stores the key.
28. **Pick the model.** Click the **Model** dropdown.
    Now the model dropdown.
29. **gpt-5-mini.** Pick **gpt-5-mini** — fast and cheap.
    GPT five mini. Fast, cheap, and plenty smart for processing form submissions.
30. **Back to the canvas.** Close the model node with the **×**.
    Model is wired up. Close it.

### 7. Sheets tool

31. **Add a tool.** The agent needs tools to do things. Click the **+** under **Tool**.
    Now the tools. The system message told the agent to use Google Sheets and Gmail — but it cannot do either until we give it the actual tools.
32. **Add Google Sheets.** Click **Google Sheets Tool**.
    Google Sheets Tool. This lets the agent save form submissions as rows in a spreadsheet.

### 8. Create the spreadsheet

33. **Back to the canvas.** Before configuring this, create the spreadsheet it will write to. Close the node for now.
    Before we configure this node, we need to create the actual spreadsheet. Close this for now — we will come right back.
34. **Open Google Sheets.** Click the **Google Sheets** tab to create a new blank spreadsheet.
    Switch to the Google Sheets tab. You need to create the spreadsheet that the Sheets node will write to.
35. **Name the spreadsheet.** Click the title and rename it to **Expense Requests**.
    Name it Expense Requests — this is where every reimbursement request will go.
36. **Type the first column header.** In cell **A1**, type **Name**.
    Now set up the column headers. These need to match the form fields. In A1, type Name.
37. **Email.** In cell **B1**, type **Email**.
    B1 — Email.
38. **Expense.** In cell **C1**, type **Expense**.
    In C1, type Expense.
39. **Amount.** In cell **D1**, type **Amount**. That is all four columns — matching the form.
    And D1 — Amount. Four columns, matching exactly what the form sends: name, email, expense, amount.
40. **Back to n8n.** The spreadsheet is ready. Click the **n8n** tab to go back and connect it.
    The spreadsheet is ready. Switch back to n8n and connect the Google Sheets node to it.
41. **Open the Sheets node.** Double-click the **Google Sheets** node to configure it.
    Double click the Google Sheets node to open it up again. Now we can connect it to the Expense Requests spreadsheet.

### 9. Sheets tool

42. **Add a credential.** Click the **Credential** dropdown.
43. **Create a new credential.** Click **+ Create new credential** to sign in with Google.
    Create new credential. This one uses Google OAuth, so it opens a credential window.
44. **Sign in with Google.** Click **Sign in with Google** to connect your account.
    This opens the Google account chooser.
45. **Choose your account.** Click your **Google account** to continue.
    Pick the Google account that owns the Expense Requests spreadsheet.
46. **Allow Sheets access.** Check **See, edit, create, and delete all your Google Sheets spreadsheets**.
    Google is asking for permissions. Check the first box — this lets n8n read and write your spreadsheets.
47. **Allow Drive access.** Check **See, edit, create, and delete all of your Google Drive files**.
    Second box — Drive access so n8n can find your spreadsheets by name.
48. **Allow external service.** Check **Connect to an external service**.
    Last one — this lets Google connect to n8n as an external service.
49. **Sign in.** Click **Continue** to complete the Google sign-in.
    All three checked.
50. **Pick the spreadsheet.** Click the **Document** dropdown.
    Now pick the spreadsheet.
51. **Expense Requests.** Click **Expense Requests** — the spreadsheet where reimbursement requests go.
    Expense Requests — this is the spreadsheet where every form submission gets saved as a row.
52. **Pick the sheet tab.** Click the **Sheet** dropdown.
53. **Sheet1.** Click **Sheet1**.
    Sheet one. That is the only tab.
54. **Map the Name column.** Under **Values to Send**, click the **✦** button next to **Name** — the AI agent will fill this in automatically.
    Now the column mapping. Each column in the spreadsheet has a purple button.
55. **Map the Email column.** Click the **✦** button next to **Email**.
    Email.
56. **Map the Expense column.** Click the **✦** button next to **Expense**.
    Expense.
57. **Map the Amount column.** Click the **✦** button next to **Amount**.
    And Amount. All four columns are now set to defined automatically by the model.
58. **Back to the canvas.** Google Sheets is configured. Close the node with the **×**.
    Sheets tool is fully configured — credential, spreadsheet, sheet, and column mapping. Close it.

### 10. Gmail tool

59. **Add another tool.** The agent also needs to send emails. Click the **+** next to Google Sheets to add another tool.
    The agent can save to Sheets now, but it also needs to send a reply email.
60. **Add Gmail.** Click **Gmail Tool**.
    Gmail Tool. This lets the agent send a personalized reply back to whoever submitted the form.
61. **Add a credential.** Click the **Credential** dropdown.
    Gmail uses the same Google OAuth as Sheets.
62. **Create a new credential.** Click **+ Create new credential** to sign in with Google.
    Create new credential. Gmail needs its own Google OAuth credential.
63. **Sign in with Google.** Click **Sign in with Google** to connect your account.
    Same flow as before — Google account chooser then permissions.
64. **Choose your account.** Click your **Google account** to continue.
    Pick the Google account you want to send emails from.
65. **Allow email access.** Check **Read, compose, send, and permanently delete all your email from Gmail**.
    Google is asking for permissions. Check the first box — this gives n8n full email access.
66. **Allow drafts.** Check **Manage drafts and send emails**.
    Second box — manage drafts and send emails.
67. **Allow compose.** Check **Read, compose, and send emails from your Gmail account**.
    Read, compose, and send.
68. **Allow metadata.** Check **View your email message metadata**.
    View email message metadata.
69. **Allow modify.** Check **View and modify but not delete your email**.
    View and modify but not delete.
70. **Allow view.** Check **View your email messages and settings**.
    Last one — view your email messages and settings.
71. **Sign in.** Click **Continue** to complete the Google sign-in.
    All six checked.
72. **Back to the canvas.** Gmail is connected. Close the node with the **×**.
    Gmail is connected. The agent can now send emails. Close the node.

### 11. Respond node

73. **Add the respond node.** One more node. Click the **+** on the right edge of the AI Agent.
    One last piece. Remember we told the webhook to wait for a respond node before sending back a reply? We need to add that node now.
74. **Respond to Webhook.** Click **Respond to Webhook**.
    Respond to Webhook. When the agent finishes processing — saving to Sheets and sending the email — this node sends a success response back to the form, so the user sees a confirmation message instead of an error.
75. **Back to the canvas.** Nothing to configure here. Close the node with the **×**.
    Nothing to configure. This node just sends back the response. Close it.

### 12. Publish

76. **Publish the workflow.** The workflow is complete. Click **Publish** to make it live.
    The workflow is complete. Webhook trigger, AI agent with a model, Google Sheets, Gmail, and a respond node. Once published, the webhook URL is active and ready to receive form submissions.

### 13. Add the secret

77. **Open the webhook.** Double-click the **Webhook** node to get its production URL.
    The workflow is published, but Lovable still needs the webhook URL.
78. **Production URL.** Click the **Production URL** tab — this is the live URL your form will POST to.
    Switch to the production URL tab. The test URL only works during testing. The production URL is the one your published workflow uses.
79. **Copy the URL.** Click the URL to **copy** it. You will paste it into Lovable as a secret.
    You will paste this into Lovable so the form knows where to send data.
80. **Back to the canvas.** URL copied. Close the webhook node.
    Got the URL. Close the node.
81. **Back to Lovable.** Click the **Lovable** tab. We need to give it the webhook URL.
    Switch back to Lovable. We need to paste the webhook URL into a secret so the form can reach the workflow.
82. **Open More.** Your app is open in the Lovable editor: chat on the left, preview on the right. In the toolbar at the top, click **More** (the stacked icon right after **Code**).
    Here is your app in the Lovable editor, with the chat on the left and the preview on the right. Secrets live in the More view. In the toolbar at the top, click the stacked icon right after the code brackets. That's More.
83. **Open Cloud.** More holds your project tools. Click **Cloud** in the list on the left.
    More holds the tools for running your app, starting with Analytics. Secrets belong to Cloud, Lovable's built-in backend.
84. **Open Secrets.** Cloud opens on its **Overview**. Click **Secrets** in the list.
    Cloud opens on its overview, and its pages are listed on the left.
85. **Name the secret.** Paste in the secret name — this matches what the Lovable app expects.
    This is the secrets page. The prompt told Lovable to reference a secret config value called N8N WEBHOOK URL instead of hardcoding it.
86. **Paste the webhook URL.** Paste in the webhook URL to drop in the production URL you just copied.
    This is the live endpoint your form will POST to.
87. **Save the secret.** Click **Save**. The Lovable app can now reach the n8n workflow.
    The Lovable app now knows where to send form submissions. The webhook URL is stored as a secret, not in the source code — exactly how it should be.

### 14. Test the form

88. **Open the form.** Click **Preview** (the globe icon) in the toolbar to test the form.
    Time to test.
89. **Fill the form.** Click **Fill with test data** to populate the form fields.
    Fill out the form with sample data.
90. **Submit the form.** Click **Submit Request**. The form sends the data to n8n; the agent checks the policy, saves it to Sheets and emails the status.
    The form posts the request to the n8n webhook. The agent sees the receipt is missing and marks it needs receipt, saves a row to Google Sheets, and emails the employee through Gmail. The respond node sends back a success message, and the form shows the confirmation.

### 15. Publish the app

91. **Open Publish.** The test went through. The preview is only for you, so click **Publish** at the top right to put the form online.
    The test went through. But the preview is only for you. To put the form online, click Publish at the top right.
92. **Publish.** Lovable suggests a free **lovable.app** address (you can change it) and runs a quick security scan. Click **Publish**.
    Lovable suggests a free web address ending in lovable dot app, and you can change it before you publish. It also runs a quick security scan. The live app uses the same secret, so it sends to your workflow too.
93. **Check the spreadsheet.** Your app is live. Click the **Google Sheets** tab to see the data the agent saved from your test.
    Your app is live. Now check the spreadsheet.

[All free Stepthrough videos](https://learn.ynteractive.com/content/videos)

## Frequently asked questions

**Can AI approve expense reimbursements?**

It can do a first check against a written policy and tell the employee what is missing. In this lesson a person still makes the final decision and pays the reimbursement.

**Is this lesson free?**

Yes, Stepthrough is completely free. To build it for real you need your own Lovable and n8n accounts, an OpenAI API key and a Google account. Some of these tools cost money for real use.

**Can employees upload a receipt photo?**

Not in this version. The form has four text fields, and the employee says in Expense details whether they have a receipt. Adding uploads is a good next step once the basic flow works.

**Do I need to know how to code?**

No. Lovable builds the form from a written prompt and n8n is visual. You paste the prompts and click through the setup.

**How does the interactive lesson work?**

Each step is shown to you first on the left (Watch). Then you do it yourself in a practice copy on the right (Your turn), and every click is checked. If you get stuck, press Do it for me. It is a practice copy, so no real accounts are touched.

[Start this module free](https://learn.ynteractive.com/modules/lovable-n8n-finance)

- Previous in AI Automation for Finance: [Build an AI Agent That Categorizes Business Expenses](https://learn.ynteractive.com/content/n8n-ai-agent-categorize-business-expenses-google-sheets)
- Next in AI Automation for Finance: [Invoices from Your Inbox to Google Sheets, with Approval](https://learn.ynteractive.com/content/invoice-inbox-to-google-sheets-approval-n8n)

## More Lovable and n8n tutorials

- [n8n AI Agent Tutorial: Save Social Media Ideas to Google Sheets](https://learn.ynteractive.com/content/n8n-ai-agent-tutorial-google-sheets): Build an AI agent for BrightPath Marketing that generates social media post ideas and saves them to Google Sheets — chat trigger, AI Agent, system prompt, model…
- [AI Receipt Extractor: Receipts to Google Sheets with n8n](https://learn.ynteractive.com/content/ai-receipt-extractor-n8n-google-sheets): Drop a photo of a receipt into an n8n chat. An AI agent reads it, pulls out the date, vendor and amount, picks a category, and adds a row to Google Sheets.
- [n8n AI Email Responder: Draft Gmail Replies Automatically](https://learn.ynteractive.com/content/ai-email-responder-gmail-drafts-n8n): Build an n8n agent that watches your Gmail, reads each new customer email, and writes a reply as a draft in the same thread, ready for you to check and send.
- [Daily Job Alerts: Email Each Tech Their Jobs from Google Sheets with n8n](https://learn.ynteractive.com/content/n8n-daily-job-alerts-google-sheets-gmail): Every morning at 7, n8n reads a plumbing company's jobs sheet, skips anything not assigned yet, and emails each job to the tech it's assigned to — customer, address…
- [Gmail AI Triage: Auto-Label Every Email and Draft Replies](https://learn.ynteractive.com/content/gmail-ai-triage-labels-drafts-n8n): Build an n8n workflow that reads each new email, sorts it as a lead, a client or an invoice with a Text Classifier, adds the matching Gmail label, and drafts a reply to…
- [A Support Agent That Answers from Your Own Docs](https://learn.ynteractive.com/content/support-agent-answers-from-your-docs-n8n): Turn an n8n chat agent into a support agent that answers only from your policies in a Google Doc, refuses what it should, and hands off to a person by email.

## From the blog

- [What to Check Before AI Auto-Approves Invoices](https://learn.ynteractive.com/content/blog/what-to-check-before-ai-approves-invoices): What to check before letting an AI agent auto-approve invoices or expenses: duplicates, vendor and bank details, PO match, limits, math and an audit log.
- [AI for Bookkeepers: How to Use AI for Bookkeeping (Free)](https://learn.ynteractive.com/content/blog/ai-for-bookkeepers): How to use AI for bookkeeping: AI agents that sort expenses, read receipts and check reimbursements for your review, plus client emails. Free lessons.
- [Automate Expense Reimbursement Requests with AI](https://learn.ynteractive.com/content/blog/expense-reimbursement-form-ai): Expense reimbursement automation for small teams: a Lovable form and an n8n AI agent that checks the policy, logs it in Sheets and emails the status.

[All blog posts](https://learn.ynteractive.com/content/blog)

## Visual guides

This lesson’s key ideas as quick visual guides: swipe through the slides, or read the same guide as text.

- [Build a web form with an AI backend, no code](https://learn.ynteractive.com/content/visual/lovable-n8n-form): Most website forms just land in an inbox and wait. This one does the work. You describe the form in Lovable, and it builds it.
- [Mistake to Avoid: Testing an Unpublished n8n Workflow](https://learn.ynteractive.com/content/visual/mistake-testing-an-unpublished-workflow): A visual tip: an n8n production webhook URL only works once the workflow is published. Publish first, then copy the URL into your app.
- [n8n Webhook URL: Don't Paste It into Your Page](https://learn.ynteractive.com/content/visual/mistake-webhook-url-in-the-page): Where should your n8n webhook URL go? Not in the page code. Store it as a Lovable secret so it stays out of the source and is easy to change.

[All visual guides](https://learn.ynteractive.com/content/visual)

## Free cheat sheets

Print it or save the PDF: the key steps and checks from this lesson on one page, free.

- [Lovable + n8n Form Flow Cheat Sheet](https://learn.ynteractive.com/content/cheat-sheets/lovable-n8n-form-flow): A free one-page cheat sheet: a Lovable form posts to an n8n webhook, and an AI Agent logs it in Google Sheets and replies by Gmail.
- [AI Glossary Cheat Sheet: 30 Terms in Plain English](https://learn.ynteractive.com/content/cheat-sheets/ai-glossary-top-30): A free one-page cheat sheet of 30 AI and automation terms in plain English: models, prompts, n8n workflows, apps and data.
- [n8n Basics Cheat Sheet: Triggers, Items, Webhooks](https://learn.ynteractive.com/content/cheat-sheets/n8n-basics): A free one-page cheat sheet of n8n basics: triggers, expressions, items, executions, the workflow timezone and webhook test vs production URLs.

[All free printable cheat sheets](https://learn.ynteractive.com/content/cheat-sheets)

## Terms in this lesson

Plain-English definitions, each with an example from a free lesson.

[API](https://learn.ynteractive.com/content/glossary/api) · [Approval workflow](https://learn.ynteractive.com/content/glossary/approval-workflow) · [Deployment (publishing a web app)](https://learn.ynteractive.com/content/glossary/web-app-deployment) · [Expense reimbursement](https://learn.ynteractive.com/content/glossary/expense-reimbursement) · Invoice approval · No-code (and low-code) · PO approval workflow · [Purchase requisition](https://learn.ynteractive.com/content/glossary/purchase-requisition)

[The full AI glossary](https://learn.ynteractive.com/content/glossary)

## Related prompts

- [Client bookkeeping question reply prompt](https://learn.ynteractive.com/content/prompts/bookkeeping-question-from-client-reply-prompt): Answer a client who asks why a transaction was categorized a certain way, in plain words, with what you know and an offer to…
- [Expense policy question reply prompt](https://learn.ynteractive.com/content/prompts/expense-policy-question-reply-prompt): Answer an employee's expense policy question before they spend: quote the rule that applies, say what to do, and flag what the…
- [Expense report summary prompt](https://learn.ynteractive.com/content/prompts/expense-report-summary-prompt): Summarize a month of expense or reimbursement rows for the owner: totals by category and status, what's waiting, and flags to…
- [Policy summary for staff prompt](https://learn.ynteractive.com/content/prompts/policy-summary-for-staff-prompt): Turn a long internal policy into a plain staff summary: who it applies to, what to do, limits and deadlines, with unclear lines…

[All free prompt templates](https://learn.ynteractive.com/content/prompts)

## More terms on this topic

Inference · Multi-factor authentication (MFA) · [Three-way match](https://learn.ynteractive.com/content/glossary/three-way-match)

## Browse related tutorials

[AI for Finance (4)](https://learn.ynteractive.com/content/industry/finance) · [Lovable tutorials (16)](https://learn.ynteractive.com/content/tool/lovable) · [n8n tutorials (56)](https://learn.ynteractive.com/content/tool/n8n)
