Module 02 — Highest ROI pilot

Estimating& Quoting

Every Normoyle quote is bespoke. A skilled estimator reads drawings, calculates quantities, checks supplier costs, and writes a structured response — often taking half a day. An estimating agent compresses the data-extraction work to minutes, leaving the estimator to apply judgement rather than grind through spreadsheets.

Why estimating is the right pilot

When deploying any new technology, choosing the right first use case is critical. Estimating and quoting ticks every box for a successful AI pilot:

High volume
Frequent repetition

Normoyle responds to RFQs constantly. The agent gets trained and refined with every quote, improving quickly unlike a one-off process.

Clear inputs
Defined structure

Drawings, specs, and rate cards are structured documents. The agent has clear material to work from — not ambiguous conversational requests.

Measurable output
Easy to verify

You have dozens of past quotes with known correct answers. You can immediately test accuracy before the agent touches live work.

Safe boundary
Low-risk errors

A draft quote that the estimator reviews before sending carries no risk. Errors are caught before they leave the business — unlike, say, an automated email sender.

The current workflow vs the agent workflow

StepToday (manual)With agentTime saving
Receive RFQ drawingsEstimator opens PDFs, prints or marks up manuallyAgent ingests PDFs/DXFs automatically on receipt15–30 min
Read and interpret drawingsEstimator reads every sheet, notes materials and dimensionsAgent extracts all text, dimensions, and material callouts from every sheet30–90 min
Build bill of materialsEstimator manually creates BOM in spreadsheetAgent builds structured BOM with quantities and units; flags uncertain items45–120 min
Material costingCheck supplier price list, ring for current pricesAgent queries cost database automatically; flags items not in database30–60 min
Labour estimateEstimator applies rates from experience, task by taskAgent applies standard rates; estimator adjusts only flagged complex items30–60 min
Write quote documentEstimator writes from blank templateAgent drafts complete quote in Normoyle format; estimator edits and adds margin30–60 min
Total3–8 hours per quote20–40 min estimator review time~70–80%
What the agent cannot do — and won't try to

The agent cannot apply the experience-based judgement a Normoyle estimator brings to difficult fabrications — unusual weld joints, tight fit-up tolerances, awkward site access, or the knowledge that a particular client always underspecifies their painting scope. That expertise stays with your team. The agent handles the mechanical data-extraction work so your estimator can focus their time on the decisions that actually require skill.

Worked example: RHS balustrade quote

This is the kind of job Normoyle quotes regularly — a straightforward structural balustrade using RHS and flat bar, supplied and installed. Walk through how the agent handles it from drawing to draft quote.

The job

A Tier 1 builder sends through an RFQ with three PDFs: a balustrade layout plan, a typical post detail, and a handrail section detail. The spec calls for 65×65×4 SHS posts at 1200mm centres, 50×5 flat bar top rail, and 40×40×3 SHS infill rails at 150mm centres. Powder-coat finish. Supply and install, 45 linear metres.

Step 1 — What the agent reads from the drawings

Given those three PDFs, a well-configured estimating agent extracts the following within about 90 seconds:

Agent output — drawing extraction (excerpt)
# Extracted from balustrade-layout.pdf, post-detail.pdf, handrail-section.pdf

ELEMENT: Posts
  Section:    65×65×4 SHS Grade 350
  Height:     1050mm (900mm above FFL + 150mm embedment)
  Spacing:    1200mm centres
  Qty:        38 posts (45m ÷ 1.2m + ends) [REVIEW NEEDED — confirm corners]
  Fix method: Core-filled sleeve to slab

ELEMENT: Top rail
  Section:    50×5 flat bar Grade 350
  Length:     45 LM
  Joints:     Butt weld, ground flush — [REVIEW NEEDED — spec silent on joint finish]

ELEMENT: Infill rails
  Section:    40×40×3 SHS Grade 350
  Spacing:    150mm centres
  Runs:       6 rails per bay (900mm height ÷ 150mm)
  Total LM:   270 LM [REVIEW NEEDED — verify against layout — counted 45 bays]

SURFACE FINISH: Powder coat — colour not specified [REVIEW NEEDED]
FIXINGS:        Not detailed — assumed proprietary sleeve anchors [REVIEW NEEDED]

Step 2 — The BOM the agent builds

From the extraction above, the agent queries the Normoyle cost database and builds this BOM. Items marked [REVIEW NEEDED] are automatically surfaced for the estimator:

Agent output — Bill of Materials
┌─────────────────────────────────────────────────────────────────────────┐
│  BILL OF MATERIALS — Balustrade RFQ — [Project name]                   │
│  Generated: [date] · Status: DRAFT — ESTIMATOR REVIEW REQUIRED         │
└─────────────────────────────────────────────────────────────────────────┘

