Skip to main content

How to build a prior authorization tracker for specialty infusion and injectable therapy clinics with AI-classified payer requirements in Formaloo

Build a prior authorization tracker for specialty infusion clinics in Formaloo, with AI that flags missing payer documentation before submission.

What you'll build

An internal intake form your prior authorization coordinators fill out for every specialty drug request, capturing the patient, payer, diagnosis, prior therapies, and supporting documentation. The moment a request is submitted, an AI Analysis field reads it against the common documentation requirements for that drug class and flags exactly what's missing, writing a clear readiness verdict onto the record before anyone opens it. From there the request moves through a coordinator pipeline with automatic patient and provider notifications as it's submitted, approved, denied, or appealed, generates an internal case file PDF, and rolls up into an AI-generated denial trend report for clinical leadership.

When to use this

  • Your coordinators find out documentation is missing only after the payer sends back a denial, not before submission.

  • Specialty drug requests for the same payer keep getting denied for the same missing step-therapy or lab documentation, and nobody has time to check every payer's requirements by hand.

  • Patients and referring providers email in asking for a status update because there's no automatic way to tell them where a request stands.

  • Appeals get started late because a denial sits in an inbox before anyone notices the status changed.

  • Clinical leadership wants to know which payers or drug classes generate the most denials, without pulling every case file individually.

Part 1 — Build the prior authorization intake form with Magic Create

This is the form your coordinators fill out for every specialty drug request. It captures the patient and provider details needed for notifications, the payer and diagnosis details the AI needs to work with, and the documentation itself. The fastest way to build it is with Magic Create, Formaloo's AI form builder: describe the form in plain text and it generates the fields for you.

💡 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.

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

2. Describe the form: Paste a prompt describing a prior authorization intake form for a specialty infusion or injectable therapy clinic, covering the patient's full name and email, the referring or prescribing provider's name and email, the insurance payer name, the patient's plan or policy number, the diagnosis (ICD-10 code and description), the specialty medication being requested, the requested dosing and frequency, the requested treatment start date, whether the patient has tried and failed other therapies for this condition (with a field to list which ones and the outcome if yes), an upload for chart notes or clinical documentation, an upload for recent lab results, whether this is an expedited or urgent request (with a field to explain the clinical reason if yes), and consent to share this documentation with the payer. Also describe the admin-only fields: a prior authorization status dropdown, an assigned coordinator field, internal notes, a documentation readiness dropdown, and an AI Analysis field that reads the request and flags missing documentation.

3. Click Create: Formaloo builds the full form for you.

4. Verify your fields: Your form should look like this. Magic Create will have generated most of it. Verify each field and field ID matches exactly.

💡 Want internal fields, like status, assignee, or an AI read on the case, invisible to the person filling out the form? Admin-only fields are the mechanism. See what are admin-only fields and how they help. This only applies to fields the patient or provider never needs to see or fill, like the status and coordinator fields. Nobody outside your clinic fills out this form at all, since it's an internal coordinator tool, not a patient-facing one.

Field (question form)

Field ID

Type

What's the patient's full name?

patient_name

Short text

What's the patient's email address?

patient_email

Email

What's the referring or prescribing provider's name?

provider_name

Short text

What's the provider's email address?

provider_email

Email

What insurance payer is this request for?

payer_name

Short text

What's the patient's plan or policy number?

policy_number

Short text

What's the diagnosis (ICD-10 code and description)?

diagnosis

Short text

What specialty medication is being requested?

drug_requested

Short text

What dosing and frequency is being requested?

dosing_frequency

Short text

What's the requested treatment start date?

requested_start_date

Date

Has the patient tried and failed other therapies for this condition?

prior_therapy_tried

Yes/No

List the prior therapies tried and their outcomes

prior_therapy_details

Long text

Upload chart notes or clinical documentation

chart_notes_upload

File

Upload recent lab results

lab_results_upload

File

Is this an expedited or urgent request?

is_expedited

Yes/No

If urgent, explain the clinical reason for expedited review

expedited_reason

Long text

Do you consent to sharing this documentation with the payer?

payer_consent

Yes/No

Prior authorization status

pa_status

Dropdown (admin-only)

Assigned coordinator

assigned_coordinator

Assignee field (admin-only)

Internal notes

internal_notes

Long text (admin-only)

Documentation readiness

documentation_readiness

Dropdown (admin-only)

AI documentation analysis

ai_documentation_analysis

