• contact@verticalserve.com
Home / Engineering / Post 23
Engineering Blog · Post #23

Connecting policy admin systems: The Policy System Integration API That Feeds Your Renewal Engine

How a multi-LOB carrier with policy admin systems across regions uses InsightUW's Policy System Connector to ingest 200 expiring policies nightly — mapping ACCT_WARN_FLG to account_warning and PLCY_STAT_CD to policy_status — through a single POST /api/uw_renewals/ingest-policies endpoint that processes the entire batch in under 30 seconds.


The Problem

Large carriers do not run on one policy administration system. They run on three. Or five. Or seven — one per region, one per acquisition, one per LOB that was too complex to migrate. Each system stores policy data in its own schema, its own field naming convention, its own date format, and its own status code vocabulary.

When renewal season arrives, the underwriting team needs expiring policy data to feed their renewal workflow. But getting that data is a project in itself:

  • Policy System A stores the policy number as PLCY_NBR, the expiry date as PLCY_EXP_DT (YYYYMMDD format), and the account warning flag as ACCT_WARN_FLG (values: Y/N).
  • Policy System B stores the policy number as PolicyRef, the expiry date as ExpiryDate (DD/MM/YYYY format), and the account warning as RiskAlert (values: true/false).
  • Policy System C stores the policy number as policyNumber, the expiry date as expirationDate (ISO 8601 format), and the account warning as accountFlag.warningIndicator (values: 1/0).

Three systems, three schemas, three field names for the same concept. The renewal team either builds custom integrations for each (expensive, fragile) or exports to CSV and manually reconciles (slow, error-prone).

The real cost is not just the integration effort. It is the ongoing maintenance: every time one of these systems upgrades, field names shift, new fields appear, old fields are deprecated, and the integration breaks silently. Policies fall out of the renewal queue. Underwriters discover missed renewals when the broker calls asking why they have not received a quote.

The InsightUW Approach

InsightUW provides the Policy System Connector — a configurable integration layer that maps fields from any policy administration system to InsightUW's canonical renewal schema. Each source system gets a connector configuration that defines field mappings, value transformations, and validation rules. A single API endpoint accepts policy data from all connectors, normalizes it, and feeds the renewal engine.

graph TB subgraph Policy Systems["Policy Administration Systems"] A["Policy System A<br/>Plcy Nbr, Plcy Exp Dt<br/>Acct Warn Flg"] B["Policy System B<br/>Policy Ref, Expiry Date<br/>Risk Alert"] C["Policy System C<br/>policyNumber, expirationDate<br/>accountFlag.warningIndicator"] end subgraph Connectors["Policy System Connector Layer"] D["Policy System Connector<br/>Field Map + Transform"] E["Policy System Connector<br/>Field Map + Transform"] F["Policy System Connector<br/>Field Map + Transform"] end subgraph Normalize["Canonical Normalization"] G["Unified Schema Validation"] H["Deduplication Engine"] I["Change Detection"] end subgraph Renewals["Renewal Engine"] J["Auto-Generate Renewal<br/>Work Items"] K["Apply Flags +<br/>Priority Scoring"] L["Route to Unified<br/>Work Queue"] end A --> D B --> E C --> F D --> G E --> G F --> G G --> H H --> I I --> J J --> K K --> L

The Policy System Connector Model

Each policy system gets a connector configuration that defines how its fields map to InsightUW's canonical schema. The connector is a JSON configuration — no custom code required.

The Nightly Batch Flow

Each connector runs on a cron schedule, pulling expiring policies from its source system and pushing them through the normalization pipeline.

sequenceDiagram participant Cron as Nightly Scheduler participant policy admin system as policy admin API (US) participant policy admin system as policy admin API (EU) participant GW as policy admin API (Apac) participant Conn as Policy System Connector participant Norm as Normalization Engine participant Dedup as Dedup Engine participant RN as Renewal Engine participant Queue as Unified Work Queue Note over Cron: 2:00 AM ET — policy admin sync begins Cron->>policy admin system: GET /api/v2/policies/expiring?window=90d policy admin system-->>Conn: 82 policies (policy admin system schema) Conn->>Norm: Map Plcy Nbr → policy number, etc. Norm->>Dedup: 82 normalized policies Note over Cron: 3:00 AM ET — policy admin system sync begins Cron->>policy admin system: GET /policy/api/expiring?window=90d policy admin system-->>Conn: 64 policies (policy admin system schema) Conn->>Norm: Map Policy Ref → policy number, etc. Norm->>Dedup: 64 normalized policies Note over Cron: 4:00 AM ET — policy admin system sync begins Cron->>GW: GET /pc/rest/v1/policies/expiring?window=90d GW-->>Conn: 54 policies (policy admin system schema) Conn->>Norm: Map policyNumber → policy number, etc. Norm->>Dedup: 54 normalized policies Note over Dedup: 200 total, 3 duplicates found (cross-region) Dedup->>RN: 197 unique expiring policies RN->>RN: Generate renewal work items for new policies RN->>RN: Update existing renewals with fresh data RN->>Queue: 42 new renewals added, 155 existing updated Note over Queue: Total processing time: 27.4 seconds

The Ingest-Policies API

For carriers that prefer to push rather than pull, InsightUW exposes a single ingestion endpoint that accepts policies from any configured connector.

Field Mapping Reference: Three Systems to One Schema