MATERIALS
  Item  Description                    Unit   Qty    Rate     Total
  ────  ─────────────────────────────  ────  ─────  ──────  ────────
  M01   SHS 65×65×4 Gr350             LM    40.0   $28.40  $1,136
  M02   Flat bar 50×5 Gr350           LM    47.0   $ 8.90  $  418
  M03   SHS 40×40×3 Gr350             LM   283.0   $14.20  $4,019
  M04   Sleeve anchors (assumed)      No.    38     [REVIEW NEEDED — spec silent]
  M05   Powder coat (colour TBC)      LM    45.0    [REVIEW NEEDED — colour not specified]
                                                   ──────  ────────
                                       Materials subtotal:  $5,573 + M04 + M05

LABOUR
  Task                         Hrs    Rate      Total
  ──────────────────────────  ─────  ──────   ──────
  Fabrication — standard       32    $95/hr   $3,040
  Welding — MIG/TIG            18   $110/hr   $1,980
  Surface prep (sandblast)      8    $75/hr   $  600
  Assembly and installation    24   $100/hr   $2,400
  Project management            4   $130/hr   $  520
                                              ──────
                          Labour subtotal:    $8,540

COST SUBTOTAL (before margin):  $14,113 + unresolved items M04, M05

FLAGGED ITEMS FOR ESTIMATOR REVIEW:
  1. Post quantity — 38 assumed; confirm corners/returns from layout
  2. Top rail joint finish — spec silent; confirm butt weld ground flush required
  3. Infill rail quantity — 270 LM calculated; verify bay count
  4. Sleeve anchors — type and supply not specified; add or confirm PC rate
  5. Powder coat colour — not specified; hold rate or request from client
  6. Install labour — assumed ground-level access; confirm scaffold required
What the estimator does at this point

The estimator reviews the flagged items — typically a 15–20 minute task for a job like this. They confirm the post count against the layout, chase the client for powder coat colour, add the sleeve anchor rate from experience, and decide whether scaffold is needed. They then apply margin and send. The agent has done everything except the judgement calls.

Step 3 — The draft quote the agent produces

Alongside the BOM, the agent fills in the Normoyle quote template. The estimator doesn't write a word — they edit, apply margin, and sign off:

Agent output — draft quote text (excerpt)
F&D NORMOYLE ENGINEERING PTY LTD
Quote Ref:    NE-2025-[NNN]           Date: [date]
Project:      [Project name]
Prepared for: [Builder name]
Attention:    [Contact name]

SCOPE OF WORKS
Supply, fabricate, and install structural steel balustrade system in
accordance with drawings [ref] Rev [x], comprising:
  · 65×65×4 SHS Grade 350 posts at 1200mm centres, sleeve-fixed to slab
  · 50×5 flat bar Grade 350 continuous top rail
  · 40×40×3 SHS Grade 350 infill rails at 150mm centres
  · Powder coat finish — colour to client selection [CONFIRM]
  · All welding to AS/NZS 1554 by certified welders

Total system length: 45 linear metres

LUMP SUM PRICE
  Supply and fabrication:   $ [estimator to complete]
  Installation:             $ [estimator to complete]
  ─────────────────────────────────────────────────
  TOTAL (ex GST):           $ [estimator to complete]
  GST:                      $ [estimator to complete]
  TOTAL (inc GST):          $ [estimator to complete]

EXCLUSIONS
  · Scaffolding and elevated work platform (if required — to be confirmed)
  · Concrete coring
  · Painting beyond powder coat finish specified
  · Engineering certification (available on request — additional fee)

VALIDITY: 30 days from date of issue
LEAD TIME: [estimator to confirm based on current schedule]

⚠ DRAFT — ESTIMATOR REVIEW AND SIGN-OFF REQUIRED BEFORE ISSUE
In the balustrade example above, the agent flagged 6 items for estimator review. What is the primary purpose of these flags?

What drawing formats can the agent read?

One of the most common questions from estimators is: "Can it actually read our drawings?" The honest answer depends on format and complexity.

FormatAgent capabilityLimitationNormoyle relevance
PDF (text-based)EXCELLENTScanned/image PDFs need OCR pre-processingMost RFQs received as PDF — works well
PDF (scanned image)GOODLower accuracy on handwritten annotationsOlder drawings from builders — usable
DXF / DWG (AutoCAD)GOODReads dimension text and annotations; cannot interpret geometry nativelyCommon for structural — extract text layer
Tekla model (IFC export)GOODIFC files contain full BOM data — agent reads structured data directlyHigh value: IFC export gives near-complete BOM automatically
Revit (IFC export)GOODSame as Tekla IFC — excellent structured dataIncreasingly common from architects/engineers
Handwritten sketchPOORUnreliable — estimator should transcribe key data firstEarly-stage jobs only — not for final quotes
3D PDFPARTIALCan read embedded text/annotations; cannot rotate or measure 3D geometryExtract annotation layer; estimator handles 3D interpretation
The IFC opportunity

