Skip to main content

Estimate report

Module: CRM | Platform: Web

Reporting view for estimates (pipeline value, status, and related job linkage).

Sidebar → CRM → Estimates

URL: /overview/estimate-report

Permission gate: the route requires Estimate → View. Without it, the page (and its sibling Change Order Report at /overview/change-order-report, which is gated by the same Estimate → View permission) is not reachable.

Overview​

Estimates list showing quick tabs, per-column filter dropdowns, and the itemized grid of estimate rows

The Estimate Report is the list view behind the Estimates sidebar item -- it shows every estimate across your organization in one sortable, filterable table. Use it to track pipeline value, find estimates that need follow-up, and open any estimate's full editor. Change Orders share this exact same list component at a separate route (/overview/change-order-report); the two are otherwise identical except for which record type they show.

Estimates list​

Columns​

The columns below come from the estimate/change-order record's own fields plus a handful of computed columns (P.O./S.O., Job Value, Grand Total). Which of these are visible and their order can be customized per saved view; the set below is what shows on a default, unmodified view.

ColumnDescription
Estimate DateThe date entered on the record. Default sort column, newest first.
Estimate NumberThe editable prefix + number (for example E005). If the record was renumbered, the original system-assigned number shows in parentheses next to it (for example 26-004-02-E001 (E020)).
JobThe linked job's full job number and name. Clicking this cell (not the row) navigates straight to the job's Overview tab instead of opening the estimate editor.
CustomerThe linked company.
TypeEstimate or Change Order. Fixed on this page (see the note above); the underlying filter for it is disabled here.
EstimatorThe user assigned as estimator.
StatusThe record's current status -- see statuses below.
Submission MethodHow the estimate is delivered (for example In Person, Electronic).
P.O./S.O.A purchase order number linked to this record, if any (computed from the Purchase Orders module).
Grand TotalThe computed sell price: the itemized line-item total for an Itemized record, or the Bid amount for a Bid First/lump-sum record.
Bid Amount ($)The Bid field entered directly on the record.
SubsidyThe Subsidy dollar amount added to the bid.
Job ValueBid + Subsidy, but only summed in when Include in Job Value is turned on for the record.
Closing DateThe estimate's expected or actual closing date.
Won DateThe date the record was marked with your instance's won status.
NameThe free-text Estimate Name field (labelled "Name" in the column header).

Quick tabs​

Three quick tabs sit above the filter row: All, Active (default), and Archived.

Filters​

A dropdown filter renders for every filterable column: Customer, Estimator, Job, Status, Submission Method, P.O./S.O., Closing Date, Won Date, and Estimate Date. The Type filter exists in the underlying component but is turned off on this page, since the page is hard-scoped to type: Estimate already.

Status filter dropdown open on the Estimates list, showing Draft, Won, and Empty as the only facet values on this canary instance

Each filter's dropdown lists only the values actually present on records right now (a live facet count against the current data), not every status your instance has ever configured -- on the canary instance used for this capture, only Draft and Won estimates exist, plus an Empty option for records with no value set on that field.

Search, sort, and export​

  • Search -- a single search box above the table. Sourced from the page's own filter configuration, the fields it searches are userName, emailAddress, tradeLevel, and phone -- user-record fields, not estimate fields like the estimate number or name.

    note

    This looks like it may be a leftover default rather than an estimate-specific search configuration, since none of those four fields appear anywhere in the Estimate Report's own columns. This documentation could not confirm live search behavior against an estimate number or name, since the crawl tooling used for these captures has no text-input step -- treat search as most reliable for finding an estimate by its estimator's name, email, or phone number until confirmed otherwise.

  • Sort -- click a column header to sort by it; an arrow shows the active sort column and direction (defaults to Estimate Date, descending).

  • Export -- the Export button in the top-right generates a file download of the current view's data. This documentation did not trigger an actual download while capturing these screenshots, to stay within the read-only rule for the canary instance.

Estimate and change order statuses​

Statuses are not a fixed enum -- they are PropertyValue records your instance configures under its business settings, so the exact list of status names (beyond the three special ones below) varies per instance. On the canary instance used for this documentation, only Draft and Won exist:

Status badge (confirmed in canary)Appearance
DraftDark/neutral badge
WonGreen badge

Three status slots carry special, wired-in behavior, configured under your instance's business settings as estimateChangeOrderInitialStatusId, estimateChangeOrderWonStatusId, and estimateChangeOrderLostStatusId:

Special statusWhat it drives
Initial statusThe status every newly created estimate or change order starts at (Draft, by default).
Won statusChanging Status to this value and saving triggers the job-linking wizard (if no job is linked yet) and, for change orders, the progress-report-regeneration check described below.
Lost statusA configurable status your instance can set aside for lost estimates.
note

This documentation could not confirm what, if anything, fires specifically when an estimate or change order is moved to the Lost status beyond the status label itself changing -- the canary instance used for these captures has no Lost status configured, and the application source only wires special behavior to the Initial and Won slots (estimateChangeOrderInitialStatusId and estimateChangeOrderWonStatusId); no estimateChangeOrderLostStatusId-specific side effect was found in the code paths this documentation reviewed.

Any other status in the list -- everything besides Initial/Won/Lost -- is an ordinary label your team can use to track where a record sits before it's won or lost; changing between them just updates the Status field with no other side effect.

Creating an estimate​

  1. Navigate to CRM → Estimates and click Create Estimate.
  2. Select or create a Customer record.
  3. Enter the scope of work, line items, and quantities.
  4. Apply markup or discount percentages as needed.
  5. Set the tax rate (pulls from Tax Settings).
  6. Add optional terms and conditions or notes.
  7. Save as Draft or send directly to the customer.

The sections below go deeper on the creation flow -- picking a creation type, building out the takeoff, and generating the quote letter -- and on what happens once an estimate is won.

note

The same estimate editor also opens from a Job's Estimates and Change Orders tab and from a Company record, not only from the Estimate Report. Whichever entry point you use, the panel and steps below are identical.

Choosing an estimate creation type​

Clicking New Estimate on the Estimate Report opens a menu with three creation types. All three land in the same editor panel (Worksheet, Letter, Files tabs) -- the type only changes what the Worksheet tab starts with.

New Estimate menu showing Bid First, Full Estimate, and Itemized Estimate

TypeWhat it starts with
Bid FirstA single Bid dollar amount plus Overhead % and Markup % fields -- a quick lump-sum quote with no line-item detail.
Full EstimateAn empty Worksheet with + Section and + Add Item controls, ready for an itemized takeoff.
Itemized EstimateThe same empty itemized Worksheet as Full Estimate.
note

This documentation could not confirm a functional difference between Full Estimate and Itemized Estimate beyond the menu label -- both opened into the same empty Worksheet in the canary instance used for this capture. If your instance behaves differently, treat this as a starting point rather than the final word.

A Bid First estimate isn't locked into lump-sum forever: a Convert Estimate to Full Breakdown button appears on the Worksheet tab until you turn on line items, at which point the estimate switches to the itemized layout described below.

note

The Files tab only renders once the estimate has been saved at least once (so it has an id to attach files against) and your role has Asset → View permission -- on the canary role used for these captures it did not appear, so only Worksheet and Letter could be confirmed with a screenshot. Based on the source, it's a standard file-attachment list scoped to this record.

Building the takeoff: sections, line items, and pricing​

The Worksheet tab is where the takeoff and pricing happen. For an itemized (Full Estimate / Itemized Estimate) record, it starts empty:

Worksheet tab on a new itemized estimate with no sections or line items yet

Estimate / Change Order Details​

Above the takeoff table, fill in the estimate's own details:

FieldRequiredNotes
Select JobNoLinks the estimate to a job. Leave blank for a pre-sale estimate.
Estimate NameNoFree-text label for the estimate.
Estimate LocationNoSet via the Add button.
Prefix / NumberYesAuto-generated (for example E/005); the number is editable.
Submission MethodYesHow the estimate will be delivered (for example In Person).
Include in Job ValueNoToggle -- rolls this estimate's value into the linked job's totals.
StatusYesDefaults to Draft. See How estimate status changes drive workflow below.
EstimatorNoSelect a user.
CustomerYesSet via the Add button.
ContactNoSet via the Add button.
CurrencyYesDefaults to your instance's default currency.
Estimate DateNoDefaults to today for a new record.

Sections​

Click + Section to add a section row to the takeoff table. Each section can be:

  • Renamed inline (defaults to "New section").
  • Reordered with the up/down arrows.
  • Nested with + Sub (subsections), up to the estimate's configured depth limit.
  • Given a line item directly with + Line.
  • Removed with the trash icon -- deleting a section with children prompts you to confirm, since it removes them too.

