Skip to main content

How to build a multi-location incident report intake that routes by severity to regional or corporate teams in Formaloo

Learn how to build a multi-location incident report intake in Formaloo that scores severity automatically, generates a private AI triage read, and routes incidents to the site, regional, or corporate team automatically.

What you'll build

A single incident report form that any location can use the moment something happens, an injury, a customer complaint, a security incident, or property damage, with no portal login required. Behind the scenes, Formaloo scores the severity of every submission automatically from a handful of yes/no and dropdown answers, writes a private AI read of what happened for whoever picks it up, and routes the case to the site manager, the regional team, or the corporate response team depending on how serious it is. Nothing about severity is left to a frontline employee's judgment in the moment.

When to use this

  • Every location currently reports incidents its own way, a text to the manager, a paper form, an email that gets missed, and there's no single record of what happened where.

  • Minor incidents and genuinely serious ones sit in the same inbox, so a major injury or a legal exposure risk doesn't get the urgency it needs until someone happens to read that email.

  • Frontline staff don't have Formaloo accounts and shouldn't need one to file a report from their phone in the middle of a shift.

  • Leadership wants to see patterns across locations, which sites report the most incidents, which incident types recur, without pulling reports together manually.

  • Compliance or risk teams need every incident on record with a consistent severity read, not just the ones that happened to get escalated verbally.

Part 1 — Build the incident report form with Magic Create

This form needs to work for a frontline employee filling it out on their phone right after something happens, so it stays lean: enough to capture what happened and the handful of factual answers that drive automatic severity scoring later, nothing more. Magic Create builds all of this from a plain-language description in one pass.

1. Open Magic Create: From your Formaloo homepage, click Magic Create.

💡 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." See how to create any form with AI using Magic Create in Formaloo.

2. Describe the form: Paste this prompt into Magic Create and click Create.

Create an incident report intake form for a multi-location business. Ask for the reporter's name and email address, which location they're reporting from (a dropdown with placeholder options Location 1, Location 2, Location 3, and Location 4), what type of incident it is (a dropdown with options Injury or accident, Customer complaint, Security incident, Property or equipment damage, and Other), when it happened (a date and time field), and a long text field describing what happened. Add a yes/no question asking whether anyone was injured, and a long text field for the injury details and whether medical attention was needed. Add a yes/no question asking whether a customer or member of the public was involved, a yes/no question asking whether there's any risk of media, legal, or regulatory exposure, a dropdown for estimated cost or property damage with options None, Under $1,000, $1,000 to $10,000, and Over $10,000, and a file upload field for photos or supporting evidence. Then add these admin-only fields: a Severity level dropdown with options Minor, Moderate, and Major/Critical, a Status dropdown with options New, Under review, Escalated, and Resolved, an Assignee field, and an Internal notes long text field.

3. Verify the fields: Your form should look like this:

Field (question form)

Field ID

Type

What's your name?

reporter_name

Short text

What's your email address?

reporter_email

Email

Which location is this happening at?

location

Dropdown

What type of incident are you reporting?

incident_type

Dropdown

When did this happen?

incident_datetime

Date & time

Describe what happened

incident_description

Long text

Was anyone injured?

injury_occurred

Yes/No

What was the injury, and was medical attention needed?

injury_details

Long text

Did this involve a customer or member of the public?

public_involved

Yes/No

Is there any risk of media, legal, or regulatory exposure?

exposure_risk

Yes/No

Estimated cost or property damage

damage_estimate

Dropdown

Upload any photos or supporting evidence

evidence_upload

File upload

Severity level

severity_level

Dropdown (admin-only)

Status

status

Dropdown (admin-only)

Assignee

assignee

Assignee (admin-only)

Internal notes

internal_notes

Long text (admin-only)

💡 Want internal fields, like status, assignee, or scores, invisible to the person filling out the form? What are admin-only fields and how they help is the mechanism behind the four fields marked admin-only above.

4. Rename the location placeholders: Open the location dropdown and replace Location 1 through Location 4 with your own site names.

💡 Want to know exactly what the Assignee field can do, assign to a person, a team, or either? What is the Assignee field in Formaloo and how to use it is the reference for that field type, which is what actually carries the routing later in this article.

