Project name: ClaimIQ
Tagline: AI-powered insurance claim processing — automated extraction, fraud detection, and instant decisions.
Inspiration: Insurance claim processing is slow, manual, and error-prone. Adjusters spend hours reviewing forms, extracting data by hand, and flagging suspicious submissions. We wanted to build a system that could do this automatically — reading raw PDFs, pulling out the key information, and making an intelligent decision in seconds.
What it does: ClaimIQ is an end-to-end insurance claim processing pipeline. You upload a PDF insurance claim — either a Cigna Medical Claim Form or an HCFA-1500 — and the system automatically extracts structured fields like claimant name, policy number, claim amount, incident date, and claim type. It then runs a fraud detection engine and returns one of three decisions: ACCEPT, FLAG, or REJECT, along with a full explanation of why.
Everything is displayed in a clean dashboard where users can upload claims, filter by status, click into individual claims to see extracted fields, validation issues, and fraud flags, and delete claims from the queue.
How we built it: We built a modular Python pipeline with five components. The parser uses pdfplumber to extract raw text from PDFs and then applies regex and keyword-proximity heuristics to find each field. The fraud detector runs validation checks — missing fields, future dates, inflated amounts, suspicious phrases like "wire transfer" or "cash only" — and returns a structured report. The agent orchestrates the full pipeline and applies decision logic to produce the final verdict. Results are stored in a JSON file via an atomic write layer. The FastAPI backend exposes four REST endpoints for uploading, listing, retrieving, and deleting claims. The React and Vite frontend provides the dashboard UI with a sticky sidebar, stats cards, a filterable claims table, and a detail panel.
Challenges we ran into: The biggest technical challenge was PDF extraction. pdfplumber reads table-based PDFs in jumbled column order, which broke all of our initial regex patterns. We had to directly inspect the raw text output for both form types and reverse-engineer exactly how each field fragments across columns. For example, a policy number like POL-2022-31643 gets split across three separate table cells as "POL-20", "22-316", and "43" — requiring a custom three-fragment stitching algorithm. Getting field extraction accuracy from near-zero to 96% on policy numbers alone took multiple rounds of debugging.
Accomplishments that we're proud of:
- 79.5% overall decision accuracy on 200 synthetic test claims
- 96-100% field extraction accuracy across all five key fields
- 100% accuracy on clean claims — not a single legitimate claim incorrectly rejected
- Full end-to-end pipeline from raw PDF to live dashboard decision in under a second
- Built and tuned entirely without a pre-trained ML model — pure extraction heuristics and rule-based logic
What we learned: PDF parsing is much harder than it looks. Real-world forms are table-based and pdfplumber linearises them in ways that break naive approaches. We also learned that decision logic needs to be carefully tiered — early versions either over-rejected legitimate claims or let fraudulent ones through. Balancing precision and recall across four claim categories required a lot of iteration on both the extraction and the decision rules.
What's next for ClaimIQ:
- Swap the regex extractor for a Claude API call to push accuracy above 95%
- Replace the JSON flat file with a real database
- Add proper authentication for multi-user access
- Deploy to Railway and Vercel for permanent hosting
- Support additional form types like UB-04 and ADA dental claim forms
Built with: Python, FastAPI, pdfplumber, React, Vite, Cloudflare Tunnel, reportlab
GitHub repo: https://github.com/SuryaHarikrishnan/insurance-claim-agent
Log in or sign up for Devpost to join the conversation.