A new section row added to the takeoff table, with reorder, add-subsection, add-line, and delete controls

Line items​

Click + Add Item (top of the table) or + Line (on a section) to add a line item. Each line item first asks you to Pick type:

Line item type picker showing Labor, Material, Equipment, and Custom

TypeWhat it picks from
LaborA labor rate/trade selector.
MaterialA search combobox against your material catalog.
EquipmentAn equipment selector.
CustomA free-entry line, optionally tied to an account item.

Whichever type you pick, the row exposes the same pricing columns -- Qty, Unit, Unit cost, Total cost, Markup %, Markup $, and Line price -- plus three per-line links: Add Tax Rate, Add Discount, and Add Contingency. A + Add another [Type] row link lets you keep adding rows of the same type without reopening the type picker.

A Material line item with the catalog search field, per-line tax/discount/contingency links, and Add another Material row

Taxes and discounts per line​

Clicking Add Tax Rate on a line opens a tax-rate combobox directly under that line (defaults to a 0% rate on this canary instance) plus an + Add Another Tax Rate link for a second compounding or additional rate, each removable with the trash icon next to it:

A line with Add Tax Rate expanded, showing a tax-rate combobox and the Add Another Tax Rate, Discount(s), and Contingency links below it

Clicking Add Discount on a line instead opens a discount row with a free-text Discount name, a %/$ type toggle, a value field, and a computed dollar amount, plus its own + Add Another Discount link for stacking more than one discount on the same line:

A line with Add Discount expanded, showing the discount name field, percent/dollar toggle, and computed discount amount

Add Contingency works the same way as a per-line percentage or dollar amount, rolled up into the Line contingency (Σ per-line) row on the summary panel described below.

Markup shortcuts: set a default and apply to all lines​

The Set default markup % button on the summary panel (only shown while a section is in edit mode) opens a small modal rather than editing a line directly:

Set default markup % modal with a Markup % field and Update default for future lines / Apply default to all lines now buttons

ControlEffect
Markup % fieldPrefilled from the estimate's current default markup. Editable before choosing an action below.
Update default for future linesSaves the value as the estimate's default markup -- it seeds new priced lines added from this point on, but does not touch any line that already exists.
Apply default to all lines nowOpens a second, destructive confirmation (below) before overwriting every existing priced line's markup.
CancelCloses the modal without changing anything.

Choosing Apply default to all lines now opens ConfirmApplyMarkupModal, a hard stop before an irreversible bulk overwrite:

Confirmation modal reading "Overwrite markup on 18 existing lines?" with Cancel and Overwrite buttons

The dialog states the exact line count and target percentage ("Sets every priced line's markupPercent to 0%, overwriting any per-line overrides. This can't be undone.") and requires an explicit Overwrite click; Cancel returns you to the Set default markup % modal with your entered value preserved. This documentation opened both modals on a live canary estimate and canceled out without confirming, per the read-only rule for this instance.

Discounts, overhead, and the summary panel​

Below the takeoff table, Estimate-level discounts apply across the whole estimate (separate from the per-line discounts described above) via + Add Discount.

The Summary panel on the right recalculates live as you build the takeoff:

LineMeaning
Cost subtotalSum of line item unit costs before markup.
Total markupSum of per-line markup dollars.
Line sell (before discounts)Cost subtotal plus total markup.
Line discounts (Σ per-line)Sum of discounts applied on individual lines.
Line sell after line discountsLine sell minus line discounts.
Estimate-level discount (stack total)Sum of estimate-level discounts.
Taxable sell after estimate discountsSell value tax is calculated against.
SubtotalRunning subtotal before overhead and contingency.
OverheadPercentage (or dollar) markup applied on top of the subtotal.
Line contingency (Σ per-line)Sum of per-line contingency amounts.
Estimate contingencyAn estimate-wide contingency, entered as a % or a $ amount.
Grand totalThe final sell price.
Gross margin %Profitability at the current pricing.

Itemized vs. lump-sum (Bid First) pricing​

A Bid First estimate replaces the takeoff table and summary panel above with a compact bid worksheet: a Bid ($) amount, Overhead (%) and Total Overhead ($), Markup / Profit Margin (%) and Total Profit Margin ($), a Subsidy ($), and a Profitability Analysis block (Gross Margin % and Gross Margin $). There are no sections or line items to build -- the bid amount is the starting point and overhead/markup are applied on top of it.