5. Publish your form: Click Publish in the island bar at the top of the editor to make it live.

Part 2 — Score severity automatically and add a private AI read

Two things happen behind the scenes on every submission before anyone reviews it: a numeric severity score gets calculated from the factual answers already on the form, and a private AI read summarizes what happened for whoever picks up the case. Neither of these is visible to the reporter.

1. Open the Variables section: In your form editor, go to the Variables section.

2. Add four integer variables: Click + Add and select Integer four times, creating variables with IDs injury_points, public_points, exposure_points, and damage_points. Leave their default values as 0, logic sets them in the next Part.

3. Add the severity score formula variable: Click + Add, select Formula, and give it the ID severity_score. In its Default formula field, enter:

injury_points+public_points+exposure_points+damage_points

💡 Want to run real-time calculations using values from other fields or variables? How to use a variable with a formula covers formula variables in full, including why formulas can't use parentheses (this one doesn't need any).

4. Open the Add field panel and select AI Analysis: Back in your form's fields, click Add field and look for AI Analysis. It arrives admin-only by default and can't be shown to respondents, there's no toggle for that.

5. Give it the ID ai_incident_triage and title it "AI incident triage."

6. Write the prompt: Open the field's prompt box and enter:

Analyze this incident report and write a short private summary for the reviewing manager. Reference @incident_type, @incident_description, @injury_details, @public_involved, @exposure_risk, and @damage_estimate. Summarize what happened in two sentences, explain in one sentence why this incident lands at its severity level, and end with one sentence recommending the reviewer's immediate next action.

Use the @ menu inside the prompt box to insert each field by reference rather than typing field IDs from memory.

7. Publish your form to make the field live.

💡 See how to use answer piping in Formaloo for more on how the @ syntax pulls submitted answers into a prompt.

This AI read runs automatically on every submission and lands in its own column in your Responses table, right alongside severity_score and every other field. Since it's admin-only by design, use it inside the internal team notifications in Part 4, not the confirmation email that goes back to the reporter.

Part 3 — Route incidents by severity with logic

This is where the severity score, the injury detail visibility, and the actual routing to a site, regional, or corporate team all get wired together. Magic Logic can set up all of these rules from one plain-language description.

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.

💡 Want your form to show, hide, skip, or require fields based on what someone just answered? What is logic in Formaloo is the foundational guide to logic in Formaloo.

2. Open Magic Logic: Click Magic Logic in the top right corner of the Logic panel.

3. Describe the rules: Paste this into the Magic Logic prompt box and click Generate Rules.

Hide the injury details field by default, and show it only when "Was anyone injured?" is Yes, and require it in that case. Set Injury points to 3 when "Was anyone injured?" is Yes, otherwise set it to 0. Set Public points to 1 when "Did this involve a customer or member of the public?" is Yes, otherwise set it to 0. Set Exposure points to 3 when "Is there any risk of media, legal, or regulatory exposure?" is Yes, otherwise set it to 0. Set Damage points to 0 when Estimated cost or property damage is None, 1 when it's Under $1,000, 2 when it's $1,000 to $10,000, and 3 when it's Over $10,000. Set Severity level to Minor when Severity score is between 0 and 2, Moderate when it's between 3 and 5, and Major/Critical when it's 6 or higher. Set Assignee to the site manager team when Severity level is Minor, to the regional team when Severity level is Moderate, and to the corporate response team when Severity level is Major/Critical. Set Status to New when the form is submitted.

4. Review the AI-generated rules: Approve each rule as previewed, or make manual adjustments if a threshold or default doesn't match your own escalation policy.

5. Save your logic: Click Save in the top right corner.

💡 Want to assign work to a group instead of naming one person every time? What is a team in Formaloo and how to manage it covers setting up the site manager, regional, and corporate teams this routing depends on. Set those teams up before this logic goes live.

Part 4 — Create the email templates

Five emails cover this workflow: a confirmation to the reporter, one notification per severity tier, and a closing update once a case is resolved. Each one needs its own template, not just a description, since the routing logic in Part 3 references them by name.

💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? How to create and send custom email templates is the foundational guide to building one.

1. Open Custom Email Templates: Click your profile icon, go to Apps and Integrations, and find Custom Email Templates.

2. Create the confirmation email: Click Add New Template, name it "Incident report received," and set the subject to We've received your incident report, @incident_type at @location. Clear the body, add an AI block, and enter this prompt: "Write a brief, calm, reassuring email to @reporter_name confirming their incident report about @incident_type at @location on @incident_datetime was received. Reassure them the right team has been notified and will follow up if more detail is needed. Do not mention severity level, scoring, or internal routing. Keep it to 3 or 4 sentences." Save the template.

3. Create the Minor severity email: Add another template, name it "New Minor incident," subject New incident reported at @location, Minor severity. AI prompt: "Write a factual, low-urgency email to the site manager summarizing the incident type (@incident_type), location (@location), what happened (@incident_description), and the AI triage read (@ai_incident_triage). Ask them to review and update the status once addressed. Calm and informative, no urgency framing." Save the template.

4. Create the Moderate severity email: Add a template named "Incident escalated to regional," subject Incident escalated to regional review, @location. AI prompt: "Write a clear, moderately urgent email to the regional team explaining an incident at @location has been escalated to Moderate severity. Include incident type, description, the injury/public/exposure/damage factors, and the AI triage summary (@ai_incident_triage) with its recommended action. Ask them to review within 24 hours." Save the template.

5. Create the Major/Critical severity email: Add a template named "Major incident escalation," subject Urgent, major incident reported at @location. AI prompt: "Write an urgent but composed email to the corporate response team. State plainly that a Major/Critical incident was reported at @location. Lead with the AI triage read (@ai_incident_triage) and its recommended immediate action, then include incident type, description, and all risk factors. No panic language. Ask for immediate review." Save the template.

6. Create the resolution email: Add a template named "Incident resolved update," subject Update on your incident report, @location. AI prompt: "Write a warm, brief closing email to @reporter_name letting them know their incident report has been reviewed and marked as @status. Thank them for reporting it. Under 3 sentences, no internal detail." Save the template.

7. Connect the confirmation email: Back in your form's Notify settings, turn on Send email to respondent, select the "Incident report received" template, and hit Publish. This works because reporter_email is an Email field, Formaloo needs at least one on the form to send a respondent notification at all.

8. Connect the routing emails: In Advanced logic, add three conditional email rules: when Severity level equals Minor, send "New Minor incident" to the site manager team; when it equals Moderate, send "Incident escalated to regional" to the regional team; when it equals Major/Critical, send "Major incident escalation" to the corporate response team.

9. Connect the resolution email: Add a fourth conditional rule: when Status is changed to Resolved, send "Incident resolved update" to reporter_email.

Part 5 — Build the PDF template

Every incident needs a clean internal record, the raw answers plus the AI triage read side by side, that a reviewer can open, print, or attach to a file.

💡 Want every form submission to generate a polished, branded document automatically? How to create PDF templates to turn responses into documents is the foundational guide to building one.

1. Open Custom PDF Template: Click your profile icon, go to Apps and Integrations, and click Custom PDF Template.

2. Add a new template: Click Add New Template, name it "Incident report."

