Insurance Industry / Technical Guide

Automate FNOL Claim Intake & Triage for Insurance with n8n + Claude Step-by-Step Guide

A complete walkthrough for building an n8n + Claude pipeline that captures First Notice of Loss across email, portal and phone, extracts policy data, classifies severity, scores fraud signals, routes to the right adjuster, and writes a TPA-grade audit log — first acknowledgement out the door in under 90 seconds.

15 min read
Intermediate-Advanced
n8n + Claude API
Updated May 2026
What You’ll Build

FNOL capture (email / portal / phone)

OCR + Claude policy extract

Severity + fraud score (Claude)

Adjuster routing (LOB + workload)

Claim file in Guidewire

Immutable audit log

Claimant SMS / email ack

1. The Problem — Why FNOL Backlogs Cost Carriers More Than the Claims Themselves

Every P&C carrier and TPA hits the same operational wall: First Notice of Loss arrives across half a dozen channels (email, web portal, phone via call center, agent fax, mobile app, EDI from a partner) and a human still has to read it, find the policy, decide if it’s a fender-bender or a total loss, check for duplicates, score fraud risk, and assign the right adjuster — usually under a regulatory clock. The 24-hour acknowledgement requirement in most state Unfair Claims Practices Acts hits before any of that work is done, and a missed FNOL is a complaint waiting to happen with the DOI.

Real numbers from a regional auto + property carrier (~6,200 FNOL/month)

FNOL per month (auto + property + GL)~6,200
Median time from FNOL to first acknowledgement11h 40m
Severity miscalls caught at adjuster reassignment14%
Duplicate claims opened on same loss3.1%
Suspected fraud caught at intake (vs SIU later)0.4%
Intake clerk hours / month spent on data entry~840

The brutal asymmetry: roughly 6% of FNOLs become 60%+ of paid losses. The system needs to spot the catastrophic injury claim, the suspicious nighttime single-vehicle loss, and the third claim from the same insured this quarter — within minutes, not the next morning when an intake clerk gets to their queue.

What “triage” means here

Triage is not a Yes/No fraud flag bolted onto a claims-handling form. It’s a four-axis decision that runs on every FNOL the moment the data lands:

  • Severity tier: minor PD, moderate PD, BI, total loss, catastrophic / fatality. Drives reserve, adjuster level, supervisor notification.
  • Coverage applicability: which line of business, which coverage on the policy, deductible, sublimits.
  • Fraud signal score: rules + Claude reasoning over claim narrative + insured history. Flags only — never auto-deny.
  • Routing: internal staff adjuster vs assigned IA vs SIU referral, weighted by current workload and licensing state.
Insight
The biggest lift comes from collapsing time-to-acknowledgement from 11+ hours to under 90 seconds and getting the right severity-level adjuster on the file before reserves are mis-set. Reserve adequacy at day 1 drives the entire downstream loss-development math. We deploy this same intake pattern across our insurance automation engagements.

2. System Architecture

Eight components, each replaceable. The orchestration layer is self-hosted n8n inside the carrier’s own VPC so InfoSec and Compliance can audit every external API call that touches PII or PHI. Nothing leaves the perimeter except scrubbed prompts to Claude and signed lookups against the fraud data providers.

The stack

n8n (self-hosted, VPC)
Orchestration. Docker on a 4 vCPU / 16GB VM with queue mode and 6 workers for spike handling.
Claude API
Sonnet for severity classification + fraud reasoning, Haiku for cheap document classification.
Guidewire ClaimCenter
Source of truth for claim. Duck Creek Claims or Insurity ClaimsXPress as drop-in replacements.
Policy admin (PolicyCenter)
Coverage lookup at loss date. REST or SOAP — n8n handles both.
Textract / Document AI
OCR for police reports, ACORD forms, scene photos. Output normalized to JSON for Claude.
LexisNexis / Verisk
Fraud signals, claim history, ISO ClaimSearch hit. Cached for 24h to manage cost.
S3 (KMS encrypted)
Documents, photos, call recordings. Bucket policy denies anything outside the workflow IAM role.
Audit log (QLDB / WORM)
Immutable ledger of every prompt, score, routing decision and adjuster action. TPA / DOI ready.

