Bidders List Construction — preconstruction and estimating 2026
A thousand firms, spelled six ways each, resolved into one book.
A bid-tracking database for one estimator, built around identity rather than storage: the same subcontractor arrives in the inbox under six spellings, and a split bid history is worse than none. It resolves them into one firm and files incoming bids from email.
The problem
A bidders list is an estimator's contact book: who bids what, and how often they win. The problem is not storage but identity. The same firm arrives as Ironwood Mechanical, Ironwood Mech., IRONWOOD MECHANICAL LLC, ironwood, a bare email address, or a phone number in the company field — each a separate row, so one firm's history splits across five incomplete records. The tool still answers the question. It answers it wrongly.
It was built for one person
The audience is one estimator, which made it possible to leave things out: no permissions, no roles, no settings page, no onboarding, no administration. It sits alongside the enterprise preconstruction system the company runs — that is the record, this is one person's working copy of the slice he cares about, which licenses it to be aggressive about merging and matching.
The inbox does the data entry
Bids arrive by email, so the tool reads the mailbox. Unread bid mail is picked up with attachments, signatures and quoted replies stripped, and the bid pulled from what remains: which project, which trade, what scope, what is quoted, when it came in. Nobody does data entry.
Subject lines rarely match the project name as filed, so jobs carry aliases and matching runs against those too. For the firm, a first pass narrows the field to around thirty plausible candidates and the judgement is made only across those; new contacts on the thread are matched by normalised name and phone digits.
The rest of it
- It declines to guess, and says why. An unconfident match goes to a review queue with the original email, the best guess and the reason it hesitated — two bidders matched the sender's domain.
- Duplicates are cheap to fix rather than prevented. A merge previews what will move, snapshots the before state, and can be undone.
- The cleaning sweep shows its work first. It reports probable junk and duplicates without changing anything, and sweeps an abbreviation only when the record is also a likely duplicate with no contacts.
- Search, then the awkward question. One search across firms, contacts, trades and projects, with a filter builder underneath: a division, two or more bids, not on the avoid list, exported to a spreadsheet.
- The home view. Totals, win rate, the five most frequent bidders, the deepest divisions, and a live feed. Firms carry four tags — preferred, pro, watch, avoid — and trades across 22 divisions.
What changed
- A split history became one history. Firms, bids and named contacts in one book, aliased so one firm never becomes two.
- The book maintains itself from the inbox. Bids are read, matched and filed against the right firm and job, with no data entry step to skip.
- Uncertainty became visible instead of silent. What the matching is unsure about goes to a queue with the reason stated, rather than filed on a guess.
- Bulk cleaning became safe to do. The sweep reports before it commits.
- One person got a tool shaped to how he works. No roles, no permissions, no settings.