Insurance Software Development: What We Actually Ship for Carriers
Your rating engine throws errors at 2 AM. Filed rates in Oklahoma don't match what your API returns. The on-call developer refreshes logs, checks the state filing PDFs, and realizes someone hard-coded a multiplier six months ago. We've debugged that exact scenario seven times -- for carriers running quote-to-bind workflows that handle $40M+ in annual premium. This post walks through the agent portals, claims automation, and policy admin systems we actually build. Not what a whitepaper says is possible -- what ships, what breaks, and what your dev team inherits when we hand off the repo.
We've spent the last few years building insurance platforms -- the kind that actually process quotes, bind policies, handle claims, and keep agents from losing their minds. This isn't a listicle of "top 10 insurtech features." It's a breakdown of what we actually ship for carriers, MGAs, and insurtechs, the stack decisions behind it, and the hard lessons we've learned along the way.
Table of Contents
- Why Insurance Software Is Uniquely Difficult
- Quote and Bind Workflow Architecture
- Agent Portal Design and Development
- Claims Automation That Actually Works
- Policy Administration System Design
- Our Stack Choices for Insurance in 2026
- Integration Patterns With Legacy Systems
- Compliance, Security, and Audit Trails
- What a Typical Engagement Looks Like
- FAQ

Why Insurance Software Is Uniquely Difficult
Insurance isn't like building a SaaS dashboard or an e-commerce checkout. The domain complexity is staggering. You're dealing with:
- State-by-state regulatory differences -- a policy form approved in Texas might be illegal in New York
- Rating algorithms that can have hundreds of variables and filed rate tables that change quarterly
- Multi-party workflows involving agents, underwriters, policyholders, adjusters, and reinsurers
- Data models where a single policy can have dozens of endorsements, each modifying coverage in different ways
- Audit requirements where every change to every field needs a timestamp and a user attribution
The average enterprise SaaS app has maybe 20-30 distinct business rules. A commercial lines rating engine can have 2,000+. That's not an exaggeration -- I've counted.
This is why so many insurance modernization projects fail. Teams underestimate the domain. They build generic CRUD apps and then spend 18 months trying to shoehorn insurance logic into them. We take the opposite approach: insurance domain modeling comes first, and everything else follows.
Quote and Bind Workflow Architecture
The quote-to-bind flow is the beating heart of any insurance platform. Get this wrong, and nothing else matters.
How We Model the Quote Flow
We break the quoting process into discrete, auditable stages:
Application Intake → Risk Assessment → Rating → Quote Presentation →
Binder Request → Underwriting Review → Bind → Policy Issuance
Each stage is its own bounded context with clear inputs and outputs. This matters because different users interact at different stages -- an agent fills out the application, the rating engine calculates the premium, an underwriter might need to review it, and the agent presents the quote to the insured.
The Rating Engine Problem
Rating engines are where most insurance software projects hit a wall. Here's what we've learned:
Don't build a generic rules engine. I know it's tempting. "We'll just build a configurable rules engine and actuaries can update rates themselves!" No. What you'll build is a slow, buggy, impossible-to-debug monster that actuaries hate using.
Instead, we use a hybrid approach:
// Rate tables are stored as versioned, immutable data
interface RateTable {
id: string;
lineOfBusiness: 'GL' | 'WC' | 'BOP' | 'CA';
state: StateCode;
effectiveDate: Date;
expirationDate: Date;
factors: RateFactor[];
version: number;
filingReference: string; // Links back to state filing
}
// Rating logic is code, not config
// Each LOB/state combo can have its own rating module
interface RatingModule {
calculate(submission: Submission, tables: RateTable[]): RatingResult;
validate(submission: Submission): ValidationResult;
}
Rate tables are data. Rate logic is code. The tables change frequently and are managed through an admin interface. The logic changes less often and goes through code review and testing. This separation has saved us countless hours.
Real-Time vs. Async Quoting
For personal lines, quotes need to return in under 2 seconds. Agents expect it. Consumers expect it even more.
For commercial lines, especially anything middle-market and above, the quote is inherently asynchronous. An underwriter needs to review the submission. We model this with a state machine:
const quoteStateMachine = {
draft: { submit: 'submitted' },
submitted: {
autoRate: 'rated',
referToUW: 'in_review',
decline: 'declined'
},
in_review: {
approve: 'rated',
requestInfo: 'info_requested',
decline: 'declined'
},
info_requested: { respond: 'in_review' },
rated: {
presentQuote: 'quoted',
expire: 'expired'
},
quoted: {
requestBind: 'bind_requested',
expire: 'expired'
},
bind_requested: {
bind: 'bound',
decline: 'declined'
},
bound: { issuePolicy: 'policy_issued' }
};
Every state transition is logged. Every transition can have business rules attached. This gives underwriters and compliance teams exactly what they need.
Agent Portal Design and Development
Agent portals are where usability meets insurance complexity, and they're where most carriers lose agent loyalty.
What Agents Actually Need
We've interviewed dozens of independent agents. Here's what they consistently tell us:
- Speed. They're quoting across 5-6 carrier portals. The fastest one wins.
- Don't ask me the same question twice. Pre-fill from prior policies, ACORD data, or third-party sources.
- Show me my book. Commission statements, policy lists, renewal pipelines.
- Let me do endorsements and cancellations myself. Don't make me call.
- Mobile access. Not an app -- a responsive web portal they can use on a tablet at the insured's office.
Technical Architecture
We build agent portals as headless applications using Next.js on the frontend with a dedicated BFF (Backend for Frontend) layer. Why Next.js? Because agents need fast page loads, and the SSR/ISR capabilities mean we can pre-render common flows while keeping dynamic data fresh.
The portal talks to the core policy admin system through APIs, never direct database access. This is non-negotiable. The portal is a consumer of the platform, just like any other integration partner.
┌─────────────┐ ┌─────────────┐ ┌──────────────────┐
│ Agent Portal │────▶│ BFF API │────▶│ Policy Admin API │
│ (Next.js) │ │ (Node.js) │ │ (Core System) │
└─────────────┘ └─────────────┘ └──────────────────┘
│
┌─────┴──────┐
│ Auth/RBAC │
│ (Agent, │
│ Agency, │
│ Carrier) │
└────────────┘
Role-Based Access That Actually Works
Agent portal permissions are more complex than most developers expect. You've got:
| Role | Can Quote | Can Bind | Can Endorse | Can View Commission | Can Manage Sub-Agents |
|---|---|---|---|---|---|
| Producer | ✅ | Up to authority | ❌ | Own only | ❌ |
| Senior Agent | ✅ | ✅ | ✅ | Own only | ❌ |
| Agency Principal | ✅ | ✅ | ✅ | Agency-wide | ✅ |
| Agency CSR | ✅ | ❌ | ✅ | ❌ | ❌ |
| Carrier UW | ✅ | ✅ | ✅ | ✅ | ❌ |
And that's simplified. Binding authority can vary by line of business, by state, and by premium size. We model this as a policy-based access control system, not simple role-based.