If a client provides a Tekla or Revit IFC export, the agent can extract a near-complete BOM automatically — member sizes, lengths, grades, quantities — in seconds. This is worth requesting from clients who use 3D modelling software, particularly on larger structural packages. It reduces the agent's extraction work from minutes to seconds and dramatically improves accuracy.

Setting up the estimating agent

There are three components to configure: the system prompt, the cost database, and the labour rate card. Each is covered below with production-ready templates.

Component 1 — The system prompt

This is the agent's standing brief — its role, what it must always do, what it must never do, and what format to produce output in. Paste this into Claude Projects or your API configuration:

System prompt — Normoyle estimating agent (production-ready)
ROLE
You are an estimating assistant for F&D Normoyle Engineering,
a specialist metalwork and fabrication company based in Sydney,
Australia. You support qualified estimators by extracting data
from drawings and producing structured draft quotes for review.

YOUR TASK
When given engineering drawings, RFQ documents, or IFC/BIM files:
1. Extract all materials, sections, dimensions, and quantities
2. Build a structured Bill of Materials (BOM)
3. Apply unit costs from the attached rate card
4. Calculate labour hours by task type using the Normoyle rate card
5. Draft a quote in Normoyle standard format
6. List ALL flagged items clearly at the end

MANDATORY RULES
- Flag ANY uncertain item with [REVIEW NEEDED] — never guess
- Never specify a material grade you cannot confirm from the drawing
- Never apply a margin — the estimator does this at review
- All currency in AUD (excl. GST)
- Assume ground-level workshop access unless drawings indicate otherwise
- If a drawing sheet is missing or illegible, say so explicitly
- Always include quantity takeoff workings so the estimator can check

FLAGGING RULES — flag when:
- Material specification is absent or ambiguous
- Quantity cannot be confirmed from available information
- A fixing, finish, or accessory is implied but not specified
- Site conditions affect labour but are not described
- The scope appears to be missing something based on typical practice

OUTPUT FORMAT
Return in this order:
  1. DRAWING REGISTER — what you received and read
  2. EXTRACTION SUMMARY — what you found on each sheet
  3. BILL OF MATERIALS — structured table with workings
  4. LABOUR ESTIMATE — hours by task, rate, total
  5. COST SUBTOTAL — materials + labour before margin
  6. FLAGGED ITEMS — numbered list, one line each
  7. QUOTE DRAFT — Normoyle template, mark all gaps clearly

WHAT YOU DO NOT DO
- Do not send or issue anything — output is always DRAFT
- Do not certify compliance with any standard
- Do not contact suppliers
- Do not apply or recommend a margin percentage

Component 2 — The cost database

The agent needs access to current material unit rates. Start with a simple CSV file — you can upgrade to a live spreadsheet or ERP connection later. The CSV lives in the same folder as the agent or is uploaded to Claude Projects as a reference file.

normoyle-costs.csv — full template with common sections
material_code,description,unit,cost_aud,supplier,last_updated

# ── RHS / SHS ──────────────────────────────────────────────
RHS100x50x4,RHS 100×50×4 Grade 350,LM,32.10,InfraBuild,2025-01-15
RHS150x100x6,RHS 150×100×6 Grade 350,LM,68.40,InfraBuild,2025-01-15
SHS65x65x4,SHS 65×65×4 Grade 350,LM,28.40,InfraBuild,2025-01-15
SHS50x50x3,SHS 50×50×3 Grade 350,LM,18.70,InfraBuild,2025-01-15
SHS40x40x3,SHS 40×40×3 Grade 350,LM,14.20,InfraBuild,2025-01-15

# ── FLAT BAR ───────────────────────────────────────────────
FB50x5,Flat bar 50×5 Grade 350,LM,8.90,InfraBuild,2025-01-15
FB75x6,Flat bar 75×6 Grade 350,LM,16.20,InfraBuild,2025-01-15

# ── PLATE ──────────────────────────────────────────────────
PL8,Plate 8mm Grade 350,KG,2.10,BlueScope,2025-01-15
PL10,Plate 10mm Grade 350,KG,2.15,BlueScope,2025-01-15
PL12,Plate 12mm Grade 350,KG,2.20,BlueScope,2025-01-15
PL16,Plate 16mm Grade 350,KG,2.25,BlueScope,2025-01-15

