What you'll build
A multi-page rental application where prospective tenants submit their info, employment details, references, and documents. The moment they submit, a private AI Analysis field reads their income against the unit's rent and flags anything worth a second look, without the applicant ever seeing that internal read. A leasing agent screens the application first, a property manager makes the final call, and the applicant gets an automatic email the instant a decision is made, approved or rejected, with a PDF decision record generated behind the scenes for your files.
When to use this
Applications for a vacant unit come in through email and a paper form, and there's no single place to see who's pending, who's approved, and who's been waiting three days for an answer.
Your leasing agent screens applications, but the property manager makes the final call, and right now that handoff happens over a Slack message instead of a real record.
You want a consistent, private read on every applicant's income against the unit's rent, instead of eyeballing it differently each time.
Applicants are left wondering about their status for days because nobody remembers to follow up once a decision is made.
You need a defensible record of every rental decision, who reviewed it, what the screening showed, and when the applicant was notified.
Step-by-step
Part 1 — Build the rental application form
This is the form applicants fill out. It's long enough that it benefits from being split into pages, applicant info, employment and income, references, and documents and consent, rather than one long scroll. The fastest way to build all of it, including the admin-only fields your team needs behind the scenes, is Magic Create.
1. Create a new project: From your Formaloo homepage, start with Form rather than Client portal or Dashboard.
2. Open Magic Create: From your Formaloo homepage, click Magic Create. Describe the form as a multi-page rental application: "Page 1, applicant information: full name, email, phone number, which property or unit they're applying for, and the monthly rent for that unit. Page 2, employment and income: employer name, job title, gross monthly income, length of employment, and a required file upload for proof of income. Page 3, references: previous landlord's name and contact info, and a personal reference's name and contact info. Page 4, documents and consent: a required file upload for a photo ID, and a required yes/no question asking if they consent to a background and credit check. Add these admin-only fields: an application status dropdown with Submitted, Incomplete – documents requested, Pending agent screening, Pending manager decision, Approved, and Rejected, an assignee field for the reviewer, and an internal notes long text field." Click Create.
3. Verify your fields: Your form should look like the tables below. Magic Create will have generated most of it. Verify each field and field ID matches exactly, since the logic, email, and PDF steps ahead all reference these IDs directly.
Page 1, applicant information:
Field (question) | Field ID | Type |
What's your full name? | applicant_name | Short text |
What's your email address? | applicant_email | |
What's your phone number? | applicant_phone | Short text |
Which property or unit are you applying for? | unit_address | Short text |
What's the monthly rent for this unit? | monthly_rent | Number |
Page 2, employment & income:
Field (question) | Field ID | Type |
Who is your current employer? | employer_name | Short text |
What's your job title? | job_title | Short text |
What's your gross monthly income? | monthly_income | Number |
How long have you been employed here? | employment_length | Short text |
Upload proof of income (pay stub, offer letter, or tax return) | income_proof | File upload |
Page 3, references:
Field (question) | Field ID | Type |
What's your previous landlord's name? | landlord_name | Short text |
What's your previous landlord's contact info? | landlord_contact | Short text |
What's a personal reference's name and contact info? | personal_reference | Short text |
Page 4, documents & consent:
Field (question) | Field ID | Type |
Upload a copy of your photo ID | id_document | File upload |
Do you consent to a background and credit check as part of this application? | background_check_consent | Yes/No |
Admin-only fields:
Field (question) | Field ID | Type |
Application status | status | Dropdown |
Assigned reviewer | assignee | Assignee |
Internal notes | internal_notes | Long text |
💡 Want internal fields like Status and Assignee invisible to the person filling out the form? Admin-only fields are the mechanism. See what are admin-only fields and how they help.
4. Require the two uploads and the consent question: Open "Upload proof of income," "Upload a copy of your photo ID," and "Do you consent to a background and credit check" and turn on Required for each. This blocks submission until the essentials are in.
5. Publish the form: Click Publish in the island bar at the top of the editor.
Part 2 — Add a private AI screening summary
Before a human ever opens this application, an AI Analysis field reads the income and unit rent together and gives your leasing agent a private, consistent first read, income affordability, employment stability, and whether the references look complete. The applicant never sees this field, it's admin-only by design and can't be exposed.
💡 Want to score or summarize a submission privately, without the respondent ever seeing your internal read? The AI Analysis field is built for exactly that. See how to generate AI analysis on form submissions without showing it to respondents.
1. Add the field: In your form editor, click Add field and select AI Analysis. It arrives admin-only by default, with no position on the form applicants fill out.
2. Write the prompt: Open the field's prompt box and use the @ menu to pipe in your fields: "Based on @monthly_income and @monthly_rent, calculate the income-to-rent ratio and note whether it meets a common 3x rent guideline. Based on @employment_length, comment on employment stability. Note whether @landlord_contact and @personal_reference look like complete, usable contact information. Summarize your read in one short paragraph for a leasing agent, not the applicant."
3. Name the field: Give it the ID screening_summary and a clear title like "Screening summary," since that's what shows up as the column header in your Responses table.
Note: AI Analysis output isn't ready the instant a submission lands. Any email or PDF that needs to include it should trigger On Update, not On Submit, once the field has finished generating.
4. Publish the form again to make the field live.
Part 3 — Route applications with logic
This is where the application actually moves: from Submitted, to screening, to a final decision, with the right person assigned at each stage.
💡 Want a rule to fire the moment a form is first submitted? On Submit is that trigger. See what is On Submit logic and how it works.
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 and describe the routing at once: "On submit, assign application status to Submitted. On submit, assign the reviewer field to the leasing team. When application status is changed to Pending manager decision, reassign the reviewer field to the property manager."
3. Generate and review the rules: Click Generate Rules. Approve, redo, or cancel each one Formaloo previews.
💡 Want incoming submissions to land on the right person's desk automatically? See how to automatically assign submissions to the right team member or team.
4. Save: Click Save in the top right corner.
Note: Formaloo's logic can check whether a field was answered, but it can't judge whether an uploaded document is actually the right one. That's why moving an application to "Incomplete" is a manual call your leasing agent makes after opening the file, not an automatic check. The email in Part 4 fires the moment they make that call.
💡 Want a rule to fire whenever an existing record changes, like a status flipping to Approved? On Update is the trigger for every decision email in this workflow. See what is On Update logic and how it works.
Part 4 — Create the email templates
Five emails cover this workflow: a confirmation the moment someone applies, a request for missing documents, an internal handoff to the property manager, and a decision email for approval or rejection.
💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? See how to create and send custom email templates.
1. Open the template editor: Click your profile icon, go to Apps and Integrations, then Custom Email Templates, and click Add New Template. Clear the body field, add an AI block, and paste a prompt.
2. Build all five templates, using the subject, prompt, and trigger for each one below. For each, set the subject line, paste the prompt into the AI block, name the template clearly, and click Save.
Application received Subject: We received your application for @unit_address Prompt: Write a warm, brief confirmation email to @applicant_name letting them know their rental application for @unit_address has been received and is now being reviewed. Keep it to 2-3 sentences, friendly and professional. Include a small status badge reading "Under review," white background, single centered column max-width 560px, Inter/system-ui font, muted footer in #999. Trigger: Sent to @applicant_email the moment the form is submitted.
Documents needed Subject: We need one more thing for your application Prompt: Write a polite, clear email to @applicant_name explaining that their application for @unit_address is missing a document or has an issue with one, and ask them to reply or resubmit with the correct file. Keep the tone helpful, not accusatory, 3-4 sentences. White background, single column, muted footer in #999. Trigger: Sent to @applicant_email when application status is changed to Incomplete – documents requested.
Ready for your review Subject: @applicant_name's application is ready for a final decision Prompt: Write a short, factual internal email to the property manager summarizing the application: applicant name, unit, and income, with a one-line pointer to the screening summary for context. Keep it under 3 sentences. White background, single column, a compact data table showing applicant, unit, and income, muted footer in #999. Trigger: Sent to the property manager when application status is changed to Pending manager decision.
Application approved Subject: Good news about your application for @unit_address Prompt: Write a warm email telling @applicant_name their rental application for @unit_address has been approved. Mention next steps: signing the lease and move-in timing. Keep it to 3-4 sentences. White background, single column, a green status badge reading "Approved," muted footer in #999. Trigger: Sent to @applicant_email when application status is changed to Approved.
Application update Subject: An update on your application for @unit_address Prompt: Write a respectful, brief email telling @applicant_name their rental application for @unit_address was not approved at this time. Do not explain internal screening details, that's internal only. Invite them to reach out with questions. Keep it to 3 sentences. White background, single column, a neutral gray status badge, muted footer in #999. Trigger: Sent to @applicant_email when application status is changed to Rejected.
Note: Depending on your jurisdiction, a rental application denial may need to include specific adverse action or fair housing disclosures. Check with legal counsel on what your rejection email and any accompanying notice needs to say, this article covers the automation, not the compliance language.
3. Turn on notifications: From the right sidebar of the form builder, click Notify and turn on respondent notifications using your confirmation template.
4. Wire up the conditional emails: Back in Advanced logic, add a Send email action to each On Update rule from Part 3: the documents-needed email when status changes to Incomplete, the ready-for-review email to the property manager when status changes to Pending manager decision, and the approved or rejected email when status changes to either.
📖 See how to send and receive conditional email notifications for setting these status-change conditions.
Part 5 — Generate a decision record PDF
Every approved or rejected application should leave behind a clean record: the applicant's details, the AI screening summary, and who made the final call.
💡 Want every form submission to generate a polished, branded document automatically? See how to create PDF templates to turn responses into documents.
1. Open the PDF template editor: Click your profile icon, go to Apps and Integrations, then Custom PDF Template, and click Add New Template.
2. Switch to the HTML view and paste the template below. It pipes in the applicant's details, employment info, references, and the AI screening summary using @field_id variables.
💡 Want to pull a submitter's own answers into a document like this? See how to use answer piping in Formaloo.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Rental Application Decision Record</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 { font-family: 'Inter', system-ui, -apple-system, sans-serif; background: #ffffff; color: #1a1a1a; } .page { max-width: 760px; margin: 0 auto; padding: 60px 72px; } .header { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 28px; border-bottom: 1px solid #eaeaea; margin-bottom: 36px; } .header h1 { font-size: 22px; font-weight: 700; letter-spacing: -0.01em; } .header .meta { text-align: right; font-size: 12px; color: #999; line-height: 1.6; } .header .meta strong { color: #555; font-weight: 600; } .section { margin-bottom: 32px; } .section-title { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: #aaa; margin-bottom: 14px; } .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 32px; } .field { padding-bottom: 10px; border-bottom: 1px solid #f0f0f0; } .field.full { grid-column: 1 / -1; } .field-label { font-size: 11px; color: #999; margin-bottom: 4px; } .field-value { font-size: 14px; color: #1a1a1a; font-weight: 500; } .inset { background: #f9f9f9; border-left: 3px solid #ddd; padding: 16px 20px; border-radius: 4px; font-size: 13px; color: #444; line-height: 1.6; } .inset-caption { font-size: 10px; color: #aaa; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.08em; } .badge { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 11px; font-weight: 600; letter-spacing: 0.3px; background: #f2f2f2; color: #666; } .signature-block { margin-top: 24px; padding-top: 20px; border-top: 1px solid #f0f0f0; } .signature-name { font-family: 'Playfair Display', serif; font-style: italic; font-size: 20px; color: #333; margin-bottom: 6px; } .signature-caption { font-size: 11px; color: #999; } .footer { margin-top: 48px; padding-top: 20px; border-top: 1px solid #eaeaea; display: flex; justify-content: space-between; font-size: 10px; color: #bbb; } </style> </head> <body> <div class="page"> <div class="header"> <h1>Rental Application<br>Decision Record</h1> <div class="meta">Reference #<strong>@submission_id</strong><br>Submitted <strong>@created_at</strong></div> </div> <div class="section"> <div class="section-title">Applicant & unit</div> <div class="grid"> <div class="field"><div class="field-label">Applicant</div><div class="field-value">@applicant_name</div></div> <div class="field"><div class="field-label">Email</div><div class="field-value">@applicant_email</div></div> <div class="field"><div class="field-label">Phone</div><div class="field-value">@applicant_phone</div></div> <div class="field"><div class="field-label">Unit applying for</div><div class="field-value">@unit_address</div></div> <div class="field"><div class="field-label">Monthly rent</div><div class="field-value">@monthly_rent</div></div> </div> </div> <div class="section"> <div class="section-title">Employment & income</div> <div class="grid"> <div class="field"><div class="field-label">Employer</div><div class="field-value">@employer_name</div></div> <div class="field"><div class="field-label">Job title</div><div class="field-value">@job_title</div></div> <div class="field"><div class="field-label">Gross monthly income</div><div class="field-value">@monthly_income</div></div> <div class="field"><div class="field-label">Length of employment</div><div class="field-value">@employment_length</div></div> </div> </div> <div class="section"> <div class="section-title">References</div> <div class="grid"> <div class="field"><div class="field-label">Previous landlord</div><div class="field-value">@landlord_name</div></div> <div class="field"><div class="field-label">Landlord contact</div><div class="field-value">@landlord_contact</div></div> <div class="field full"><div class="field-label">Personal reference</div><div class="field-value">@personal_reference</div></div> </div> </div> <div class="section"> <div class="section-title">AI screening summary</div> <div class="inset"><div class="inset-caption">Internal read, not shown to the applicant</div>@screening_summary</div> </div> <div class="section"> <div class="section-title">Decision</div> <div class="grid"> <div class="field"><div class="field-label">Status</div><div class="field-value"><span class="badge">@status</span></div></div> <div class="field"><div class="field-label">Reviewer</div><div class="field-value">@assignee</div></div> <div class="field full"><div class="field-label">Internal notes</div><div class="inset">@internal_notes</div></div> </div> <div class="signature-block"> <div class="signature-name">@assignee</div> <div class="signature-caption">Reviewed by</div> </div> </div> <div class="footer"> <span>Confidential — internal leasing record</span> <span>Your Company Name</span> </div> </div> </body> </html>3. Name the template "Rental application decision record" and click Save.
4. Attach it to the decision emails: Back in Part 4's On Update rules for Approved and Rejected, add a Generate PDF action using this template, then attach the generated file to each email.
Part 6 — Review and move applications through the pipeline
This is where your leasing agent and property manager actually work: reading the AI screening summary, checking documents, and moving each application forward.
1. Open the responses table: From your project, open the table page connected to your form. The screening summary column shows Generating… briefly after each submission, then fills in automatically.
2. Screen the application: The leasing agent opens each new submission, reads the screening summary and documents, and moves status to Incomplete if something's missing, or Pending manager decision if it's ready.
3. Make the final call: The property manager opens applications assigned to them and sets status to Approved or Rejected.
4. Switch to Kanban for a pipeline view: Add a Kanban data block connected to the same form, grouped by status, so both roles can see the whole pipeline at a glance.
📖 See how to sort and filter your submissions data for building filtered views like "assigned to me" or "pending my decision."
5. Add a chart for reporting: On the project's chart page, group by status to see how many applications are pending, approved, or rejected at any time.
Part 7 — Turn the project into a role-based portal
Three roles need three different slices of the same data: applicants track their own status, leasing agents work their screening queue, and property managers see what's waiting on their final decision.
💡 Want to give clients, applicants, or teammates their own space to submit and track requests? See how to create a portal and manage users' access.
1. Activate the portal: From your project, click the Settings icon, select Activate Portal, then open the Setup Wizard and connect a user directory.
2. Add roles: In the user directory, open Edit Profile Fields and add "Applicant," "Leasing agent," and "Property manager" as roles.
3. Restrict applicants to their own record: On the "My application" page, switch to Edit Mode, open Options → Manage Access, and enable Allow users to view only their data on the applicant_email field.
4. Restrict each role to their assigned queue: On the leasing agent and property manager pages, enable Allow assignees to view only their data on the assignee field, so each person only sees what's currently theirs.
Note: You can set a custom domain on your portal, available on the Business plan or via the Brand removal add-on.
What you now have
A rental application pipeline where nothing depends on someone remembering to follow up. Every application arrives with a private, consistent AI read on affordability and completeness before a human opens it. Your leasing agent and property manager each work their own stage of the same record, and the applicant gets a clear, timely email the moment a decision is made, with a signed-looking PDF behind the scenes documenting exactly who decided what and why.
What's next
Give every leasing agent a personal queue across every property If your team manages more than one property or form, the Activity page shows each person their own assigned work across all of them, in one place. → What is the Activity page in Formaloo and how to use it
Chase applicants who never finished their application Send a reminder campaign to anyone who started but didn't submit, instead of manually tracking down half-finished applications. → How to send an email campaign and collect data with AI agents
See a full AI-scored workflow end to end This walks through the broader pattern of AI reading a submission before a human does, useful if you want to extend the screening prompt further. → How to build an AI-powered lead qualification system
Ready-to-use templates
Don't build this from scratch, we've already put similar workflows together for you.
Patient intake & consent workflow for healthcare — A multi-page intake with conditional logic, AI-powered emails, a PDF consent document, and an admin Kanban pipeline. The closest structural match to this workflow's form, PDF, and pipeline pieces.
AI lead qualification & scoring form — Scores incoming leads with AI and routes them conditionally. Swap the lead scoring for the income-and-rent screening prompt from Part 2 and the pattern carries over directly.
Scholarship & grant application with scoring and approval — A multi-reviewer approval workflow with automated decision emails. The screening-then-final-decision handoff mirrors the leasing agent and property manager stages here.
Don't have a form yet? Create one in seconds with Magic Create, describe what you need and Formaloo builds the form for you.
Learn more how-tos
See AI screen a submission before a human ever looks, in a different context Another workflow where AI reads and flags a submission before your team reviews it, useful context for writing your own screening prompt. → How to build an AI-powered job application pipeline with candidate screening
See the multi-page intake and portal pattern applied to healthcare Shares this article's conditional intake, PDF generation, and admin Kanban pipeline structure, just with a different persona. → How to build a patient intake and consent workflow for healthcare clinics
See the two-stage handoff pattern on its own The leasing agent to property manager handoff here is a specific case of a more general shape: one reviewer screens, a second makes the final call. → How to build a dual-approval request workflow
Ready to build this?
🚀 Use this template Start in minutes with a pre-built version of this workflow.
💬 Get help from our concierge team Our team will help you set this up for your specific use case.
📅 Book a demo for Team/Enterprise setup See how teams use Formaloo at scale with advanced permissions and integrations.
