Build an Insurance Claim Processor with n8n + Gmail + Slack

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:

khanhduyvt0101/workflows


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


PDF Vector n8n integration

Full workflow collection

Questions? Drop a comment.