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 on a lead from your phone, price it manually or from a service package, review the customer-facing document, send it, and convert the finished estimate into a customer quote.

Before you start: open the lead in the CleanOps app. Sending acts immediately, so confirm the lead’s email address or phone number first. The estimate your lead opens is a web page, not an app screen.

  • Before you create an estimate

    An estimate always belongs to one lead, so start from the lead — there is no estimates list of its own.

    You need the estimates permissions to create, edit and send, and converting also needs lead-update permission. Read-only users can open an estimate and use Preview and Download PDF, but see no create, edit, send, status, link, convert, archive, unarchive or delete actions.

    Technicians work estimates on the leads assigned to them. Here a technician can open, create, edit and send estimates, use Change Status, and Replace Public Link or Revoke Public Link, as well as Preview and Download PDF. The web app’s technician portal gives them the same set with one exception: a technician cannot create an estimate on the web, so they start one in this app. Four actions are withheld from them wherever the estimate is opened — Convert to Quote, Archive Estimate, Unarchive Estimate (labelled Restore Estimate on the web) and Delete Estimate — and a converted estimate shows them no link to the resulting quote.

    The other difference is how a technician reaches an estimate. Here they open the lead from their own Leads tab and tap Estimates, with the same search, filters and + an office user sees. On the web their lead page carries no Estimates card, so they arrive from the estimate notification instead — its bell entry, the View Estimate button in the email, or the link in the text message, each of which opens the estimate inside the technician portal. The office estimate pages 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.

    A lead needs an email address or a phone number before Send can deliver anything.

  • 1

    Open a lead's estimates

    Tap More, then Leads, and open the lead. Along the top, tap Estimates — the fourth of six tabs (Lead Info, Overview, Events, Estimates, Notes, Activity Log). The tab strip scrolls sideways, so swipe it left if Estimates is off the edge of the screen.

    Each estimate is a card showing its EST-#### number, a status badge, Total, Created and Valid Until. Tap a card to open it, or tap the blue + to start a new one.

    Screenshot — Open a lead's estimates

    A lead's Estimates tab with the search box, filter button, + button, the count line, and estimate cards.

  • Find an existing estimate

    Search estimates… matches the estimate number, description and notes, and the services on the estimate — including the ones a package put there, so searching driveway finds an estimate described that way and one priced from a driveway package. It also matches the estimate total. It tolerates small typos and waits until you stop typing.

    The filter button opens Filters, which offers eight statuses — Draft, Sent, Viewed, Accepted, Declined, Expired, Converted and Archived — with Clear and Apply Filters. Only Apply Filters takes effect. Clear just unticks the boxes; if you close the sheet without tapping Apply Filters the filter you already had stays on.

    Archived does not narrow the list, it widens it. Ticked beside other statuses it adds archived estimates to them; tick it on its own to see only archived records, which is how you reach one to restore.

    The count line reads Showing 1–6 of 6, and the list loads more as you scroll rather than paging — there are no page numbers, and the page size is fixed at 20. Leaving the tab and coming back reloads it for you; pull down to refresh when you have stayed on the screen and someone else has changed something.

    Two different empty states: No estimates yet / Estimates for this lead will appear here means the lead has none at all, while No estimates found / Try adjusting your search or filters means your search or filter hid them. If loading fails you get Failed to load estimates. Please try again. with a Retry button.

    The app has no date-range filter; use the web app when you need to narrow by date.

  • 2

    Start a draft

    Tap +. On the New Estimate sheet, tap Valid Until to open the Select Valid Until picker, choose a date and tap DoneClear date appears afterwards if you change your mind. Add a Description (optional); its placeholder asks What is this estimate for?

    Both fields are optional, but the validity date matters. CleanOps refuses to send an estimate whose Valid Until date has passed, and once that date has passed it automatically moves a sent or viewed estimate to Expired with no action from you. The date itself is still good: an estimate valid until the 7th can be sent and accepted all day on the 7th. From the moment it passes CleanOps refuses to send it and the lead can no longer accept it, and the Expired badge follows within the hour — a sweep sets the badge, so for a short window an estimate can still read Sent while already being refused. Drafts never expire on their own, dated or not. The EST-#### number is assigned when you save.

    Screenshot — Start a draft

    The top of the New Estimate sheet with Valid Until set and a description entered.

  • 3

    Price services manually

    Leave Manual Entry selected. Tap Surface and choose a surface type, pick the Unit, enter the quantity, choose Complexity, and enter the price. Add an optional Description (Optional) for the row.

    Tap + Add Surface for more work. Remove appears on each row only once there is more than one, so you can never delete your way to an empty estimate. Subtotal: updates as you type.

    Screenshot — Price services manually

    A manual surface row showing the unit, quantity, complexity and price, with Remove on the row.

  • Manual pricing options

    Unit offers Sq. Ft., Linear Ft., Hour(s) and Fixed, and every label around it changes to match. The quantity is headed Area for Sq. Ft., Length for Linear Ft., Hours for Hour(s) and Quantity for Fixed, and the price becomes Price per Sq. Ft., Price per Linear Ft., Hourly Rate or Fixed Price.

    Complexity is Low, Medium or High.

    The small map button sits beside the quantity for Sq. Ft. and Linear Ft. rows only, and opens the drawing tool; a saved shape fills in the quantity and marks the row Calculated from map. The number and the shape then come apart in both directions: deleting the shape leaves the number it produced behind, and retyping the quantity by hand silently discards the shape and its Calculated from map badge.

    If the surface type you need is not in the catalog, the picker ends with ⊕ Create New Surface Type, which opens Add Surface Type and selects the new type into the row you were filling. The picker also reminds you that surface types are managed in Settings → Service Catalog.

    Pricing templates are a web-only feature, so the template overwriting a price you typed cannot happen here.

  • 4

    Use a service package instead

    Tap Use Package and the Select Package picker opens straight away. Search it with Search packages, tap a package card, then tap Apply Package — the button stays greyed out until you pick one. Cancel closes the picker and changes nothing.

    An applied package replaces the manual rows with a single card; Change Package swaps it and Clear Package removes it, putting back any manual rows you had typed before the package went on. A package prices the estimate and nothing more — CleanOps tells you plainly that converting this estimate to a quote carries the package over — an estimate never creates a maintenance plan.

    The picker distinguishes its two empty states: No packages available, with a Go to Settings link to the service catalogue, means the account has no active packages, while No packages match “…” means your search matched none of them.

    Screenshot — Use a service package instead

    The Select Package picker with Apply Package greyed out until a package is chosen.

  • 5

    Add totals and notes

    Discount (optional) is two independent boxes — a 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 applies after the discount. Negative discounts and negative taxes are rejected, and both percentages are capped at 100 — all of it refused when you save rather than while you type.

    Add an optional Note to Lead, check Total Estimate Amount, then tap Save & Continue. In this example two rows totalling $675.00, less a $25.00 discount, plus 7.5% tax, come to $698.75.

    Saving returns you to the lead’s Estimates tab, where the new card is waiting — tap it to open the estimate.

    Screenshot — Add totals and notes

    The lower sheet showing both discount boxes, the tax field, the calculated total and the note.

  • How the mobile form behaves

    At least one service row is required. Tapping Save & Continue with none raises Validation Error / Please add at least one surface before anything is sent. Everything else is checked when you save, not as you type.

    Cancel and Save & Continue stay pinned to the bottom of the sheet, but the keyboard covers the fields underneath it — scroll the field you are filling into view and check what you typed before saving.

    There is no way out of the sheet that keeps your work except saving it. Cancel, the ✕ in the top corner and a downward swipe all do exactly the same thing — close the sheet and discard the draft, without asking are you sure. On a part-filled estimate, tap Save & Continue first and edit it afterwards.

  • The draft is ready to review

    Opening the estimate shows EST-#### and the lead’s name in the header, a Draft badge, the created date, and two icon-only buttons: an eye for the preview and for the actions.

    The detail is split across two tabs. Estimate Details carries the Lead card — the name opens the lead, the email and phone are tappable — the job address, your line items or the package block, the totals, Valid Until and Note to Lead. Activity Log carries a Current Status card and a dated timeline, newest first — so Estimate EST-#### created sits at the bottom, not the top, and there is always at least that one entry. If the log cannot load you get Failed to load activity log with a Retry button. Check both tabs; the web app puts all of this on one page.

    Send and Convert to Quote sit in a bar pinned to the bottom. Pull down on the body to refresh it.

    Edit Estimate in the actions menu reopens the form — the title becomes Edit Estimate and the button Save Changes. Clearing an optional field really does clear it. Once an estimate is converted it can no longer be edited and the bottom bar disappears, but Replace Public Link, Revoke Public Link, Download PDF and Delete Estimate all still work on it.

  • 6

    Preview the estimate

    Tap the eye button to open Estimate Preview — the same branded document your lead will see. Proofread the FROM and TO blocks, the reference and date, the services with their quantities, units and prices, the totals and the notes.

    The services table only carries a Discount column when one of the rows actually has a discount of its own; an estimate without per-row discounts simply does not show the column.

    If the document cannot load you get Failed to load preview. Please try again. with a Retry button.

    Screenshot — Preview the estimate

    The Estimate Preview document with both service rows and totals matching the saved estimate.

  • 7

    Share the PDF

    There is no PDF viewer inside the app. Choose Download PDF from the actions menu and CleanOps prepares the document, then hands it to the usual iOS share sheet — from there you can mail it, print it, or Save to Files.

    Dismissing the share sheet cancels the share and changes nothing about the estimate. On a device with no sharing available CleanOps saves the file instead and tells you where, with Success / PDF saved to …. If the file cannot be prepared at all you get Error / Failed to download PDF.

    Screenshot — Share the PDF

    The iOS share sheet holding the generated estimate PDF.

  • Check contact details before sending

    Send acts as soon as you confirm — there is no draft-and-review step — and it uses every contact channel the lead has, email and phone alike. There is no per-channel choice, on the phone or on the web.

    Four things stop a send, and they stop it in two different ways.

    One is silent: if the lead has no email address and no phone number, Send is simply greyed out — there is no message telling you why, so a dead Send button means go and add a contact detail to the lead.

    The other three refuse with a message when you confirm:

    • the lead has contact details but nothing could be delivered — check the lead’s details and your Estimate Sent notification template;
    • the estimate’s Valid Until date has passed, and CleanOps says This estimate’s validity date has passed. — extend the date first;
    • the public link has been revoked, so replace the link before sending again.

    In every one of these the estimate is left exactly as it was. A failure is not a send.

  • 8

    Send the estimate

    Open and choose Send to Lead, or use Send in the bottom bar. The label reads Resend to Lead once the estimate has been sent at least once.

    CleanOps asks to confirm with a plain alert — Send Estimate / Send EST-#### to <lead>? — with Cancel and Send. On a resend the same alert reads Resend Estimate / Resend EST-#### to <lead>? with a Resend button. Confirming reports Success / Estimate sent to the lead.

    The badge moves to Sent and the Activity Log picks up the delivery entry straight away, without leaving the screen. Resending an estimate the lead has already viewed or accepted keeps its current status rather than moving it back to Sent.

    Screenshot — Send the estimate

    The Send Estimate confirmation naming the estimate and the lead before anything is sent.

  • Know when the lead responds

    You do not have to keep opening 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 on the bell 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 unarchived.

    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 app header opens Notifications, where unread alerts carry a blue dot, the Unread tab counts them, and Mark all as read and Clear all sit at the top. Opening an estimate alert takes you straight to that estimate — to the usual estimate screen for an office user, and to the same estimate inside the technician portal for a technician — which is the quickest way back to one the lead has just answered.

    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 bell showing Estimate Viewed, Estimate Accepted and Estimate Declined alerts for leads' estimates.

  • What the lead sees

    The lead receives a link to a web page, not an app screen — this is the one part of the flow that has no equivalent in the CleanOps app. Open it in a browser if you want to see exactly what they see.

    The link is tied to that estimate and that recipient. It opens a branded estimate with Download PDF, Accept Estimate and Decline Estimate; estimates collect no signature and no waiver. The first time it is opened the estimate moves to Viewed, although the lead’s own status pill reads Pending until they decide — then Accepted, Declined or Expired. A converted estimate still shows them Accepted.

    Accepting or declining records the decision, the time, and the request evidence behind it: the address it came from and the browser used. Both buttons are then disabled, so the lead cannot change their mind or decide twice. Missing, forged, expired, replaced, revoked and cross-account links all fail closed with This estimate link is invalid or has expired. and show no estimate detail at all. The link is the only key: signing in with a matching email address does not open an estimate without it.

  • 9

    Correct an estimate's status

    CleanOps sets the status as an estimate is sent, opened, decided or expires. To correct one by hand, open , choose Change Status, and pick from Draft, Sent, Viewed, Accepted, Declined and Expired. Converted is never offered — only a real conversion produces it.

    If the lead has already accepted or declined, CleanOps stops you with Overwrite the recipient’s decision?, naming who decided what and when, and warning that their decision and its date stay on the record either way. Cancel changes nothing; Overwrite Status replaces the lead’s own answer, so treat it as a last resort.

    The new status appears in the badge and in the Activity Log without leaving the screen.

    Screenshot — Correct an estimate's status

    The overwrite confirmation shown when the lead has already decided.

  • Replace or revoke a public link

    Resending an estimate reuses the link the lead already has. To change that, use .

    Replace Public Link warns Existing links will stop working. A replacement link is created immediately. and, on Replace link, issues a new one at once — send the estimate again to actually deliver it.

    Revoke Public Link warns Existing links will stop working. Sending is disabled until you replace the public link. and, on Revoke link, kills the current link and blocks sending. After a revoke the order is replace first, then send.

    Both need estimate-update permission, and both are recorded in the Activity Log. The app never shows or copies the link itself, so sending is the only way to get it to your lead — open the estimate on the web if you need the address.

    Screenshot — Replace or revoke a public link

    The Replace link confirmation spelling out that existing links stop working immediately.

  • 10

    Convert the estimate to a quote

    Choose Convert to Quote from or the bottom bar. The confirmation spells out that this does two things in one step: it converts the lead into a customer, and creates a quote from the estimate’s line items and marks the estimate converted. If the lead is already a customer from an earlier conversion, only the second of those is listed. It also warns that a converted estimate can no longer be edited, and promises that if any step fails, nothing is changed.

    Confirming reports Success / Estimate converted to a quote. with View Quote and OK.

    Draft, sent, viewed, accepted and expired estimates can all be converted. A declined estimate cannot, and neither can one already converted — but CleanOps does not refuse them with a message, it simply does not offer the action. If Convert to Quote is missing from the menu and the bottom bar, check the status. Technicians never see the action at all.

    Screenshot — Convert the estimate to a quote

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

  • Archive, restore, or delete

    Archiving and deleting need estimate-delete permission, which is a different permission from editing.

    Archive Estimate takes the estimate out of the normal list and revokes the link the lead is holding, in the same step — a sent estimate stops opening for them the moment you archive it. The badge changes to Archived, the whole Send / Convert to Quote bar disappears from the bottom of the screen, and in the menu Edit Estimate, Change Status, Send to Lead and Convert to Quote all grey out. The greyed Convert to Quote differs from the web app, where an archived estimate can still be converted; unarchive it first if you need to convert. Replace Public Link and Revoke Public Link stay available while archived.

    Reach an archived estimate through the Archived filter and choose Unarchive Estimate to bring it back. The link the lead was holding stays dead, but you do not need to replace it — unarchiving makes the estimate sendable again, and sending issues a fresh link.

    Delete Estimate opens a separate confirmation — Are you sure you want to delete this estimate? This action cannot be undone. — naming the estimate and lead, with Cancel and a red Delete. Confirming permanently removes the estimate, its line items and its public links; Cancel changes nothing. Deleting the lead deletes every estimate on it the same way — archived ones included. Archiving is not protection from that; if you need the estimates, keep the lead.

    Archiving, restoring, deleting, replacing a link and revoking a link are each recorded in the lead’s Activity Log.

  • The customer and quote are linked

    The lead is now a customer and the estimate has become a quote carrying the same package or line items, discount, tax and total. If the lead was already a customer — because you converted an earlier estimate — CleanOps reuses that customer instead of creating a duplicate.

    Back on the estimate the badge reads Converted, editing and the bottom bar are gone, and a Converted To row with View Quote sits above Valid Until, taking you to the new quote. Technicians, and anyone without permission to read quotes, see no link there. Converting locks the estimate’s contents, not the record — you can still download its PDF, replace or revoke its link, and delete it outright.

    The estimate stays attached to the lead, not to the customer — reach the customer from the quote.

  • Keep estimates accurate and recoverable

    • Leaving a screen and coming back reloads it, and the detail screen refreshes itself after you act on it; pull to refresh only when you have stayed put and someone else has changed something.
    • Fill only one Discount box unless you really mean to apply both.
    • Every way out of a half-filled New Estimate sheet discards it — Cancel, the ✕ and a downward swipe all do the same thing, without asking. Save before you leave.
    • After revoking a link, choose Replace Public Link before sending again. After unarchiving, just send.
    • Extend Valid Until before resending an estimate that has expired — and remember a sent or viewed estimate expires by itself once that date has gone by.
    • Open the lead’s estimate link in a browser when you want to see exactly what they see.
    • Lead setup, the quote workflow after conversion, and the customer the conversion creates each have their own guide. Open Help Guides from your profile menu to find Create a lead, Create a quote and Create a customer — all three are written for the web app.

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.