Cost estimate (6,200 FNOL/month)

Claude Sonnet (~6.2k severity + fraud calls, ~3,200 tok in / 600 tok out)~$280
Claude Haiku (document classification, ~12k calls)~$45
Textract / Document AI (police reports, ACORDs, photos)~$520
LexisNexis + ISO ClaimSearch lookups~$1,860
VM (n8n + Postgres + QLDB on AWS, in-VPC)~$310
Twilio (call transcripts, claimant SMS)~$140
Total / month~$3,155

Roughly $0.51 per FNOL. The intake-clerk labor it replaces is $4–$7 per FNOL fully loaded; the LAE saved by getting reserves right at day 1 dwarfs both. The same orchestration layer slots into our wider AI automation services.

1

Multi-Channel FNOL Intake

FNOL arrives in whatever shape the claimant or producer chose. The pipeline normalizes three primary channels into a single internal event: the email box monitored by the claims department, the web portal where insureds and agents file directly, and inbound phone calls captured through Twilio with real-time transcription.

Channels and capture method

  • Email ([email protected]): n8n IMAP node polls every 30s. ACORD forms, police reports, photos and free-text body extracted as separate attachments. Email body itself becomes a structured note on the claim.
  • Portal webhook: the insured/agent portal POSTs a JSON FNOL with claimant info, loss description, optional photos. HMAC-signed.
  • Phone (Twilio): dedicated DID for after-hours FNOL. Twilio’s transcription is good enough as raw input — Claude cleans it. Recording stays in S3 for adjuster playback.
  • EDI / partner feed: for fleet, commercial auto, mortgagee notices. Daily SFTP pickup parsed into the same internal event shape.

Normalized intake event

Every channel converts to one schema before any downstream node runs. This makes severity, fraud and routing logic channel-agnostic.

n8n — normalized FNOL intake eventJSON
{
  "intake_id": "fnol_01HXYZ...",
  "channel": "email" | "portal" | "phone" | "edi",
  "received_at": "2026-05-03T14:22:09Z",
  "raw_source_id": "imap:msgid-...",
  "claimant": {
    "name_provided": "Maria Lopez",
    "phone": "+1-512-555-0188",
    "email": "[email protected]",
    "policy_number_provided": "AUT-3399201",
    "relationship": "insured" | "third_party" | "agent" | "attorney"
  },
  "loss": {
    "date_of_loss_provided": "2026-05-02",
    "type_provided": "auto_collision",
    "narrative": "rear-ended at stoplight on I-35...",
    "location_text": "I-35 N near exit 230, Austin TX"
  },
  "attachments": [
    { "kind": "police_report", "s3": "s3://...", "mime": "application/pdf" },
    { "kind": "photo",         "s3": "s3://...", "mime": "image/jpeg" }
  ],
  "language": "en",
  "signature": "sha256=..."
}
Watch Out
A single loss often arrives twice: once from the insured to the carrier, once from the producer-of-record to the same inbox. Run a dedupe window on (policy_number, date_of_loss, claimant_name) for 72 hours before opening a new claim file. Surface the second arrival as a note on the existing claim, not a duplicate.
2

OCR + Claude Extraction

The unstructured payload is where the work is. A police report PDF, a photo of a damaged bumper, a 4-paragraph email — none of that is queryable until it becomes structured fields on the claim. OCR pulls the text layer; Claude turns it into the canonical FNOL extraction object that the rest of the pipeline reads.

OCR cascade

  1. Document classifier (Claude Haiku): reads the first page only, returns police_report, acord_2, repair_estimate, medical_bill, photo or unknown.
  2. OCR engine selection: Textract Forms+Tables for ACORD, Textract Queries for police reports, Document AI for handwritten supplements, Claude vision for damage photos.
  3. PII scrubbing: SSN, full DL number, full DOB, full account numbers replaced with last-4 tokens before any external Claude call. Whitelist of fields that may leave the VPC.
  4. Claude extraction: Sonnet reads the OCR text + email body + transcript and emits the canonical FNOL extraction object.
  5. Confidence scoring: any field with confidence < 0.85 is flagged for adjuster review and never auto-populates the policy match.

