Multi-agent entity resolution for P&C insurance

claim-resolve

A multi-agent pipeline that reconciles claims across carriers, and shows exactly how and why it made each call.

It tackles cross-carrier entity resolution, a real challenge in P&C insurance data architecture, inspired by enterprise data initiatives at companies like Shelter Insurance. Built entirely on a free, open tech stack.

View DashboardSource

The problem

One person. Three carriers. Three schemas that disagree.

The same claimant shows up across carriers with different field names, formats, and typos. There is no shared key, so a deterministic join silently fails or splits one person into three.

Carrier Aclaimants.csv
full_name
Jonathan R. Meyer
dob
1984-03-12
policy_no
A-99231
Carrier Bpolicyholders.json
name
Jon Meyer
birth_date
03/12/1984
pol_id
B0099231
Carrier Cmembers.parquet
claimant
Meyer, Jonathon
date_of_birth
12-Mar-84
policy
99231-C

resolved_entity #E-1042

Jonathan R. Meyer — one canonical record, linked to all three source rows, with a confidence score and an audit trail.

How it works

A deterministic core, an explainable agent layer.

Cheap, reliable grouping happens in SQL. The expensive, judgment-heavy work is handed to a small graph of specialized agents, each with a single responsibility.

Synthetic Carrier Data

Three carriers, mismatched schemas, generated with Faker

Ingestion

Simulates Qlik Replicate change-data capture

dbt + Snowflake

Deterministic grouping and staging models

LangGraph Pipeline

Schema-Mapping → Entity-Resolution → Conflict-Resolver

Trace Export

Every decision serialized for audit

Dashboard

Inspect resolutions and reasoning

Why it's credible

Built to be audited, not just trusted.

Confidence-based governance

When a match is genuinely ambiguous, it is escalated for human review rather than silently forced. The 0.15–0.75 confidence band routes uncertain calls to a person, so the pipeline never fakes certainty it does not have.

0.15 – 0.75 review band

Full reasoning capture

Every agent's input, reasoning, and output is logged to a structured trace. There is no black box: you can replay exactly what each agent saw and why it decided the way it did.

input · reasoning · output

Real model output

All reasoning shown in the dashboard was captured from actual runs against live data. Nothing is hand-written or mocked, what you see is what the models produced.

captured from live runs

Built on a free, open tech stack

  • Python
  • dbt Core
  • Snowflake
  • LangGraph
  • Gemini
  • Groq
  • Snowflake Cortex

A note on scope

All data is synthetic. Qlik Replicate and Qlik Compose were not used (commercial, no free tier); the ingestion layer simulates their role in the architecture. Full disclosure is in the repo README.