Solentrex · July 2026

An in-house utility bill reader

I replaced a vendor model we could not inspect with a two-stage vision pipeline that costs about a cent a bill and shows its work.

~1 cent per billLocate then cropDual read votingLive 2026-07-23

What it was

A solar proposal starts with a utility bill. A homeowner uploads a PDF or a photo, and the numbers read off it set the usage, the rate, and every savings figure that follows. If the reader is wrong, everything downstream is wrong in a way nobody notices.

We were reading bills with a vendor model we did not own and could not inspect. It ran outside our own cloud account, and it could not tell us why it produced a given number. That is a bad place for the first number in the funnel to come from.

What I did

I built the reader in house and kept it deliberately simple. There are three ideas in it.

  • Locate, then crop, then read. The first pass finds where on the bill the value lives. The second pass reads only that crop. A model given a small, correct region makes far fewer mistakes than a model given a whole page.
  • Two reads have to agree. Each value is read independently more than once, and the answer only stands if the reads match. Disagreement is a flag, not an average.
  • A plausibility gate. A value that clears both reads still has to be possible for a residential bill. If it is not, the pipeline says so instead of passing it along.

I scoped version one with leadership to extract the current month only and let the existing rate engine model the rest of the year, rather than trying to read a full history off one document. Then I verified it against 28 real billing cycle observations, preserved exactly as they were, and compared field by field. It went live on July 23, 2026.

What it produced

The reader costs about one cent per bill. That is the whole reasoning behind the build. A hosted GPU model charges by the hour whether bills arrive or not, so the cost is fixed and the ceiling is the hardware. Paying per bill means the cost tracks the business, and at our volumes it is a fraction of the alternative.

Ownership was worth more than the cost. The prompt, the crop, the voting rule, and the gate are all ours and all readable. When a number looks wrong I can open the pipeline and see which stage produced it, which was impossible before. The outside cloud dependency went away with the vendor model.

Back