Claude extraction prompt

Claude system prompt — FNOL extractorTXT
You are a Property & Casualty FNOL extraction engine. You read the
OCR text of one or more documents plus a free-text claimant narrative
and emit a single JSON object describing the claim.

Rules:
- Never invent fields. If a value is not present in the source, return null.
- Quote the source span verbatim in `evidence` for every populated field.
- Confidence is your honest estimate, 0.0 to 1.0. Below 0.85 means a
  human adjuster MUST verify before the claim is opened.
- Dates as ISO-8601. Money as integer cents.
- Coverage type uses the carrier ontology in `<coverage_taxonomy>`.

Output schema (strict):
{
  "claimant_name": str|null,
  "policy_number": str|null,
  "date_of_loss": str|null,
  "time_of_loss": str|null,
  "loss_location": { "address": str|null, "lat": num|null, "lng": num|null },
  "loss_type": "auto_collision" | "auto_comprehensive" | "property_water" |
               "property_fire" | "property_theft" | "liability_bi" |
               "liability_pd" | "workers_comp" | "other",
  "vehicles": [...],
  "injuries_reported": bool,
  "injury_descriptions": [...],
  "third_parties": [...],
  "police_report_number": str|null,
  "estimated_damage_cents": int|null,
  "narrative_summary": str,    // 2-3 sentences, neutral, no speculation
  "fields": { "<name>": { "value": ..., "confidence": num,
                          "evidence": "verbatim quote" } }
}
Security
Run extraction with Anthropic’s zero-data-retention enterprise tier and a strict allow-list of fields that may be sent. SSN, full DL, full account numbers and medical record numbers are tokenized to last-4 inside n8n before any prompt is built. The token map lives only inside the VPC.
3

Policy Lookup

Once the claim has a policy number candidate (or a claimant name + DOB + state for a fuzzy match), the workflow hits the policy admin system to confirm the policy was in force at the date of loss, pull the schedule of coverages, and surface deductibles and sublimits. This is the first step where a soft-fail decision matters: if the policy isn’t found, we still write the FNOL — we just route it to a senior adjuster with an “unverified policy” flag.

Lookup hierarchy

  1. Exact policy number — direct lookup, validate “in force” status against date_of_loss.
  2. Producer + last name + zip — fallback when claimant gave the policy “for a Honda Civic” instead of the number.
  3. VIN match (auto) — pulled from photo OCR or police report. Highest specificity for auto.
  4. Address + line of business (property) — fuzzy match on insured location, then human review on the top 3 candidates.

PolicyCenter lookup (n8n HTTP Request)

PolicyCenter — coverage lookup at loss dateJSON
{
  "method": "POST",
  "url": "https://pc.internal.carrier.com/rest/policy/coverage-at-date",
  "headers": {
    "authorization": "Bearer {{ $credentials.policycenter.token }}",
    "x-correlation-id": "{{ $json.intake_id }}"
  },
  "body": {
    "policy_number": "{{ $json.extraction.policy_number }}",
    "as_of_date":    "{{ $json.extraction.date_of_loss }}",
    "include": ["coverages","deductibles","sublimits","named_insureds","drivers","vehicles"]
  }
}

// Response shape (truncated)
{
  "policy_number": "AUT-3399201",
  "in_force": true,
  "effective": "2025-09-12",
  "expires":   "2026-09-12",
  "named_insureds": [{ "name": "Maria Lopez", "dob_last4": "1988" }],
  "coverages": [
    { "code": "BI",  "limit_each_person_cents": 10000000, "limit_occurrence_cents": 30000000 },
    { "code": "PD",  "limit_cents": 5000000 },
    { "code": "COLL","deductible_cents": 50000 },
    { "code": "COMP","deductible_cents": 25000 },
    { "code": "UM",  "limit_each_person_cents": 5000000 }
  ],
  "vehicles": [{ "vin": "1HGCM82633A...", "year": 2019, "make": "Honda", "model": "Civic" }]
}
Insight
Always look up coverage at the date of loss, not “today.” A policy can be cancelled or non-renewed between the loss and the FNOL arriving — and the carrier still owes coverage analysis based on the in-force state on date_of_loss. Hard-coding “as_of = now()” is the single most common mistake we fix during audits.
4

