{"slug": "i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your", "title": "I built Reclaim: an AI tool that finds medical billing errors and writes your appeal letters", "summary": "A developer built Reclaim, an AI tool that uses Gemini 2.5 Flash to detect errors in medical bills and automate the appeals process. The tool extracts line items from uploaded photos or PDFs, checks for common billing errors, and for a $29 fee generates and faxes appeal letters to insurers. Reclaim is built with Next.js, Supabase, Stripe, and Telnyx, and is open-source under MIT license.", "body_md": "Americans owe $220 billion in medical debt, and 80% of medical bills contain errors — duplicate charges, upcoded procedures, unbundling, wrongful denials, balance-billing violations, out-of-network surprises. I built Reclaim to catch those errors and handle the appeals process end to end.\n\nYou upload a photo or PDF of your medical bill or Explanation of Benefits. Gemini 2.5 Flash extracts every line item, CPT code, and charge. Reclaim then checks for:\n\nIf no errors are found, you pay nothing. If errors are found, a one-time $29 per-case unlock generates the appeal letter and sends it directly to your insurer's fax line via the Telnyx Fax API — with a delivery receipt and a 30-day response calendar.\n\nMost people don't know they can appeal a medical bill, and fewer know how. The process requires specific legal language, relevant policy citations, and tight deadlines. I wanted to automate the parts that make it inaccessible: document parsing, error detection, letter drafting, fax sending, and deadline tracking.\n\nThe intake flow accepts photos or PDFs. Gemini 2.5 Flash handles extraction. Supabase Postgres stores cases under row-level security per user, with `medbill_*`\n\n-prefixed tables. Auth is Google OAuth via Supabase Auth.\n\nAfter errors are confirmed, Stripe Checkout handles the $29 unlock. The app generates the appeal letter with `pdf-lib`\n\n— supporting internal first-level appeals, external review requests, and FDCPA cease-and-desist letters depending on the situation — then faxes it via Telnyx with a delivery receipt.\n\nA Vercel cron job runs daily and sends reminder emails via Resend at 7 days, 3 days, 1 day, and overdue per appeal.\n\nThe dashboard uses what I'm calling a brutalist editorial design: black on cream, no rounded cards, typography-forward.\n\n| Layer | Technology |\n|---|---|\n| Framework | Next.js 16 (App Router) + React 19 |\n| Language | TypeScript |\n| AI | Gemini 2.5 Flash via `@google/generative-ai`\n|\n| Database | Supabase Postgres |\n| Auth | Supabase Auth (Google OAuth) |\n| Payments | Stripe Checkout |\n| Fax | Telnyx Fax API |\n| Resend | |\n| Cron | Vercel cron |\n`pdf-lib` + `pdf-parse`\n|\n|\n| Styling | Tailwind CSS v4 |\n\nUpload and analysis are always free. The $29 unlock only fires after errors are confirmed. 100% of any recovery is yours.\n\nRepo: [https://github.com/kyisaiah47/reclaim](https://github.com/kyisaiah47/reclaim) (MIT)", "url": "https://wpnews.pro/news/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your", "canonical_source": "https://dev.to/kyisaiah47/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your-appeal-letters-43ph", "published_at": "2026-06-14 13:20:35+00:00", "updated_at": "2026-06-14 13:40:36.036805+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-products", "ai-tools", "developer-tools"], "entities": ["Gemini 2.5 Flash", "Supabase", "Stripe", "Telnyx", "Next.js", "Vercel", "Resend", "Google"], "alternates": {"html": "https://wpnews.pro/news/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your", "markdown": "https://wpnews.pro/news/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your.md", "text": "https://wpnews.pro/news/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your.txt", "jsonld": "https://wpnews.pro/news/i-built-reclaim-an-ai-tool-that-finds-medical-billing-errors-and-writes-your.jsonld"}}