Insurance claims come in by email all day. Someone has to open each attachment, pull out the policy number, claimant info, diagnosis codes, procedure costs, deductible, and calculate the reimbursement estimate — then decide who needs to review it. When you’re processing dozens of claims a day, that manual triage alone takes hours. And flags like missing pre-authorization often get missed until the claim is already in review.
Built a workflow that processes every claim the moment the email arrives in Gmail.
What it does
Claim email arrives in Gmail → downloads attachment → extracts all claim data → calculates estimated reimbursement → routes by amount → flags issues → logs to tracker → notifies claims team on Slack
Takes about 10-12 seconds per claim.
Claim types supported
-
Medical / Health
-
Auto / Vehicle
-
Property / Home
-
Life Insurance
-
Disability
-
Travel Insurance
What gets extracted
Identification:
-
Claim type, policy number, claim number
-
Claim ID (uses claim number if present, generates one if not)
Claimant:
-
Name, policy holder, relationship
-
Date of birth, phone, email
Incident:
- Date of incident, description, location
Provider:
- Provider name, NPI number, address
Clinical:
-
Diagnosis codes with descriptions (ICD codes)
-
Procedure codes with descriptions and amounts
Financial:
-
Total amount claimed
-
Deductible and co-payment
-
Estimated reimbursement (calculated automatically)
Supporting info:
-
Pre-authorization number
-
Supporting documents list
Routing logic
The Code node calculates estimated reimbursement and assigns a routing level:
-
$0 – $1,000 → Auto-Approve
-
$1,001 – $5,000 → Claims Adjuster
-
Over $5,000 → Senior Adjuster
Auto-flagging
Two issues get flagged automatically:
-
Missing Pre-Authorization — triggered when total amount exceeds $500 and no pre-auth number is present
-
No Supporting Documents — triggered when the supporting docs list is empty
Flags appear in the Slack notification and the tracker sheet so nothing falls through.
What lands in Slack
📋 New Insurance Claim
Claim ID: CLM-MX4F2K
Type: Medical
Policy: POL-2024-00847
👤 Claimant: Jennifer Reyes
📅 Incident Date: 2025-02-18
💰 Financial Summary:
• Total Claimed: $3,200
• Deductible: $500
• Est. Reimbursement: $2,700
📤 Route To: Claims Adjuster
⚠️ Flags: Missing Pre-Authorization
What lands in Google Sheets
Each row: Claim ID, Claim Type, Policy Number, Claimant, Incident Date, Provider, Diagnosis, Total Amount, Deductible, Est. Reimbursement, Route To, Flags, Status, Received Date
Every claim logged automatically with status set to “Pending Review.” Filter by Route To to see your adjuster queue. Filter by Flags to see everything that needs attention before review starts.
Setup
You’ll need:
-
Gmail (where claims arrive)
-
Google Sheets (free)
-
n8n instance (self-hosted — uses PDF Vector community node)
-
PDF Vector account (free tier: 100 credits/month, roughly 25-30 documents)
-
Slack (for claims team notifications)
About 15 minutes to configure.
Download
Workflow JSON:
insurance-claim-processor.json
Full workflow collection:
Setup Guide
Step 1: Get your PDF Vector API key
Sign up at pdfvector.com — free plan works for testing. Go to API Keys and generate a key.
Step 2: Create your Google Sheet
Headers in Row 1:
Claim ID | Claim Type | Policy Number | Claimant | Incident Date | Provider | Diagnosis | Total Amount | Deductible | Est. Reimbursement | Route To | Flags | Status | Received Date
Copy the Sheet ID from the URL.
Step 3: Import the workflow
Download the JSON from GitHub and import into n8n via Import from File.
Step 4: Configure the nodes
Gmail Trigger:
-
Connect Gmail account (OAuth2)
-
Recommend adding a label filter for emails from your claims intake address
Get a message:
-
Same Gmail credential
-
Downloads attachments automatically
PDF Vector - Extract Claim:
-
Add new credential (Bearer Token)
-
Paste your API key
-
Uses
attachment_0— correct for Gmail attachments
Process Claim:
-
No config needed — routing logic and flag detection run automatically
-
To change routing thresholds, edit the amount values in the Code node (lines with
routeTo)
Log Claim:
-
Connect Google Sheets
-
Paste your Sheet ID
Notify Claims Team:
-
Connect Slack
-
Select your claims channel
Step 5: Test it
Send yourself a test email with an insurance claim PDF attached. Check your Sheet and Slack after about 30 seconds.
Accuracy
Tested on medical claim forms (CMS-1500), EOBs, auto claim reports, and property damage assessments.
-
Policy number, claimant name, incident date: ~96% on digital forms
-
Procedure codes and amounts: ~94% on structured forms like CMS-1500
-
Diagnosis codes (ICD): ~92% — reliable when printed clearly
-
Deductible and co-payment: ~90% — depends on how clearly separated from total
-
Pre-authorization number: ~88% — sometimes embedded in narrative text
Handwritten or photographed claim forms: accuracy drops significantly. Digital PDFs from providers and insurers work best.
Cost
Each claim uses 3-4 PDF Vector credits. Free tier of 100 credits covers roughly 25-30 claims per month.
Basic plan is $25/month for 3,000 credits if you’re processing volume.
Customizing it
Adjust routing thresholds:
In the Code node, find the routeTo logic block. Change the 5000 and 1000 values to match your organization’s review tiers.
Add more flag types:
In the Code node, add to the flags array. Examples: flag claims where the incident date is more than 90 days ago, or flag specific diagnosis codes that require additional documentation.
Split into separate Slack channels:
Replace the single Slack node with an IF node that routes to different channels based on routeTo — one channel for auto-approvals, one for adjusters, one for senior review.
Add email acknowledgment:
After logging to Sheets, add a Gmail node to send an auto-reply to the claimant confirming their claim was received, with the generated Claim ID.
Connect to a claims management system:
Replace or supplement the Sheets node with an HTTP Request node to create claim records in your existing CMS or ERP directly.
Limitations
-
Requires self-hosted n8n (PDF Vector is a community node)
-
Only processes
attachment_0— claims with multiple attachments need additional handling -
Routing is amount-based only — doesn’t factor in claim type or claimant history
-
Pre-authorization flagging is threshold-based ($500+), not policy-specific
-
No deduplication — resubmitted claims create new rows
Questions? Drop a comment.