Severity Classifier

Severity drives reserve, adjuster level, and supervisor notification within minutes of FNOL. A miscall in either direction is expensive: reserving a fender-bender as a BI ties up loss reserves the carrier can’t redeploy; reserving a catastrophic injury as moderate PD blows the entire loss-development curve and triggers regulatory questions later. Claude reads the extraction object plus the policy and emits a structured severity object.

The 5 severity tiers

tier_1_minor_pd
Property damage only, no injuries reported, est. < $5k.
tier_2_moderate_pd
PD $5k–$25k, possible third-party PD, no injuries.
tier_3_bi_low
Bodily injury reported, ER visit only, no hospitalization.
tier_4_bi_high_or_total
Hospitalization, surgery, or total-loss vehicle. Senior adjuster.
tier_5_catastrophic
Fatality, brain injury, paralysis, multi-vehicle pile-up. Page on-call sup.

Severity classifier system prompt

Claude system prompt — severity classifierTXT
You are a P&C claims severity classifier. You read a structured FNOL
extraction and the in-force policy schedule, and you assign a severity
tier and a recommended initial reserve range.

You DO NOT make coverage decisions. You DO NOT make payment decisions.
You DO NOT deny anything. A licensed adjuster owns those decisions.

Severity tiers (carrier-tuned):
- tier_1_minor_pd:        PD-only, est < $5k, no injuries
- tier_2_moderate_pd:     PD $5k-$25k, multi-party PD allowed, no injuries
- tier_3_bi_low:          BI reported, ER-only, no hospitalization
- tier_4_bi_high_or_total: hospitalization, surgery, total-loss vehicle
- tier_5_catastrophic:    fatality, brain/spinal injury, mass casualty

Output (strict JSON):
{
  "tier": "tier_1_minor_pd" | ... | "tier_5_catastrophic",
  "tier_confidence": 0.0-1.0,
  "reserve_recommendation": {
    "currency": "USD",
    "low_cents": int, "high_cents": int
  },
  "supervisor_alert_required": bool,
  "reasoning": "2-4 sentences citing the specific FNOL evidence",
  "evidence_spans": ["verbatim quote 1", "verbatim quote 2"]
}

Rules:
- If injuries_reported is true and you cannot verify ER-only, default UP
  one tier (precautionary).
- If a fatality is mentioned anywhere in the source, tier=5, confidence
  may be lower but supervisor_alert_required = true regardless.
- tier_confidence below 0.7 forces human review before reserve is set.

Sample output

Claude — severity output for a real FNOLJSON
{
  "tier": "tier_4_bi_high_or_total",
  "tier_confidence": 0.91,
  "reserve_recommendation": {
    "currency": "USD",
    "low_cents":  1500000,
    "high_cents": 4500000
  },
  "supervisor_alert_required": true,
  "reasoning": "Claimant reports two-vehicle collision with airbag deployment and transport by ambulance to St. David's. Police report cites suspected fracture. Vehicle photos show A-pillar deformation consistent with possible total-loss assessment.",
  "evidence_spans": [
    "transported by ambulance to St. David's",
    "vehicle towed from scene, frame appears bent",
    "officer notes possible left tibia fracture"
  ]
}
Insight
Persist the full reasoning string and evidence spans on the claim file. When an adjuster overrides the model, the override + reason becomes a labeled training example for the next quarter’s prompt tune. After two quarters of overrides, the carrier has a calibration dataset that’s worth more than any vendor’s pre-trained severity model.
5

Fraud Signal Scoring

Fraud scoring at FNOL is a referral signal, not a denial decision. The system surfaces patterns — staged-loss indicators, claim-frequency anomalies, suspicious narrative phrasing — and either (a) writes a flagged note for the adjuster, or (b) generates a soft SIU referral. Nothing is auto-denied. Ever. The model output never reaches the claimant; only the adjuster’s eventual decision does.

