Landscapt (CRM)

Estimates & the Budget Engine

How an estimate is built, how its numbers are actually calculated, and how it becomes a job.

Creating an estimate

  1. Go to CRM → Estimates → + New Estimate.
  2. Pick a client. Leads are labeled “(lead)” in the picker so you can tell them apart from active clients at a glance; inactive or cancelled clients don’t show up at all.
  3. Set the estimate date and a valid-until date — it defaults to 30 days out, but can be pushed further for a bid that needs more runway.
  4. Assign a sales rep.

From there you’re in the estimate detail view, where line items, direct costs, and the summary panel all live.

Estimate Builder: drafting line-item text from a transcript

Tools → Estimate Builder is a small AI-assisted writing aid, separate from the estimate detail view itself. It takes a sales-visit transcript and turns it into draft line-item wording you copy into a real estimate — it does not create or touch any estimate record on its own.

  1. Upload a transcript file (.txt or .vtt) or paste transcript text directly. For a .vtt file, the tool automatically strips the WEBVTT header, speaker-id lines, and timestamp lines before showing you the cleaned text.
  2. Click Generate Proposal. The transcript is sent to an AI model that drafts professional, client-ready line-item descriptions — grouped by service type, with locations, quantities, and exclusions called out, and any ambiguous point (like whether weed killer was discussed) flagged inline for you to resolve.
  3. Click Copy to Clipboard and paste the wording into the appropriate line item on the actual estimate you’re building.
This is a text draft, not a finished estimate. The tool never sets pricing, never submits anything, and never creates or modifies an Estimate record — it only produces description text sitting in the browser tab until you manually copy it in. Always check scope, quantities, and pricing against what was actually measured/quoted before pasting it in, and resolve any clarification flags in the output first.

Stage vs. approval status

These are two separate fields on the estimate, and they get confused constantly because they both sound like “where is this at.” Stage tracks the sales process. Approval Status is a separate internal sign-off gate that sits on top of it.

StageWhat sets it
DraftDefault stage for a brand-new estimate. Still being built — line items and pricing are in flux. Drafts were never presented to a client, so Close Ratios and win-rate figures leave them out of both counts and amounts.
QuoteSet manually once the estimate is ready for internal review — the numbers are considered final pending sign-off.
SentSet when the estimate is actually delivered to the client (email, PDF, or the client portal). Blocked from actually going out if Approval Status is still Pending — see the callout below. Pipeline dashboards count Sent estimates as open pipeline alongside Draft and Quote.
AcceptedSet when the client accepts — in full or via a tiered/partial acceptance, whether you mark it in-app or the client accepts online through the proposal link. Once an estimate is Accepted, a Convert to Job button appears in its header; converting normally happens from here.
LostSet when the client declines — including a Decline in the client portal, which records the reason “Declined by client via portal” — or when an estimate is manually marked dead. Line items already marked “lost” individually (e.g. a tier the client unchecked when accepting) don’t count toward totals, and the Accepted Estimates by Service reports skip them.
InvoicedSet once billing has started against the estimate (a deposit, milestone, or the full amount has been invoiced).

Approval Status runs on its own track: Not Required, Pending, Approved, or Rejected. It exists to hold an estimate back regardless of what stage says.

The trap. An estimate can show stage “Sent” while its approval status is still “Pending.” Stage reflects where the estimate is in the sales workflow, not whether it’s cleared to actually go out — a pending approval blocks delivery even though the stage field already reads Sent. If a client says they never got an estimate you thought went out, check Approval Status first.

Manual vs. production-rate budgeting

Every service has a configured Budget Method (in service settings), and every estimate line item snapshots that method the moment the line is added:

  • Manual — budgeted hours are entered directly on the line, no formula involved.
  • Production Rate — budgeted hours are derived: hours = quantity ÷ the service’s sq ft per man-hour.

One override applies regardless of method: if the line’s unit type is hr (hourly), the entered quantity is the hours — there’s nothing to derive.

If this split feels familiar, it’s deliberate. Manual is the Service Autopilot approach — a human estimates the hours a job will take. Production Rate is the Aspire approach — hours fall out of a measured area and a standardized rate for that service. The CRM supports both side by side, per service, so a shop migrating from either tool can keep working the way it already knows.

A worked example, start to finish