3. Switch to HTML view and paste this code:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style>   body {     background: #ffffff;     font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;     color: #1a1a1a;     max-width: 760px;     margin: 0 auto;     padding: 60px 72px;   }   .header {     margin-bottom: 40px;     border-bottom: 1px solid #eee;     padding-bottom: 24px;   }   .header .title {     font-size: 24px;     font-weight: 600;     margin: 0 0 8px 0;   }   .header .meta {     font-size: 12px;     color: #999;   }   .section {     margin-bottom: 32px;   }   .section-title {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 1.5px;     color: #aaa;     margin-bottom: 14px;     font-weight: 600;   }   .field-grid {     display: grid;     grid-template-columns: 1fr 1fr;     gap: 16px 24px;   }   .field-full {     grid-column: 1 / -1;   }   .field {     padding-bottom: 10px;     border-bottom: 1px solid #f0f0f0;   }   .field-label {     font-size: 11px;     color: #999;     margin-bottom: 4px;   }   .field-value {     font-size: 14px;     color: #1a1a1a;   }   .badge {     display: inline-block;     font-size: 11px;     font-weight: 600;     padding: 4px 10px;     border-radius: 12px;     text-transform: uppercase;     letter-spacing: 0.5px;   }   .badge-minor { background: #e8f5e9; color: #2e7d32; }   .badge-moderate { background: #fff3e0; color: #e65100; }   .badge-major { background: #ffebee; color: #c62828; }   .inset {     background: #f9f9f9;     border-left: 3px solid #ddd;     padding: 16px 20px;     font-size: 13px;     color: #333;     line-height: 1.6;   }   .footer {     margin-top: 48px;     padding-top: 20px;     border-top: 1px solid #eee;     display: flex;     justify-content: space-between;     font-size: 11px;     color: #999;   } </style> </head> <body>    <div class="header">     <div class="title">Incident report</div>     <div class="meta">Reference INC-@rowid &nbsp;·&nbsp; Submitted @incident_datetime</div>   </div>    <div class="section">     <div class="section-title">Reporter information</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Reported by</div>         <div class="field-value">@reporter_name</div>       </div>       <div class="field">         <div class="field-label">Contact</div>         <div class="field-value">@reporter_email</div>       </div>       <div class="field field-full">         <div class="field-label">Location</div>         <div class="field-value">@location</div>       </div>     </div>   </div>    <div class="section">     <div class="section-title">Incident details</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Incident type</div>         <div class="field-value">@incident_type</div>       </div>       <div class="field">         <div class="field-label">Date and time</div>         <div class="field-value">@incident_datetime</div>       </div>       <div class="field field-full">         <div class="field-label">What happened</div>         <div class="field-value">@incident_description</div>       </div>     </div>   </div>    <div class="section">     <div class="section-title">Injury and risk factors</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Injury occurred</div>         <div class="field-value">@injury_occurred</div>       </div>       <div class="field">         <div class="field-label">Public or customer involved</div>         <div class="field-value">@public_involved</div>       </div>       <div class="field">         <div class="field-label">Media, legal, or regulatory exposure</div>         <div class="field-value">@exposure_risk</div>       </div>       <div class="field">         <div class="field-label">Estimated damage</div>         <div class="field-value">@damage_estimate</div>       </div>       <div class="field field-full">         <div class="field-label">Injury details</div>         <div class="field-value">@injury_details</div>       </div>     </div>   </div>    <div class="section">     <div class="section-title">Internal assessment, do not share externally</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Severity score</div>         <div class="field-value">@severity_score / 10</div>       </div>       <div class="field">         <div class="field-label">Severity level</div>         <div class="field-value">           <span class="badge badge-minor">@severity_level</span>         </div>       </div>       <div class="field">         <div class="field-label">Status</div>         <div class="field-value">@status</div>       </div>       <div class="field">         <div class="field-label">Assigned to</div>         <div class="field-value">@assignee</div>       </div>       <div class="field field-full">         <div class="field-label">AI incident triage read</div>         <div class="inset">@ai_incident_triage</div>       </div>       <div class="field field-full">         <div class="field-label">Internal notes</div>         <div class="field-value">@internal_notes</div>       </div>     </div>   </div>    <div class="footer">     <div>Confidential, internal incident record</div>     <div>[Organization name]</div>   </div>  </body> </html>

4. Save the template.

5. Set the reference number: Notice the template uses INC-@rowid for the reference in the header, this pipes in the submission's real row ID directly, no extra field needed.

💡 Need the full list of variables you can pipe into a template? How to dynamically pull form data into custom emails, PDFs, and AI prompts covers @rowid and every other supported variable.

6. Attach the PDF to your internal notifications: In each of the three severity-tier email templates from Part 4, attach the "Incident report" PDF so the reviewing team gets the full record, not just the email summary.

💡 Want the generated PDF to actually reach the reviewer, not just sit on the record? How to send custom PDFs with email notifications covers attaching a generated PDF to a notification.

Part 6 — Set up the portal pages

Every reviewer in this workflow, the site manager, the regional team, and the corporate response team, is an internal Formaloo user, not an external portal role. Only the intake form itself is public with no login. That changes how access gets set up here: instead of activating portal roles for reviewers, each internal page gets restricted to a specific workspace team.

💡 Want to give clients, applicants, or teammates their own space to submit and track requests? How to create a portal and manage users' access is the foundational guide, though in this workflow only the intake form itself needs to be public.

Page specification table

Group

Page

Access level

Data block

Filter

Sort

Form?

Report an incident

Report an incident

Public, no login required

Form

None

N/A

Yes

Site managers

My assigned incidents

Site manager, internal users, specific team, own assigned only

Kanban

Assignee = current user

Grouped by status

No

Site managers

All incidents at my location

Site manager, internal users, specific team, own location only

Table

Location = current user's location

Newest first

No

Regional team

Regional incident pipeline

Regional team, internal users, specific team, Moderate and above

Kanban

Severity level = Moderate or Major/Critical

Grouped by status

No

Regional team

Moderate severity queue

Regional team, internal users, specific team

Table

Severity level = Moderate

Newest first

No

Corporate response team

All incidents

Corporate, internal users, specific team, full visibility

Table

None

Newest first

No

Corporate response team

Major/Critical queue

Corporate, internal users, specific team, full visibility

Kanban

Severity level = Major/Critical

Grouped by status

No

Corporate response team

Overdue reviews

Corporate, internal users, specific team

Table

Status = New or Under review, submitted more than 48 hours ago

Oldest first

No

Reports

Incident trend report

Corporate and regional, internal users, view only

AI Analyze

None

N/A

No

1. Start your project: From your Formaloo homepage, start a new Dashboard and connect it to the incident report form you built in Part 1.

2. Create the "Report an incident" page: Add a Form data block pointing to your form, and leave its access set to public with no login required.

3. Create the site manager pages: Add "My assigned incidents" as a Kanban block filtered to Assignee equals the current user, and "All incidents at my location" as a Table filtered to Location equals the current user's location.

4. Restrict the site manager pages: On each page's three-dot menu, click Access, then under internal users select Specific teams and choose your site manager team.

💡 Want a whole page in your portal visible only to a specific role, not just specific data within a page? How to restrict users' access to pages in your portal covers this page-level restriction.

Note: Because these reviewers are internal workspace members rather than external portal users, use Access → Internal users → Specific teams here, not the Setup Wizard's Manage User flow, that's reserved for external users who don't have a Formaloo account.

5. Create the regional team pages: Add "Regional incident pipeline" as a Kanban filtered to Severity level equals Moderate or Major/Critical, and "Moderate severity queue" as a Table filtered to Severity level equals Moderate. Restrict both to your regional team.

6. Create the corporate response team pages: Add "All incidents" as an unfiltered Table, "Major/Critical queue" as a Kanban filtered to Severity level equals Major/Critical, and "Overdue reviews" as a Table filtered to Status equals New or Under review and submitted more than 48 hours ago, sorted oldest first. Restrict all three to your corporate team.

What you now have

A single, consistent way for any location to report an incident in under a minute, no account required. Every submission gets scored automatically from factual answers rather than a frontline guess, and lands with a private AI-written explanation of why it's severe and what to do next. Minor issues stay local with the site manager, moderate ones reach the regional team within a day, and anything major goes straight to corporate instead of waiting in a queue. Leadership gets a rolling view of incident patterns across every location without anyone compiling a report by hand.

What's next

Ready-to-use templates

Don't build this from scratch, we've already put it together for you.

  • AI lead qualification & scoring form — Scores incoming leads with AI and routes hot and cold leads differently. The same score-then-route pattern used here for severity, just applied to sales instead of safety.

  • Employee request workflow — Routes internal requests to the right team and tracks approvals from one view. A close starting point for the internal, no-portal-role routing this incident workflow relies on.

  • Patient intake & consent workflow for healthcare — Uses conditional logic and an admin Kanban pipeline to move intake records through review. The structure maps directly onto reviewing incidents by severity instead of by insurance status.

Learn more how-tos

Did this answer your question?