Two-stage scoring

  1. Deterministic rules layer — runs first, in n8n. ISO ClaimSearch hit on same VIN within 24 months, claimant has >3 prior claims in 36 months, loss reported >14 days late, loss in claimant’s home zip with no police report. Each rule is a labeled signal, not a verdict.
  2. Claude reasoning layer — reads the narrative + LexisNexis enrichment + rules-layer signals, produces a structured fraud signal score with explicit reasoning over the specific text.

Fraud signal output schema

Claude — fraud signal scoring outputJSON
{
  "fraud_signal_score": 0-100,
  "band": "low" | "elevated" | "high",
  "siu_referral_recommended": bool,
  "rules_hits": [
    { "rule_id": "ISO_HIT_24M", "weight": 0.25,
      "evidence": "matching VIN in ISO ClaimSearch, prior claim 2024-11" },
    { "rule_id": "LATE_REPORT_GT_14D", "weight": 0.10,
      "evidence": "date_of_loss 2026-04-15, FNOL received 2026-05-02" }
  ],
  "narrative_signals": [
    {
      "signal": "passive voice on key facts",
      "evidence": ""the vehicle was caused to leave the roadway""
    }
  ],
  "reasoning": "Late-report combined with prior ISO hit on same VIN and a single-vehicle nighttime loss in claimant's home zip. Recommend SIU referral; do not delay adjuster assignment.",
  "do_not_communicate_to_claimant": true,
  "model_version": "fnol-fraud-v3.2"
}

Routing thresholds

BandScoreAction
low0–34Note attached. Standard adjuster assignment.
elevated35–64Adjuster reviews flag during initial contact. Optional SIU consult.
high65–100Mandatory SIU referral. Adjuster proceeds normally — no delay, no claimant-visible difference.
Compliance
Every state’s Unfair Claims Practices Act prohibits using fraud screening as a delay tactic. The FNOL acknowledgement clock and adjuster assignment clock must not be paused while an SIU referral is processed. Build the workflow so the high-band path runs in parallel with normal assignment, never as a gate.
6

Adjuster Routing

The right adjuster on the file at hour zero matters more than almost any later step. Routing is a weighted decision over line of business, severity tier, claimant state (adjusters are licensed by state), current open-file count, and language preference. The output is a single adjuster_id plus a fallback list in case the primary is OOO.

Routing matrix (auto + property carrier)

SeverityAdjuster levelReserve authoritySLA to first contact
tier_1Inside auto, fast-trackUp to $7,5004h
tier_2Inside auto, standardUp to $25k4h
tier_3BI specialistUp to $100k2h
tier_4Senior BI / total-lossUp to $500k1h + supervisor pinged
tier_5Catastrophe team + on-call supSup-only15 min, page out-of-hours

Routing query

Postgres — adjuster routing querySQL
-- Pick the lowest-loaded eligible adjuster for this LOB + severity + state.
-- Open-file count is refreshed every 5 minutes from ClaimCenter.

SELECT a.adjuster_id,
       a.full_name,
       a.open_files,
       a.languages
FROM   adjusters a
JOIN   adjuster_licenses al  ON al.adjuster_id = a.adjuster_id
WHERE  a.line_of_business = $1     -- 'auto' | 'property' | 'gl'
  AND  a.tier_max         >= $2   -- numeric tier value 1-5
  AND  a.status           = 'active'
  AND  al.state_code      = $3     -- claimant state, e.g. 'TX'
  AND  al.expires_on      > now()
  AND  ($4 = ANY(a.languages))     -- claimant preferred language
ORDER  BY a.open_files ASC,
          a.last_assigned_at ASC
LIMIT  3;

If the top result is OOO (calendar integration), the workflow walks the LIMIT 3 list. If all three are OOO, the file routes to the supervisor queue with a flag. The supervisor never sees a tier_1 fast-track unless every fast-track adjuster in the state is unavailable — which is the right escalation, not a fallback into a slower queue.

7

Claim File Creation + Acknowledgement

