← All articles
BLOG

What gets read automatically from a license document, and where you still check

· 4 min read

Typing in an expiration date by hand is simple for one license and tedious for fifty. Uploading the document and letting it read the date for you is faster, but only if you know what it actually looked at and what it’s still asking you to check.

ContractorLicenseAlert reads a document through one of three routes, in order, cheapest and most certain first. Knowing the order explains both why it’s usually fast and why it still asks you to confirm a date before saving it.

The three routes, in order

A PDF that already has a real text layer — most license cards and declarations pages generated by a computer rather than scanned — is read exactly, instantly, with no guessing involved.

A scan or a phone photo has no text layer to read, so it goes through optical character recognition first. That handles most clean, well-lit documents on its own.

Whatever OCR can’t settle on its own — a blurry photo, an unusual layout, a date split across two lines — goes to AI as a last step. The AI’s answer is checked against whatever text OCR did manage to extract, rather than trusted by itself.

What it can read

The same three-route process runs regardless of what kind of document it is, which is why one upload flow covers all of these:

  • License cards and wall certificates.
  • Insurance declarations pages, including certificates that list more than one policy.
  • Bonds, permits and training cards.
  • Renewal notices sent by an issuing authority.

The date formats it understands

Documents don’t all print a date the same way, and a format the extraction doesn’t recognize is the most common reason a field comes back blank. The patterns it’s built to recognize:

  • “Valid through” or “Not valid after” a given date.
  • A date written out, such as “the 31st day of August.”
  • A month and year alone, with no specific day.
  • A policy period written “From … To …”.

A worked example

Say a wall certificate is photographed at an angle, with a bit of glare across one corner. OCR pulls most of the text cleanly but can’t resolve the expiration line, where the glare sits. The photo and the partial text both go to the AI step, which reads the date from context — and that answer is cross-checked against the OCR text before it’s shown to you, with the photo displayed right beside the suggested date so you can look at the same corner the software did.

What it won’t do

It won’t guess. A continuous bond or a permit with no fixed end date has no expiration to read, and the field is left blank rather than filled with an invented one.

It won’t save anything on its own, either. Every result is shown beside the document itself so you can confirm it before it becomes a license — the same review step whether the date came from a text layer, OCR or AI. Document quality and layout vary enough that this step never gets skipped, no matter how confident the suggested date looks.

File types and limits

  • JPEG, PNG, WebP and PDF are read directly.
  • HEIC photos need converting to one of those first.
  • Up to twenty documents can be uploaded at once.

Why the confirm step never goes away

It would be easy to assume that enough automation eventually earns the right to save without you looking. That’s not how this is built, on purpose. Document quality and layout vary too much — a crisp PDF from an insurer’s portal and a phone photo taken in a truck cab are both “read,” but not with the same confidence, and nothing in the result itself tells you which is which unless you look at the document behind it.

That’s why every extracted date is shown next to the page it came from rather than dropped straight into a field. The few seconds it takes to glance at both is the whole safeguard, and it’s the same safeguard whether the date was obvious or genuinely hard to read.

Where ContractorLicenseAlert fits

This is the extraction behind every document upload in ContractorLicenseAlert, whether it’s one license added by hand or a batch brought in with a spreadsheet import.

How dates are read from documents

How to keep track of every expiration date

More on renewals

Put your next renewal on the radar.

Try everything free for 7 days. No card needed.

Then $39 a month, or $390 a year. Cancel whenever.