All case studies
SoftwareConstruction & EngineeringApril 5, 2026

A Subcontractor Was Spending 4 Hours on Every Proposal. Now It Takes 30 Minutes.

Result

84% reduction in proposal time, 3x proposal volume

A Subcontractor Was Spending 4 Hours on Every Proposal. Now It Takes 30 Minutes.

A subcontractor's estimators were spending 3-4 hours on every proposal — pulling scope from past projects, formatting pricing, and writing boilerplate. An AI agent collapsed that to under 30 minutes.

A specialty contractor operating across industrial and commercial markets was producing 15 to 20 proposals per month. Each one took an estimator 3 to 4 hours to complete — not because the work was technically complex, but because the process was manual from end to end: search past projects for relevant scope language, pull current labor and material rates from spreadsheets, write the executive summary from scratch, format everything to the company's proposal template, and route it through internal review before submission. Business development capacity was effectively capped by how fast estimators could get proposals out the door.

The Reality of Specialty Contractor Estimating

Specialty contractors — electrical, mechanical, process piping, fire suppression, instrumentation — operate in a competitive tier where relationships with general contractors and owners drive a significant share of incoming work. When a GC issues an RFP to a short list of trusted subs, the window is often 48 to 72 hours. Miss that window or come in late with a document that looks rushed, and you're not just losing that job — you're weakening a relationship that took years to build.

The estimating team at this firm was competent and experienced. The bottleneck wasn't skill — it was retrieval and formatting. A significant portion of every proposal was structurally identical to previous proposals for similar scope: the same service descriptions, the same safety and qualification language, the same indemnification and bonding structure, the same pricing format with minor adjustments for project-specific variables. Every estimator knew this. Every estimator also knew that if they reused language from the wrong past project — one with a different scope tier, or a different safety classification, or a client with different contract requirements — they'd create risk they didn't intend to accept.

So they wrote it fresh. Every time. Because starting from scratch felt safer than trusting that you'd found the right precedent to copy from.

What Speed Cost Them

The firm tracked win rate against response time and found a measurable correlation: proposals delivered within 48 hours of RFP closed at a 34% rate. Proposals that took longer than 72 hours closed at 19%. Speed was costing them contracts — not because their pricing was off, but because GCs on a tight schedule route to whoever responds first with a complete, credible document.

The other constraint was scale. The team had identified 30 to 35 percent more qualified opportunities than they could realistically pursue given current throughput. These weren't marginal pursuits — they were projects the estimating team was confident they could win if they could get a proposal in front of the client. Opportunities were being left on the table not because the firm couldn't do the work, but because no one had time to write the proposal.

There was also an internal cost that doesn't show up in a win rate spreadsheet: estimator morale. Senior estimators at this firm were spending a quarter of their week copying, formatting, and reformatting documents. That's not why experienced people take estimating roles. The administrative load was a retention problem in the making.

What We Built

We built an AI agent with structured, read-only access to three internal resources: a proposal archive covering roughly four years of awarded and submitted work (approximately 340 documents), a pricing database updated weekly from their ERP, and an approved content library containing scope descriptions, safety and qualification statements, bonding and insurance language, and standard executive summary blocks.

The agent operates as a proposal drafting assistant. The estimator provides the RFP scope summary, the project type, and project-specific variables — client name, site location, project timeline, any known scope constraints or exclusions. The agent retrieves the most relevant past proposals for similar scope, pulls current pricing for the applicable service lines, assembles the scope narrative from approved content adapted to the specific project context, and produces a complete first-draft proposal formatted to the firm's standard template.

The draft is reviewed and edited by the estimator — typically a 20 to 30 minute process — before submission. The agent doesn't submit anything and doesn't make pricing decisions. It produces a structured first draft accurate enough to finalize quickly. The human review step is preserved as a deliberate design choice, not a limitation.

We also built a feedback loop into the system. When estimators substantially rewrite a section, they tag the revision with a reason code. Those tags feed back into the retrieval model over time, improving the relevance of future retrievals for similar project types. Projects with the most revision tags are also flagged as candidates for new approved content — a signal that the current library doesn't have adequate coverage for that scope category.

Technical Implementation

The retrieval layer uses a vector index over the historical proposal archive, chunked at the section level rather than the document level. This matters: retrieving an entire proposal for a $4M instrumentation retrofit isn't useful if what you need is the safety qualification language from that project. Section-level chunking lets the agent retrieve the right piece of the right document without pulling the rest.

Pricing is fetched live from ERP at draft time rather than indexed alongside the documents. This was a firm requirement from the finance and legal teams: under no circumstances should the agent use historical pricing. Labor rates change. Material pricing fluctuates. A draft that locks in last year's subcontractor rates creates liability. The live ERP connection eliminates that risk entirely — every draft uses current pricing at the moment it's generated.