AI Analysis field (admin-only)

💡 Want to know exactly what the Assignee field can do? This is the atomic reference for that field type. See what is the Assignee field in Formaloo and how to use it. The Assignee field only works with workspace members and teams, so your PA coordinators need to be added as internal users, not portal sign-ups.

5. Set the Documentation readiness dropdown's choices: Give it two options: "Ready to submit" and "Documentation gaps found."

6. Set the Prior authorization status dropdown's choices: Give it six options in this order: Draft, Submitted to payer, Approved, Denied, Appeal submitted, Closed.

7. Set up the AI documentation analysis field: Open the AI Analysis field's settings and point it at the fields it should read: @payer_name, @drug_requested, @diagnosis, @prior_therapy_tried, @prior_therapy_details, @chart_notes_upload, @lab_results_upload, and @is_expedited. Write a prompt asking it to identify, from its general knowledge of common prior authorization documentation requirements for that drug class and payer type, what supporting documentation this request would typically need, and flag which of those items appear to be missing based on what's actually been uploaded and described. Ask it to end with a one-line verdict: "Ready to submit" or "Documentation gaps found," followed by a short list of what's missing.

Note: the AI's read is based on general knowledge of how specialty drug prior authorizations are typically documented, not a live connection to any specific payer's system. Coordinators should still treat it as a first check, not a replacement for the payer's own submission portal or fax cover sheet.

8. Turn on "Allow AI to update records": In the same field's settings, enable this option and select only the Documentation readiness field. Once a request is submitted, the AI writes "Ready to submit" or "Documentation gaps found" directly onto that dropdown, so the rest of the workflow can react to it with regular logic instead of parsing free text.

9. Save your form.

Part 2 — Add the form logic

This is what makes the intake form adapt to the situation instead of asking every coordinator the same questions regardless of relevance. The prior therapy details only show up when they're actually needed, and the expedited reason field only appears for urgent requests.

💡 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.

1. Open Advanced logic: In your form editor, open the Advanced logic panel on the right side of the screen and go to the Logic tab.

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

3. Describe your rules: Paste a plain-text prompt describing both rules at once: show "List the prior therapies tried and their outcomes" only when "Has the patient tried and failed other therapies for this condition?" is Yes, hidden and optional by default; and show and require "If urgent, explain the clinical reason for expedited review" only when "Is this an expedited or urgent request?" is Yes, hidden by default.

4. Generate and review: Click Generate Rules. Review each rule AI previews, and approve, redo, or cancel as needed.

5. Save your logic: Once approved, make any manual adjustments, then click Save in the top right corner.

Part 3 — Create your email templates

This workflow needs six emails: an internal alert to the coordination team on every new request, an internal documentation gap alert when the AI flags something missing, and four status updates to the patient and provider as a request is submitted, approved, denied, or appealed.

💡 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.

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

2. Add a new template: Click Add New Template, name it "New PA request received," and set the subject to New prior authorization request (PA-@rowid).

3. Generate the body with AI: Clear the body field, add an AI block, and paste this prompt: "Write a brief, factual internal notification telling the PA coordination team a new prior authorization request has come in for @patient_name, requesting @drug_requested from payer @payer_name. Include the reference number and prompt them to assign a coordinator and review the AI documentation readiness verdict. Under 3 sentences, no fluff. White background, single centered column max-width 560px, Inter or system-ui font, a compact data table showing reference number, patient, drug, and payer, muted footer in #999."