Say a “Mulch Installation” service is configured with Budget Method = Production Rate and a production rate of 1,000 sq ft per man-hour. A property’s Mulch Bed Sq Ft measurement is 8,000.

  1. Budgeted hours: 8,000 sq ft ÷ 1,000 sq ft/man-hour = 8 budgeted hours for one visit. With a single visit, total budgeted hours is also 8.
  2. Cost: the org’s breakeven (fully-burdened) labor rate is, say, $45.00/hr. Because the line’s Cost field is still at its never-set default of $0, it auto-fills the first time the line is added: 8 hrs × $45.00 = $360.00 total cost.
  3. Rate (price to the client): say the line is priced at $0.12/sq ft, quantity-based (calc type ×): 8,000 sq ft × $0.12 = $960.00 total.
  4. Margin: ($960.00 − $360.00) ÷ $960.00 = 37.5% gross margin — comfortably in the green band (30%+) on the line-item grid.
  5. Overhead: at the estimate level, that $360.00 in modeled line-item cost is bucketed as Labor cost and run through the org’s configured Labor overhead + Labor Burden percentages (set separately from the per-line breakeven rate) to arrive at the estimate’s overhead cost, which nets against gross profit to produce the estimate’s net profit figure in the summary panel.

Edit the Cost field directly at any point and that override sticks — the breakeven-rate auto-fill only ever applies while Cost is still exactly $0.

The B.Hrs cell has its own calculator popover for building that number up instead of guessing: enter Men and Hrs:Min to compose budgeted hours (e.g. 2 men for 2:30 = 5.0 hrs), or give it a target man-hour rate — defaulting to the org’s breakeven labor rate — and it solves for whichever of Cost or B.Hrs you leave it to fill in.

Why budget method is snapshotted per-line

It would be simpler for a line item to just read its service’s current Budget Method live, every time. The engine deliberately doesn’t do that: the method (and, for production-rate lines, the rate itself) is copied onto the line item at the moment it’s added, and stays there.

The reason is historical integrity. Say “Mulch Installation” is switched from Production Rate to Manual six months from now, or its production rate is retuned from 1,000 to 1,200 sq ft/man-hour after a crew turns out to be faster than assumed. Every estimate written before that change already has real budgeted-hours numbers baked into it — numbers a job may have been scheduled and costed against, or a client may have already accepted a price built on. If line items re-read the service live, changing one service setting would silently rewrite the economics of every past estimate that used it, with no record that anything changed. Snapshotting means an old estimate keeps meaning exactly what it meant when it was sent, and a service’s settings can be tuned going forward without touching history.

Complexity multiplier & Rate Matrix pricing

Two more inputs can override the plain manual/production-rate math above. Both are snapshotted onto the line item the moment it’s added or adjusted — same historical-integrity reasoning as budget method, above.

Complexity multiplier. Every line item has a Complexity popover (the icon next to the line’s notes button) set from 50% to 200%, defaulting to 100% (no adjustment). It scales the line’s Rate and Cost together, which is why it doesn’t move GM% — a harder job costs and prices proportionally more without silently changing margin. It also scales the effective hours used for cost, dashboards, and the total-hours column. Critically, the hours you see and edit on the line (“B.Hrs”) always stay the plain, unscaled number you typed or that production rate derived — complexity is applied fresh every time something re-reads the line, never baked back into the stored hours. That matters in practice: dial complexity up to 150%, then back down to 100%, and the line returns exactly to where it started instead of drifting.

Rate Matrix. A service can have banded pricing rows configured against one of a property’s custom fields (e.g. price breaks by Turf Sq Ft ranges). If the estimate has a property attached and that property has a value for the field a service’s matrix is keyed on, adding that service looks up the matching band and uses its rate, budgeted hours, and cost instead of the service’s flat production rate — the line is recorded as Manual budget method going forward, since its hours came from the matrix rather than a formula. No property on the estimate, no matrix rows configured on the service, or no value on that field, and the line falls through to the ordinary manual/production-rate behavior with nothing different. Like everything else here, the match is looked up once at add-time, not re-resolved later if the property’s field value or the matrix rows change.

Complexity and Rate Matrix are independent of each other and of budget method — a Rate Matrix line still gets its own Complexity multiplier on top of whatever the matched band set.

Reading the line-item grid

The GM% column color-codes each line’s gross margin, calculated from Rate, Cost, and Adjusted Rate:

  • Green — 30% or higher.
  • Gray — 10% up to 30%.
  • Red — below 10%.

Each line also has a Calc Type toggle between per-unit pricing (× — rate × qty × visits) and a fixed total ($ — the entered rate is the line’s total, regardless of quantity).