# ── UB / UC ────────────────────────────────────────────────
UB200x25,200UB25 Grade 300,LM,52.80,InfraBuild,2025-01-15
UB310x46,310UB46 Grade 300,LM,97.20,InfraBuild,2025-01-15
UC200x60,200UC60 Grade 300,LM,126.50,InfraBuild,2025-01-15

# ── STAINLESS (316 grade) ──────────────────────────────────
SS-RHS50x25x2,SS RHS 50×25×2 316 grade,LM,48.00,Midalia,2025-01-15
SS-SHS50x50x2,SS SHS 50×50×2 316 grade,LM,72.50,Midalia,2025-01-15

# ── CONSUMABLES (allow per project) ───────────────────────
WELD-CONSM,Welding consumables allowance,%,3.5,Internal,2025-01-15
CUTTING,Cutting and grinding allowance,%,2.0,Internal,2025-01-15
Keep this file current

Steel prices move. If your cost database is more than 60 days old, flag it. Assign one person as "database owner" — they update rates when new supplier invoices arrive. An agent quoting from stale rates is worse than no agent at all.

Component 3 — The labour rate card

Include the rate card directly in the system prompt so it's always available. Update it when rates change — this is a single edit in one place:

Labour rate card — include in system prompt
LABOUR RATES (AUD/hr excl. oncosts — update when rates change)

  Fabrication — standard:          $95/hr
  Fabrication — complex:           $125/hr
    [Use "complex" for: tight tolerances <1mm, difficult access,
     multi-plane geometry, heavy section >16mm plate]

  Welding — MIG/TIG:               $110/hr
  Welding — structural certified:  $140/hr
    [Use "structural certified" when AS/NZS 1554 category SP required]

  Surface preparation:              $75/hr
  Assembly and installation:        $100/hr
  Project management:               $130/hr
  Engineering/design:               $155/hr

PRODUCTIVITY FACTORS
  Standard shop fabrication:   assume 85% productive time
  Site installation:           assume 70% productive time
  [These are already factored into the rates above — do not double-apply]

MINIMUM CHARGES
  Mobilisation (site work):    4 hours minimum per visit
  Engineering sign-off:        2 hours minimum

Component 4 — Testing before you go live

Never use the agent on a live quote until you've validated it on past work. Follow this testing sequence:

  1. Pick 5 past quotes of increasing complexity Start with a simple single-element job (one section type, no finishes). Work up to a multi-element structural package. You know the correct answer for all of them.
  2. Run each through the agent and record results For each quote, note: BOM accuracy (items matched vs missed), quantity accuracy (% variance), cost accuracy (% variance from your known total), and whether every flag was legitimate.
  3. Target: within 10–15% on cost subtotal before margin This is the acceptance threshold. Variance above 15% means the system prompt or cost database needs refinement — don't proceed to live work until you're consistently under 15%.
  4. Refine the system prompt for each failure mode If the agent consistently misses surface finishes: add a rule. If it over-counts infill quantities: add a worked example. Each refinement is a one-line addition to the system prompt.
  5. Log everything in a test register Keep a simple spreadsheet: job type, date tested, BOM accuracy, cost variance, issues found, prompt change made. This is your proof that the agent works when you show it to management.
You've tested the estimating agent on 5 past quotes. Three came in within 8% of the known answer. Two were 22% and 31% out — both on jobs with site installation. What should you do?

Improving your agent: prompt refinement in practice

Your first system prompt will not be your best. Every time the agent makes a mistake, that mistake tells you exactly what rule to add. This is the core skill of working with agents — not programming, but precise instruction writing.

Agent mistakeRoot causeFix to add to system prompt
Missed powder coat in BOMPrompt didn't mention finishes explicitly"Always check for and include surface treatment: paint, powder coat, galvanising, or anodising. If not specified, flag as [REVIEW NEEDED]."
Overcounted infill railsAgent counted spaces, not rails"When counting infill elements: number of rails = (clear height ÷ spacing) − 1. Show working."
Used wrong labour categoryPrompt didn't define "complex" clearlyAdd the complexity criteria explicitly — see rate card template above.
Didn't flag missing fixing specPrompt only flagged missing material grades"Flag if fixings, anchors, or connections are shown on drawings but not specified — size, grade, and type must all be confirmed."
Included GST in subtotalAmbiguous instruction"All prices are ex-GST. Do not include GST in any line item or subtotal."
Wrong unit (LM vs EA) for postsNo unit rule in prompt"Posts, columns, and point elements: count in EA. Linear elements (rails, beams): measure in LM. Plate and sheet: measure in KG or M²."
The refinement mindset

