AI HVAC 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 mechanical scope from a multi-trade plan set. Critically, the workflow keeps Manual J / Manual N load calculations in dedicated ACCA-approved software (Trane Trace, Carrier HAP, Wrightsoft) rather than trying to AI-generate them. This article walks the full workflow on a 30-sheet commercial HVAC sub-bid, end-to-end, with the engineering decisions that make the difference between an AI bid that works and one that does not.
The multi-pass pipeline is the result of 18 months of iteration on mechanical estimating specifically. Earlier versions tried to fold load calculation into the AI workflow. That approach failed because Manual J/N requires envelope U-values, fenestration SHGC, infiltration rates, and internal gains data that is not present on construction drawings — it has to come from energy modeling. The fix was scope discipline: AI does takeoff and unit costs (what it does well), dedicated software does load calculations (what it does well), senior estimator integrates the two (where judgment lives). The result: 16 minutes of AI runtime + 25 to 50 minutes of senior review produces a bid that lands inside the same accuracy band as 12 hours of manual takeoff.
Why multi-pass beats single-pass for HVAC
A 30-sheet commercial HVAC plan set has between 8,000 and 16,000 individual visual elements: equipment schedules, ductwork routing with sizing, hood + makeup-air details, refrigerant piping diagrams, controls riser drawings, dimension callouts, sheet legends, revision markers. A single model call asked to "read the plans and produce a bid" has to do everything at once: identify which sheets matter, extract quantities from each, apply costs, structure the output. The model spreads attention thin. The output reflects this: fewer line items, less specific unit costs, more hallucinated scope, missed long-lead annotations.
Multi-pass changes the math. Each pass has a single job. Pass 1 only identifies sheet types; the model uses full context for that. Pass 2 only does takeoff against the sheets Pass 1 identified; the model uses compute_area to extract real measurements rather than estimating from visual context. Pass 3 only applies costs to the quantities Pass 2 produced; the model uses lookup_unit_cost to pull from a calibrated table rather than guessing from training data. Each pass produces structured intermediate output that the next pass consumes. Errors get caught earlier and accumulate less.
The full pipeline, end to end
End-to-end multi-pass pipeline on a typical commercial HVAC sub-bid. Total: 12-22 minutes AI runtime + 25-50 minutes senior review (plus Manual N which runs in parallel before).
| Step | Job | Time | Tool / output |
|---|---|---|---|
| Manual N (parallel) | Load calculation — heating, cooling, ventilation | 60-180 min | ACCA-approved software (Trane Trace, Carrier HAP) — outside BuildCrux |
| Upload | PDF intake, Anthropic Files API | 15-60 sec | File ID |
| Pass 1 | Identify mechanical + 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 | 4-8 min | Structured quantity list |
| Pass 3 | Unit-cost application with lookup_unit_cost | 6-12 min | 50-80 line-item priced estimate |
| Post-process | Universal baseline checks, missing-trade sweep | 10-30 sec | Final estimate JSON |
| Senior review | Manual N validation, engineering judgment, scope verification | 25-50 min | Polished submission |
Manual N stays outside the AI
ACCA Manual J (residential) and Manual N (commercial) load calculations require inputs that are not on construction drawings: envelope U-values, fenestration solar heat gain coefficient, infiltration rates per air-changes-per-hour, internal gains schedule, occupant density schedule, equipment density, ventilation requirements per ASHRAE 62.1. These come from energy models, ASHRAE design data, or detailed envelope specifications.
AI cannot reliably generate these inputs from drawings alone. The current generation of AI estimating tools that claim to "do load calculations" either: (a) approximate using square-footage rules of thumb that are wrong by 20-40 percent on modern envelope-tightened buildings, or (b) use generic ASHRAE defaults that miss site-specific factors. Neither approach is reliable enough to size commercial equipment.
The reliable workflow is: senior estimator runs Manual N in dedicated software (Trane Trace, Carrier HAP, Wrightsoft Right-N), AI runs takeoff against the drawings + equipment schedule, senior estimator integrates the two and validates that equipment selected in AI takeoff matches Manual N output. This is the production pattern in the 28-bid test panel documented on the AI-vs-manual page.
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: M0.0 is "cover + legend", M1.0 is "demolition plan", M2.0 is "HVAC floor plan", M3.0 is "roof plan + equipment", M4.0 is "equipment schedule", M5.0 is "ductwork details", M6.0 is "controls + sequence", M7.0 is "T24 energy compliance form". Non-drawing sheets — energy compliance forms, T24 acceptance documents, controls narrative submittals — get tagged so they are ignored in Pass 2.
The cached sheet index is the most important Pass 1 output. Pass 2 and Pass 3 receive the index as input so they know which sheets to read for takeoff (mechanical sheets only when scope filter is mechanical) and which to skip (every non-drawing sheet, plus non-mechanical sheets when filtering).
Pass 2 — quantity takeoff
Pass 2 produces the quantified line list. The model reads each mechanical sheet identified by Pass 1 and outputs structured quantities: equipment pieces with model numbers + capacities, ductwork LF by gauge + shape, fittings count, insulation SF by R-value, hood LF + makeup-air CFM, refrigerant line set LF by size, valves and accessories count, controls device count, fire and smoke dampers.
The compute_area tool is the workhorse of Pass 2 for HVAC specifically. When the model needs a linear footage for ductwork or piping, it calls compute_area with the sheet ID and the bounding region. The tool returns actual computed pixels-to-feet measurements derived from the sheet scale annotations. This is more accurate than asking the model to estimate distances from visual context, which is where single-pass approaches consistently underestimate ductwork by 20-30 percent.
- Equipment schedule read directly: model number, capacity (tons or BTU/hr), voltage, phase, refrigerant, lead time captured exactly as listed.
- Ductwork plans measured with compute_area: linear feet by gauge + shape, fitting counts by inspection of intersections.
- Hood + makeup-air sheets cross-referenced: hood LF from kitchen plan, exhaust CFM from equipment schedule, makeup-air CFM from controls sequence.
- Refrigerant piping diagrams: line set LF measured between condensing unit + evaporator, refrigerant charge calculated per line set length.
- Controls riser: device count + sequence of operations parsed for VFD count, BAS controller count, sensor count.
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 with the line description and unit (each, linear foot, lump). The tool returns a calibrated unit cost from the BuildCrux HVAC unit-cost table, which is updated quarterly against copper, sheet metal, equipment escalation indices, refrigerant pricing (R-454B is volatile in 2026), and BLS wage indices for licensed HVAC technicians.
For lines where the lookup table does not have a direct match (unusual equipment, specialty controls, custom AHUs), the model falls back to its training-data estimate and flags the line for senior review. These flagged lines are the priority items in the senior-review step.
Pass 3 also runs the universal baseline check: a verification step that confirms every commercial HVAC scope has the expected line items present (equipment, ductwork, hood + makeup-air if foodservice, refrigerant piping if applicable, controls, commissioning + balancing, T24 acceptance if California). If any baseline category is missing entirely, the post-processor adds an "investigate" annotation rather than silently shipping an incomplete bid.
Try the multi-pass pipeline on your next commercial HVAC bid
14-day free trial. 16-minute end-to-end on a 30-sheet mechanical set. 30-day money-back guarantee.
Get StartedScope filter — the sub-bid unlock
Most HVAC contractors sub-bid to a GC on multi-trade plan sets. The plan set has architectural, structural, plumbing, electrical, and mechanical sheets; the HVAC contractor bids only mechanical scope. Without scope filtering, an AI estimating tool produces a bid for the whole project — every trade, every line item — and the user manually deletes everything that is not mechanical. That is 20 to 40 minutes of cleanup per bid and a real risk of leaving in cross-trade items.
Scope filter mode tells the pipeline to restrict output. The user picks "mechanical only" or "HVAC only" at estimate creation time. Pass 1 still identifies all sheets, but Pass 2 only runs takeoff against M-series sheets (plus architectural for room/area context). Pass 3 only applies costs to mechanical line items. The output reads cleanly — no structural, no plumbing, no electrical, no finishes. Zero manual cleanup.
| Without scope filter | With scope filter |
|---|---|
| Output: every line item across all trades | Output: mechanical only |
| You manually delete non-mechanical lines | Clean output ready to send |
| Risk of leaving in non-mechanical scope | No bleed across trades |
| 15 to 30 minutes of manual cleanup per bid | Zero manual cleanup |
| Mode-selection modal shows full-project cost | Mode-selection modal shows mechanical-only cost |
How large PDFs get handled
A 30 to 80 sheet commercial mechanical plan set is typically 60 to 280 MB. Some are larger when full architectural set is included. The pipeline uses four technical decisions to handle these:
- 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. This sidesteps the 32 MB request-body cap that would otherwise limit estimating to small residential sets.
- PDF page-split fallback: for PDFs over 500 MB or that include high-resolution scans pushing memory limits, the pipeline runs a pre-step that splits the PDF page-by-page using pdf-lib. Each page is uploaded individually and the pipeline reads them in parallel during Pass 2.
- Streaming API for long runs: Pass 3 on complex commercial scope with Opus model can run 8 to 14 minutes. The streaming API keeps the connection alive past the Vercel 300-second serverless cap. Without streaming, the pipeline would silently truncate at 5 minutes.
- 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 + HVAC unit-cost lookup table in a single context. This keeps Pass 3 reasoning consistent across all line items.
Senior review — the judgment overlay
The senior-review step is not optional on commercial HVAC sub-bids. AI multi-pass produces 50 to 80 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 Manual N. The review takes 25 to 50 minutes and follows a consistent checklist:
- Manual N validation: does the AI-selected equipment match the Manual N load output? Cooling tons within +/- 10% of calc? Heating MBH within +/- 10% of calc?
- Missing scope check: is hood + makeup-air included? Fire-alarm interlock? T24 acceptance testing (CA)? Controls programming? Commissioning + balancing?
- Refrigerant compliance: does specified refrigerant match AHJ approval? R-454B requires updated leak detection per ASHRAE 15.2.
- Code compliance: does ventilation meet ASHRAE 62.1? Does economizer threshold match ASHRAE 90.1 or T24 if California? Does demand-controlled ventilation trigger threshold match code?
- Long-lead items: is each piece of equipment flagged with current lead time? RTU 12-week? Chiller 18-week? Custom AHU 22-week?
- Customer-facing polish: line items grouped by scope group? Long-lead items annotated? Exclusions stated clearly? T24 acceptance testing called out separately if California?
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 4 to 8 minutes depending on plan-set size. Pass 3 runs in 6 to 12 minutes depending on model tier (Sonnet faster, Opus more accurate). End-to-end AI runtime on a 30-sheet commercial mechanical set: 12 to 22 minutes. Add 25 to 50 minutes for senior review. Manual N runs in parallel before AI takeoff and takes 90 to 180 minutes depending on commercial complexity.
Why does Manual N stay outside the AI workflow?+
ACCA Manual J/N requires envelope U-values, fenestration SHGC, infiltration rates, and internal gains data that is not present on construction drawings. AI cannot reliably generate these inputs. Tools that claim to "AI-generate load calculations" use square-footage rules of thumb (wrong by 20-40% on modern envelope-tightened buildings) or generic ASHRAE defaults that miss site-specific factors. The reliable workflow keeps Manual N in dedicated ACCA-approved software (Trane Trace, Carrier HAP, Wrightsoft) and lets AI handle takeoff + unit costs only.
What is the compute_area tool?+
A function the AI calls during Pass 2 to extract actual linear measurements from sheet bounding regions. It uses the sheet scale annotation (e.g. "1/8 inch = 1 foot") and pixel-to-region math to return real distances. This is more accurate than asking the model to estimate distances visually, which is where single-pass approaches underestimate ductwork LF by 20 to 30 percent.
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 HVAC unit-cost lookup table, which is updated quarterly against copper, sheet metal, equipment escalation, refrigerant pricing (R-454B volatile in 2026), and HVAC technician wage indices. For lines without a direct table match, the model falls back to training-data estimate and flags the line for senior review.
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 equipment install cost per ton, the LF cost of ductwork by gauge, the hood install cost, and your common diffuser + grille install costs with your subs' actual quoted rates. The AI uses your overrides on every future estimate, so the output matches your historical pricing patterns.
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; it produces output with the uncertainty visible. Always best to request an updated PDF from the architect rather than relying on scanned hardcopy.
The bottom line
AI HVAC 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 Manual J/N load calculations in dedicated ACCA 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 12 hours of manual takeoff. The result is the same quality bid in 3 to 4x less time, on a workflow that scales from 1 commercial bid per day to 3 to 4 without growing headcount.
See a real $198K commercial HVAC sub-bid the pipeline produced
Run the pipeline on your next commercial mechanical set
14-day free trial. Scope filter for HVAC sub-bids. 30-day money-back guarantee.
Get Started