What you'll build
By the end of this guide, you'll have a single multi-page CAPA form that follows a nonconformance from the moment it's found to the moment it's closed. Whoever spots the finding logs it on page one, the assigned owner adds a root cause and corrective action on page two, and a verifier confirms it worked on page three, with evidence required before the record can close. Every stage updates one status field, so the whole lifecycle shows up as a single pipeline, and any CAPA that slips past its target date can be flagged as overdue with one click, which fires an automatic reminder to the owner.
When to use this
Findings from an audit get written down somewhere and then nobody checks whether they actually got fixed
You need a clear owner for root cause and corrective action, not just a note that says "someone should look at this"
Closing a nonconformance should require proof it was verified as effective, not just a status change
You're tracking findings by root cause (process, training, equipment) and want to see if the same category keeps coming back
You need an audit-ready record of every finding, what caused it, what was done, and when it closed
Part 1 — Build the corrective action tracking form
This is the one form the whole workflow runs on. It has three pages, filled in by different people at different points in the CAPA's life: whoever finds the nonconformance logs it on page one, the assigned owner adds root cause and corrective action on page two once they've had time to investigate, and a verifier confirms the fix worked on page three before the record can close. A long list of admin-only fields ties it all together: status, assignee, internal notes, and a reminder guard that stops the overdue email from firing twice. The fastest way to build all of it at once is Magic Create.
1. Open Magic Create: From your Formaloo homepage, click Magic Create. You can upload a picture or PDF of an existing nonconformance report, or describe the form in text.
💡 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. Paste the form description: Use a prompt like this one, which covers all three pages and every admin-only field this workflow needs:
Build a three-page corrective action tracking (CAPA) form. Page 1, log the finding: ask for a short title for the nonconformance, the finding type (dropdown: Major nonconformance, Minor nonconformance, Observation), the standard, policy, or requirement it relates to, the process or department it affects, a detailed description (long text), a file upload for supporting evidence, the source of the finding (dropdown: Internal audit, External audit, Customer complaint, Supplier issue, Self-reported), and a yes/no question asking if immediate containment action is required. Add a long text question for the containment action taken, hidden by default and only shown if containment is required. Page 2, root cause and corrective action: ask for the root cause (long text), a root cause category (dropdown: Process, Training, Equipment, Materials, Documentation/procedure, Other), the corrective action that will address it (long text), and a target completion date. Page 3, verification and closure: ask a yes/no question asking whether the corrective action has been verified as effective, a file upload for verification evidence, and verification notes (long text). Add these admin-only fields: a status dropdown with options Open, Root cause analysis, Corrective action in progress, Pending verification, Overdue, and Closed, an assignee field for the corrective action owner, an internal notes long text field, and a yes/no flag for whether an overdue reminder has already been sent.
3. Click Create: Formaloo builds the form for you. Your form should look like the tables below. Magic Create will have generated most of it. Verify each field and, most importantly, set the field ID exactly as shown, since the email and PDF templates in later steps reference these IDs directly.
Page 1 fields (log the finding):
Field (question) | Field ID | Type |
What's a short title for this nonconformance? | nc_title | Short text |
What type of finding is this? | finding_type | Dropdown: Major nonconformance / Minor nonconformance / Observation |
Which standard, policy, or requirement does this relate to? | standard_reference | Short text |
Which process or department does this affect? | affected_process | Short text |
Describe the nonconformance in detail | nc_description | Long text |
Upload supporting evidence (photos, documents, records) | evidence_upload | File upload |
What's the source of this finding? | finding_source | Dropdown: Internal audit / External audit / Customer complaint / Supplier issue / Self-reported |
Does this require immediate containment action? | containment_needed | Yes/No |
What immediate containment action was taken? | containment_action | Long text |
Page 2 fields (root cause and corrective action):
Field (question) | Field ID | Type |
What's the root cause of this nonconformance? | root_cause | Long text |
What category does the root cause fall into? | root_cause_category | Dropdown: Process / Training / Equipment / Materials / Documentation/procedure / Other |
What corrective action will address the root cause? | corrective_action | Long text |
What's the target completion date for the corrective action? | target_completion_date | Date |
Page 3 fields (verification and closure):
Field (question) | Field ID | Type |
Has the corrective action been verified as effective? | verification_confirmed | Yes/No |
Upload verification evidence that the corrective action was completed | verification_evidence | File upload |
Verification notes | verification_notes | Long text |
Admin-only fields:
Field (question) | Field ID | Type |
Status | status | Dropdown: Open / Root cause analysis / Corrective action in progress / Pending verification / Overdue / Closed |
Assignee | assignee | Assignee |
Internal notes | internal_notes | Long text |
Overdue reminder sent | overdue_reminder_sent | Yes/No |
📖 Admin-only fields stay invisible to whoever is filling in a given page. See what are admin-only fields and how they help.
4. Require the verification evidence upload when needed: This gets handled by logic in the next part, not a static required toggle, since evidence should only be required once verification is confirmed as effective.
Note: Set "Status" to default to Open, so every new finding starts at the top of the pipeline.
💡 Want to know exactly what the Assignee field can do, assign to a person, a team, or either? This is the atomic reference for that field type. See what is the Assignee field in Formaloo and how to use it.
5. Save your form: Click Save in the island bar at the top of the editor.
Part 2 — Set up the CAPA workflow logic
Logic on this form does four things: shows the containment field only when it's needed, requires verification evidence before a CAPA can be marked verified, notifies the assignee when they're assigned or when a CAPA closes, and sends a one-time overdue reminder without spamming the assignee every time the record is touched. Use Magic Logic to generate all of it from one plain-language description.
1. Open Advanced logic: Open your form and click Advanced logic in the form settings panel on the right side. Navigate to the Logic tab.
💡 Want your form to show, hide, skip, or require fields based on what someone just answered? This is the foundational guide to logic in Formaloo, what it is, and the difference between logic and calculation. See what is logic in Formaloo.
2. Open Magic Logic: In the top right corner of the Logic panel, click Magic Logic.
3. Describe the rules: Paste a prompt like this one, covering visibility, the required-evidence guard, and the notification triggers:
Hide "What immediate containment action was taken?" by default. When "Does this require immediate containment action?" equals Yes, show it. Require "Upload verification evidence that the corrective action was completed" only when "Has the corrective action been verified as effective?" equals Yes. When the Assignee field is set or changed, send an email to the assignee. When Status is changed to Closed, send an email to the assignee. When Status is changed to Overdue and "Overdue reminder sent" is not Yes, send an email to the assignee and set "Overdue reminder sent" to Yes. When Status changes away from Overdue to anything other than Closed, reset "Overdue reminder sent" to No.
4. Click Generate rules: Formaloo's AI previews each rule. Approve the ones that match, redo any that don't, and cancel anything you don't need.
5. Add the email actions: For each approved rule that should send an email (assignment, closure, overdue reminder), add a Send email action and select the matching template. You'll build these templates in Part 3, so it's fine to come back and wire them up after.
Note: There's no date-crossing trigger in Formaloo logic, so overdue detection is admin-driven. Whoever reviews the overdue dashboard in Part 5 moves a CAPA's status to Overdue by hand, which is what fires the reminder rule.
6. Save your logic: Click Save in the top right corner.
Part 3 — Create the notification email templates
This workflow runs on four emails: one when a CAPA is assigned, one confirming a finding was logged, one confirming closure, and one overdue reminder. Each one is a custom email template built with an AI block and personalized with answer piping, so every email reads as if it was written for that specific finding.
1. Create the "New CAPA assigned" template: Click your profile icon, go to Apps & integrations, then Email templates, and click + Add new template. Clear the body field, add an AI block, and paste a prompt describing the email you want.
💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? This is the foundational guide to building and sending custom email templates. See how to create and send custom email templates.
Use this prompt:
Write a direct, professional email to the person just assigned a corrective action. Open by stating clearly they've been assigned CAPA-@rowid. Reference the finding type (@finding_type), the affected process (@affected_process), and the standard or requirement involved (@standard_reference). Summarize the nonconformance from @nc_description in one or two sentences, don't just repeat it verbatim. State plainly what they need to do next: determine the root cause, define a corrective action, and set a target completion date. Keep the tone urgent but not alarming, this is a routine quality process, not a crisis. 4 to 6 sentences total. End with a clear call to action to open the record. Design it with a white background, a single centered column max-width 560px, an Inter or system-ui font, a small pill-style status badge showing @finding_type near the top, a bordered CTA button labeled "Open this CAPA," and a muted footer in #999 with a confidentiality note.
Name it "New CAPA assigned," set the subject to "New CAPA assigned: @nc_title," and click Save.
2. Create the "Finding logged confirmation" template: Repeat the same steps with this prompt:
Write a short, factual confirmation to the person who just logged a nonconformance. Confirm it was received and assigned reference CAPA-@rowid. Restate the finding type (@finding_type) and source (@finding_source). If containment was marked as needed, acknowledge the containment action they logged, otherwise skip that line entirely. Close by saying the quality team will assign an owner for root cause and corrective action. Calm, factual, minimal, this is a receipt, not a call to action. 3 to 4 sentences. Design it with a white background, a single centered column max-width 560px, an Inter or system-ui font, a simple data table showing Reference, Finding type, and Source, no CTA button, and a muted footer in #999.
Name it "Finding logged confirmation," set the subject to "Nonconformance logged: @nc_title (CAPA-@rowid)," and click Save.
3. Create the "CAPA closed confirmation" template: Repeat the same steps with this prompt:
Write a brief, confirming email to the assignee letting them know this CAPA has been formally closed. Reference @nc_title and CAPA-@rowid. Mention the corrective action taken (@corrective_action, summarized in one sentence, not pasted verbatim) and that verification confirmed it was effective. Thank them for closing the loop. Factual, warm, brief, this is good news, let it read that way. 3 to 4 sentences. Design it with a white background, a single centered column max-width 560px, an Inter or system-ui font, a green-tinted "Closed" status badge near the top, no CTA button, and a muted footer in #999.
Name it "CAPA closed confirmation," set the subject to "CAPA-@rowid closed: @nc_title," and click Save. You'll attach the corrective action report PDF to this template in Part 4.
4. Create the "CAPA overdue reminder" template: Repeat the same steps with this prompt:
Write a firm but respectful reminder to the assignee that their corrective action has passed its target completion date (@target_completion_date). Reference @nc_title and CAPA-@rowid. State plainly that the CAPA is overdue and ask for an update or a new target date. Keep it short and direct, no guilt-tripping. 3 to 4 sentences. Design it with a white background, a single centered column max-width 560px, an Inter or system-ui font, an amber-tinted "Overdue" status badge near the top, a bordered CTA button labeled "Update this CAPA," and a muted footer in #999.
Name it "CAPA overdue reminder," set the subject to "Overdue: CAPA-@rowid needs attention," and click Save.
📖 See how to dynamically pull form data into custom emails, PDFs, and AI prompts for the full list of supported variables, including @rowid.
5. Wire the templates into logic: Back in Part 2's rules, attach "New CAPA assigned" to the assignment rule, "CAPA closed confirmation" to the closure rule, and "CAPA overdue reminder" to the overdue rule. Attach "Finding logged confirmation" to an On submit rule on page one that fires whenever a new finding is submitted.
Part 4 — Create the corrective action report PDF template
The last piece is a PDF that turns each CAPA into a clean audit record: the finding, the root cause and corrective action, and the verification that closed it out.
1. Open the PDF template editor: Click your profile icon, go to Apps & integrations, then PDF templates, and click + Add new template.
💡 Want every form submission to generate a polished, branded document automatically? This is the foundational guide to building a PDF template from a submission. See how to create PDF templates to turn responses into documents.
2. Switch to the HTML view and paste the template below. It pulls in every field from the form using answer piping, with the reference number piped directly as CAPA-@rowid, no extra field needed.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> body { background: #ffffff; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; color: #2b2b2b; margin: 0; padding: 0; } .page { max-width: 760px; margin: 0 auto; padding: 60px 72px; } .header { display: flex; justify-content: space-between; align-items: flex-start; border-bottom: 2px solid #1f1f1f; padding-bottom: 20px; margin-bottom: 36px; } .header-title { font-size: 24px; font-weight: 700; letter-spacing: -0.3px; color: #1a1a1a; margin: 0 0 6px 0; } .header-sub { font-size: 12px; color: #999999; } .header-ref { text-align: right; font-size: 12px; color: #999999; } .header-ref strong { display: block; font-size: 15px; color: #1a1a1a; font-weight: 600; margin-bottom: 2px; } .section { margin-bottom: 32px; } .section-title { font-size: 10px; text-transform: uppercase; letter-spacing: 1.5px; color: #aaaaaa; font-weight: 600; margin-bottom: 14px; } .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; } .field-row { padding: 10px 0; border-bottom: 1px solid #eeeeee; } .field-row.full { grid-column: 1 / -1; } .field-label { font-size: 11px; color: #999999; margin-bottom: 4px; } .field-value { font-size: 14px; color: #2b2b2b; line-height: 1.5; white-space: pre-wrap; } .inset { background: #f9f9f9; border-left: 3px solid #d8d8d8; padding: 16px 20px; border-radius: 4px; margin-top: 6px; } .badge { display: inline-block; font-size: 11px; font-weight: 600; padding: 4px 10px; border-radius: 20px; background: #f0f0f0; color: #555555; } .evidence-note { font-size: 12px; color: #999999; font-style: italic; margin-top: 8px; } .footer { display: flex; justify-content: space-between; align-items: center; border-top: 1px solid #eeeeee; padding-top: 18px; margin-top: 44px; font-size: 11px; color: #aaaaaa; } </style> </head> <body> <div class="page"> <div class="header"> <div> <div class="header-title">Corrective Action Report</div> <div class="header-sub">Finding logged @created_at</div> </div> <div class="header-ref"> <strong>CAPA-@rowid</strong> Reference number </div> </div> <div class="section"> <div class="section-title">Finding details</div> <div class="grid"> <div class="field-row"> <div class="field-label">Finding type</div> <div class="field-value"><span class="badge">@finding_type</span></div> </div> <div class="field-row"> <div class="field-label">Source</div> <div class="field-value">@finding_source</div> </div> <div class="field-row"> <div class="field-label">Standard or requirement</div> <div class="field-value">@standard_reference</div> </div> <div class="field-row"> <div class="field-label">Affected process / department</div> <div class="field-value">@affected_process</div> </div> <div class="field-row full"> <div class="field-label">Title</div> <div class="field-value">@nc_title</div> </div> <div class="field-row full"> <div class="field-label">Description</div> <div class="field-value">@nc_description</div> </div> <div class="field-row"> <div class="field-label">Immediate containment required</div> <div class="field-value">@containment_needed</div> </div> <div class="field-row full"> <div class="field-label">Containment action taken</div> <div class="field-value">@containment_action</div> </div> </div> <div class="evidence-note">Supporting evidence submitted with the finding is attached to this record.</div> </div> <div class="section"> <div class="section-title">Root cause & corrective action</div> <div class="grid"> <div class="field-row"> <div class="field-label">Root cause category</div> <div class="field-value">@root_cause_category</div> </div> <div class="field-row"> <div class="field-label">Target completion date</div> <div class="field-value">@target_completion_date</div> </div> <div class="field-row full"> <div class="field-label">Root cause</div> <div class="field-value">@root_cause</div> </div> <div class="field-row full"> <div class="field-label">Corrective action</div> <div class="field-value">@corrective_action</div> </div> </div> </div> <div class="section"> <div class="section-title">Verification & closure</div> <div class="grid"> <div class="field-row full"> <div class="field-label">Verified as effective</div> <div class="field-value">@verification_confirmed</div> </div> <div class="field-row full"> <div class="field-label">Verification notes</div> <div class="inset"> <div class="field-value">@verification_notes</div> </div> </div> </div> <div class="evidence-note">Verification evidence submitted for closure is attached to this record.</div> </div> <div class="footer"> <div>Confidential — internal quality record. Not for external distribution.</div> <div>[Organization name]</div> </div> </div> </body> </html>3. Name the template "Corrective action report" and click Save.
4. Wire it up in logic: Back in Part 2's closure rule, add a Generate PDF action so the report is created the moment Status is set to Closed, and attach it to the "CAPA closed confirmation" email from Part 3.
Part 5 — Set up the CAPA dashboard
Everyone touching this workflow is internal, quality staff, corrective action owners, and whoever verifies a fix, so there's no client-facing portal to activate. What you need instead is one project with pages scoped by team: assignees see only their own CAPAs, and quality admins see everything.
1. Create a project: From your Formaloo homepage, start a new project from Form, since your CAPA form is already attached.
2. Create a workspace team for CAPA owners: Go to your workspace settings and create a team, for example "CAPA owners," and add every corrective action owner and verifier to it.
💡 Want to assign work to a group instead of naming one person every time? Teams let you route submissions to everyone on a defined group. See what is a team in Formaloo and how to manage it.
3. Lay out the pages. Before building anything, here's the full spec:
Group | Page | Access level | Data block | Filter | Sort | Form? |
My assigned CAPAs | My assigned CAPAs | CAPA owners team — view/edit only rows assigned to them | Kanban | Assignee = logged-in user | Grouped by Status | No |
My assigned CAPAs | My overdue CAPAs | CAPA owners team — view/edit only rows assigned to them | Table | Assignee = logged-in user AND Target completion date < today AND Status ≠ Closed | Oldest target date first | No |
Quality admin | Log a nonconformance | Quality admin — full access | Form | None | — | Yes |
Quality admin | All CAPAs | Quality admin — full visibility, all records | Kanban | None | Grouped by Status | No |
Quality admin | Overdue CAPAs | Quality admin — full visibility, all records | Table | Target completion date < today AND Status ≠ Closed | Oldest target date first | No |
Quality admin | Major nonconformances | Quality admin — full visibility, all records | Table | Finding type = Major nonconformance | Newest first | No |
Quality admin | Closed CAPAs | Quality admin — full visibility, all records | Table | Status = Closed | Most recently closed first | No |
Quality admin | By root cause category | Quality admin — full visibility, all records | Chart (bar) | None | Grouped by Root cause category, counted | No |
Resources | Getting started & resources | All internal users | Reference page (static content) | None | — | No |
4. Build the "Log a nonconformance" page: Add a Form data block pointing at your CAPA form. This is open to any quality staff logging a new finding.
5. Build the "All CAPAs" pipeline: Add a Kanban data block showing every CAPA grouped by Status. This is the master pipeline the quality lead uses to assign owners and move records forward.
💡 Want a visual, drag-and-drop way to move records through stages, like a pipeline? This is the foundational guide to the Kanban data block. See how to create a Kanban board.
6. Build the filtered admin tables: Add a Table data block for each of "Overdue CAPAs," "Major nonconformances," and "Closed CAPAs," using the filters and sort order from the spec table above.
💡 Want to see only the submissions that matter right now, like this week's or a specific status? This covers sorting and filtering any data block view. See how to sort and filter your submissions data.
7. Build the "By root cause category" chart: Add a bar Chart data block grouped by Root cause category, counting records. If one category keeps spiking, that's a signal to fix the underlying system, not just the individual finding.
8. Build the assignee-scoped pages: Add a Kanban data block for "My assigned CAPAs" and a Table data block for "My overdue CAPAs," both filtered to Assignee = logged-in user. On each data block, switch to Edit mode, click Options, scroll to Manage access, select the Assignee field, and toggle on Allow assignees to view only their data.
9. Restrict the assignee-scoped pages to the CAPA owners team: Switch to Edit mode, find each page in the project navigation, click the three-dot menu next to the page name, and select Access. Under Internal users, choose Specific teams and select CAPA owners. Click Save.
💡 Want a whole page visible only to a specific role, not just specific data within a page? This covers page-level access restriction. See how to restrict users' access to pages in your portal.
10. Add the resource page: Create a static "Getting started & resources" page linking out to the Help Center articles this workflow touches, logic, PDF templates, and page access, so anyone new to managing the template has one place to start.
What you now have
You now have a CAPA workflow that doesn't rely on someone remembering to check back on a finding. Every nonconformance moves through one pipeline from logged to verified to closed, root cause gets categorized instead of buried in a paragraph, and a corrective action can't be closed without evidence that it actually worked. The overdue dashboard means past-due items surface on their own instead of waiting for the next audit to notice, and the PDF report gives you an audit-ready file for every finding without building it by hand.
What's next
Report on which root causes keep recurring. Once CAPAs are flowing through the pipeline, revisit the "By root cause category" chart regularly. A category that keeps spiking is a system problem, not a one-off finding. → How to sort and filter your submissions data
Chase overdue CAPAs in bulk. When several corrective actions slip past their target date at once, send a single email campaign to everyone in that view instead of nudging owners one by one. → How to send an email campaign and collect data with AI agents in Formaloo
Add more reviewer capacity as your quality team grows. If a second person starts verifying corrective actions, add them to the CAPA owners team from Part 5 so they see their own assigned queue without any extra page building. → How to create and assign user roles in your portal
Ready-to-use templates
Don't build this from scratch, we've already put together workflows with the same bones for you.
Employee request workflow — Routes internal requests through approval stages with status tracking and notifications. Its status-driven pipeline maps closely to how a CAPA moves from open to closed here.
Job applicant tracking workflow — Tracks records across pipeline stages with reviewer assignments and status updates from one view. The assignee-scoped pipeline pattern is a close match for how CAPA owners work their queue.
Patient intake & consent workflow for healthcare — A conditional multi-page form with an admin Kanban pipeline and a generated PDF. Its structure, conditional fields plus a document that closes the loop, is close to what this workflow builds.
Learn more how-tos
See a simpler approval chain first. If your workflow only needs one decision point rather than a full open-to-closed pipeline, this dual-approval pattern is worth reading for comparison. → How to build a dual-approval request workflow
See another workflow with conditional fields and a closing PDF. The patient intake workflow shares this article's structure of conditional logic feeding a Kanban pipeline and a generated document. → How to build a patient intake and consent workflow for healthcare clinics
See another submit-then-review pattern. Student submission and teacher review follows the same shape used here: someone submits, someone else reviews and verifies before the record is done. → How to build a student submission and teacher review portal

