The first book export a seller sends is rarely the one the deal is priced on. It comes out of an agency management system on a Friday afternoon, with columns named after that system, clients with no code, policies with no producer and commission that cannot be right. A retention rate computed over it is a guess.
This post follows the illustrative Coastal Keystone Agency — personal lines and coastal homeowners, Wilmington, invented for the demo — at the data received stage: 5,204 rows, 316 of them flagged (6.1%). The import maps the columns, the data-quality engine names every problem row, and the intake agent drafts the request to the seller from them.
| Actors | Analyst, deal lead, the seller's operations manager |
|---|---|
| Trigger | The book export uploaded; the stage moved to data received |
| Agency Illustrative | Coastal Keystone Agency — 5,204 rows; client retention 85.4% |
| Agents involved | Book intake agent (data room and data quality), then every other agent once the book is trusted |
| Controls that fire | DATA_QUALITY (more than 5% of rows with issues — warn) |
| Decisions and authority | Sending the request to the seller (deal lead; the agent only prepares it) |
| Outcome | A corrected export re-imported; the new import replaces the old and every figure is recomputed |
| What is measured | Share of rows with issues by kind; data-room checklist completeness |
Import: one schema, whatever the system
The upload (CSV or XLSX) is read into a table and its columns mapped onto one schema — client id and name, client type, website, client since, industry, state, line, carrier, producer, policy number, effective and expiry dates, written premium, commission rate, commission, commission type and status. Every row is stored with its row number, which is what every citation later points to. The file itself goes to your object store when one is configured, never to local disk.
CSV / XLSX"] --> M["Column mapping
onto one schema"] M --> R["Rows stored with
their row numbers"] R --> Q["Data-quality engine"] Q --> I1["No client code"] Q --> I2["No producer"] Q --> I3["Commission missing
or above premium"] Q --> I4["Expiry before
effective date"] I1 & I2 & I3 & I4 --> DQ{"Over 5%
of rows?"} DQ -->|"6.1%"| W["DATA_QUALITY warns"] DQ --> RQ["Intake agent drafts
the request to the seller"] style W fill:#fff4e2,stroke:#f4a03a
Each issue has a severity because each damages a different figure. A row with no client code cannot be counted in retention; a row with no producer cannot be counted in key-person shares; commission above the premium corrupts revenue; a reversed date puts the policy in the wrong period.
| Issue | Rows | Severity | What it breaks |
|---|---|---|---|
| No client code | 70 | High | Client retention, client concentration, client matching |
| No producer | 115 | Medium | Producer shares and key people |
| Commission missing or above the premium | 65 | High | Revenue, revenue quality, the valuation arithmetic |
| Expiry before effective date | 66 | Medium | Periods, renewals calendar |
316 of 5,204 rows flagged (6.1%), illustrative.
The request, drafted from the rows
The book intake agent's prepared decision lists what to correct with example row numbers, so the seller's operations manager can find them in their own system. It is prepared: accepting it records the request; a person sends it.
The stage can move to data received only once a book export is imported.
The playbook's checklist: book export, financial statements, carrier statements, producer agreements, E&O history — what arrived and what is missing.
316 rows flagged across four kinds, each with its row numbers.
More than 5% of rows: ask the seller for a corrected export.
Accepted on the decision record; sent by the deal lead.
A new import replaces the old; the engines recompute; every finding is rebuilt from the new rows.
Allowed only after Analyze has run, so the agents have read the book.
| Agent | What it prepared | What it cites | Who decides |
|---|---|---|---|
| Book intake agent | Ask the seller for corrected book data: 70 rows with no client code, 115 with no producer, 65 with commission missing or above the premium, 66 with expiry before effective | Every flagged row, by number | Deal lead |
| Concentration analyst | Retention agreements for four key producers holding 82.1% of revenue | Rows by producer | Deal lead |
| Supervisor agent | Controls that fired, including DATA_QUALITY | The controls | Practice leader |
| Section | Hit | Outcome |
|---|---|---|
| Data | DATA_QUALITY: 6.1% of rows with issues | warn |
| Key people | KEY_PRODUCER: top producer 26.7% of revenue | refer |
| Carriers | UNAPPOINTED_CARRIERS | warn |
For the deal team
The analyst stops cleaning the seller's data by hand and sends back a list the seller can act on.
For IT
Column mapping is a function of the header names; every stored row keeps its source row number; a new import supersedes the old one.
For corp-dev leadership
No figure goes into a memo from a book with 6% of its rows broken without someone having seen it and asked.
Questions we get asked
Which agency management systems are supported?
Any that can export CSV or XLSX. The import recognises the usual column names for each field and maps them onto one schema.
Is the export kept?
Its rows are kept in your database. The file goes to your object store when configured, and never to local disk.
Keep reading
Clients the acquirer already serves
Exact names, websites, a parent company in InsightPulse — and a fuzzy match a person rejects.
Read articleHow InsightRollup connects to the rest of the suite
Pulse 360 for who the companies are; Placement, Proofing and Advocate for the book after close.
Read articlePutting your first acquisition through it
One closed deal you know well, re-run — then the live one.
Read article