Skip to main content

How to build a corrective action tracking (CAPA) workflow that follows nonconformances to closure in Formaloo

Build a CAPA workflow in Formaloo that captures nonconformances, assigns root cause and corrective action owners, requires verification evidence before closure, and flags overdue items.

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 &amp; 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 &amp; 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


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

Did this answer your question?