Context
Insurance is bureaucratic. Claims data arrives in every format you can think of: APIs when carriers have them, CSV/FTP/S3 when they don’t, email and fax when they really don’t. The product needed to onboard new insurers without re-engineering the platform every time.
Problem
Per-insurer logic lived in code. Each new tenant meant a developer wrote a slightly-different copy of an existing flow, and those copies drifted. Several carriers had no API at all, so humans were re-keying claims into legacy web UIs by hand. Engineer onboarding took days to spin up the local environment.
Approach
Per-tenant logic moved out of code and into a config-driven rule engine; onboarding a new insurer became data, not engineering work. Ingestion normalized everything (API, CSV, FTP, S3, email, fax) into one canonical claim shape before any business logic ran. Where carriers had no API, Puppeteer drove their legacy UIs end to end, with the same retry and idempotency posture as a real integration. The full stack runs in Docker Compose so a new engineer is productive on day one.
Outcome
New-insurer onboarding stopped requiring a developer. The Puppeteer integrations replaced manual re-keying for the legacy carriers. Local dev setup went from a multi-day ordeal to a single docker-compose command. The rule engine became the unit teams reviewed instead of bespoke code.