Bid First worksheet showing Bid, Overhead, Markup/Profit Margin, Subsidy, and Profitability Analysis fields

Cost codes on estimates​

note

Cost codes are not assigned inside the estimate Worksheet -- line items are typed as Labor, Material, Equipment, or Custom, and a Custom line can be tied to an account item, but there is no cost-code field on the takeoff table itself. Based on the application source, cost codes are set up at the job level (cost code templates applied to a job) rather than on the estimate that precedes it, typically after a won estimate has been converted to a job. This relationship could not be confirmed with a canary screenshot, since it lives outside the estimate editor covered in this guide.

Once a job exists with cost codes applied, editing the bid on an already-Won estimate re-checks those cost codes and can warn you that the job's Schedule of Values is now out of sync -- see the SOV warning in How estimate status changes drive workflow below, and Cost Codes & Schedule of Values for the full picture of how cost codes feed the SOV.

How estimate status changes drive workflow​

The Status field on the Worksheet tab drives what happens to the estimate or change order next -- see Estimate and change order statuses above for what each status slot means. Changing the Status field to your instance's won status and saving does the following, in order:

  1. If the record isn't yet linked to a job, it immediately opens the convert-to-job wizard described below, before the save completes.

  2. If the bid amount changed on a Won Estimate that already has cost codes on its job (i.e. it was won once already and a bid value is edited again), a warning interrupts the save:

    Schedule of Values May Be Out of Sync The bid value has changed on this Won Estimate. The Schedule of Values and any associated Progress Reports may need to be updated to reflect this change.

    Choosing Save Anyway proceeds; Cancel returns to the form without saving. See Cost Codes & Schedule of Values for what the Schedule of Values actually is and how it's built from a job's cost codes.

  3. If the bid amount and subsidy together are lower than the record's current gross margin, a separate warning appears regardless of status ("Warning: Losing Value for this estimate... Are you sure you want to proceed?") -- Modify returns to the form, Proceed saves anyway.

  4. If it's a Change Order on a job that already has a progress report needing regeneration, Appello shows an informational dialog before continuing:

    Progress Report Needs Regeneration This job has a progress report that needs to be regenerated to include this change order. The job's percent complete will be affected until the...

    This is a notification (single acknowledgement button), not a blocking confirmation -- it informs you the regeneration is needed without stopping the save.

All of the above are in-app dialogs shown at save time; this documentation found no email or push notification tied specifically to an estimate/change-order status change in the application source.

note

No dedicated Send action was found in the application source for moving an estimate from Draft to Sent -- that transition is a manual Status change you make yourself, typically after exporting or sharing the quote letter (see Generating and sending a quote letter below).

Conversion tracking​

Once an estimate is approved, it can be converted into a project:

ActionResult
Convert to ProjectCreates a new project pre-populated with the estimate's customer, scope, and budget.
Link to Existing ProjectAssociates the estimate with an already-created project for tracking.
Create Change OrderIf scope changes after approval, a change order can be issued against the original estimate.

Converted estimates maintain a link back to the original so you can trace the full sales-to-operations pipeline.

Converting a won estimate to a job​

When you change an estimate's Status to your instance's won status and there's no job linked yet, Appello opens a full-screen wizard titled Let's Get Started instead of just saving:

Your estimate has been approved! The next step is to set up the associated Job and Project details. This wizard will guide you through the process of either creating a new Project and Job, or connecting this estimate to existing ones.

1. Pick a workflow option​

Choose one of four options:

OptionWhat it does
Create a New Project & JobCreates both a new project and a new job for this estimate.
Create a New Job OnlyCreates a job without a parent project.
Associate to an Existing Project & Create a New JobLinks to a project you pick, then creates a new job under it.
Associate to an Existing JobLinks the estimate directly to a job you already have.

2. Create or select the project and/or job​

Depending on the option chosen, the wizard walks through the matching forms -- Create a Project & Job, Create a Job, Select a Project, or Select a Job -- pre-filling the estimator, customer, contact, location, and PO number from the estimate. The Create a Job form inside the wizard mirrors the standalone job-creation flow -- see Create a Job for the full field-by-field reference, including the job's cost-code setup that later feeds the Schedule of Values.