Overhead on the estimate as a whole is either one flat percentage applied to total cost, or — when the org has configured any per-type overhead rate — broken out by cost type instead:

Cost typeOverhead setting usedWhere it comes from
LaborLabor Overhead + Labor BurdenLine items’ modeled cost (totalCostCents) is bucketed here, alongside any Direct Cost rows typed as Labor.
Sub-ContractContract OverheadSubcontracted work entered as a Direct Cost.
Product/MaterialMaterials OverheadMaterials entered as a Direct Cost.
Asset/EquipmentEquipment OverheadEquipment costs entered as a Direct Cost.
Service/OtherOther OverheadDirect Costs typed as Service or Other — there’s no dedicated bucket for “Service,” so it shares Other’s rate.

Both the breakeven labor rate and the per-cost-type overhead percentages are org-wide settings, not per-estimate — the breakeven rate is set from Equipt’s Job Costing bid-rate calculator (“Set as project rate”), and overhead percentages live in the org’s overhead settings.

Where zone measurements come from

Production-rate lines need a quantity to divide by the service’s rate — that quantity usually comes from a property’s zone measurements: Turf Sq Ft, Mulch Bed Sq Ft, Gross Sq Ft, Linear Ft Perimeter/Edging, Yards of Mulch.

These are entered on the client’s Custom Fields tab, not in the Add Property dialog and not in a dedicated per-zone editor — there currently isn’t one. If a production-rate line is coming out to 0 budgeted hours, check that the relevant measurement is actually filled in there.

Taking a deposit on acceptance

Set Deposit Required on the estimate header and the client is asked for it as part of accepting the proposal, before the acceptance is recorded.

  • Pay by card charges the deposit through Stripe there and then. It appears once your organisation has finished Stripe Connect setup; the amount always comes from the estimate, so the client can’t change what they’re charged. Your card processing fee applies on the same terms as an invoice payment (only above your threshold), and the client sees the split — deposit, fee, total — before confirming. They are credited the deposit; the fee is yours.
  • Pay by bank transfer (ACH) appears if you have ACH turned on. No processing fee. A bank debit takes a few business days to clear, and the proposal is accepted straight away rather than waiting on it — see below.
  • The manual methods (check, cash, ACH, credit card, other) do not charge anything. They only record that the client says they’re sending it, so you know to expect it — and reconcile it as a normal payment when it lands.
  • Skip for now accepts the proposal with no deposit at all. A deposit never blocks acceptance.
A card deposit becomes a prepayment, not an invoice payment. It’s taken at acceptance, before any invoice for the work exists, so there is nothing to apply it to yet. It lands as a payment on the client with the full amount unapplied, and shows in the Prepayments figure on their record (not Credits — that line is for overpayments and goodwill credits). If you refund it before it’s used, the refund comes out of the unapplied amount and no invoice is touched.

Using it on the first invoice is a manual step — nothing is applied for you, because a converted job invoices its full amount with the deposit not deducted. The invoice tells you when there’s money waiting:

  1. Open the invoice. If the client has unapplied money, a blue bar reads $2,000.00 of unapplied payments on this client (including a deposit) — $2,000.00 can go to this invoice”.
  2. Click Apply to this invoice. It uses the oldest money first, so a deposit is consumed before a later overpayment, and never applies more than the invoice still owes.
  3. The balance drops and the unapplied figure drops to match. Anything left over stays available for the next invoice. You can still do it the long way — open the payment and edit its allocation — if you want to split it differently.
Apply the deposit before you send the invoice. Nothing stops an invoice going out at its full amount with a deposit sitting unused against the client.
A bank transfer doesn’t hold up acceptance. ACH takes a few business days to clear, and the proposal is accepted the moment the client submits the debit — they aren’t left waiting and neither is the job. While it’s clearing the estimate shows an amber bank transfer pending badge next to Deposit Required: no payment exists on the client yet, because the money hasn’t actually arrived. When it clears it becomes a normal prepayment and the badge turns green.