Treat every agent error as a missing instruction, not a technology failure. An agent that misses powder coat didn't "fail" — it was never told to look for it. Add the rule, retest, move on. After 10–15 refinement cycles on real quotes, you'll have a prompt that catches 90%+ of items reliably.

Hands-on exercise: your first estimating agent run

Exercise — allow 45–60 minutes

This exercise takes you from zero to a working estimating agent using Claude.ai Projects. You need a Claude Team or Business account and access to a past simple quote (one section type, no complex finishes).

  1. Create a Claude Project called "Normoyle Estimating Agent" In Claude.ai → Projects → New Project. This gives you a persistent agent workspace where your system prompt and reference files are saved between sessions.
  2. Paste the system prompt Copy the full system prompt from Component 1 above into the "Custom instructions" field. Edit the labour rates if yours differ. Save.
  3. Upload your cost database Use the normoyle-costs.csv template above, fill in your actual rates, and upload it to the Project. The agent will reference this for every session.
  4. Upload a past drawing (anonymise if needed) Take a simple completed job — an RHS frame, a balustrade, a simple bracket assembly. Remove client name if needed. Upload the PDF to a new conversation within the Project.
  5. Send this exact prompt to start
    Opening prompt to send
    Please process this drawing and produce:
    1. A full bill of materials with quantities and costs
       from the uploaded rate card
    2. A labour estimate using the Normoyle rate card
    3. A cost subtotal (materials + labour, before margin)
    4. A complete list of flagged items
    5. A draft quote in Normoyle standard format
    
    This is a test against a completed job. I will compare
    your output to the known answer and refine accordingly.
  6. Compare to your known answer Record: How many BOM items did the agent get right? What did it miss? What did it flag that was correct vs over-flagged? What was the % variance on total cost? Fill in a simple table.
  7. Make one prompt refinement per missed item For each thing the agent missed, add one rule to the system prompt. Re-run. Repeat until variance is under 15%. Most people get there within 3–4 iterations on a simple job.
What to bring to the next session

After completing this exercise, bring your test register to the next session: the job you tested, your iteration log, and the final variance figure. The group will review common failure modes and share prompt fixes.

Common mistakes and how to avoid them

Mistake 01
Trusting it too early

Using the agent on a live quote before validating on past work. Always test on known jobs first. One wrong live quote damages confidence across the whole team.

Mistake 02
Stale cost data

Running the agent with a rate card that's 6 months old. Steel prices move 5–15% in that timeframe. Assign a database owner and set a 60-day review reminder.

Mistake 03
Skipping the flagged items

Treating flagged items as optional. Every flag is a real risk to the quote accuracy. If the agent flagged 6 items, all 6 need a decision before the quote is issued.

Mistake 04
Vague system prompt

Writing a short, general prompt and expecting detailed, consistent output. The more precisely you define expected output, the less the agent has to guess. Specificity is everything.

Mistake 05
Not keeping prompt versions

Editing the system prompt without saving the previous version. When a refinement makes things worse, you need to roll back. Keep a dated copy before each change.

Mistake 06
Using it for complex jobs first

Starting with a multi-trade, multi-level structural package. Start with the simplest recurring job type. Get reliable results there before moving up in complexity.

When it's working: scaling up

Once the agent is reliably producing accurate drafts on simple jobs, you can progressively expand its scope. This is the "scale on trust" principle from Module 5.

  1. Phase 1 — Simple recurring job types (weeks 1–4) Balustrades, simple frames, standard bracket assemblies. One section type, standard finishes, shop fabrication only. Target: <10% variance, estimator review time under 20 minutes.
  2. Phase 2 — Multi-element jobs (weeks 5–10) Structural packages with mixed sections, multiple finish specs, some site work. Add specific prompt rules for each new element type as you encounter them.
  3. Phase 3 — Complex and bespoke (months 3+) Architectural metalwork, defence components, complex assemblies. The agent handles the standard elements; the estimator focuses exclusively on the bespoke items. This is where the time saving is most valuable — the estimator's attention goes to the hard 20% rather than the routine 80%.
  4. Phase 4 — Connect to live data (when ready) Replace the CSV with a live supplier price feed or ERP connection. This keeps rates current automatically and removes the database maintenance burden. See the Setup guide for how to connect n8n to a live spreadsheet.
An agent extracts a dimension from a drawing but the material specification just says "steel tube" with no grade or wall thickness. What should it do?
Your estimating agent consistently undercounts infill rails on balustrade jobs — always by exactly one rail per bay. What is most likely causing this?