3. Confirm​

The final step, Confirmation, summarizes the estimate's number, name, customer, and proposed value, then shows the job (and project, if applicable) that will be linked:

Please review and confirm that the following information is correct. The selected estimate, [number] - [name] created for [customer] with a proposed value of [amount], will be associated with the following job.

Confirming closes the wizard and leaves the estimate linked to the job (and project). Canceling the wizard reverts the Status field back to its original value and, if you had already created a job or project earlier in the wizard, deletes it.

note

This flow could not be captured with canary screenshots -- triggering it requires saving a real Status change to a won estimate, which is outside the read-only, cancel-only rule this documentation follows on the demo instance. The steps above are sourced directly from the wizard's own on-screen copy and its page sequence in the application code.

Generating and sending a quote letter​

The Letter tab on the estimate editor is a full document editor -- not a separate page -- where you compose the customer-facing quote letter for this estimate.

Letter tab open on a Won estimate, showing the document editor, formatting toolbar, and AI Co-Pilot panel

Starting from a document template​

Use the File menu in the Letter tab's toolbar:

File menu in the Letter tab showing New Document, Insert Template, and Save as Template

Menu itemWhat it does
New DocumentStarts the letter blank.
Insert TemplateOpens a picker of your instance's saved document templates to drop into the letter.
Save as TemplateSaves the current letter content as a new reusable template.

Insert Template opens a searchable list (Name, Date Uploaded, Last Modified, Uploaded By, File Size):

Insert Template picker with a search field and an empty template list

note

The canary instance used for this capture had no document templates configured, so the picker shows "No records found." Document templates themselves are managed under your instance's Settings; this guide only covers inserting one into a quote letter, not building the template.

Previewing and exporting the letter​

The download icon in the estimate editor's header opens a menu with two checkboxes -- Estimate Letter and Estimate Worksheet -- and an export action that generates a combined PDF from whichever you check. This is how you preview the finished document and produce a file to send to the customer.

note

No in-app Send button was found for emailing the quote letter directly to a customer from this screen. Based on the application source, sharing an estimate means exporting this PDF and sending it through your own email or file-sharing workflow; this documentation could not confirm an in-app send action, and the download menu itself could not be captured in a canary screenshot despite being visible in the source.

Invoicing a won itemized estimate​

A Won, Itemized estimate (not a change order, and not a Bid First/lump-sum record) with at least one line item and no invoice generated from it yet shows a Create Invoice button in the Worksheet tab, provided your role has permission to create job bills. Clicking it opens a confirmation panel before anything is created:

Field / controlWhat it shows
JobThe linked job's number and name, read-only.
Line preview listEvery itemized line, labelled the same way as on the Worksheet, each with its overhead-adjusted dollar value.
ContingencyShown as a single rolled-up line (line contingency + estimate contingency combined) if either is non-zero.
TotalThe full grand total that will become the invoice amount.
Explanatory note"Overhead is folded into per-line rates; contingency is added as a single line item. The estimate status will remain unchanged -- this action cannot be undone."
CancelCloses the panel; nothing is created.
Create invoiceDisabled while the line data is still loading or if there are zero lines. Creates a new job bill from the estimate's lines and opens it.

Once an invoice has been generated this way, the button is replaced with View invoice [number] →, which takes you straight to that invoice on the job's Billing tab -- see Billing report for how invoices/job bills are managed from there.

note

This documentation could not capture the Create Invoice button or its confirmation panel live -- the canary instance used for these captures has only one Won estimate, and it's a Bid First/lump-sum record, which this feature explicitly excludes (it only appears for Itemized estimates). The field-by-field description above is sourced directly from the confirmation panel's own component code, including its exact wording.

How estimates connect to other features​

FeatureRelationship
ProjectsA won estimate can create or link a project through the job wizard.
JobsA won estimate can create or link a job through the same wizard; see Create a Job for the job form itself.
InvoicingAn itemized, won estimate can generate a job bill directly -- see Invoicing a won itemized estimate above.
Change OrdersScope changes after approval are tracked as change orders, sharing this same list component at /overview/change-order-report.
Cost Codes / SOVA job's cost codes and Schedule of Values can fall out of sync with a won estimate's bid if the bid changes after the fact -- see Cost Codes & Schedule of Values.
Tax SettingsTax rates configured in Settings are the options offered by each line's Add Tax Rate control.