Quote History to AI Estimator

    A build guide for any service business. No code required. Claude Cowork (or Code) does the heavy lifting.

    Turn Your Quote History into
    an AI Estimator

    Your pricing logic is real IP. It is sitting in old quotes and in one person's head. This guide shows you how to pull it out into a system anyone on your team can use, built in Claude Cowork (or Claude Code). Six steps. Eight copy-and-paste prompts. Worked through with a software agency and an electrical business.

    01

    Your old quotes

    Years of pricing, frozen in spreadsheets

    02

    A knowledge base

    One clean page per job type

    03

    An estimator

    A grounded range in minutes

    Orient 01

    What You'll End Up With

    A tool that turns a plain-English job brief into a grounded cost range in minutes. Built from work you've already done. An estimate, not a quote.

    You describe a job in plain English. The estimator reads a structured record of your own history and returns a priced range in the time it takes to read a brief. Not because it is clever. Because it is reading your work, not guessing.

    What it gives you

    The job type it maps to, or how to split a combined job into known parts

    A complexity tier: simple, medium, or complex, and why

    Labour hours by role

    A materials estimate

    Your internal cost, using your real cost rates

    A client price at your standard margin, plus a cheaper and a fuller option

    A confidence level, and what is driving any uncertainty

    What it is not

    It is not your formal quote. That comes after full scoping.

    It does not invent numbers. Every figure traces back to a past job.

    It does not replace judgement. It hands you a grounded starting point.

    Estimate vs quote: get this clear first

    Estimate

    A fast range before the job is fully scoped. For the first call, when the client asks "roughly, what are we looking at?" Will not be exact. Not meant to be.

    Quote

    The formal price after full scoping. Line by line. Signed off. This guide builds the estimator, not the quoting tool. On purpose.

    Orient 02

    Will This Work For You?

    Three honest prerequisites. Plus the three-layer architecture that keeps the whole thing fast and reliable.

    Be honest about three things first

    Enough data

    Your common job types each need to show up a few times. As a floor, 20 to 30 past jobs across your main categories. Three or more comparable jobs for a type means you can estimate that type with confidence.

    Repeatable work

    This works when similar jobs recur. If every project is genuinely one of a kind, there is no pattern to compile. Most service businesses repeat more than they think.

    Real cost visibility

    You need to know what jobs cost you to deliver, not just what you charged. If you do not track internal cost, start there first. The estimator is only as honest as your cost data.

    The three-layer architecture

    The trick most people get wrong is pointing AI at a folder of old quotes and asking it to estimate every time. Slow, costly, and inconsistent. Instead, give each layer one job. Compile once. Query the summary. Keep it current.

    Layer 1Raw sources

    Your historical quotes, exactly as they were. Never edited. Frozen records the AI reads but never changes.

    Maintained by: Nobody. They stay frozen.

    Layer 2Knowledge base

    A compiled, structured summary. One page per job type, with hours, materials, and tiers. The estimator reads this, not the raw files.

    Maintained by: AI, kept current as new jobs land.

    Layer 3The skill

    The estimator itself. A small skill that reads the knowledge base on demand and prices a new job. Stays lean.

    Maintained by: You, lightly. It just reads.

    Compile once, keep current. You do the synthesis a single time, into a clean knowledge base. Then you query that. Every finished job gets fed back in, so the base sharpens with use.

    The Method

    The Six Steps

    The whole build at a glance. Define, define, extract, clean, compile, ship. The order matters.

    Six steps. The order matters. Skipping the cleanup step is the most common way to end up with an estimator that is confidently wrong. First comes a quick setup: , where you choose Claude Cowork or Code, pull everything into one folder, and let Claude plan the build. Then the six steps, each with the exact prompt to run.

    Tap any step to jump to it. Steps 1 and 2 share a section, as do 3 and 4.

    Enjoying the guide?

    Enter your details to unlock the remaining insights. We'll also send you the complete guide as a reference.

    No spam. Unsubscribe anytime.

    Step Zero

    Set Up and Plan the Build

    Do it in Claude Cowork (or Claude Code). One folder, pull every source in, plan before building, and let Claude ask you questions to fill the gaps.

    Before step 1, set yourself up. The whole build runs inside Claude Cowork or Claude Code. You bring the business knowledge. Claude does the file work, the extraction, and the writing. Get the setup right and the six steps almost run themselves.

    Pick your tool

    Claude CoworkEasiest. Start here.

    A chat-style workspace. No terminal, no setup. Connect Google Drive and your other tools, point it at a folder, and talk to it in plain English. Right for most business owners.

    Claude CodeMore control

    Runs in a terminal on your computer. Same model, more power, a real plan mode. Right if you or someone on your team is comfortable with a command line.

    Step zero: get set up

    Make one folder

    Create a single project folder. This is the home for the whole build. Everything goes here.

    Pull your sources in

    Get every quote into that folder first. If they live in Google Drive, connect Drive and have Claude copy them across. Same for email attachments, accounting exports, even photos of job sheets.

    Start in plan mode

    Do not say 'build it'. Ask Claude to plan first. Claude Code has a dedicated plan mode. In Cowork, just tell it to propose a plan before doing the work. You approve, then it builds.

    Answer its questions

    Claude will ask you to fill gaps: your rates, which jobs to drop, your job-type names. Answer them. Every answer sharpens the plan and keeps the numbers honest.

    The kickoff prompt

    Paste this first, into a fresh folder. It does all four things at once: gathers your files, pulls from Google Drive, makes a plan before building, and asks you questions to fill the gaps. Approve the plan, then let it work.

    Prompt 0Kickoff: gather, plan, ask
    kickoff.md
    I want to build an AI estimator from my historical quotes, using this folder as the project.
    
    Before you build anything, make a plan and check it with me. Do not start until I approve it.
    
    Step 1: Gather everything into this folder.
    - My past quotes and job records are in [Google Drive / a folder at PATH / exports from my accounting or job software].
    - Pull copies of all of them into this folder so we have one source of truth. Do not change the originals.
    - If you can reach my Google Drive, search it for anything that looks like a quote, invoice, or job sheet from [DATE RANGE] and copy those in too.
    
    Step 2: Plan the build.
    - Lay out how you'll work through the six steps: define job types, define labour and materials costs, extract the data, clean it, build a knowledge base, then build the estimator skill.
    - Show me the plan as a short checklist before you start.
    
    Step 3: Ask me what you need.
    - Before and during the build, ask me clarifying questions to fill any gaps: my job-type names, my internal cost rates, which old quotes to ignore, my margin.
    - Ask a few at a time and wait for my answers. Never guess at a number that affects pricing.
    
    Once I approve the plan, work through it one step at a time and check in at the end of each step.
    

    Steps 1-2

    Define Your Job Types and Costs

    Sit down before touching data. List the jobs you do and what they cost you internally. This is the spine of everything that follows.

    Do this before you touch any data. Two lists. The job types you sell, and what each one costs you to deliver. Get these right and the rest of the build is mostly mechanical. Get them wrong and no amount of clever prompting saves you.

    Step 1: Your job taxonomy

    Repeating categories, not individual line items. Aim for 10 to 30 that cover roughly 80% of your jobs. Genuine one-offs go in a "custom" bucket, you do not need a category for every odd job.

    Software agency
    Authentication and onboarding
    Admin portal
    Payments and finance
    Notifications
    Search and discovery
    Dashboard and reporting

    + 75 more

    The agency found these repeating across 29 projects. The full build named 81 job-type categories in total.

    Electrical (lighting)
    Downlight install (retrofit)
    LED strip install
    Light fitting replacement
    New lighting circuit
    Power point install
    Switchboard / safety switch upgrade

    A sparky has never heard the word 'epic'. They do not need to. The job names are theirs.

    Step 2: Labour and materials

    Who does each job, and what they cost you per hour internally. This is cost, not your charge-out rate. The margin gets added later, in one place. For trades, also list materials as categories with typical cost ranges, not individual SKUs.

    Agency internal rates
    Solutions architect$100/hr
    Developer (any stack)$40/hr
    Project manager$20/hr
    QA$20/hr
    Electrical internal rates
    Electrician (employed)$55/hr
    Apprentice$30/hr
    Subcontract electrician$100/hr
    Callout / travelflat $80

    Two electrician lines, on purpose. An employee costs you their loaded wage. A subcontractor costs you what you pay them, which is often $100+ an hour because it already includes their margin. The $100+ "hired out" figure is a charge-out price, not a cost. Use real cost here. We come back to this in the pricing step.

    Materials categories (trades only)

    Group materials into a handful of categories, each with a typical cost range. For example: downlights $12 to $45 each, LED strip $8 to $30 per metre, light fittings $30 to $200, cable and consumables $20 to $150 per job, switchboard components $40 to $300. You are after a sensible range per category, not a live price list.

    Steps 3-4

    Extract and Clean Your History

    Pull past jobs out of wherever they live. Strip the junk. What's left is your usable dataset. Three prompts do most of the work.

    Your past jobs live somewhere already. Accounting software, a job app like ServiceM8, Tradify, or simPRO, Excel, Google Drive, even handwritten job sheets. If you ran the kickoff prompt in Step Zero, they are already sitting in your project folder. Point the prompts below at that folder. The agency in our example pulled 37 quote spreadsheets out of Drive. After cleanup, 29 were usable. That is a normal hit rate. Expect to throw some away.

    Step 3: Extract your history

    Two prompts. The first finds the files. The second pulls each one into a clean, consistent shape. Run the second once per file, or point it at a folder and let it work through the batch.

    Prompt 1Find your historical quotes
    find-quotes.md
    I want to find all of my historical quote files. They're in [Google Drive / a folder on my computer at PATH / my accounting software].
    
    Can you list all files that look like quotes or invoices from [DATE RANGE]? I'm looking for anything that shows what I quoted for a job, the labour involved, and the materials or costs. List them with file names and dates.
    
    Prompt 2Extract one quote into a standard format
    extract-quote.md
    I have a quote file at [PATH / here is the content].
    
    Extract the following from it and give it to me as structured data:
    - Job type (what kind of work was this?)
    - Date of the quote
    - Labour: who did the work and how many hours for each person/role
    - Materials: what materials were used and what did they cost
    - Total cost to deliver (internal cost if known, or total charged if not)
    - What the client was charged
    - Any notes on unusual conditions or scope
    
    If any of these fields are missing, note them as unknown rather than guessing.
    

    Step 4: Clean it

    The cleanup is what makes the estimator trustworthy. Strip incomplete records, true one-offs, mates-rates jobs, and anything from a pricing era that no longer applies. What survives is your usable dataset.

    Prompt 3QC a batch of extracted quotes
    qc-quotes.md
    Here are [N] extracted quote records. I want to QC them before building my estimator.
    
    Remove any that are:
    - Missing labour hours AND materials cost (no useful data)
    - Obvious duplicates of another record
    - Done at a special rate for a non-commercial reason
    - From before [DATE] (pricing is too old to be useful)
    - Clearly one-off jobs that don't fit any of my standard job types
    
    For each one you remove, give me one sentence explaining why. For the ones you keep, give them a quality score 1 to 5 based on how complete the data is.
    

    What the agency removed (real reasons)

    • Blank template with no numbers ever filled in
    • Two near-identical copies of the same quote
    • Draft where the hours columns were all zero
    • A job priced as a favour, not at commercial rates

    Step 5

    Build the Knowledge Base

    One page per job type. Hours by tier, materials range, the triggers that push a job up a tier, and real examples as anchors.

    This is the compile step. One page per job type. Each page holds the hours by tier, the materials range, the triggers that move a job up a tier, and two or three real past jobs as anchors. The estimator reads these pages, never the raw files.

    What one page looks like: complexity tiers

    Agency · Authenticationall roles combined
    Simple8-16 hrs

    Email and password login, one platform, no extras

    Medium35-65 hrs

    Add a social login and a second platform, basic profile fields

    Complex80-150+ hrs

    Multiple login methods, three platforms, multi-step onboarding

    Trade · Downlight retrofitper fitting
    Simple0.3-0.5 hrs each

    Like-for-like swap into an existing hole

    Medium0.75-1.5 hrs each

    New position needs fresh cabling run

    Complex2-4+ hrs each

    No roof access, asbestos, or switchboard work first

    The agency numbers are pulled straight from real quote line items. The trade numbers are illustrative. Yours come from your own data, which is the whole point.

    Build one page per job type

    Run this once per job type, feeding it the records for that type. The "do not invent numbers" line is load-bearing. A wide honest range beats a narrow fake one.

    Prompt 4Build a job type page
    build-job-page.md
    Here are all the historical records for the job type: [JOB TYPE NAME].
    
    Build a knowledge base page for this job type with:
    1. A description of what this job type covers (and what it doesn't)
    2. An hours table broken into Simple / Medium / Complex tiers, with the hour ranges grounded in the actual data
    3. A materials cost range for each tier
    4. A "what pushes this from Simple to Complex" guide, 3 to 5 bullet points based on what you can see in the data
    5. A table of the real historical examples, with hours, cost, and any notable scope notes
    
    Do not invent numbers. If the data only supports a wide range, show the wide range.
    

    Then build a primitives page

    Primitives are the smallest repeating units of work that show up across many job types. A "push notification" for the agency. A "cable run" for the sparky. They let the estimator price a job it has never seen before, by building it up from parts it knows.

    Prompt 5Build the primitives page
    build-primitives.md
    Looking across all the job types in my knowledge base, identify the smallest repeating units of work, the tasks that appear across multiple job types.
    
    For each primitive, give me:
    - What it is (plain description)
    - Labour hours (range)
    - Materials cost (range, or "materials not applicable")
    - Which job types it appears in
    
    These should be the building blocks I can use to estimate a job type I've never done before.
    

    Step 6

    Margin Model and the Estimator

    Set your margin once. Then build the skill that reads the knowledge base and prices a new job end to end.

    Two things left. Decide how you turn cost into price, then point a skill at the knowledge base. The skill is a short Markdown file that tells Claude how to read your pages and price a job. You write it once.

    The margin model

    Keep it simple. Total internal cost (labour plus materials plus overhead) times a multiplier equals the client price. Set three levels and default to the middle one. The agency in our example uses 1.5× to 2.0×, default 1.75×.

    Minimum1.5×

    Competitive bid, trusted repeat client, straightforward scope

    Standard1.75×

    The default for most jobs. Start here.

    Full2.0×

    Novel work, high risk, tight timeline, first-time client

    Cost rate is not charge-out rate

    An electrician is hired out at $100+ an hour. That is the charge-out rate, the price to the client. It already has margin baked in. It is not your cost. Feed your real cost into the estimator, never charge-out, or you double-count margin.

    • Employee: your cost is their loaded hourly rate (wage, super, tools, vehicle), often $45 to $60. The margin you add covers overhead and profit on top.
    • Subcontractor: your cost is what you pay the sub, often $100+, because that already includes their margin. So you mark up less, maybe 1.3 to 1.5×, or you price yourself out of the job.

    Estimate a job

    This is the prompt your team runs day to day. It is also the core of the skill. Paste it once into a SKILL.md file and Claude can run it on command, every time, the same way.

    Prompt 6Estimate a job
    estimate-job.md
    I need to estimate a job. Here's what the client wants:
    
    [JOB DESCRIPTION IN PLAIN LANGUAGE]
    
    Site conditions / anything unusual: [OR "nothing unusual"]
    
    Using the knowledge base, give me:
    1. Which job type this maps to (or how to decompose it if it's a combination)
    2. Complexity tier (Simple / Medium / Complex) and why
    3. Labour hours estimate by role
    4. Materials cost estimate
    5. My internal cost (using my rates: [PASTE RATE TABLE])
    6. Client price at my standard margin of [X]×, and also at [Y]× and [Z]×
    7. Confidence level (High / Medium / Low) and what's driving any uncertainty
    
    State clearly if any part of this has no comparable data in the knowledge base.
    

    What comes back (trade example)

    Brief: "8 downlights in new positions, plus a new lighting circuit off the board. Single-storey, roof access fine."

    Job typesDownlight retrofit ×8 (Medium) + new lighting circuit (Medium)
    LabourElectrician 8 hrs ($440), apprentice 4 hrs ($120)
    MaterialsDownlights $180, cable, breaker and consumables $160 = $340
    Internal cost$900 ($560 labour + $340 materials)

    Client price

    1.5× $1,3501.75× $1,5752.0× $1,800
    ConfidenceHigh. 6+ comparable downlight jobs and 4 lighting-circuit installs in the data.

    Figures illustrative. The structure is the point: type, tier, hours, materials, cost, price at each margin, confidence. Every estimate, same shape.

    Keep It Alive

    Maintain It So It Compounds

    Feed every finished job back in. Update rates in one place. Trust the confidence flag. The system gets sharper with use.

    The build is done. Now keep it honest. Three habits do it: feed finished jobs back in, update rates in one place when prices move, and trust the confidence flag instead of arguing with it.

    Feed every finished job back in

    Run this when a job wraps, with the actuals, not the estimate. This is what makes the system compound. Two minutes a job keeps the whole thing current.

    Prompt 7Ingest a new completed job
    ingest-job.md
    I've just finished a job. Here are the actual details:
    
    Job type: [TYPE]
    Labour used: [ROLE: HOURS], [ROLE: HOURS]
    Materials cost: $[X]
    What I charged: $[X]
    Notes: [anything unusual]
    
    Update the knowledge base page for [JOB TYPE] with this new data point. Recalculate the hour ranges and materials ranges if this job changes them meaningfully. Note the date so the data stays current.
    

    When prices change

    Because the knowledge base separates hours and materials from your cost rates and your margin, a price rise does not mean rebuilding anything. You change the rate card in one place, and every future estimate uses the new numbers. Hours stay. Costs update.

    Trust the confidence flag

    Every estimate says how sure it is. Low confidence is not a failure. It is the system being honest about where your history runs out. That is exactly when a human should look closer.

    High

    Three or more directly comparable past jobs

    Use the range as is

    Medium

    Built from known job types, fewer direct matches

    Use it, note the assumptions

    Low

    Novel work, no real comparable

    Add a buffer and flag it to the client

    Most tools decay. This one improves with use.

    Every job you finish is a new data point. The longer you run it, the more of your business it understands, and the less it depends on any single person to hold the logic.

    YourYourpricingpricinglogiclogictooktookyearsyearstotobuildbuildandandititliveslivesininoneoneperson'sperson'shead.head.ThisThisisishowhowyouyoumovemoveititintointoaasystemsystemthethewholewholebusinessbusinessowns.owns.PickPickyouryourtentenjobjobtypes.types.PullPullyouryouroldoldquotes.quotes.BuildBuildthethefirstfirstpagepagethisthisweek.week.

    The five ideas that make it work

    Estimate, not quote

    A fast range before scoping. The formal quote comes after.

    Three layers

    Raw sources, compiled knowledge base, the skill. Each has one job.

    Compile once

    Synthesise into a wiki, then query that. Do not re-read raw files every time.

    Confidence tiers

    Every estimate states how sure it is. Low means add a buffer and flag it.

    It compounds

    Every job you feed back in makes the next estimate sharper.

    Jump back to a section

    Prefer the short version? Read the overview on the blog.