If the deposit fails — a returned bank transfer (insufficient funds, closed account, a mistyped routing number) or a declined card — the proposal stays accepted. Only the money failed; nothing needs signing again. Three things happen:

  1. The estimate shows a red payment failed badge with the amount, the date, and the bank’s own reason on hover. That reason is the useful part — “insufficient funds” means ask them to try again, “account closed” means pick up the phone.
  2. You’re notified — a Deposit failed bell notification and an email, to whoever already receives proposal-decision notifications, plus the estimate’s sales rep. Both can be turned off individually under Notification Preferences.
  3. The client’s original proposal link re-opens itself so they can pay it again. Re-visiting it shows a “your deposit didn’t go through” screen with the reason and the card / bank-transfer buttons, instead of the usual thank-you. They can’t change the amount, and there’s no Skip button this time — skipping is a choice made before accepting, and by now the deposit is owed.
The link closes again the moment a deposit is recorded, so it only ever allows one attempt at a time. This is worth knowing before you chase someone: they very likely can just pay it from the same link you already sent, and don’t need a new one.
Only the card and bank-transfer paths are real money. A client who picks “Credit Card” from the manual list has told you they paid by card somewhere else — nothing was charged here. The proposal page says so beneath those options whenever online payment is available.

Converting an estimate to a job

Once an estimate is Accepted — whether you set the stage yourself or the client accepted online through the proposal link — a Convert to Job button appears in the estimate header. After a job has been created from the estimate, that same button reads View Job and jumps straight to it, so an estimate is never converted twice by accident.

  1. From the accepted estimate, click Convert to Job.
  2. Choose which line items to include — not every accepted line has to become part of the job. Lines that net out to $0 start unchecked so they don’t land on the job (and its invoice) as empty rows; tick them if you really want them.
  3. Pick a Job Type: One Time, Recurring, Project, or Waiting List.
  4. Set the scheduled date, assign a crew, and enter a Crew Size (men). The crew size is written onto the job and its first visit, so the Dispatch Board’s Men column is right from day one instead of reading 0.
  5. Confirm. The job is created and a “Job created” entry is logged on the client’s Activity timeline.
Discounts carry over. The job’s price is what the client actually agreed to pay: each included line’s own discount and its share of any estimate-level discount are applied to the job’s service pricing. A 10%-off estimate produces a job priced 10% off, not one priced at the undiscounted subtotal.
A multi-visit line becomes a per-visit price. An estimate line priced across several visits — 30 mows at $60 — is quoted to the client as the full $1,800, but the job stores $60 per visit, because that is what each completed visit invoices. The quantity and the number of visits are both divided back out, so quantity × rate × visits still equals the amount the client accepted, discounts included. If you are reconciling a converted job against its estimate, compare the estimate’s line total against rate × visits, not against the per-visit rate.
Package and Snow jobs aren’t created this way — they’re created directly from Jobs → Add Job rather than converted from an estimate.

More in Landscapt (CRM)

Clients, Properties & Leads
Client accounts, commercial hierarchies, service properties, and the activity timeline that ties it all together.
Jobs & Packages
The six job types, how a job's status differs from a visit's status, and how a Package template turns into a billed job.
Services & Pricing
The service catalog, bulk catalog price changes, and Price Adjustment runs — which prices seed new work and which ones actually bill.
The Dispatch Board
The daily scheduling screen crews and dispatchers live in — visits, crews, status, and how actual hours get calculated.
The Crew App
What a crew sees on their phone — the day's stops, clocking on and off, breaks, photos, and sending work back to the office.
Sales Meetings
Booking appointments per sales rep, the double-booking warning, and the split between a rep's direct reminder and the client-facing automation trigger.
The Waiting List
Jobs with a date range instead of a date, held for opportunistic scheduling — and how to actually get them dispatched.
Snow Jobs & Storm Dispatch
Storm events, priority dispatch, and the invoicing flow built specifically for snow.
Invoicing & Payments
How an invoice is born, how its status moves, and where the client's own PO number actually goes.
Contracts
Ongoing billing agreements — monthly amounts, seasonal overrides, sub-properties, and how signing and invoicing actually work.
Communication Automations
How sequences, triggers, and events work — and how Automations differ from Sales Campaigns.
Forms & Lead Capture
Building, publishing, and sharing public forms — and what happens to a submission once it lands.
Tickets
Support and service tickets — where they come from, how they're worked, and how they connect to the rest of a client's record.
Damage Cases
Tracking property damage and warranty claims tied to a job — what a case captures, how cost rolls up, and a real current limitation in how it connects to a client record.
Job Photos
Field photo documentation, annotation, and before/after comparisons — attached to a job site, not a person.
Online Payments & Stripe
How a client actually pays an invoice online, how Stripe Connect keeps every org's money in their own account, and how the platform takes zero cut.
Browse all guides
© 2026 Landscapt. All rights reserved.