Creating Your First Estimate
This guide walks you through creating a complete estimate from start to finish. By the end, you will have a professional, client-ready proposal you can send as a PDF or share through the customer portal.
Starting a New Estimate
- From your dashboard, click Estimates in the left sidebar.
- Click the green + New Estimate button in the top right corner.
- You will see the new estimate form with several sections to fill in.
The wizard has seven steps, in this order: Project, Contact, Location, Scope, Job Details (tier, foundation, access, and an optional year-built question, all on one tab), Notes (your own notes, plus attaching any notes already saved on the linked project), and Uploads (photos, voice recordings, and any files already saved on the linked project). Scope comes before Uploads, which matters below: any measurement prompt on the Scope step is always something you type — no photo exists yet at that point in the wizard.
Attach a Project or Enter a New Customer
The wizard's first two steps let you connect the estimate to who it is for:
- Project — Search for and attach an existing project. Start typing a project name or address — the search filters as you type — and click it to link the estimate. Linking a project also carries over that project's contact, so an existing customer's info is already attached. If this estimate is not tied to an existing project, skip this step (click Next or Skip) and continue to Contact.
- Contact — If the project you just linked already has a contact on it, the Contact step shows that contact's name, phone, and email in a read-only card labeled "Contact: [name] — from the project" instead of a blank form — there is nothing to type. Click Edit contact details if you need to change anything for this specific estimate; editing here only changes this estimate's own contact info, it never rewrites the contact record or the project itself. If there is no linked project, or the linked project has no contact yet, you get the ordinary form: enter a brand-new customer's name, phone, email, and address. Every field here is optional (a name-only, phone-only, or email-only entry all count as "typed something"), so you can generate an estimate with partial (or no) contact info and fill in the rest later. What you enter is saved directly on the estimate — you do not need a separate "Add Client" step. If this estimate is also linked to a project and that project does not already have a contact attached, ContractorScope AI additionally creates a real contact record and attaches it to that project automatically. This applies whether you attached the project on the Project step above or picked one later on the Uploads step's Add files from project card — either way of linking a project counts, so the customer info you typed here is never silently dropped just because you picked the project from that second location. If the project already has a contact (for example, one carried over by linking it above), no new contact record is created and the info you typed here is not merged into the existing one. If this estimate is not linked to a project at all, ContractorScope AI now also creates a real contact record from what you typed and links it to the estimate, so it shows up in your Contacts list and on that contact's Value tab — not just on the estimate itself. If you retry or resubmit and a contact with the same name and matching email or phone already exists, the estimate links to that existing contact instead of creating a duplicate. In the rare case the contact record itself fails to save, the estimate still saves normally and you will see a notice ("Estimate saved — couldn't add the customer to Contacts") so you know to add the contact by hand. The contact record is created first, so if the estimate save itself then fails, the new contact can still be left behind in Contacts — this is deliberate, not a bug: a retry dedupes onto that same contact via matching name/email/phone instead of creating a duplicate, so nothing is lost by trying again.
If you are re-quoting an existing customer, use the Project step to search for and attach their existing project instead of re-typing their info on the Contact step — this avoids creating a duplicate contact record.
Set the Project Details
Fill in the top section of the estimate:
- Estimate Name — A descriptive name like "Johnson Kitchen Remodel" or "Elm Street Roof Replacement." This is what you and the client will see in lists and emails.
- Job Site Address — Pre-filled from the client's property address. Update it if this job is at a different location.
- Project Type — Select from categories like Roofing, Kitchen Remodel, Bathroom Remodel, Addition, General Repair, and others. Choosing a project type helps the AI suggest relevant line items.
- Estimated Start Date — When you expect work to begin.
- Estimate Validity — How long this quote is good for (defaults to your company setting).
Adding Line Items
Line items are the heart of your estimate. Each line item represents a specific piece of work, material, or cost.
Adding Items Manually
-
Click the + Add Line Item button below the line items table.
-
Fill in the details for each item:
- Description — What the item is (for example, "Remove existing kitchen cabinets" or "Install 30-year architectural shingles").
- Category — Group items by trade or phase: Demolition, Framing, Electrical, Plumbing, Materials, Labor, Equipment, etc.
- Quantity — How many units (square feet, linear feet, each, hours, etc.).
- Unit — The unit of measurement (sq ft, ln ft, each, hour, bundle, etc.).
- Unit Cost — The cost per unit before markup.
- Total — Calculated automatically (Quantity x Unit Cost).
-
Repeat for each line item in the project.
Using AI to Add Line Items
This is where ContractorScope AI really shines. Instead of building every estimate from scratch, let the AI do the heavy lifting.
Full catalog-driven AI estimate generation — where the AI builds a complete, priced scope from your photos and answers using the built-in cost catalog — currently supports bathroom projects only. Kitchen and basement projects are gated off while we finish authoring their catalog content.
This limit applies only to the full catalog-driven generation flow. Manual line items and AI-suggested line items still work for any project type (kitchen, roofing, additions, repairs, and everything else), so you can build any estimate today.
Option 1: AI Project Suggestions
- After selecting a project type (like "Kitchen Remodel"), click the AI Suggest Items button.
- The AI analyzes the project type and generates a comprehensive list of suggested line items, organized by category.
- Review the suggestions and check the boxes next to items you want to include.
- Click Add Selected Items to add them to your estimate.
- Adjust quantities and pricing as needed for this specific job.
Option 2: Upload Job Site Photos
-
Click the Upload Photos button on the estimate.
-
Select one or more photos from your phone or computer.
-
The AI examines the photos and identifies:
- Existing materials and their condition
- Fixtures present in the room
- Suggested repair or replacement items based on what it sees
The AI never measures a dimension from a photo — every measurement always comes from what you type in.
-
Review and add the suggested items to your estimate.
As soon as you select your photos, a Photo tips card may appear above the upload area. It is free, instant feedback — it never blocks you from continuing — with specific suggestions like adding a wider shot of the full room or a second angle. Dismiss it any time; picking a different set of photos brings it back if it still has something useful to say.
Take photos from multiple angles and distances. A wide shot of the full area plus close-ups of specific conditions gives the AI the best information to work with. The estimate it builds reflects what the photos actually show — you do not need to fill out a long form.
If the Estimate Flags an Assumed Dimension
Photos are never used to measure a dimension — a room's depth, a shower's perimeter, and every other measurement always come from what you type in, never from what the AI sees in a photo. What happens when a measurement is missing depends on which of two roles that dimension plays in the estimate:
- A driving room measurement (a room's width, length, or floor area) that was never entered is handled one of two ways. For most driving measurements, the app fills it in with a stated typical value for that kind of job — a ruled default — and the line items that depend on it price and count in the total normally, with a clear notice that asks you to confirm the assumed number or correct it before you send. Only where no typical default has been set up yet for that specific measurement does the older behavior still apply: every line item that depends on it is priced at $0, flagged, and excluded from the estimate's total — so the total is understated, never inflated, while a real number is missing — and the estimate is held from being sent until you either resolve it or explicitly acknowledge sending it as-is.
- An assumed dimension that's just one input inside a single item's pricing formula (for example, a typical countertop area used to size that one fixture) bills normally, at a typical value for that kind of job, and carries an Approve qty | Edit pill so you can spot it and correct it — it is priced and already counted in the total, not withheld. Tap Approve qty if the assumed number is right — its own side of the pill turns green and its text changes to Approved qty, right in place — or tap Edit to jump straight to the quantity field, outlined in red while the value is still unconfirmed, and type the real number. The moment you type a real number, the pill disappears entirely and the red outline clears — a number you typed is your own input, not an assumption, so there is nothing left to flag. Every line like this blocks until you act on it; nothing is ever silently approved for you.
Either way, look above the line items for the "Assumed dimensions (N)" button in the utility toolbar row — tap or click it to open the modal listing every assumed measurement, then find the affected one inside to see which case you're in and to correct it. Nothing about the button's own label tells you which measurement is less certain than another; those specifics live inside the modal once you open it, not as a count on the button itself.
Once the estimate is generated, you may also see a notice on the affected measurement, once you open the modal, pointing out that none of your photos show the entire floor in one frame. This is part of the same Assumed dimensions modal on the generated estimate, not a hint on the Uploads step — the Uploads step's own photo-tips card is free, instant, upload-time feedback about photo quality, and it never claims to know something as specific as a missing floor size, because the estimate that would check it against does not exist yet. It offers two real ways to get an exact floor size in: type it in yourself, or adopt a LiDAR scan. Start the scan from the linked project's own page — the LiDAR scan option is in the same menu as Site Visit Recorder, just below Site Visit Dimensions — then come back to the estimate and click Use scan value to adopt it. A completed LiDAR scan is a genuine physical measurement — once you adopt it (the same explicit confirm step as typing a number), it fills in the real measurement for you. A wider photo, by contrast, only helps the AI read materials, condition, and layout more accurately from what you photograph; it never measures anything, so adding one alone never fills in the floor size for you.
You have two ways to clear an assumed-dimension flag, and the fastest one is always listed first:
- Type in the real number (or, for the floor size specifically, adopt a LiDAR scan). Every assumed dimension is an editable field right there in the notice. Enter the actual measurement — or, if you already ran a LiDAR scan from the linked project's page, click Use scan value to pull in its result — then click Save & recalculate. This takes about ten seconds and clears the flag: a withheld ($0, excluded) line item is added into the total for the first time, while a line item that was already billing at an assumed value simply gets that value replaced with your real number.
- Add another photo (optional context, not a substitute). The notice may also include an Add another photo link describing what additional context would help (for example, "a second photo from a different corner of the room") — this can help our AI read materials, condition, and fixtures more accurately, but no photo, however good, ever sets a measurement for you. Typing the number (or adopting a LiDAR scan) in option 1 is the only way to clear the flag. The link takes you to the photo section on the same estimate you are editing — it never starts a new estimate or discards your work.
The typical value shown in the notice never overwrites your typed number, and nothing is applied until you explicitly confirm it or click Save & recalculate yourself. A withheld ($0) line item stays excluded from the total until you fill in the real number — and until then, the estimate can only be sent by explicitly acknowledging it on the Send Proposal screen, with that line still at $0 and still out of the total — see What happens if you skip one below. An assumed-component line item that is already billing still needs your Approve or Edit before it reads as resolved — the pill (contractor screen only; customers never see this internal disclosure) stays visible with a red-outlined quantity field until you act on it.
You may also see an Approve item | Remove pill on a line the app included by standard practice for this kind of job (for example, a permit fee or a ventilation fan) rather than because you asked for it by name — nothing was measured or guessed here; the whole line's presence is the assumption. Tap Approve item to confirm it applies — the pill turns green in place and reads Approved item — or tap Remove to take the line out; Remove always asks you to confirm first, since it's the one action on this pill you can't undo.
If a Measurement Is Flagged
An assumed dimension is one the app had to fill in because nothing told it the real number. A
flagged measurement is the opposite: it is a number you (or your notes, or your voice
description) actually supplied, and it is well outside the normal range for a bathroom — for
example a floor typed as 20000 square feet instead of 200.
The app never quietly corrects a number you supplied. It keeps the value exactly as entered, shows it back to you in a red Flagged measurements notice on the estimate, and holds the estimate back from being sent until the number is settled. You will see the value as you typed it, which field it came from, and why it was flagged.
Some flagged rows are calculated, not entered. If you gave a shower perimeter and wall height, the app works out the wall and floor areas from them — and if the result comes out implausible, it flags that calculated area. Those rows are shown read-only and point at the measurement they came from, because editing a calculated number directly would just be overwritten the next time it recalculates. Correct the measurement it names, and the calculated value follows.
For a value you supplied yourself, there are two ways forward, depending on which is true:
- It was a typo. Correct the number right in the notice and click Correct & recalculate. This rebuilds the estimate from your corrected measurement and opens the recalculated version, which is not flagged — you do not need to mark anything reviewed. (As with any recalculate, this produces a new version of the estimate rather than editing the flagged one in place.)
- The number is genuinely right. Some jobs really are that large. Click Mark reviewed to confirm you meant it, and the estimate becomes sendable with the value untouched.
Use Mark reviewed only for the second case. It records that you looked at the flagged value and accepted it, so using it to get past a typo puts something in the estimate's history that is not true.
A flagged estimate cannot be sent or turned into a proposal until you either correct the measurement or mark it reviewed. You can still copy it — but the copy carries the same flag, so duplicating an estimate is never a way around the check. This is deliberate: an unnoticed extra zero in a measurement is the difference between a $14,000 quote and a $1.4 million one.
Option 3: Voice or Text Description
- Tap the microphone icon on the estimate to speak, or type a description in the notes field.
- Describe the job naturally: "Replace the vanity and toilet, keep the tub." or "Full shower replacement with new tile floor."
- ContractorScope AI reads your description and builds an estimate that matches your scope — if you named specific fixtures, only those fixtures are priced. If you described a full remodel, the estimate covers the full remodel.
- Review and confirm the generated line items.
Be as specific or as general as you like. A precise description — "replace the vanity and toilet only" — produces a narrow, targeted estimate. A general description — "gut the whole bathroom" — produces a comprehensive one. Either way the estimate matches what you described, not a generic template with everything included regardless of scope.
You can also ask the AI questions by voice: "What is a typical cost for cabinet installation per linear foot?" The AI responds with current pricing data.
Using the "Other" / General Project Type
If your job does not fit neatly into a named category, select Other on the project-type screen. You do not need to choose individual fixtures or fill out a detailed scope form. Instead, describe the work in the Notes step and attach photos — ContractorScope AI reads your description and images to determine what needs to be priced.
How it resolves:
- If your description contains bathroom-domain work (shower replacement, vanity swap, toilet swap, tile, etc.), the AI maps it to the bathroom catalog and generates a priced line-item scope — same as selecting "Bathroom Remodel" directly.
- If your description covers a non-bathroom trade (for example, building a deck, a fence, a roof replacement, or general repairs), ContractorScope AI now drafts a full line-item scope using AI-estimated prices. Each AI-drafted line item is flagged with an AI Estimate badge so you know which prices need your review. Review every price and adjust quantities and costs to match the specific job before sending the estimate to your client.
- You will only see the message "We couldn't determine the project scope from your description" if the AI was unable to draft a scope (for example, if your notes contained no actionable work description). In that case, add more detail in the Notes field, attach a photo, or switch to a named project type.
For non-bathroom "Other" projects, all line-item prices come from the AI's best estimate — not from the built-in cost catalog. Treat them as a starting draft. Verify quantities, unit costs, and totals against your own knowledge of the job and local material prices before you send the estimate to a client. The AI Estimate badge on each line makes it easy to spot which items need attention.
AI drafting for non-bathroom "Other" projects requires that you provide a description in Notes or attach photos. The AI reads what you wrote — the more detail you provide, the more accurate the draft.
If you get the "couldn't determine scope" message, the fastest path is to add more detail to the Notes field (describe the trade, approximate size, and key materials), or switch to a named project type if one fits.
Adding trade line items (flooring, site, and restoration)
Beyond the bathroom fixtures, the scope step now lets you add à-la-carte trade line items to a single estimate — flooring, prep/protection, and restoration work — priced from the built-in cost catalog:
- Flooring: Tile Floor, Carpet, Hardwood, Hardwood Refinish, Hardwood Splice / Lace-In, and Base Trim.
- Electrical: Recessed Lights.
- Site & protection: Floor Protection, General Protection, Containment, Final Clean, Haul-Off, and Negative Air (air-scrubber rental).
- Restoration: Duct Cleaning.
When you check one of these trades, a Qty field appears next to it. Enter the quantity from your own takeoff in the unit shown (square feet, linear feet, days, loads, or each) — the line is priced at that quantity. These trades price directly from the catalog at the quantity you enter; they do not change which bathroom package is selected.
Flooring materials nest under the Flooring checkbox. Check the general Flooring item first — it is the section header. Once it is checked, the five à-la-carte flooring materials (Tile Floor, Carpet, Hardwood, Hardwood Refinish, Hardwood Splice / Lace-In) appear grouped underneath it as a "Flooring materials" list, so you always add them from that one place instead of hunting through the full fixture list. If you uncheck Flooring, the group is hidden and those lines drop out of the estimate — but nothing you typed is lost: re-check Flooring and the same items, actions, and quantities you had are exactly where you left them.
Choosing an install material (including LVP). When Flooring is checked with Replace, Add New, or Install Over Existing, an Installing dropdown appears with two choices: the package default (standard tile — the normal bathroom package price, nothing extra to select) or LVP (luxury vinyl plank). Pick LVP to bill the job with a vinyl-plank floor instead of tile; leave it on the default to keep tile. This is separate from the à-la-carte flooring materials list above — Installing controls what the whole-room Flooring line is made of, while the à-la-carte rows are for partial or mixed-material jobs. More install materials (sheet vinyl, hardwood, stone, laminate, carpet) are on the way.
A few trades — currently Duct Cleaning and Hardwood Splice / Lace-In — do not have a confirmed catalog cost yet. If you add one, you will see a "Pricing pending" note, and it appears on the estimate as a line flagged for review rather than being given a guessed price or quietly dropped. Set the price yourself before sending, and it still appears so nothing you asked for is lost.
If a quantity is unusually large, or looks like it might duplicate work already covered elsewhere in the estimate, the app keeps it exactly as you entered it and flags the line for your review — it never silently caps, clamps, or removes it. Check any flagged line before sending to confirm the quantity is what you intended.
Confirming measurements on the Scope step
As you check off fixtures and trades, the Scope step opens the measurement boxes for the work you just selected, right below the checklist — regardless of which material or grade you picked. Type what you measured; every box starts blank. Scope runs before Uploads in the wizard, so there is no photo yet to suggest anything, and nothing is pre-filled here.
How to type a measurement
Every measurement box accepts the same three forms, so you can write down what you actually measured instead of doing arithmetic on the tape:
| What you type | What it means | Result |
|---|---|---|
14 | one total | 14 |
3, 4, 3 | each run you measured, separated by commas — they are added up | 10 |
10x12 | a width x length pair — it is multiplied | 120 |
10x12, 8x6 | two sections, each multiplied, then added | 168 |
10x12, 40 | pairs and totals mixed together | 160 |
Commas, newlines (so you can paste a column of runs), and x, X, * or × all work. As soon as the box understands more than a single number it echoes back the total it read, so a multi-part entry is never a leap of faith.
A perimeter is simply the sum of the sides you measured — any number of sides. The app never works backwards from a perimeter to a room shape, so a three-wall alcove and a four-sided enclosure are both just the runs you typed.
14 ft, 10'6" and fractions like 1/2 are rejected with a visible error, not guessed at. Enter decimals instead — 10.5 for ten feet six inches. A one-second retype is cheaper than a confidently wrong measurement on a bid.
There is no upper limit on any measurement, and the app never silently "corrects" a number you typed. If a measurement comes out physically implausible — including a shower wall area computed from your perimeter and height — the app keeps it exactly as typed, names the field so you know which one to check, and holds the estimate until you confirm it rather than sending it with a guess baked in. And a box you leave empty is never confused with a 0 you deliberately typed — see the base trim note below.
Which measurements you are asked for
You are only asked for a measurement when the work that bills off it is actually in your scope. Fourteen measurements can be supplied in total, in eight groups:
| Shown when you select… | Measurement | Unit | Notes |
|---|---|---|---|
| Any floor covering — Flooring, Tile Floor, Carpet, Hardwood, Hardwood Refinish, or Hardwood Splice / Lace-In | Floor area | sq ft | Or enter the room sections below it |
| Room sections (width × length) | ft × ft | Add a row per section; disabled once you type a floor area directly | |
| Shower or Shower Glass — or a Bathtub set to Convert to Shower | Shower perimeter | ft | Any number of sides; enter the total or each wall run |
| Shower wall height | ft | Perimeter × height is the tiled wall area | |
| Shower curb length | lin ft | The threshold across the opening — leave blank for a curbless pan | |
| Shower floor / pan area | sq ft | Cannot be worked out from the perimeter | |
| Shower Bench | Shower bench length | lin ft | The seat / bench run inside the shower — a straight run, or both legs of an L-shaped corner bench added together. Cannot be worked out from the perimeter. Type 0 if there is no bench — nothing is billed for it. Leave blank if it isn't measured yet — it's treated as 0 and flagged, held out of the total until you measure it |
| Vanity Single or Vanity Double | Vanity width | in | One row per vanity — two rows for a double or L-shaped setup |
| Paint | Ceiling height | ft | |
| Wall perimeter | lin ft | Walk the room with the tape. Not calculated from floor area, which would assume a room shape | |
| Wall paint area | sq ft | The same wall area measured directly, if you prefer | |
| Base Trim — or automatically on any standard / master / half bathroom replace or remodel, because every one of those packages bills base trim by default | Base trim length | lin ft | The baseboard run: room perimeter minus doorways |
| Any restoration trade — Containment, Negative Air, Water Extraction, Dehumidifier, Air Mover, or Antimicrobial — or automatically on any standard / master / half bathroom remodel, because every one of those packages bills dust containment by default | Affected area | sq ft | On a remodel, the area being dust-controlled. On a mitigation job, the wet / contaminated area — one area for the whole scope, not one per machine |
| Non-Structural Wall set to Relocate | Wall relocation length | lin ft | The run of the wall actually being moved, not the room perimeter. A wall you are removing does not ask for this |
Where a measurement is the takeoff quantity for a trade you checked — Containment bills per square foot of affected area, base trim per linear foot — that trade shows no separate Qty box. Enter the measurement once, in the measurements section, and the trade is priced from it.
Base trim length is one of the boxes where 0 is a real measurement rather than an empty box — a tiled-to-wall wet room, or existing base you are keeping. Type 0 and the app records that you measured zero. Leave it blank and the app reads it as not measured, which is a different thing entirely.
Shower bench length works the same way as base trim: 0 is a real, confirmed measurement, not an empty box. Type 0 and the app records that you checked and there is no bench — nothing is billed for it. Leave it blank and the app reads it as not measured: it's treated as 0 and flagged, held out of the total until you measure it.
What happens if you skip one
Nothing is invented silently on your behalf, but a skipped measurement is not always left blank either — it depends on whether a ruled default has been set up for that specific measurement. Where one exists, the line is filled with a stated typical value for that kind of job, priced normally, and shown on the estimate with a clear notice asking you to confirm the assumed number or correct it — never a silent guess, and never applied until you accept it or send. Where no ruled default exists yet for that measurement, the line still appears on the estimate — at quantity 0 and $0, with its unit price shown and the line flagged — so you can see exactly what is unpriced and why.
Open Edit Estimate — in either the customer or the contractor view, since nothing here is contractor-sensitive — and you'll find this same information at three places, never a page-level summary section: hover or focus the Save and send button (now inside the estimate card, directly under the "Residential remodel estimate" line) and its tooltip states exactly how many items are priced at $0 for want of a measurement; every trade/category group header that still has something needing your input — a measurement, a price, an assumed value to approve — carries its own compact "N items need input" running count, so you never have to expand a collapsed group to know it needs attention; and individual lines carry the specific badge or split Approve | Edit pill that explains and resolves each one. Tap Save and send anyway (or Save and close, which is never blocked by this) and, if anything is still unmeasured, the send screen shows the same count with a short explanation and a "Send anyway" checkbox you must tick to proceed — that is the one place a full explanation and an explicit override live together. This is a different signal from the Assumed dimensions button described above: that button opens the modal listing every assumed measurement (a value already priced into the total, disclosed and editable); the items counted here have no value at all and are held out of the total until you supply one.
The estimate always saves. Sending it asks you to confirm first. Before ruled defaults existed, a standard bathroom estimate with every measurement box left blank came out about half of what the same job prices at once measured; today most driving measurements fill from a stated typical value instead (see If the Estimate Flags an Assumed Dimension above), so that gap only still applies where no ruled default exists for a given measurement. Either way, before an estimate with any unpriced line goes to a homeowner, the Send Proposal screen tells you how many items have no price yet and asks you to tick a box saying you want to send it anyway. Two ways forward, both fine:
- Add the measurements in Edit Estimate and regenerate. The flagged lines pick up real quantities and the total corrects itself. This is the one to pick if the work is actually in scope.
- Send it as-is, having ticked the box. Useful for a deliberately partial quote — "here is everything except the shower, which I will price after I see it." Just know the total does not include those lines.
If you later uncheck a fixture or trade, its measurement boxes disappear and whatever you typed for them is not sent with the estimate — a flooring number you entered and then decided against does not silently keep pricing a job that no longer has flooring work. Check it again and your number is still there, exactly as you left it; nothing you typed is ever deleted, only left out while that work is unchecked.
Organizing Line Items
Keep your estimate organized so it is easy for clients to understand.
- Drag and drop items to reorder them. Group related items together (all electrical work, all plumbing, etc.).
- Use categories to create visual sections in the estimate.
- Add section headers by clicking + Add Section to create labeled groups like "Phase 1: Demolition" or "Bathroom — Master."
- Add notes to individual line items by clicking the note icon. Use notes to explain scope details or material specifications.
Adjusting Pricing
Markup
Markup is how you build your profit margin into the estimate.
- Your default markup percentage is applied automatically (configured in Settings > Markups & pricing).
- To adjust markup on the entire estimate, change the Markup % field in the Totals section at the bottom.
- To adjust markup on a specific line item, click the item and change its individual markup.
Markup is calculated on top of your base costs. If a line item costs $1,000 and you apply 20% markup, the client sees $1,200. Your $200 profit is not shown as a separate line — it is built into the item price.
Tax
- Your default tax rate is applied automatically to taxable items.
- Materials are typically taxable. Labor is typically not taxable (but this varies by state).
- Toggle the Taxable checkbox on each line item to control which items are taxed.
- Override the tax rate for the entire estimate in the Totals section if needed.
Discounts
To offer a discount on the estimate:
- Scroll to the Totals section at the bottom.
- Click Add Discount.
- Choose either a percentage discount or a flat dollar amount.
- Enter the discount value and an optional description (for example, "10% returning customer discount").
Reviewing the Estimate
Before sending the estimate to your client, review everything carefully.
The Estimate Summary
Scroll to the bottom of the estimate to see the summary:
- Subtotal — The total of all line items before markup, tax, and discounts.
- Markup — Your profit margin applied to the subtotal.
- Tax — Sales tax on taxable items.
- Discount — Any discounts you have applied.
- Total — The final price the client will see.
Checklist Before Sending
Run through this quick checklist:
- Are all line items included? Did you forget anything (permits, dumpster rental, cleanup)?
- Are quantities accurate? Double-check measurements.
- Is the pricing current? Material prices change — make sure your numbers are up to date.
- Is the client information correct? Right name, right address, right contact info.
- Are your terms and notes included? Payment terms, warranty info, scope limitations.
- Does the estimate name make sense? Clients see this in emails and the portal.
Always double-check AI-suggested quantities and pricing against your own knowledge of the job. The AI provides excellent starting points, but you know the specific site conditions and local factors best.
Saving and Sending
Save as Draft
Click Save at any time to save your work. The estimate is saved as a "Draft" status and will not be visible to the client. You can come back and edit it anytime.
Send to Client
When the estimate is ready:
- Click the Send to Client button.
- Choose your delivery method:
- Email — Sends the client an email with a link to view the estimate in the customer portal, plus a PDF attachment.
- Customer Portal Only — Makes the estimate available in the portal without sending an email.
- PDF Download — Downloads the estimate as a PDF so you can deliver it however you prefer (text, in person, your own email).
- Add a personal message if you want (for example, "Hi Sarah, here is the estimate for the bathroom remodel we discussed. Let me know if you have any questions.").
- Click Send.
The estimate status changes to "Sent" and the date is recorded.
What the Client Sees
When a client receives your estimate:
- They get a professional email with your company logo and branding.
- The email includes a link to the customer portal where they can view the full estimate online.
- A PDF copy is attached to the email for their records.
- In the portal, clients can accept or request changes to the estimate.
Next Steps
- Learn about all the sections of an estimate in detail: Understanding Your Estimate
- Set up QuickBooks so accepted estimates can become invoices automatically: QuickBooks Integration
- Learn how to export and share estimates: Exporting and Sharing
The more estimates you create, the faster you get. ContractorScope AI learns from your patterns and improves its suggestions over time. Your third estimate will take half the time of your first.