8 minutes per claim intake, 40-60 claims a day — here's the workflow I built to fix it

Insurance claims come in by email as PDFs all day. Someone has to open each one, pull out the policy number, claimant info, diagnosis codes, procedure costs, deductible, calculate the reimbursement estimate, decide whether it goes to a regular adjuster or senior review, and check if there’s a pre-authorization number.

For a small claims team processing 40-60 claims a day, that’s up to 8 hours of data entry before any actual review happens.

Built a workflow that does the intake in about 12 seconds.

What it does

Claim email arrives in Gmail → downloads attachment → extracts all claim data → calculates reimbursement → routes by amount → flags missing pre-auth → logs to tracker → notifies claims team on Slack

Claim types supported

Medical, Auto, Property, Life, Disability, Travel

What gets extracted

Claim basics: claim type, policy number, claim number, claimant name/DOB/phone/email, policy holder, relationship

Incident: date, description, location

Provider: name, NPI, address

Clinical: diagnosis codes with descriptions (semicolon-separated), procedures with codes and amounts

Financial: total amount, deductible, co-payment, amount requested, estimated reimbursement (calculated automatically)

Supporting info: pre-authorization number, supporting documents list

Routing logic

  • ≤$1,000 → Auto-Approve

  • $1,001–$5,000 → Claims Adjuster

  • Over $5,000 → Senior Adjuster

Auto-flagging

Two issues flagged automatically:

  • Missing Pre-Authorization — triggered when total exceeds $500 and no pre-auth number found

  • No Supporting Documents — triggered when the docs list is empty

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 (defaults to “Pending Review”), Received Date

Filter by Route To to see your adjuster queue. Filter by Flags to find everything needing attention before review starts.

Setup

You’ll need:

  • Gmail (claims inbox)

  • Google Sheets (free)

  • n8n instance (self-hosted — uses PDF Vector community node)

  • PDF Vector account (free tier: 100 credits/month)

  • Slack

About 15 minutes to configure.

Download

Workflow JSON:

Insurance-claim-processor.json

Full workflow collection:

khanhduyvt0101/workflows


Setup Guide

Step 1: Get your PDF Vector API key

Sign up at pdfvector.com — free plan works for testing.

Step 2: Create your 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

Step 3: Import and configure

Download JSON → n8n → Import from File.

Gmail Trigger + Get a message: Connect Gmail (OAuth2)

PDF Vector - Extract Claim: Add credential, paste API key — uses attachment_0

Process Claim:

  • No config needed — routing and flagging run automatically

  • To change thresholds, edit the routeTo block in the Code node

Log Claim: Connect Sheets, paste Sheet ID

Notify Claims Team: Connect Slack, select your claims channel


Accuracy

Tested on CMS-1500 medical claim forms, EOBs, auto claim reports, and property damage assessments.

  • Policy number, claimant name, incident date: ~96%

  • Procedure codes and amounts: ~94% on structured forms

  • Diagnosis codes (ICD): ~92%

  • Deductible and co-payment: ~90%

  • Pre-authorization detection: ~88%

Digital PDFs from providers and insurers work best. Handwritten or photographed claim forms: accuracy drops significantly.

Cost

3-4 credits per claim. Free tier covers ~25-30 claims per month.

Customizing it

Adjust routing thresholds: In the Code node, edit the $5,000 and $1,000 values

Split Slack channels by adjuster level: Add a Switch node before Slack — Senior Adjuster claims go to #claims-senior, auto-approvals go to #claims-approved

Add email acknowledgment to claimant: After Sheets logging, add a Gmail node to auto-reply with the generated Claim ID


PDF Vector n8n integration

Full workflow collection

Questions? Drop a comment.