The approved content library is structured as a tagged template store, not a free-form document collection. Each block is categorized by content type (scope description, qualification statement, safety language, legal boilerplate), project type applicability, and client tier. The agent selects blocks based on the project type and any client-specific requirements flagged in the RFP summary. It can adapt phrasing and sentence structure to fit the surrounding narrative, but it cannot introduce pricing, scope language, or legal commitments outside of what's in the approved library.

The LLM layer handles synthesis — taking the retrieved scope components, adapting language to the specific project context, and producing coherent narrative rather than assembled fragments. The output reads like a proposal, not a patchwork of excerpts.

Proposals are written to a shared workspace where estimators review, edit with tracked changes, and export to the submission template. The review interface shows the agent's source citations inline — which past proposal a scope section was derived from, which content library block was used for each boilerplate section. Estimators can inspect the sources directly from the review interface.

The constraint to approved language and live pricing was a non-negotiable from the client's legal and finance teams and was built into the architecture from the first design review — not retrofitted after the fact.

What Resistance We Encountered

The estimating team was skeptical at the start, which was the right reaction. They'd seen vendor demos of tools that produced confident-sounding nonsense. Their specific concerns were concrete: that the agent would pull scope language from the wrong project type, that pricing would lag reality, and that the review step would get treated as a rubber stamp rather than a real check.

We addressed the first concern with the section-level retrieval and source citations — estimators could see exactly where each section came from and judge whether it was the right precedent. We addressed the pricing concern by connecting directly to ERP and showing them the audit trail. The rubber stamp concern we couldn't engineer away; we could only make the review interface fast and transparent enough that skipping it would feel negligent.

By the end of the first month, the team members who had been most skeptical were the heaviest users. The ones who trusted it least were also the ones who used the source citation view most frequently — which meant they were actually verifying the output rather than accepting it blindly. That's exactly the behavior the system was designed to encourage.

Results

The team went from averaging 3.5 hours per proposal to averaging 28 minutes. In the first three months post-deployment, they produced 61 proposals against a pre-deployment baseline of 18 over the same period — a 3.4x increase in volume without adding headcount.

  • Average proposal time: 3.5 hrs to 28 min (84% reduction)
  • Monthly proposal volume: 18 baseline to 61 in first quarter post-deployment
  • Win rate on expedited proposals (under 48 hrs): maintained at 33% vs 34% pre-deployment baseline
  • Opportunities pursued vs. identified: up from ~65% to ~95%
  • Estimator hours redirected to pursuit strategy and scope review: ~14 hrs/week recovered across the team

The win rate on expedited proposals held steady at 33% — essentially unchanged from baseline. This is important: it confirms that the agent-assisted drafts are not producing lower-quality proposals. The increase in volume didn't dilute quality.

The estimating team's feedback after 90 days was consistent: the agent gets the structure and scope language right most of the time, pricing is always accurate, and the work that remains — calibrating tone for a specific client relationship, making judgment calls on scope inclusions, reviewing risk language — is the part that actually requires their experience. The work they lost was the part they didn't want.

What Made It Work

The quality of the historical archive was the foundation. Four years of past proposals, consistently formatted and categorized by project type and service line, gave the retrieval system enough signal to surface genuinely relevant precedents rather than loose semantic matches. In the first few weeks, the team identified roughly 20 project types where the archive coverage was thin — niche scope categories where the agent consistently produced weak first drafts. For those types, the right answer was still to write from scratch. That's not a system failure; it's the system correctly reporting its own confidence limits.

The pricing integration was equally critical. An agent that produces accurate scope language but references stale labor rates creates a different problem than the one it's supposed to solve. Connecting directly to ERP wasn't technically complex — it was a design decision made early that prevented a class of errors entirely.

The design principle throughout was minimum viable automation: automate the retrieval and assembly, preserve the judgment. The estimators who use it most heavily are the ones who understand exactly what the agent is doing — and trust it precisely because they understand what it doesn't do.

Six Months Out

The system has been in production for six months. The feedback loop has improved retrieval relevance measurably — early retrievals for mechanical scope projects were averaging a 71% estimator approval rate on the first draft; that number is now 84% for the same scope categories as the index has been refined. The approved content library has grown from the original 180 blocks to 240, driven primarily by the revision tag feedback mechanism identifying coverage gaps.

The firm is evaluating whether to extend the system to their subcontractor bid solicitation process — where the same pattern applies in reverse: they receive bids from subs, pull scope against their own project requirements, and produce a normalized comparison. The retrieval architecture is already suited for it.

Ready to see results like these?

Tell us what you're working on. We'll scope it and tell you how we'd approach it.

Start a project