product

The pipeline,
stage by stage.

For the buyer who wants to understand the architecture before they trust the deliverable.

how it works

Watch each step do its job.

Five steps in the pipeline. Click any to see exactly what happens inside.

step 1 of 5

Every page indexed. Every document fingerprinted.

We hash every PDF, classify drawings vs. spec vs. addenda vs. bid form, extract text deterministically, and rasterize each page for the multimodal stage. Re-runs are cheap and idempotent.

  • 8 documents fingerprinted with SHA-256
  • 653 pages indexed in 1.2 seconds
  • Document types auto-classified
INGEST · 8 DOCUMENTS653 pages
📄
Project_Manual.pdf
287 pp
8f3a..b2c1
📄
Drawings_A_Series.pdf
142 pp
c4d2..9f08
📄
Drawings_M_Series.pdf
98 pp
a701..3d4e
📄
Addendum_01.pdf
12 pp
e092..771a
📄
Addendum_02.pdf
23 pp
b550..2204
📄
Bid_Form.pdf
8 pp
771f..40b9
all 8 docs fingerprinted in 1.2s
where we fit

Different jobs that compose well.

BidLedger is bid verification: every risk finding cited word-for-word against the source PDF before it ships. That's a different category from bid management (Procore), bid finding (Dodge), drawing takeoff (STACK), or first-wave AI bid analysis (ConstructionBids.ai). Here's how the categories actually fit together.

Bid management & SOV

Procore, PlanHub, Sage 300 CRE

BidLedger: Not what we do

Bid intake forms; once a project is awarded, these platforms run the project — invitations to bid, sub coordination, schedule-of-values, draws, change orders. BidLedger ships a risk brief and priced takeoff before the bid is awarded. The two compose: send a bid set to BidLedger for analysis, import the takeoff into Procore SOV at award.

Lead-finding / bid networks

Dodge Construction Network, ConstructionWire, BidClerk

BidLedger: Not what we do

They surface projects to bid on. We analyze the bids you have. Use them to find the work; use BidLedger to decide whether to bid it and at what price.

AI bid analysis (new category)

ConstructionBids.ai, Downtobid

BidLedger: Same category — different wedge

These read bid PDFs with LLMs. The difference is the verifier: BidLedger refuses to ship any finding whose citation does not verbatim-match the source page, and logs every rejection to findings-rejected.jsonl. Other tools in this category typically pass through whatever the LLM produced.

Drawing-based takeoff

STACK, PlanSwift, Bluebeam Revu

BidLedger: Adjacent, not competing

STACK et al require an estimator to click-count items on drawings. BidLedger reads the entire bid set — drawings, specs, addenda — and emits a takeoff draft the estimator reviews. Use STACK when you need pixel-precise quantities from drawings; use BidLedger when you need a full-bid risk and takeoff sweep in under a minute.

in one line

The defensible, audit-trail-first alternative to manual estimator review and to the broader bid-management platforms — neither of which does verbatim citation verification of every risk finding.

principles

What the architecture promises.

Six opinionated choices enforced everywhere.

Evidence before assertion

No LLM finding reaches a deliverable without a deterministic substring check against the source page. Confidence is a ladder (1.0 deterministic, 0.9 verbatim, 0.7 normalized), not a boolean.

Fail closed, never throw

The single LLM dispatch site never rejects its promise; callers branch on status. Retries are class-aware. Hung subprocesses are killed with SIGTERM → SIGKILL so the pool can never deadlock.

Resumable by construction

Each PDF and each page carries a status. A re-run skips already-completed work and resumes from where the last invocation stopped. Bids are keyed on a SHA-256 manifest of inputs.

Cost and wall-time bounded

Configurable hard ceilings on per-run S2 dispatches and wall-clock minutes. When either trips, in-flight work finishes and remaining pages are marked pending. The next invocation picks up where the kill-switch fired.

Schema-validated boundaries

Every LLM output is parsed through a Zod schema via safeParse. No "any" in the codebase. Strict TypeScript with noUncheckedIndexedAccess and exactOptionalPropertyTypes.

Forensic by default

Failed S2 calls dump per-attempt stdout, stderr, and metadata. Rejected findings are preserved in findings-rejected.jsonl. The audit log is tamper-evident. Nothing is silently swallowed.

send your next bid · free

We'll analyze it for free.

Email it over, or paste a shared link. Read by an estimator within 1 business day. If it earns its keep, $249 next time.

🔒 Confidential. Your bid never trains a model. We never sell or share bid data.