Once severity, fraud, and routing are decided, the workflow opens the claim file in Guidewire ClaimCenter, attaches every document and photo, sets the suggested reserve range, posts the AI notes (clearly labelled as model output), and assigns to the chosen adjuster. The claimant gets an acknowledgement SMS and email with the claim number, the assigned adjuster’s name, and the SLA for their first contact.

ClaimCenter create payload

Guidewire ClaimCenter — POST /rest/claim/v1/claimsJSON
{
  "policy_number":   "AUT-3399201",
  "loss_date":       "2026-05-02",
  "reported_date":   "2026-05-03T14:22:09Z",
  "loss_type":       "auto_collision",
  "loss_location":   { "address": "I-35 N exit 230, Austin TX" },
  "claimant": {
    "name":  "Maria Lopez",
    "phone": "+1-512-555-0188",
    "email": "[email protected]",
    "preferred_language": "en"
  },
  "ai_metadata": {
    "intake_id":          "fnol_01HXYZ...",
    "severity_tier":      "tier_4_bi_high_or_total",
    "severity_confidence":0.91,
    "reserve_low_cents":  1500000,
    "reserve_high_cents": 4500000,
    "fraud_band":         "elevated",
    "siu_referral":       false,
    "human_review_required": false,
    "model_versions": {
      "extractor":  "fnol-extract-v4.1",
      "severity":   "fnol-severity-v3.0",
      "fraud":      "fnol-fraud-v3.2"
    }
  },
  "assigned_adjuster_id": "ADJ-1188",
  "documents":  [...],
  "ai_notes":   "Auto-generated by intake workflow — see ai_metadata. Adjuster review required before any coverage decision or payment."
}

Claimant acknowledgement (SMS + email)

The acknowledgement is written by Claude using a tightly constrained template. It never quotes the model’s severity or fraud output to the claimant. It states the claim number, the adjuster’s name, the contact SLA, and what to send next.

Twilio SMS payload — claimant ackJSON
{
  "to":   "+15125550188",
  "from": "+18335550100",
  "body": "Hi Maria — your claim CLM-2026-118334 has been opened. Sara Patel ([email protected]) is your adjuster and will call you within 1 hour. Reply STOP to opt out of claim updates."
}
Insight
Naming the adjuster in the first message cuts inbound “who’s handling my claim?” calls by 60–70% during the first 48 hours. The call-center savings alone often pay for the entire pipeline at carrier scale.

Compliance: TPA Audit, State DOI, NAIC Model Conduct

Insurance is regulated at the state level by every state’s Department of Insurance, with model laws coordinated through the NAIC. AI in claims is now explicitly addressed in NAIC Model Bulletin on the Use of AI Systems by Insurers (2024) and adopted in some form by most states. Treat compliance as the design spine, not a bolt-on.

Hard rules that drive the architecture

  • No automated denial. The model output never produces a coverage decision, denial letter, or payment. A licensed adjuster signs off on every adverse action.
  • No automated fraud accusation. SIU referral is internal. The claimant never sees a “we suspect fraud” message generated by the model.
  • Acknowledgement clock. Most state UCPA require 10–15 days for written acknowledgement; the workflow’s sub-90-second ack massively exceeds the standard. Log the timestamp in the audit ledger.
  • Adjuster of record. Every state requires a licensed adjuster on every claim. The assigned_adjuster_id is the regulator’s accountable human, regardless of how the routing was decided.
  • Model card. NAIC Bulletin expects an internal model governance document covering training data, intended use, known limitations, and human-oversight points. The severity classifier ships with one; updates require formal version bumps.

TPA-grade audit log

The audit log is the document the carrier hands to a TPA, an external auditor, or a state DOI investigator. It must be immutable, complete, and queryable by claim and by adjuster. AWS QLDB or any WORM-storage equivalent works; the schema below is what we ship.