4. Repeat for the remaining five templates, using the same steps with these names, subjects, and prompts:

  • Documentation gap alert (internal). Subject: Documentation gaps found on PA-@rowid. Prompt: "Write a short, direct internal alert telling the assigned coordinator that the AI documentation check found gaps on the prior authorization request for @patient_name (drug: @drug_requested, payer: @payer_name). Reference the AI's finding in @ai_documentation_analysis and tell them to resolve the gaps before submitting to the payer. Under 4 sentences. White background, single centered column max-width 560px, Inter or system-ui font, an amber 'Documentation gaps found' status badge, muted footer in #999."

  • Prior authorization submitted. Subject: Your prior authorization request has been submitted (PA-@rowid). Prompt: "Write a clear, reassuring email letting the recipient know the prior authorization request for @patient_name's @drug_requested has been submitted to @payer_name and is now awaiting a decision. Keep it to 3 to 4 sentences, calm and factual, no promises on timelines. White background, single centered column max-width 560px, Inter or system-ui font, a blue 'Submitted to payer' status badge, muted footer in #999."

  • Prior authorization approved. Subject: Good news, PA-@rowid has been approved. Prompt: "Write a warm, clear email confirming the prior authorization for @patient_name's @drug_requested has been approved by @payer_name. Keep it to 3 to 4 sentences. White background, single centered column max-width 560px, Inter or system-ui font, a green 'Approved' status badge, muted footer in #999."

  • Prior authorization denied. Subject: An update on PA-@rowid. Prompt: "Write an empathetic, respectful email explaining the prior authorization for @patient_name's @drug_requested was not approved by @payer_name, and that the clinic is preparing an appeal. Keep it general, calm, and non-defensive, 4 sentences. White background, single centered column max-width 560px, Inter or system-ui font, a neutral gray 'Not approved' status badge, muted footer in #999."

  • Appeal submitted. Subject: An appeal has been submitted for PA-@rowid. Prompt: "Write a short, reassuring email confirming an appeal has been submitted to @payer_name for @patient_name's @drug_requested, and that the clinic will share an update as soon as a decision comes back. 3 sentences. White background, single centered column max-width 560px, Inter or system-ui font, a 'Appeal submitted' status badge, muted footer in #999."

5. Save each template.

Part 4 — Set up automated email notifications

With the templates built, the next step is wiring up when each one fires, so patients, providers, and coordinators get the right update without anyone sending it by hand.

1. Open the On Submit logic tab: In Advanced logic, switch to the rule set that runs the moment a coordinator submits a new request.

2. Add the internal alert rule: On submit, send the "New PA request received" template to your PA coordination team's shared inbox.

3. Open the On Update logic tab: Switch to the rule set that runs when an existing record is updated. This is also what fires when the AI documentation analysis field writes its verdict onto the Documentation readiness field, since that update goes through the same record-update path as a manual edit.

4. Add the documentation gap rule: When Documentation readiness changes to "Documentation gaps found," send the "Documentation gap alert" template to @assigned_coordinator.

📖 This is the same "trigger logic off the update" pattern covered in how to generate AI analysis and let it update your form's own records in Formaloo.

5. Add a rule per status change: Add four more rules, one per status: when Prior authorization status changes to Submitted to payer, send "Prior authorization submitted" to both @patient_email and @provider_email; when it changes to Approved, send "Prior authorization approved" to both; when it changes to Denied, send "Prior authorization denied" to both; when it changes to Appeal submitted, send "Appeal submitted" to both.

6. Save your logic.

Part 5 — Build the case file PDF template

Every request needs an internal record a coordinator or auditor can pull up later, one that includes the AI's documentation read alongside the clinical details it was based on. This is a self-contained HTML template Formaloo turns into a PDF for every row.

💡 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.

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

