Estimates

Create and send estimates to customers, track their response, and convert accepted estimates into jobs or projects.

Overview

An estimate is a formal price quote you send to a customer before work begins. Estimates include line items (products and services), an expiration date, and a customer-facing portal link where the customer can review, accept, or decline the quote. Once accepted, you can generate a job or project directly from the estimate with all details carried over.

Estimates follow a status workflow: Draft > Sent > Viewed > Accepted or Declined.

Before You Begin

Prerequisites:

  1. The Estimates module is enabled (Settings > Modules).

  2. Your account has at least one customer record.

  3. Job types are configured (Settings > Job Types).

  4. You have the Estimates: Create permission on your role.

Creating an Estimate

Required fields

  1. Click Estimates in the sidebar navigation.

  1. Click the + New button. The estimate form opens.

  2. Select a Customer from the dropdown. Once selected, the Contact and Service Address fields appear.

  1. Select a Job type from the dropdown.

  2. Confirm the Date — defaults to today's date.

  3. Confirm the Due date — defaults to 30 days from today.

Optional fields

  1. Select a Contact — the customer's point of contact for this estimate.

  2. Select a Service Address — the location where the quoted work would take place.

  3. Select an Assignee — the team member responsible for this estimate.

  4. Enter a Reference — a PO number or external reference for your tracking.

  5. Enter a Description — use the rich text editor to describe the scope of work.

  6. Add Labels to categorize the estimate (e.g., "Priority", "Residential").

  7. Click Save.

Expected result: Forz creates the estimate with the first status in your estimate status workflow (typically "Draft"), assigns a sequential estimate number (e.g., EST-1023), and auto-populates the billing and service addresses from the customer and site records.

Note: Forz auto-generates a token-based customer portal URL for every estimate. You can share this link with the customer so they can review the estimate without logging in.

Adding Line Items

Line items define the products and services included in the estimate. Estimates share the same line item system used by invoices.

  1. Scroll to the Products & Services section of the estimate.

  1. Select a product or service from the dropdown, or type a custom item name.

  2. Enter the Qty (quantity) and verify the Unit Price.

  3. Optionally set a Discount (amount or percentage) and a Tax Rate.

  4. Repeat for additional line items. Forz adds a blank row automatically.

Expected result: The estimate total updates as you add and modify line items. The amount reflects all line items with discounts and taxes applied.

Tip: If you frequently quote the same services, set up your products and services in Settings so they appear in the line item dropdown with pre-filled prices.

Sending an Estimate

Once the estimate is ready, send it to the customer or mark it as sent.

  1. Open the estimate from the estimates list.

  1. Click Mark as Sent to update the status to "Sent" without emailing, or use the email option to send the estimate via the configured email template.

Expected result: The estimate status changes to "Sent" and a note is logged recording the action.

Note: When a customer opens the estimate via the portal URL, Forz automatically tracks the view and updates the status to "Viewed." You can see the view history on the estimate detail page.

Accepting or Declining an Estimate

You can manually update an estimate's status when a customer responds.

  1. Open the estimate.

  1. Click Accept to set the status to "Accepted", or click Decline to set it to "Declined".

Expected result: The status updates, and a note is logged with the action and timestamp.

Converting an Estimate to a Job

After a customer accepts an estimate, generate a job to begin the work.

  1. Open the Accepted estimate.

  1. Click Convert then click Job.

  1. Forz creates a new job with the customer, service address, contact, system, job type, and all line items copied from the estimate.

  2. The estimate links to the newly created job.

Expected result: A new job opens with the status "Unscheduled" and a unique job number. All line items from the estimate carry over to the job. The estimate records which job was generated from it.

Warning: The generated job must pass validation to be created. If the estimate is missing required job fields (such as a customer), the generation fails and you are redirected back to the estimate with an error message.

Converting an Estimate to a Project

For larger scopes of work, you can generate a project instead of a single job.

  1. Open the accepted estimate.

  1. Click Convert then click Project.

  2. Forz creates a new project with the customer, service address, description, and amount carried over from the estimate.

Expected result: A new project opens with the status "Unscheduled" and the name "Estimate #[number]" (e.g., "Estimate #1023"). The estimate records which project was generated from it.

Printing and PDF Generation

  1. Open the estimate.

  1. Click Print to open a print-friendly view, or click PDF to download a PDF file.

Expected result: The PDF is named in the format Estimate-[number]_[customer-name]_[date].pdf (e.g., Estimate-1023_Acme-HVAC_2026-03-14.pdf).

Estimate Detail View

After creation, the estimate opens in a detail view:

Left column — Details:

  • Customer (linked)

  • Status (with status workflow controls)

  • Job type, reference, assignee, created by

  • Date and due date

  • Labels

  • Billing address (auto-populated from customer's primary site)

  • Service address (auto-populated from the selected site)

  • Custom fields (if configured)

  • Signature (if captured)

  • Related job or project link (after conversion)

Right column — Tabs:

  • Overview — products & services (line items), totals, discounts.

  • Files — attached documents and files.

What Happens After Creation

When an estimate is saved, Forz automatically:

  • Assigns an estimate number — sequential, unique (e.g., EST-1023).

  • Sets the initial status — the first status in your Estimate status workflow (typically "Draft").

  • Generates a customer portal URL — a unique token-based link the customer can use to view the estimate without logging in.

  • Populates addresses — the billing address is pulled from the customer's primary site, and the service address from the selected site.

  • Logs the creation — a note is added recording who created the estimate.

Warning: An estimate cannot be deleted if it has been converted to a project (unless the linked record is a job). Decline the estimate instead if it is no longer needed.

Common Scenarios

Quoting an HVAC maintenance contract

  1. Create a new estimate for the customer "Riverside Office Park."

  2. Set the job type to Maintenance.

  3. Add line items: "Quarterly HVAC Inspection" (Qty: 4, $275 each) and "Filter Replacement" (Qty: 4, $45 each).

  4. Set the expiration date to 14 days out.

  5. Save and send the estimate via email.

  6. When the customer accepts, click Generate Job to create the first maintenance visit.

Bidding on an electrical panel upgrade

A commercial customer requests a quote for upgrading their electrical panels across three buildings. Create an estimate with line items for each building's panel, labor hours, and materials. Add the label "Commercial" for filtering. Share the customer portal URL so the facilities manager can review and accept. After acceptance, generate a project to track the multi-building scope.

Plumbing repair with signature capture

A property management company requires signed estimates before approving work. Create the estimate for the pipe repair, send it via the customer portal, and have the property manager sign electronically. The signature is stored on the estimate record and included in the PDF.

Troubleshooting

Problem

Solution

"Customer" dropdown is empty

Create at least one customer first. Go to Customers > + New.

"Job type" dropdown is empty

Configure job types in Settings > Job Types.

Generate Job button fails with "Job was not created"

Verify the estimate has a valid customer and job type. Check that all required job fields are present.

Estimate does not appear in customer's portal

Confirm the estimate status is "Sent" or later. Share the customer portal URL found on the estimate detail page.

Cannot delete an estimate

The estimate may be linked to a project. Estimates linked to projects cannot be deleted. Use Decline instead.

Billing or service address is blank

The customer must have a primary site configured, and a site must be selected on the estimate for the service address to populate.