Audit log entry — one record per workflow stepJSON
{
  "audit_id":      "aud_01HXYZ...",
  "claim_number":  "CLM-2026-118334",
  "intake_id":     "fnol_01HXYZ...",
  "step":          "severity_classification",
  "actor":         "system:claude-sonnet-4-5",
  "actor_version": "fnol-severity-v3.0",
  "input_hash":    "sha256:b41d...",
  "output_hash":   "sha256:c0a9...",
  "input_summary": "extraction object + policy schedule (PII redacted)",
  "output":        "tier_4_bi_high_or_total, conf 0.91",
  "human_override": null,
  "occurred_at":   "2026-05-03T14:22:31Z",
  "correlation_id":"req_01HXYZ...",
  "prev_audit_id": "aud_01HXYW...",
  "ledger_hash":   "sha256:..."
}

Model card (severity classifier excerpt)

  • Intended use: rank-and-route triage signal at FNOL. Reserve recommendation only.
  • Out of scope: coverage determinations, denial letters, settlement amounts, subrogation strategy.
  • Calibration set: 24 months of carrier-internal closed claims, stratified by tier.
  • Known limitations: tends to under-tier when injury narrative is sparse on portal submissions; mitigated by the precautionary upgrade rule when injuries_reported is true.
  • Bias review: quarterly tier-distribution audit by claimant zip and language. Any drift >5% triggers a prompt review.
  • Human oversight: tier_5 is supervisor-paged; tier_confidence < 0.7 forces human review pre-reserve; every adverse outcome is human-decided.
Compliance
Run Anthropic’s enterprise tier with zero-data-retention. The carrier owns the prompt, the carrier owns the audit log, and no claim data is used to train external models. This is the configuration most state DOIs and external auditors expect to see when they ask “where does the policyholder’s data go?”

Measured Results — 90 Days In

Numbers from a regional carrier deployment (~6,200 FNOL/month, 38 staff adjusters, 3-person SIU, 1 supervisor on-call) after the first full quarter. Claim volume held steady — every gain comes from speed, severity accuracy, and labor reallocation.

FNOL handle time
11h → 84s
median, intake to ack
Severity accuracy
93%
vs adjuster final tier
Fraud catch (vs prior year)
+3.4x
SIU referrals at intake
Adjuster productivity
+38%
closed claims / adjuster / mo
DOI complaints
−54%
FNOL-related, vs prior 90d
Reserve adequacy at day 1
+22pp
within 25% of final paid

The metric the chief claims officer cared about most: severity miscalls caught at adjuster reassignment dropped from 14% to 4%. That is the number that lets the actuarial team trust the day-1 reserve enough to release prior-year IBNR with confidence — the downstream financial leverage of getting tier right at FNOL is much larger than the obvious labor saving.

Implementation Timeline & Cost

DIY Path
280 – 420 hours
  • n8n self-host + VPC + InfoSec review: 30–50 hrs
  • Multi-channel intake (email + portal + Twilio): 24–36 hrs
  • OCR cascade + PII tokenization: 30–46 hrs
  • Claude extraction prompt + golden-set backtest: 28–40 hrs
  • PolicyCenter integration + as-of-date logic: 24–36 hrs
  • Severity classifier + reserve calibration: 30–44 hrs
  • Fraud rules layer + LexisNexis + ISO ClaimSearch: 32–48 hrs
  • ClaimCenter integration + audit ledger: 40–60 hrs
  • Adjuster routing + license/state matrix: 18–28 hrs
  • Model card, governance docs, DOI brief: 16–24 hrs
  • Adjuster + supervisor training: 10–14 hrs
With SEOKRU
10-week deployment
  • Week 1–2: Discovery, golden-set FNOLs, InfoSec / Compliance kickoff
  • Week 3–4: Intake (email + portal + Twilio) + OCR cascade
  • Week 5–6: Claude extraction + severity classifier + calibration
  • Week 7: Fraud rules + LexisNexis + ISO ClaimSearch wiring
  • Week 8: ClaimCenter integration + audit ledger
  • Week 9: Shadow-run alongside live intake (no auto-create)
  • Week 10: Cutover by line of business, supervisor handover
  • Includes: model card, DOI-ready governance pack, monthly drift report
Get a Custom Implementation →

FAQ