The following table shows how the same concept is represented across all three systems and how InsightUW normalizes them:

InsightUW Field Policy System A Policy System B Policy System C Transform
policy number PLCY_NBR PolicyRef policyNumber None
insured name INSRD_NM InsuredName account.accountHolder.displayName Title case (policy admin system)
effective date PLCY_EFF_DT (YYYYMMDD) InceptionDate (DD/MM/YYYY) effectiveDate (ISO 8601) Date format → ISO 8601
expiry date PLCY_EXP_DT (YYYYMMDD) ExpiryDate (DD/MM/YYYY) expirationDate (ISO 8601) Date format → ISO 8601
lob LOB_CD (CP, GL, WC) ClassOfBusiness (Property, Liability) productCode (CommercialProperty) Value map
premium ANNL_PREM_AMT GrossWrittenPremium totalPremium.amount Numeric (2 decimal)
account warning ACCT_WARN_FLG (Y/N) RiskAlert (true/false) accountFlag.warningIndicator (1/0) Boolean map
policy status PLCY_STAT_CD (ACT/EXP) PolicyStatus (Live/Due) status (InForce/Scheduled) Value map
broker code BRKR_CD BrokerRef producerCode.code None
tiv TOT_INSRD_VAL TotalSumInsured totalInsuredValue.amount Numeric (0 decimal)
loss ratio 5yr LOSS_RATIO_5YR (pct) FiveYrLossRatio (decimal) lossRatio5Year (decimal) Decimal (policy admin system: /100)

The Scenario

Atlantic Mutual Insurance operates across three regions with three policy administration systems:
- policy admin system for US operations (Commercial Property, GL, WC, Auto, Umbrella)
- policy admin system for EU operations (Property, Liability, Motor Fleet, D&O, PI)
- policy admin system for APAC operations (Commercial Property, GL, WC, Auto, Cyber)

Each night, the policy systems push expiring policies (90-day lookahead) to InsightUW. On April 21, 2026, the nightly batch processes 200 policies across all three systems.

Nightly Batch Timeline

Time (ET) System Policies New Updated Flags Duration
2:00:00 AM Policy System A 82 12 69 4 policies flagged 8.4 sec
3:00:00 AM Policy System B 64 8 55 2 policies flagged 6.8 sec
4:00:00 AM Policy System C 54 6 47 1 policy flagged 5.9 sec
4:00:06 AM Deduplication 200 → 197 3.1 sec
4:00:09 AM Renewal generation 26 new renewals 3.2 sec
Total All systems 200 26 171 7 27.4 sec

What the Underwriting Team Sees at 8:00 AM

When the team logs in Monday morning, 26 new renewal work items have appeared in the unified queue — 12 from US, 8 from EU, 6 from APAC. Each renewal has a source system badge indicating its origin, but all data is in the same canonical format. The underwriter does not need to know whether a policy came from policy admin system or policy admin system — the fields are identical.

Seven policies arrived with flags. These sort to the top of the queue per the urgency scoring algorithm. The manager can see at a glance that 4 US policies and 2 EU policies need immediate attention.

Metrics: Before and After Policy System Integration

Metric Before InsightUW After InsightUW Improvement
Time to ingest 200 expiring policies 4–6 hours (manual CSV + reconciliation) 27.4 seconds (automated) 99.8% faster
Policy systems integrated 1 (primary only, others manual) All 3 (policy admin systems) 3x coverage
Renewal work items auto-generated 0 (all manual creation) 26 per night (automated) New capability
Policies missed from non-primary systems 8–15 per quarter 0 (all systems synced) 100% elimination
Field mapping errors caught automatically 0 (discovered downstream) 100% (validated at ingestion) Full validation
Integration maintenance effort 40 hrs/month (custom code per system) 2 hrs/month (config changes only) 95% reduction
Time from policy expiry data to queue 1–3 business days Same night (< 30 seconds) 99% faster
Cross-region duplicate detection Never done Automatic (3 dupes caught nightly) New capability

Key Takeaways

  1. Field mapping is the integration, not code. The Policy System Connector replaces custom integration code with declarative JSON configuration. When policy admin system renames PLCY_EXP_DT to POLICY_EXPIRY_DATE in their next release, you update one field in the mapping config — not a code deployment.

  2. Every system speaks differently, but the renewal engine only needs one language. The normalization layer converts the policy admin system's YYYYMMDD dates, policy admin system's DD/MM/YYYY dates, and policy admin system's ISO 8601 dates into a single format. The renewal engine never sees the source format.

  3. Nightly batch with push fallback covers all patterns. Some policy systems support API pull (InsightUW calls them). Others only support push (the policy system calls InsightUW). The same /ingest-policies endpoint handles both patterns.

  4. 200 policies in 27.4 seconds is not a performance number — it is a UX number. It means the entire batch completes before anyone notices it ran. By morning, the queue is up to date.

  5. Deduplication across systems prevents double-counting. A global program with policies in both Policy System A and Policy System C would generate two renewal work items without cross-system dedup. InsightUW catches these using insured name matching, policy number patterns, and effective date overlap.


Ready to connect your policy administration systems to a unified renewal engine? InsightUW's Policy System Connector maps policy admin systems, and any other system to a single canonical schema — in configuration, not code.

Schedule a Policy Integration Review →

See InsightUW run on your data

A 45-minute working session with a real broker email and your LOBs.

Request a demo