Extracting Named Insureds and Additional Insureds From a Certificate of Insurance
10 min read · updated August 11, 2026
The party who asked for the certificate, the party who owns the policy and the party who has rights under the policy are three different things, and a certificate of insurance prints all three in boxes that look interchangeable.
Three parties, three different meanings
The named insured is the policyholder: the entity the carrier issued the policy to. On a subcontractor’s certificate, this is the subcontractor.
The certificate holder is whoever asked for proof of insurance — typically the general contractor or the property owner. Being the certificate holder confers nothing. Standard certificate forms say so in their own header text, in substance that the certificate is issued as a matter of information only and confers no rights on the holder. Every downstream compliance decision that treats certificate-holder status as coverage is wrong at the first claim.
An additional insured is a party given rights under somebody else’s policy, and that status comes from an endorsement to the policy, not from the certificate. The certificate can only report it. This is why the extraction cannot answer “is our company covered?” and should not pretend to: it can answer “does this certificate assert that our company is an additional insured, on which coverage lines, and citing which endorsement?”, which is a different and honest field.
Building the schema around those three roles rather than around “insured names” is the whole design decision. One named_insured record, one certificate_holder record, and an array of additional_insured_assertions each carrying the party as written, the coverage line it attaches to, the evidence source within the document, and the verbatim text.
Where each one lives on the form
The widely used liability certificate forms are published by ACORD, and their layout is stable enough to anchor on: producer at the top left, insured beneath it, a block of carrier names with letter codes, a grid of coverage rows with limits, a free-text description of operations area, and the certificate holder in the lower left above the authorised representative signature.
Additional-insured information appears in two places, and it is common for only one of them to be populated. The coverage grid carries a narrow flag column indicating that additional insured status applies to that line — a per-row yes or no with no names in it. The names, if anywhere, are in the free-text description area, in a sentence such as “Sample Holdings LLC is included as an additional insured with respect to General Liability per form CG 20 10, where required by written contract.” Reconciling those two — a flag with no name, and a name with no structured line reference — is the core join, and either one alone is an incomplete answer.
Endorsement forms are cited by number, and the commonly referenced general-liability additional-insured endorsements are ISO forms in the CG 20 series, with different forms covering ongoing operations and completed operations. Extract the form number as a string exactly as printed, including the edition date where present, and resolve what it means from the form itself rather than from the certificate. A certificate that cites an ongoing-operations form only is asserting something narrower than one citing both, and that distinction is invisible unless the number survives extraction.
Blanket and conditional wording
The description text frequently does not name a party at all. Blanket wording reads “Additional insured status applies where required by written contract”, which is a conditional statement about a class of parties, and the condition is a contract the certificate does not contain.
There is no correct way to turn that into a named party, so do not. Represent it as an assertion with party_type: "class", the class described verbatim, and a conditional: true flag with the condition text. A downstream compliance rule can then decide what it wants to do with blanket wording — many organisations accept it, some do not — rather than having the decision buried in an extraction that quietly resolved the class to whoever the certificate holder happened to be.
The same treatment handles the other common shapes: a party listed “and its officers, directors, agents and employees”, which is a named party plus a class; a party listed with “as their interests may appear”; and a list of several entities separated by commas inside one free-text sentence, where the separator is ambiguous because entity names contain commas. Splitting on commas turns “Sample Holdings, LLC” into two parties, which is the single most common bug in this extraction and is worth an explicit test case.
The narrow columns that get lost
The coverage grid is dense and its flag columns are two or three characters wide. Two of them sit next to each other and mean unrelated things: one indicates additional insured status, the other indicates that subrogation has been waived. Both are single letters in narrow columns with abbreviated headers, and a table-extraction pass that drops or shifts a column by one produces a certificate asserting the wrong thing on every row, with no signal that anything went wrong.
Defend against it structurally rather than by hoping. Extract the header row and assert its expected labels before trusting any cell beneath it; check that the number of cells in each row equals the number of headers; and verify that a flagged additional-insured row has corroborating text somewhere in the description area, treating a flag with no corroboration as a review item. Column misalignment across pages is the general case and has its own defences. Column-alignment failures in dense tables are a layout problem and not a prompting one — the published page on what PDF parsing does and does not preserve covers why the geometry has to be handled before the model sees anything.
Where it goes wrong
- Multiple named insureds stacked in one box. A parent and two subsidiaries, or a “doing business as” line, appear as separate lines in a box the schema treats as one string. Keep the box as an array of lines and a joined verbatim value.
- Continuation pages. When the description area overflows, the text moves to an attached continuation form, and the names you need are on page two of a document your pipeline treated as one page. Detect the attachment reference and follow it.
- The certificate holder is also an additional insured. Legitimate and common, and the reason the two must be separate records rather than one deduplicated name — the evidence for each is different.
- Expired or soon-expiring policy periods. Each coverage row has its own effective and expiration dates and they do not always match; extracting one policy period per certificate loses the row that lapses first.
- The certificate is a scan of a fax of a print. These documents circulate as images more than most, so the character-level reliability question is real; the general treatment is in the OCR pipeline page and the banding and header artefacts specifically in scanned fax header noise.