Claims Automation That Actually Works
Claims is where insurance companies spend the most money and where automation can make the biggest difference -- if you're realistic about what can be automated.
The Automation Spectrum
Not all claims are created equal. We categorize them:
| Claim Type | Complexity | Automation Potential | Example |
|---|---|---|---|
| Glass-only auto | Low | 90%+ straight-through | Windshield replacement |
| Simple property | Low-Medium | 60-70% | Pipe burst, minor water damage |
| Auto liability | Medium | 30-40% | Two-car accident, clear fault |
| Commercial property | High | 10-20% | Building fire, business interruption |
| Professional liability | Very High | <5% | Malpractice, E&O |
Anyone telling you they can automate 90% of all claims is selling you something. What you can do is automate the intake, triage, and simple resolution for low-complexity claims while giving adjusters better tools for everything else.
FNOL (First Notice of Loss) Automation
This is where we see the highest ROI. A well-built FNOL intake system can:
- Accept claims through web portal, mobile, API, or even structured email
- Auto-extract information from photos (damaged vehicle, property damage)
- Run coverage verification against the policy in real-time
- Auto-assign to the right adjuster based on claim type, location, and workload
- Trigger fraud scoring models before a human ever touches it
We've built FNOL systems that reduce the average intake time from 15 minutes (phone call with a rep) to under 3 minutes (self-service with photo upload). That's real money -- at 50,000 claims per year, you're looking at 10,000 hours saved annually.
AI in Claims: What's Real in 2026
Let me be direct about this. LLMs are useful for:
- Summarizing adjuster notes and medical records
- Extracting structured data from unstructured documents (police reports, medical bills)
- Generating first-draft reserve estimates based on comparable claims
- Powering chatbots for claim status inquiries
LLMs are NOT ready for:
- Making coverage determinations autonomously
- Setting final reserves without human review
- Handling any claim that might end up in litigation
We use OpenAI's GPT-4o and Anthropic's Claude for document processing, and we always keep a human in the loop for decisions that affect policyholders. Period.
Policy Administration System Design
The policy admin system (PAS) is the source of truth for everything. It's also the hardest thing to build in insurance software.
Core Data Model
A policy isn't a single record. It's a time-series of transactions:
interface PolicyTransaction {
transactionId: string;
policyId: string;
transactionType: 'new_business' | 'endorsement' | 'renewal' | 'cancellation' | 'reinstatement';
effectiveDate: Date;
processedDate: Date;
coverages: Coverage[];
premium: PremiumBreakdown;
forms: PolicyForm[];
processedBy: string;
previousTransactionId: string | null;
}
Every endorsement, renewal, and cancellation creates a new transaction. You can reconstruct the state of any policy at any point in time by replaying transactions. This is event sourcing applied to insurance, and it's the only sane way to handle the complexity.
Billing Integration
Billing is its own beast. We don't build billing systems from scratch -- we integrate with established platforms like One Inc, PaymentUS, or the carrier's existing billing system. The PAS sends billing transactions (installment schedules, endorsement pro-rata calculations, cancellation returns) and the billing system handles payment processing, collections, and remittance.
Our Stack Choices for Insurance in 2026
Here's what we're actually using and why:
| Layer | Technology | Why |
|---|---|---|
| Agent Portal / Consumer UI | Next.js 15 (App Router) | SSR performance, React ecosystem, great DX |
| Internal Admin Tools | Next.js + Tailwind | Consistent stack, fast iteration |
| Marketing / Content | Astro | Static-first, fast builds, content-heavy pages |
| BFF / API Gateway | Node.js (Hono on Cloudflare Workers) | Edge performance, low latency |
| Core Services | Go or TypeScript (depending on complexity) | Go for rating engines, TS for CRUD-heavy services |
| Database | PostgreSQL 17 | JSONB for flexible policy data, strong ACID guarantees |
| Document Storage | S3-compatible (Cloudflare R2 or AWS S3) | Policy docs, claim photos, correspondence |
| Document Generation | Puppeteer + HTML templates | Dec pages, policy forms, certificates of insurance |
| Search | Typesense or Meilisearch | Fast policy/claim search for agents and adjusters |
| CMS (for content pages) | Sanity or Payload | Headless CMS for managing product content |
| CI/CD | GitHub Actions → Vercel (frontend), Railway or Fly.io (services) | Fast deploys, preview environments per PR |
| Monitoring | Datadog or Grafana Cloud | APM, log aggregation, alerting |
We chose Go for rating engines because they're CPU-bound and benefit from Go's concurrency model and raw performance. A commercial lines rating calculation that takes 800ms in Node takes 120ms in Go. When an agent is waiting for a quote, that difference matters.
For everything else, TypeScript end-to-end keeps the cognitive overhead low. One language across frontend, BFF, and most backend services means any developer on the team can work on any part of the system.
Integration Patterns With Legacy Systems
Here's the reality: almost every carrier we work with has existing systems. Mainframes running COBOL. Guidewire installations that cost millions. Proprietary systems built in the 2000s that somehow still work.
We don't rip and replace. We wrap and extend.
The Strangler Fig Pattern
We put an API layer in front of the legacy system. New features are built in the new stack. Old features are gradually migrated. The agent portal doesn't know or care whether the data comes from the legacy system or the new one -- the API abstracts it away.
┌──────────┐ ┌───────────┐ ┌──────────────┐
│ Portal │────▶│ API GW │────▶│ New Service │
└──────────┘ │ │ └──────────────┘
│ │ ┌──────────────┐
│ │────▶│ Legacy API │
│ │ │ Adapter │
└───────────┘ └──────┬───────┘
│
┌──────┴───────┐
│ Mainframe │
│ / Guidewire │
└──────────────┘
This approach lets carriers modernize incrementally instead of betting the company on a multi-year replatforming project that might never finish.
Compliance, Security, and Audit Trails
Insurance is regulated. Heavily. Here's what that means for software:
- SOC 2 Type II is table stakes for any SaaS or hosted solution
- State data privacy laws (not just GDPR/CCPA -- many states have insurance-specific requirements)
- Rate filing compliance -- the premium you charge must match what's filed with the state
- Market conduct -- regulators can audit your underwriting decisions for discrimination
- Data retention -- some records must be retained for 7+ years after policy expiration
Every mutation in our systems generates an audit event. We use append-only audit logs stored separately from the main database. These logs are immutable -- no one, not even database admins, can modify them after creation.
interface AuditEvent {
eventId: string;
timestamp: Date;
userId: string;
userRole: string;
action: string;
entityType: 'policy' | 'claim' | 'quote' | 'agent';
entityId: string;
changes: { field: string; oldValue: any; newValue: any }[];
ipAddress: string;
sessionId: string;
}
What a Typical Engagement Looks Like
When a carrier or MGA comes to us, the engagement usually follows this pattern:
Discovery (2-4 weeks) -- We map the existing workflows, integrations, pain points, and regulatory requirements. We produce a system design document and architecture proposal.
MVP Build (8-12 weeks) -- We build the core quote-to-bind flow for one line of business in one state. This is a working system, not a prototype.
Iteration (ongoing) -- Add states, lines of business, agent portal features, claims capabilities. Each iteration is 2-week sprints with demos.
Scale (3-6 months in) -- Performance optimization, load testing, SOC 2 preparation, production hardening.
We're transparent about pricing -- insurance software projects typically range from $150K for a focused MVP to $500K+ for a full-platform build. The variables are number of lines of business, number of states, and integration complexity with existing systems.
If you're evaluating whether to build custom or buy a platform like Guidewire, Duck Creek, or Majesco, we're happy to have that honest conversation. Sometimes buying is the right call. Reach out and we'll give you our unfiltered take.
FAQ
How long does it take to build a custom insurance quoting system?
For a single line of business in a single state, we can ship an MVP quote-to-bind system in 8-12 weeks. Adding each additional state typically takes 1-3 weeks depending on how different the rating algorithms and regulatory requirements are. A full multi-line, multi-state platform is a 6-12 month build.
Should we build custom insurance software or buy a platform like Guidewire?
It depends on your size and complexity. If you're a $1B+ premium carrier with 50 lines of business, Guidewire or Duck Creek might make sense despite the $5-20M implementation cost. If you're an MGA, startup carrier, or insurtech doing $50-500M in premium, custom software built on modern architecture will likely be faster to market, cheaper to maintain, and more flexible. The break-even point has shifted significantly toward custom in the past couple of years as development tools have gotten better.
What programming languages are best for insurance software development?
We use TypeScript for most application logic and Go for performance-critical components like rating engines. Python is common for data science and actuarial models. The language matters less than the architecture -- the key decisions are around your data model, event sourcing strategy, and integration patterns. Avoid building core insurance logic in low-code platforms; the complexity will outgrow them.
How do you handle state-by-state regulatory compliance in insurance software?
We model regulatory requirements as configuration, not code. Each state has a regulatory profile that defines required forms, rate filing references, permissible rating factors, cancellation notice requirements, and data privacy rules. The core system reads these profiles at runtime. When regulations change, we update the profile and the new rules take effect on the configured date without code changes.
Can AI automate insurance claims processing?
Partially. Currently, AI is very effective at FNOL intake, document extraction (reading police reports, medical bills, repair estimates), claims triage, and fraud scoring. For simple, low-severity claims like glass-only auto or minor property damage, straight-through processing rates of 60-70% are achievable. Complex claims still require human adjusters, and AI-only coverage determinations are a regulatory and legal risk we don't recommend taking.
What's the cost of building a custom insurance agent portal?
A modern agent portal with quoting, policy servicing, commission views, and document management typically costs $80K-$200K depending on the number of lines of business and integration complexity. The portal itself is relatively straightforward -- the cost driver is usually the API layer and the integration with your existing policy admin and billing systems.
How do you integrate modern insurance software with legacy mainframe systems?
We use the strangler fig pattern: an API gateway sits in front of both the legacy system and new services. We build adapters that translate between modern REST/GraphQL APIs and whatever the legacy system speaks (often SOAP, flat files, or direct database queries). New features are built in the modern stack, and legacy functionality is migrated gradually. This avoids the risk of a big-bang migration while delivering value immediately.
What security standards does insurance software need to meet?
At minimum: SOC 2 Type II compliance, encryption at rest and in transit, role-based access control with multi-factor authentication, and immutable audit logs. Many states have additional requirements -- New York's DFS Cybersecurity Regulation (23 NYCRR 500) is one of the strictest. We design for the most stringent requirements from day one so you're not retrofitting security later.