2. Switch to HTML view: Toggle the editor to HTML and paste the code below.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Prior Authorization Case File</title> <style>   @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');    * { box-sizing: border-box; margin: 0; padding: 0; }    body {     font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;     background: #ffffff;     color: #1a1a1a;     max-width: 760px;     margin: 0 auto;     padding: 60px 72px;   }    .header {     display: flex;     justify-content: space-between;     align-items: flex-start;     border-bottom: 2px solid #1a1a1a;     padding-bottom: 24px;     margin-bottom: 40px;   }    .header h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }    .header .meta { text-align: right; font-size: 13px; color: #666; line-height: 1.6; }    .header .meta .ref { font-size: 15px; font-weight: 600; color: #1a1a1a; }    .section { margin-bottom: 32px; }    .section-title {     font-size: 10px;     font-weight: 600;     text-transform: uppercase;     letter-spacing: 0.1em;     color: #aaaaaa;     margin-bottom: 14px;   }    .field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; }    .field { padding: 10px 0; border-bottom: 1px solid #eeeeee; }    .field.full { grid-column: 1 / -1; }    .field-label { font-size: 12px; color: #888888; margin-bottom: 4px; }    .field-value { font-size: 14px; color: #1a1a1a; line-height: 1.5; }    .inset {     background: #f9f9f9;     border-left: 3px solid #cccccc;     padding: 16px 20px;     border-radius: 4px;     font-size: 13px;     color: #555555;     line-height: 1.6;   }    .ai-block {     background: #f6f5ff;     border-left: 3px solid #6c5ce7;     padding: 20px 24px;     border-radius: 4px;   }    .ai-block .field-label {     color: #6c5ce7;     font-weight: 600;     text-transform: uppercase;     font-size: 11px;     letter-spacing: 0.06em;   }    .ai-block .field-value { margin-top: 6px; font-size: 14px; }    .footer {     margin-top: 48px;     padding-top: 20px;     border-top: 1px solid #eeeeee;     display: flex;     justify-content: space-between;     font-size: 11px;     color: #999999;   } </style> </head> <body>    <div class="header">     <h1>Prior Authorization Case File</h1>     <div class="meta">       <div class="ref">PA-@rowid</div>       <div>Submitted @created_at</div>     </div>   </div>    <div class="section">     <div class="section-title">Patient &amp; provider</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Patient name</div>         <div class="field-value">@patient_name</div>       </div>       <div class="field">         <div class="field-label">Patient email</div>         <div class="field-value">@patient_email</div>       </div>       <div class="field">         <div class="field-label">Referring / prescribing provider</div>         <div class="field-value">@provider_name</div>       </div>       <div class="field">         <div class="field-label">Provider email</div>         <div class="field-value">@provider_email</div>       </div>     </div>   </div>    <div class="section">     <div class="section-title">Payer &amp; request details</div>     <div class="field-grid">       <div class="field">         <div class="field-label">Insurance payer</div>         <div class="field-value">@payer_name</div>       </div>       <div class="field">         <div class="field-label">Plan / policy number</div>         <div class="field-value">@policy_number</div>       </div>       <div class="field">         <div class="field-label">Diagnosis (ICD-10)</div>         <div class="field-value">@diagnosis</div>       </div>       <div class="field">         <div class="field-label">Medication requested</div>         <div class="field-value">@drug_requested</div>       </div>       <div class="field">         <div class="field-label">Dosing &amp; frequency</div>         <div class="field-value">@dosing_frequency</div>       </div>       <div class="field">         <div class="field-label">Requested start date</div>         <div class="field-value">@requested_start_date</div>       </div>       <div class="field">         <div class="field-label">Expedited request</div>         <div class="field-value">@is_expedited</div>       </div>       <div class="field">         <div class="field-label">Expedited reason</div>         <div class="field-value">@expedited_reason</div>       </div>     </div>   </div>    <div class="section">     <div class="section-title">Prior therapy &amp; documentation</div>     <div class="field-grid">       <div class="field full">         <div class="field-label">Prior therapies tried and outcomes</div>         <div class="field-value">@prior_therapy_details</div>       </div>       <div class="field full">         <div class="field-label">Attachments</div>         <div class="field-value">Chart notes and lab results are attached to this submission in the dashboard.</div>       </div>     </div>     <br>     <div class="inset">       The patient has consented to sharing this documentation with the payer as part of this request: @payer_consent.     </div>   </div>    <div class="section">     <div class="section-title">Internal review record</div>     <div class="ai-block">       <div class="field-label">AI documentation analysis</div>       <div class="field-value">@ai_documentation_analysis</div>     </div>     <br>     <div class="field-grid">       <div class="field">         <div class="field-label">Documentation readiness</div>         <div class="field-value">@documentation_readiness</div>       </div>       <div class="field">         <div class="field-label">Prior authorization status</div>         <div class="field-value">@pa_status</div>       </div>       <div class="field">         <div class="field-label">Assigned coordinator</div>         <div class="field-value">@assigned_coordinator</div>       </div>       <div class="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 case file, not for external distribution</div>     <div>Your clinic name</div>   </div>  </body> </html>

3. Name and save: Give it the name "Prior authorization case file" and click Save.

The reference number and submission date come straight from Formaloo's own variables, @rowid and @created_at, piped directly into the template text, no extra field required.

📖 For the full list of variables you can pipe into a template like this, see how to dynamically pull form data into custom emails, PDFs, and AI prompts.

4. Attach it to a notification: Since this is an internal record rather than something sent to the patient or provider, attach it to the "New PA request received" email so the coordination team receives the full case file the moment a request comes in.

Part 6 — Set up the coordinator workspace

Your coordinators need their own pipeline, separate from the raw form, with each one able to find their assigned requests and any documentation gaps quickly.

💡 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.

Here's how the coordinator group of pages is laid out:

Group

Page

Access level

Data block

Filter

Sort

Form?

PA coordinators

Submit a request

Internal users, PA coordinators

Form

None

N/A

Yes