Does this replace the adjuster's role?
No. Every coverage decision, denial, payment, and settlement is made by a licensed human adjuster — that is both a regulatory requirement and a deliberate design choice. What changes is what the adjuster does in the first 30 minutes of the claim. Instead of typing FNOL data into ClaimCenter from a PDF, they review a pre-populated file with a severity tier, a reserve range, the policy already attached, and any fraud flags surfaced. Adjusters in carriers we’ve worked with describe it as moving from data entry to actual claims handling.
Can the model deny a claim or close it without payment?
No, and this is non-negotiable. The system has no denial authority of any kind. The classifier emits severity tier and a reserve recommendation; the fraud module emits a referral signal; neither produces an adverse action toward the claimant. Every state’s Unfair Claims Practices Act and the NAIC Model AI Bulletin assume a human adjuster owns adverse decisions, and the workflow enforces that with explicit guardrails in the prompt, in the orchestration logic, and in the audit log review.
How do you guard against bias in the severity classifier?
Three layers. First, the prompt defines the tiers in injury and damage terms, never claimant attributes. Second, we maintain a quarterly bias audit comparing tier distribution by claimant zip, language, and self-reported demographic where collected — drift >5% on any axis triggers a prompt and dataset review. Third, the precautionary upgrade rule (when injuries are reported but unverified, default up one tier) protects against under-tiering errors that would disproportionately harm claimants with sparse narratives. The model card documents all three, plus the calibration set composition.
What does a state DOI investigation actually need from this system?
At minimum, three artefacts: (1) the audit log for the specific claim, showing every model output, every human override, and every workflow step with timestamps; (2) the model card and governance documents in effect on the date of loss, version-pinned; (3) the licensed adjuster’s note on every adverse decision. The QLDB-style immutable ledger means a regulator can verify nothing was rewritten after the fact. We’ve been through carrier examinations where this artefact set turned what would have been a 6-week document scramble into a 2-day response.
What about Duck Creek or Insurity instead of Guidewire?
Same architecture, different sync node. Duck Creek Claims has REST and a robust SOAP surface; Insurity ClaimsXPress is REST-first. The AI metadata block, audit ledger fields, and model card don’t change — only the create-claim payload mapping does. We’ve shipped this on all three; the ClaimCenter, DCT, and ClaimsXPress integrations are roughly comparable in effort.
How do you handle Spanish-language FNOL?
Claude is multilingual end-to-end, so the extraction and severity prompts run on the original-language text without translation. The acknowledgement template is rendered in the claimant’s preferred language flag from the policy or the intake event. The routing query filters adjusters by language, so a Spanish-speaking claimant is matched to a Spanish-licensed adjuster in the right state. The audit log records the language each step ran in, which the DOI sometimes asks for in market-conduct exams.
How does this compare to Tractable, Snapsheet, or Shift Technology?
Each of those is a strong vendor at a specific slice — Tractable for damage photo estimation, Snapsheet for digital claims experience, Shift for fraud analytics. They are not substitutes for an end-to-end intake-and-triage workflow; they are services you can plug into one. The n8n + Claude approach gives you the orchestration spine, the audit ledger, and the model governance, with vendor modules slotted in where they win. The carrier owns the prompts, the routing logic, and the data flow — not a vendor’s product roadmap.
What does ongoing maintenance look like after go-live?
Three monthly cadences. (1) Drift report — severity tier distribution, fraud-band distribution, override rate by adjuster. (2) Prompt tune — usually one round per quarter, driven by override patterns. (3) Model card refresh — version-pinned, with an internal sign-off from the chief claims officer. The total ongoing engineering load runs 8–14 hours/month for a 6,000-FNOL carrier, plus the claims-leadership review time. We package this into our wider financial services automation retainer for clients who want it managed.

Want this built for your claims operation?

SEOKRU deploys this exact system in 10 weeks, end-to-end. We backtest the severity classifier against your last 24 months of closed claims, wire the OCR cascade and policy lookup, integrate ClaimCenter (or DCT / ClaimsXPress), and ship the model card, governance docs, and DOI-ready audit ledger. The carrier keeps full ownership of every component — workflows, prompts, audit ledger, the lot.

Talk to an insurance automation engineer