AI plumbing estimating is often described as "the AI reads the plans and gives you a bid." The actual workflow is more interesting and more reliable. BuildCrux uses a three-pass pipeline that separates sheet identification, quantity takeoff, and unit-cost application into discrete model calls — each pass optimized for its job. Plus a scope filter that lets sub-bidders extract only the plumbing scope from a multi-trade plan set. Critically, the workflow keeps DFU calculations + water sizing + gas piping pressure-drop calculations in dedicated plumbing software or manual code-table reference rather than trying to AI-generate them. This article walks the full workflow on a 25-sheet commercial plumbing sub-bid, end-to-end.
The multi-pass pipeline is the result of 18 months of iteration on plumbing estimating specifically. Earlier versions tried to fold DFU calculations into the AI workflow. That approach failed because DFU calcs require summing fixture units by branch + stack and looking up minimum pipe sizes in IPC Table 710.1 / UPC Table 703.1 — work that is deterministic, code-table-driven, and not pattern-matchable. The fix was scope discipline: AI does takeoff and unit costs (what it does well), dedicated software or manual code reference does code-driven sizing (what they do well), senior estimator integrates the two (where judgment lives). The result: 14 minutes of AI runtime + 20 to 45 minutes of senior review produces a bid that lands inside the same accuracy band as 10 hours of manual takeoff.
Why multi-pass beats single-pass for plumbing
A 25-sheet commercial plumbing plan set has between 6,000 and 12,000 individual visual elements: fixture schedules, supply riser diagrams, DWV riser diagrams, gas piping plans, equipment connection details, dimension callouts, sheet legends. A single model call asked to "read the plans and produce a bid" has to do everything at once. The model spreads attention thin. Output: fewer line items, hallucinated specialty equipment, missed grease-interceptor scope, missed gas service capacity issues.
Multi-pass changes the math. Each pass has a single job. Pass 1 only identifies sheet types. Pass 2 only does takeoff against identified sheets. Pass 3 only applies costs. Each pass produces structured intermediate output the next pass consumes. Errors caught earlier, accumulate less.
The full pipeline, end to end
End-to-end multi-pass pipeline on a typical commercial plumbing sub-bid. Total: 10-18 minutes AI runtime + 20-45 minutes senior review (plus DFU + water + gas sizing which runs in parallel before).
| Step | Job | Time | Tool / output |
|---|---|---|---|
| DFU + water + gas sizing (parallel) | Code-driven sizing | 30-120 min | FastPIPE, Trimble PipeDesigner, or manual w/ code tables — outside BuildCrux |
| Upload | PDF intake, Anthropic Files API | 15-60 sec | File ID |
| Pass 1 | Identify plumbing + non-drawing sheets | 60-120 sec | Sheet index (cached for Pass 2 + 3) |
| Preflight modal | Confirm scope + credit cost | 15-30 sec | User approves |
| Pass 2 | Quantity takeoff with compute_area tool | 3-6 min | Structured quantity list |
| Pass 3 | Unit-cost application with lookup_unit_cost | 5-10 min | 40-70 line-item priced estimate |
| Post-process | Universal baseline checks, missing-trade sweep | 10-30 sec | Final estimate JSON |
| Senior review | DFU validation, engineering judgment, scope verification | 20-45 min | Polished submission |
DFU + water + gas sizing stays outside the AI
Three sizing calculations drive plumbing scope:
- DFU sizing (drain + vent): sum fixture units per IPC 709.1 / UPC 702.1, look up minimum pipe size per IPC 710.1 / UPC 703.1.
- Water sizing (supply): sum WSFUs (water supply fixture units) per IPC 604 / UPC 610, look up minimum pipe size per code table.
- Gas piping (low or medium pressure): pressure-drop calculation per IFGC 402.4 / NFPA 54 6.2 based on connected BTU/hr × developed length.
All three are deterministic, code-table-driven calculations. AI cannot reliably do them because: (a) they require integer summation across branches and stacks, which AI floating-point reasoning is bad at; (b) they require code-table lookups, where AI hallucination risk is high; (c) they require code-year awareness (IPC 2024 vs IPC 2021 has different tables). The reliable workflow keeps these in dedicated plumbing software (FastPIPE, Trimble PipeDesigner) or manual code-table reference.
The senior estimator runs DFU + water + gas sizing before AI takeoff. AI runs takeoff against the drawings + fixture schedule, integrates the sizing output, validates that pipe sizing assumed by takeoff matches calc output. Where they diverge, senior estimator adjusts.
Pass 1 — sheet identification
Pass 1 reads the cover sheet and sheet index, then samples each sheet to identify its type. Output is a structured sheet map: P0.0 is "cover + legend", P1.0 is "demolition plan", P2.0 is "floor plan", P3.0 is "riser diagrams", P4.0 is "gas piping plan + schedule", P5.0 is "details + fixture schedule". Non-drawing sheets — specifications, T24 forms, plumbing narrative — get tagged so they are ignored in Pass 2.
Pass 2 — quantity takeoff
Pass 2 produces the quantified line list. The model reads each plumbing sheet identified by Pass 1 and outputs structured quantities: fixtures by type from schedule, supply rough-in LF by material + size from riser diagrams, DWV rough-in LF by material + size, gas piping LF by size from gas plan, water heater + booster + grease interceptor as lumps from equipment schedule.
- Fixture schedule read directly: model number, mfg, quantity, ADA requirements captured exactly as listed.
- Riser diagrams measured with compute_area: linear feet by branch and stack, summed per material + size.
- Gas piping plan: linear feet by size + connected appliances per IFGC pressure-drop math (senior validates sizing).
- Equipment schedule: water heater capacity + venting, booster sizing, grease interceptor capacity captured from cut sheets referenced on the schedule.
Pass 3 — unit-cost application
Pass 3 takes the quantities from Pass 2 and applies unit costs. For each line, the model calls the lookup_unit_cost tool. The tool returns a calibrated unit cost from the BuildCrux plumbing unit-cost table, updated quarterly against copper, PEX, cast iron, gas pipe, and BLS plumber wage indices.
Pass 3 also runs the universal baseline check: a verification step that confirms every commercial plumbing scope has the expected line items present (fixtures, rough-in, gas, water heater, grease interceptor if foodservice, backflow assembly if commercial water service). If any baseline category is missing entirely, the post-processor adds an "investigate" annotation.
Try the multi-pass pipeline on your next commercial plumbing bid
14-day free trial. 14-minute end-to-end on a 25-sheet plumbing set. 30-day money-back guarantee.
Get StartedScope filter — the sub-bid unlock
Scope filter mode tells the pipeline to restrict output. The user picks "plumbing only" at estimate creation time. Pass 2 only runs takeoff against P-series sheets (plus architectural for room context). Pass 3 only applies costs to plumbing line items. The output reads cleanly — no structural, no electrical, no HVAC, no finishes. Zero manual cleanup.
| Without scope filter | With scope filter |
|---|---|
| Output: every line item across all trades | Output: plumbing only |
| You manually delete non-plumbing lines | Clean output ready to send |
| Risk of leaving in non-plumbing scope | No bleed across trades |
| 15 to 30 minutes of manual cleanup per bid | Zero manual cleanup |
How large PDFs get handled
- Anthropic Files API: PDFs upload to the Files API (up to 500 MB), which gives the pipeline a stable file ID it passes to each pass as a reference. Sidesteps the 32 MB request-body cap.
- PDF page-split fallback: for PDFs over 500 MB or that include high-resolution scans, the pipeline runs a pre-step that splits the PDF page-by-page using pdf-lib.
- Streaming API for long runs: Pass 3 on complex commercial scope with Opus model can run 8 to 12 minutes. The streaming API keeps the connection alive past the Vercel 300-second serverless cap.
- 1M context beta: the Pass 3 model call uses Anthropic's 1M context beta to fit the full sheet index + Pass 2 takeoff output + lookup_unit_cost tool definitions + plumbing unit-cost lookup table in a single context.
Senior review — the judgment overlay
The senior-review step is not optional on commercial plumbing sub-bids. AI multi-pass produces 40 to 70 line items at acceptable accuracy on clean commercial plans; the senior estimator catches the 5 to 10 items the AI either missed, under-specified, or sized incorrectly relative to DFU + water + gas calcs. The review takes 20 to 45 minutes and follows a consistent checklist:
- DFU + water sizing validation: does the AI-output supply + DWV pipe sizing match the parallel-run DFU + WSFU calculation? Drain main size correct per IPC 710.1?
- Gas service capacity check: confirm existing gas service supports new connected BTU/hr load. Restaurant TI is the most common case of needed service upgrade.
- Missing scope check: is grease interceptor included? Booster heater? Backflow RPZ? Pressure-reducing valve? Indirect waste fittings?
- Code compliance: does fixture rough-in meet current IPC/UPC code year? Does ADA compliance apply on customer-facing fixtures?
- Long-lead items: is each specialty piece (custom acid waste system, stainless fixtures) flagged with current lead time?
- Customer-facing polish: line items grouped by scope group? Long-lead items annotated? Exclusions stated clearly?
Frequently asked questions
How long does the AI portion of the workflow take?+
Pass 1 runs in 60 to 120 seconds and is free. Pass 2 runs in 3 to 6 minutes. Pass 3 runs in 5 to 10 minutes. End-to-end AI runtime on a 25-sheet commercial plumbing set: 10 to 18 minutes. Add 20 to 45 minutes for senior review. DFU + water + gas sizing runs in parallel before AI takeoff and takes 30 to 120 minutes depending on commercial complexity.
Why does DFU + water + gas sizing stay outside the AI workflow?+
DFU sizing requires summing fixture units by branch + stack and looking up minimum pipe sizes in IPC Table 710.1 / UPC Table 703.1. Water sizing per IPC 604 / UPC 610. Gas piping per IFGC 402.4 / NFPA 54 6.2 pressure-drop. All three are deterministic, code-table-driven calculations where AI hallucination risk is high. The reliable workflow keeps these in dedicated plumbing software (FastPIPE, Trimble PipeDesigner) or manual code-table reference.
What is the compute_area tool?+
A function the AI calls during Pass 2 to extract actual linear measurements from sheet bounding regions. Uses the sheet scale annotation and pixel-to-region math to return real distances. More accurate than visual estimation.
What is the lookup_unit_cost tool?+
A function the AI calls during Pass 3 to fetch the calibrated unit cost for a line item. Returns a national-average cost from the BuildCrux plumbing unit-cost lookup table, updated quarterly against copper, PEX, cast iron, gas pipe, and plumber wage indices.
Can I override the default unit-cost lookup table with my own numbers?+
Yes. Account-level unit-cost overrides let you replace any default with your calibrated value. Common pattern: override the fixture install cost per type, the LF cost of rough-in by material, the water heater install cost, and your grease interceptor install cost with your subs' actual quoted rates.
What happens if a sheet is unreadable (scanned hardcopy, low resolution)?+
Pass 1 tags low-quality sheets and propagates a warning to Pass 2 and Pass 3. The output flags the affected line items as "low confidence" so the senior reviewer knows where to double-check. The pipeline does not silently produce bad output.
The bottom line
AI plumbing estimating is not a single model call against a PDF. It is a multi-pass pipeline that decomposes the work into discrete tasks each pass does well — sheet identification, quantity takeoff with computed measurements, unit-cost application via a calibrated lookup table — plus a scope filter that handles the sub-bid case cleanly. Critically, the pipeline keeps DFU + water + gas sizing in dedicated plumbing software where they belong, integrates the senior estimator as judgment overlay, and produces a polished commercial sub-bid in under 2.5 hours that lands inside the same accuracy band as 10 hours of manual takeoff.
See a real $138K commercial plumbing sub-bid the pipeline produced
Run the pipeline on your next commercial plumbing set
14-day free trial. Scope filter for plumbing sub-bids. 30-day money-back guarantee.
Get Started