PA coordinators

All requests

Internal users, PA coordinators

Kanban

None

Grouped by Prior authorization status

No

PA coordinators

My assigned requests

Internal users, PA coordinators

Table

Assigned coordinator = logged-in user

Newest first

No

PA coordinators

Documentation gaps queue

Internal users, PA coordinators

Table

Documentation readiness = Documentation gaps found

Newest first

No

PA coordinators

Pending payer response

Internal users, PA coordinators

Table

Prior authorization status = Submitted to payer

Newest first

No

PA coordinators

Denied, appeal needed

Internal users, PA coordinators

Table

Prior authorization status = Denied

Newest first

No

1. Start your project: Start from Form so your prior authorization intake form is already attached.

2. Add the "All requests" page: Add a Kanban page, point it at your intake form's data, and group it by Prior authorization status. Restrict its Access to Internal usersSpecific teams, and select your PA coordinators team.

💡 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. Since coordinators are internal workspace members rather than external sign-ups, this page-access restriction is what scopes the pipeline to them, not a portal role.

3. Add "My assigned requests": Add a table page filtered to Assigned coordinator = logged-in user, sorted newest first, with the same team-based access restriction.

4. Add "Documentation gaps queue," "Pending payer response," and "Denied, appeal needed": Duplicate "My assigned requests" three times and swap each filter for the one in the table above. All three inherit the same access restriction.

Part 7 — Add the AI-powered denial trend report

Clinical leadership doesn't need to read every case individually. This is where the AI documentation analysis you set up in Part 1, together with every request's outcome, rolls up into something they can actually use.

Here's how the leadership group of pages is laid out:

Group

Page

Access level

Data block

Filter

Sort

Form?

Clinical leadership

All requests overview

Internal, leadership, full visibility

Table

None

Newest first

No

Clinical leadership

AI denial trend report

Internal, leadership

Reference page (AI Analyze block)

None

N/A

No

1. Add the "All requests overview" page: Add one more table page with no filter, showing every request regardless of status, and restrict its Access to Internal users → Specific teams, selecting your leadership group.

2. Add the "AI denial trend report" page: Add a new reference page and insert an AI Analyze block, pointing it at your intake form's data.

3. Prompt the report: Ask it to break down request volume and denial rate by payer and by drug class, surface the most common reasons requests were flagged with documentation gaps, and show the average time from submission to a final payer decision. Formaloo generates charts and a written summary from your live data.

What you now have

A prior authorization workflow that starts checking its own paperwork the moment a coordinator hits submit. Every request arrives with an AI read on what that payer typically expects and what's actually missing, so nobody finds out about a documentation gap from a denial letter. Coordinators work from a pipeline that emails patients and providers automatically as a request moves through submission, approval, denial, or appeal, every request leaves behind a proper internal case file, and clinical leadership gets a live, AI-generated view of which payers and drug classes are driving denials, all without anyone building a tracking spreadsheet by hand.

What's next

  • Follow up automatically with providers who haven't sent missing documentation Once a request sits in "Documentation gaps found" for a while, an AI agent can send a gentle follow-up nudging the provider's office to complete the next step, instead of it falling through the cracks. → How to send an email campaign and collect data with AI agents in Formaloo

  • Mirror every request into your existing compliance tracking If your clinic already keeps a payer log in spreadsheets, sync every request into Google Sheets automatically so this workflow doesn't become a second source of truth. → How to connect and sync your forms to Google Sheets (one-way)

  • Put a response-time expectation on payer turnaround Track how long a request has been sitting at "Submitted to payer" against a target turnaround time, so a slow payer response gets flagged instead of quietly aging in the queue. → How to use the Due date field in Formaloo

Specialty pharmacy coordinators who've moved to a system like this typically describe the same shift: fewer requests bounce back from the payer for something that was missing from day one, because the gap gets caught and fixed before submission instead of after a denial letter arrives.

Ready-to-use templates

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

  • Patient intake & consent workflow for healthcare — A conditional clinical intake form with AI-powered emails and a PDF document, the same combination this prior authorization tracker relies on.

  • AI lead qualification & scoring form — Uses AI to classify and score incoming submissions the moment they arrive. It's the same pattern that powers this tracker's documentation readiness check.

  • Employee request workflow — Internal request routing with status tracking and reviewer assignment, the same shape as moving a request through Draft, Submitted, and Approved.

Learn more how-tos

Did this answer your question?