Create, send, and convert a lead estimate

Create a lead estimate, review and send it, manage its public link, and convert it to a customer quote.

leads estimates quotes pricing public links conversion

Build an estimate directly from a lead, price it manually or from a service package, review the customer-facing document, and convert the finished estimate into a customer quote.

Before you start: open a lead as an office user who can manage lead estimates. Sending acts immediately, so confirm the lead’s email address or phone number before you select it.

  • Before you create an estimate

    An estimate belongs to one lead. On the web app estimates are an office-user surface: open the lead from Leads and work from its Estimates card. Read-only users can open an estimate and use Preview and Download PDF, but see no create, edit, send, status, link, convert, archive, restore, or delete actions. Technicians hold estimate permissions in the CleanOps mobile app, in the API, and — on a lead assigned to them — on the web as well: inside the technician portal they can open an estimate and use Send, Edit Estimate, Change Status, Replace Public Link, and Revoke Public Link. They reach it from the estimate notification on their bell, because a technician’s own lead page carries no Estimates card. The office estimate pages this guide covers stay closed to them: a technician who opens one is returned to their own dashboard with You don’t have permission to access this page. Convert to Quote, Archive Estimate, Restore Estimate, and Delete Estimate are office-only wherever the estimate is opened. A lead needs an email address or phone number before Send can deliver anything.

  • 1

    Open a lead's estimates

    Select Leads, open the lead, and scroll to the Estimates card. Its columns are Number, Status, Total, Created, and Valid Until. Select any row to open that estimate, or select + New Estimate to start another draft.

    Screenshot — Open a lead's estimates

    A lead's Estimates card showing several estimates, including a converted one, with the list controls.

  • Find an existing estimate

    Use Search, Date, and Status to narrow the card. Search matches the estimate number, description, notes, and total, and tolerates small typos. The Status list offers Draft, Sent, Viewed, Accepted, Declined, Expired, Converted, and Archived, with Clear and Apply.

    Archived does not behave like the other choices.

    Instead of narrowing, it adds archived estimates to whatever statuses you picked beside it — Draft plus Archived returns every draft and every archived estimate of any status. Select Archived on its own when you want only archived records, which is how you reach one to restore.

    No estimates yet. means the lead has none. No estimates match these filters. means your filters hid the rows. Use Prev, Next, the page buttons, and Per page choices 10, 20, 50, or 100 for longer lists.

  • 2

    Start a draft

    Select + New Estimate. Enter a Description and a Valid Until date, then choose how to price the work. Neither field is required — you can save a draft before any detail is complete — but the validity date matters: CleanOps refuses to send any estimate whose Valid Until date has passed, and once that date has passed it automatically moves a sent or viewed estimate to Expired. The date itself is still good: an estimate valid until the 7th can be sent and accepted all day on the 7th. Refusal is immediate, but the Expired badge is set by a sweep that runs hourly, so for a short window an estimate can still read Sent while already being refused. A draft never expires on its own. CleanOps assigns the EST-#### number when you save.

    Screenshot — Start a draft

    The top of the New Estimate form before pricing is entered.

  • 3

    Price services manually

    Leave Manual Entry selected. Choose a Surface — the list ends with + Create New Surface Type if the one you need is not in the catalog yet — then add an optional description, choose the Unit, enter Quantity, select Complexity, and enter the price for that unit. Use + Add Surface for more work; Remove appears on a row once there is more than one. The subtotal recalculates as you type.

    Screenshot — Price services manually

    A representative manual surface row with quantity, complexity, and pricing.

  • Manual pricing options

    Units are Sq. Ft., Linear Ft., Hourly, and Fixed Price, and the price field renames itself to match. Complexity is offered as LOW, MEDIUM, and HIGH. The small map icon beside a square-foot row opens Draw area on map, a full drawing tool with polygon, freehand, text, measure, arrow, pin, and erase tools plus undo and a clear-all. Saving a shape writes the calculated area into Quantity and marks the row Calculated from map; saving with nothing drawn writes a quantity of 0. Deleting the shape afterwards removes the map marking but leaves the quantity it produced, so retype the number yourself.

    Use Pricing Template appears only on PRO accounts that already have templates. Ticking it hands the row’s pricing to a template matched on surface, complexity, and unit — it overwrites the unit price you typed without asking, and changing the Surface afterwards re-applies it. Untick it before entering a price by hand.

    Validation is shown when you submit, not while you type. Negative discounts and negative taxes are rejected, and both the discount and tax percentages are capped at 100.

  • 4

    Use a service package instead

    Select Use Package and the package picker opens straight away. Search it, choose a package card, and select Apply Package — the button stays disabled until you pick one, and Cancel closes the picker unchanged, leaving a Select Package button to reopen it. The picker lists only active packages and searches within them, so “No packages available” can mean either that this account has no active packages or that your search matched nothing; clear the search before following its Package Settings link.

    The applied card shows the package name, price per visit, frequency, billing method, and subtotal. Change Package swaps it. Returning to Manual Entry clears the package and discards any manual rows you had entered, so switch back only when you mean to start the pricing over. A package prices the estimate; it does not create a maintenance plan.

    Screenshot — Use a service package instead

    The package picker with a service package selected and ready to apply.

  • 5

    Add totals and notes

    Discount (Optional) has two independent boxes — a fixed dollar amount and a percentage — and CleanOps subtracts both if you fill both, so use one unless you really mean to stack them. Enter Taxes as a percentage; it is applied after the discount. Add an optional Note to Lead, check Total Estimate Amount, then select Save Estimate. In this example, a $175 package with a $10 discount and 8% tax totals $178.20.

    Screenshot — Add totals and notes

    An applied package with the discount, tax, note, and calculated total before saving.

  • The draft is ready to review

    The detail page opens with Back to Lead and shows the EST-#### number, a Draft badge, the created and valid-until dates, an Estimate Details panel with the lead contact and job address, the package or manual line items, subtotal, discount, tax, total, a Lead card with View lead, and an Activity Log carrying the creation entry. Use Edit Estimate while the estimate is still editable; clearing an optional field and saving really does clear it, and a cleared discount re-prices the estimate. Once converted, the estimate can no longer be edited and gains a View quote link instead.

    Screenshot — The draft is ready to review

    The saved draft detail with package pricing and matching totals.

  • 6

    Preview and download the estimate

    Select Preview and proofread the branded FROM and TO blocks, reference, date, description, services, quantities, units, prices, per-row discounts, totals, and notes. The services table shows a Discount column only when at least one row carries a discount of its own; where it appears, rows without one read as a dash, and where no row has one the column is not drawn at all. Download PDF prepares the document in the background and delivers it with a PDF ready confirmation, so give it a moment rather than clicking again. Close returns you to the detail page.

    Screenshot — Preview and download the estimate

    The in-app Estimate Preview with the persisted package row and subtotal.

  • Check contact details before sending

    Send is immediate; there is no review modal. CleanOps uses every available lead contact channel — email, phone, or both. It refuses in four situations, and only the first is fixed by editing the lead’s contact details:

    • the lead has no email address and no phone number, and CleanOps says there is no email address or phone number to send to;
    • the lead has contact details but nothing could actually be delivered, and CleanOps tells you to check the lead’s contact details and your Estimate Sent notification template;
    • the estimate’s Valid Until date has already passed, which returns a general failure — extend the date first;
    • the public link has been revoked, which tells you to replace the link before sending again.

    In every one of these the estimate is left exactly as it was. Do not treat a failure as a sent estimate.

  • 7

    Send the estimate

    After checking the recipient, select Send once. A successful delivery moves the estimate to Sent and records the delivery activity and timestamps. Resending an estimate that has already been viewed or accepted keeps its current status rather than moving it back to Sent.

    Screenshot — Send the estimate

    The safe no-contact failure: no email or SMS is sent and the estimate remains Draft.

  • Know when the lead responds

    You do not have to keep reopening the estimate to find out what happened. CleanOps raises an alert for each of the four things that can happen to one: Estimate Viewed the first time the lead opens the link, Estimate Accepted and Estimate Declined when they decide, and Estimate Expired when a sent or viewed estimate has passed its Valid Until date with no answer. Every alert names the lead and the EST-#### number, and the accepted one carries the total as well.

    Estimate Expired comes from the same hourly sweep that sets the badge, not from the date itself, so it lands within about an hour of the date passing rather than on the stroke of it. The estimate stops being sendable and decidable the moment the date passes, whether or not the alert has landed yet. An archived estimate is skipped by the sweep — it never gets the Expired badge and never raises the alert — but its Valid Until date still lapses, so extend the date before sending one you have restored.

    Two people are told, and nobody else: the account owner and the employee the lead is assigned to. Other office staff — managers and admins included — are not on this list, and a lead with nobody assigned tells the account owner alone. The owner’s copy arrives on the bell and by email. The assigned employee gets those two and a text message as well, provided they have agreed to SMS notifications. Anyone can switch a channel off for themselves in Settings.

    The bell in the top bar carries the unread count and opens a Notifications panel rather than a page: Mark all as read and Clear all sit at the top, an Unread tab counts what is waiting beside an All tab, unread entries carry a blue dot, and each is stamped with the date and time it arrived. Selecting an estimate alert opens that estimate — the office estimate page for an office user, and the same estimate inside the technician portal for the assigned technician.

    Estimate Viewed is not a delivery receipt. It fires when the lead actually opens the link, which is the same moment the estimate’s own status moves to Viewed.

    Screenshot — Know when the lead responds

    The Notifications panel listing Estimate Viewed, Estimate Declined and Estimate Accepted, with the accepted alert carrying its total.

  • What the lead sees

    The delivered link is bound to this estimate and recipient. A valid link opens a branded estimate with Download PDF, Accept Estimate, and Decline Estimate — estimates collect no e-signature or waiver. The first open moves the estimate to Viewed, although the recipient’s own STATUS badge reads Pending until they decide, then Accepted, Declined, or Expired. Accept or Decline records the decision time and request evidence; afterwards both buttons are disabled, so the decision cannot be repeated. Missing, forged, expired, replaced, revoked, or cross-account links fail closed with This estimate link is invalid or has expired., and signing in with a matching email does not grant access without the bound link.

  • 8

    Correct an estimate's status

    CleanOps sets the status for you as an estimate is sent, opened, decided, or expires. To correct one by hand, open Actions and select Change Status, choose from Draft, Sent, Viewed, Accepted, Declined, or Expired, and select Update Status. Converted is never offered — only a real conversion produces it — and the whole control disappears once the estimate is converted.

    If the lead has already accepted or declined, CleanOps asks Overwrite the recipient’s decision? before continuing. Confirming with Overwrite Status replaces the customer’s own recorded decision, so treat it as a last resort. Every change lands in the status badge and the Activity Log.

  • Replace or revoke a public link

    Resending reuses the current public link. Under Actions, Replace Public Link asks Replace this public link? and, on Replace link, creates a new generation immediately and invalidates the old one; send the estimate again to deliver the replacement. Revoke Public Link asks Revoke this public link? and, on Revoke link, invalidates the current link and stops a resend from silently issuing another. After a revoke, replace first and then send. Both actions require estimate update permission.

    Screenshot — Replace or revoke a public link

    The in-app confirmation explains that replacement invalidates existing links immediately.

  • 9

    Convert the estimate to a quote

    For an eligible estimate, select Convert to Quote and review the confirmation. CleanOps converts the lead to a customer when needed, creates a quote from the estimate, marks the estimate Converted, and locks it from editing. Select Convert to Quote in the confirmation to continue, and CleanOps takes you straight to the new quote. If any part fails, none of those changes are kept. Declined and already-converted estimates cannot be converted; expired and archived ones still can, so check you are converting the estimate you mean to.

    Screenshot — Convert the estimate to a quote

    The conversion confirmation describes both operations and the all-or-nothing guarantee.

  • Archive, restore, or delete

    Office users with estimate delete permission can choose Archive Estimate to take it out of the normal list. Archiving also revokes the public link the lead is holding, so a sent estimate stops opening for them the moment you archive it. Select Archived in the Status filter, open the estimate, and choose Restore Estimate to return it without changing its estimate status — but restoring does not revive the old link, and it does not withdraw Convert to Quote, which an archived estimate still offers. To put a restored estimate back in front of the lead you do not need to replace anything — restoring makes it sendable again, and sending issues a fresh link.

    Delete Estimate opens a separate permanent-delete confirmation; confirming removes the estimate, its line items, and its public links and returns you to the lead, while Cancel changes nothing. Archiving, restoring, permanently deleting, and replacing or revoking a link are all recorded in the lead’s Activity Log, and the deletion entry stays there after the estimate itself is gone.

  • The customer and quote are linked

    Converting takes you to the new quote, which carries the customer link and keeps the estimate’s package or manual line items, discount, tax, and total. If the lead was already connected to a customer, CleanOps reuses that customer instead of creating a duplicate. Back on the estimate, the badge now reads Converted, editing is closed, a View quote link points at the new quote, and the conversion is recorded in the Activity Log. The estimate itself links to the lead, not to the customer — reach the customer from the quote or the lead.

    Screenshot — The customer and quote are linked

    The resulting draft quote links the converted customer and preserves the $178.20 total.

  • Keep estimates accurate and recoverable

    • Proofread with Preview before the immediate Send action.
    • Fill only one Discount box unless you really mean to apply both.
    • After revoking a link, choose Replace Public Link before sending again.
    • Extend Valid Until before resending an estimate that has expired.
    • Convert only the final estimate you want carried into the customer quote.
    • See Create a lead for lead setup and Create a quote for the quote workflow after conversion.

Need more help? If you can't find what you're looking for in our documentation, create a support ticket and our team will assist you.