Patient intake forms contain a lot of information that needs to get to the right people quickly. The front desk needs the basics — name, insurance, reason for visit. The clinical team needs something more specific: current medications, medical history, and most critically, allergies. A penicillin allergy that doesn’t get flagged before a prescription is written is a serious clinical risk.
At most small clinics, a receptionist manually reads through the intake form, types the information into a system, and either verbally alerts clinical staff about critical allergies or hopes the information makes it into the chart before anyone needs it.
Built a workflow that processes patient intake forms the moment they’re uploaded to Drive, creates the patient record, and fires a Slack alert to the clinical team if any critical allergy is detected — before the patient reaches the exam room.
What it does
Intake form PDF dropped in Drive → extracts full patient profile → creates patient record → checks for critical allergies → routes to clinical alert (critical allergy) or front desk notification (standard intake)
About 10-12 seconds per form.
What gets extracted
Patient information:
-
First name, last name, date of birth, gender
-
SSN (last 4 digits only)
-
Phone, email, full address
Insurance:
-
Provider name, policy number, group number
-
Subscriber name and relationship
Medical history:
-
Current and past medical conditions
-
Past surgeries with dates
-
Family medical history
Current medications:
- Each medication — name, dosage, frequency
Allergies:
- Each allergen with reaction/severity description
Emergency contact:
- Name, relationship, phone
Reason for visit
Critical allergy detection
The Code node checks every extracted allergy against a configurable list of critical allergens:
-
Penicillin
-
Sulfa
-
Latex
-
Iodine
-
Aspirin
-
NSAIDs
If any match → Slack alert to #clinical-alerts
If no match → Standard notification to #patient-intake
Add more allergens by editing the criticalAllergens array in the Process Intake Data node.
What the clinical team sees in Slack (critical allergy)
🚨 CRITICAL ALLERGY ALERT
Patient: Maria Santos
Patient ID: PT-MX4F2K
DOB: 1978-04-12
⚠️ ALLERGIES: Penicillin (anaphylaxis); Sulfa (rash)
Reason for Visit: Sore throat, fever 3 days
That alert fires within 12 seconds of the intake form landing in Drive. Before the patient is called from the waiting room.
What the front desk sees (standard intake)
✅ New Patient Intake
Patient: James Holloway
Patient ID: PT-N3K7P
Age: 42
Insurance: Blue Cross Blue Shield - POL-2847291
Reason: Annual physical exam
What lands in Google Sheets
Each row: Patient ID, Name, DOB, Age, Gender, Phone, Email, Insurance, Conditions, Medications, Allergies, Reason for Visit, Emergency Contact, Intake Date
Running patient log with full intake data. Searchable by patient name, filterable by intake date.
Setup
You’ll need:
-
Google Drive (“Intake Forms” folder)
-
Google Sheets (free)
-
n8n instance (self-hosted — required for HIPAA-compliant PHI handling)
-
PDF Vector account (free tier: 100 credits/month)
-
Slack (two channels: one for clinical alerts, one for front desk)
About 15 minutes to configure.
HIPAA compliance note: This workflow processes Protected Health Information. It must run on a self-hosted n8n instance with encryption enabled, restricted access controls, and audit logging. Do not run on shared or cloud-hosted n8n instances.
Download
Workflow JSON:
Full workflow collection:
Setup Guide
Step 1: Get your PDF Vector API key
Sign up at pdfvector.com — free plan works for testing.
Step 2: Create Drive folder and Sheet
Folder: “Intake Forms” — copy folder ID.
Sheet headers:
Patient ID | Name | DOB | Age | Gender | Phone | Email | Insurance | Conditions | Medications | Allergies | Reason for Visit | Emergency Contact | Intake Date
Step 3: Set up two Slack channels
-
#clinical-alerts— for critical allergy warnings (clinical staff) -
#patient-intake— for standard new patient notifications (front desk)
Step 4: Import and configure
Download JSON → n8n → Import from File.
Google Drive Trigger: Connect Drive, paste folder ID
PDF Vector - Extract Intake: Add credential, paste API key
Process Intake Data:
-
No config needed for basic use
-
To add critical allergens: edit
criticalAllergensarray — add items like'aspirin','contrast dye','morphine'
Create Patient Record: Connect Sheets, paste Sheet ID
Critical Alert: Connect Slack, select #clinical-alerts channel ID
Notify Front Desk: Connect Slack, select #patient-intake channel ID
Accuracy
Tested on standard patient intake form templates from clinic management software.
-
Patient name, DOB, contact info: ~97%
-
Insurance provider and policy number: ~94%
-
Medication list with dosage: ~91% — reliable when clearly formatted
-
Allergy extraction: ~95% — allergies are usually listed prominently on intake forms
-
Critical allergy detection: exact match + partial match — “Penicillin allergy” triggers on “penicillin”
-
Medical conditions: ~89% — depends on how checkboxes vs free text is used
Handwritten intake forms: accuracy drops significantly. Typed or digitally completed forms work best.
Cost
3-4 credits per intake form. Free tier handles ~25-30 forms per month — enough for a small practice’s daily intake volume.
Customizing it
Expand critical allergen list:
Edit criticalAllergens in the Code node. Add: 'contrast dye', 'morphine', 'codeine', 'aspirin' for your specific clinical context.
Add more Slack routing:
Before the IF node, add a Switch node to also route by reason for visit — flag urgent symptoms to a separate channel, route pediatric patients differently.
Connect to an EHR:
Replace or supplement the Sheets node with an HTTP Request to your EHR’s API (Epic, Athenahealth, etc.) to create the patient encounter directly.
Important
This workflow handles Protected Health Information (PHI). It must be deployed on a secured, self-hosted n8n instance with proper HIPAA safeguards in place. Consult your compliance team before deploying in a clinical setting.
Questions? Drop a comment.
