Quoting labor and projects
Assemble project quotes from standard labor products, catalog rates, and reusable widgets — so hours are priced the same way every time and reach your PSA.
Written By Mike Forte
Last updated About 1 hour ago
Project quotes fail when hours are invented on the deal. A laptop kit goes out without install time, two engineers quote the same migration at different rates, or the labor never reaches the Professional Services Automation (PSA) system because it was typed as a note instead of a catalog line.
The building blocks are the same ones in Quoting best practices for new quoters:
- A listed catalog of Labor products — your standard roles and project fees, not one-off names
- Rates and markups set once — hourly or fixed fee, on the product or its category
- Bundles, add-ons, and project widgets so the hours travel with the hardware and the job type
When those are in place, a project quote is: pick the project template, drop in the widget for that job, set quantities (hours), send. The quote editor is designed for that loop.
If you start from a blank page, every deal encodes a new hour count and a new rate. The next hire cannot reuse last month's estimate, and the PSA never sees the work.
Do this in order
Do the setup before quoters and project managers send live proposals. Each step depends on the one before it.
- Standardize Labor products — if two roles share a name, or hours live only in someone's spreadsheet, someone will skip a line or pick the wrong rate.
- Decide fixed fee vs hourly in the catalog — a clean labor list with no rates still lets a line go out as a guess.
- Attach hours to the work — bundles, add-ons, and project widgets so labor cannot be left off a hardware or migration quote.
- Then quote — pick the template, set hours, leave the rate alone unless a manager already put the exception in a pricing book.
1. Standardize Labor products before anyone quotes hours
Labor is a product type, not a text box. On Product Detail the type Labor is time-based billing for project work or hourly services. It is separate from One-time hardware and Recurring services. Only Labor lines accept decimal quantities (for example 2.5 hours). Hardware and service lines are whole numbers.
A Labor product that is unlisted cannot be added to a quote. A Labor product with no category is also blocked — category is what Salesbuildr uses to apply markup, tax, and which product table the line lands in. New tenants already have a Labour category; keep your roles under it (or a tree you own) so quoters can filter instead of hunting.
Open Products and treat labor as a portfolio of roles and project fees.
Where the catalog comes from
How you add Labor products depends on your PSA:
After an Autotask role is deactivated, Salesbuildr does not automatically unlist that Labor product. Unlist it yourself so it drops out of the picker.
Price and markup on Labor that is already linked to Autotask, ConnectWise, or HaloPSA are locked in Salesbuildr (change the rate in the PSA, then let sync refresh). Autotask labor cost can still be edited here; Halo and ConnectWise labor cost is locked too.
What an approved Labor product looks like
Before a role or project fee is fair game:
- Type Labor, Listed on, Can be sold on
- A category (so markup and the quote's product table resolve)
- A consistent name and quote description — "Senior Engineer" everywhere, not "Sr Eng" on one deal
- Cost and sell price from your rules (next section), not a leftover acquired rate unless you locked it on purpose
Use Labels if you want a temporary "review" tag. Labels help you filter; they do not hide the product. Listed is the control that hides it.
What quoters should not do in the picker
The quote editor can Create new product, Create bundle, and (Autotask, when the feature is on) Import labour bundle. Those exist for product editors and exceptional deals. They are not the path for a standard project.
If the role is not in the listed catalog, stop and ask the person who owns the portfolio. Creating labor on the fly is how the next duplicate rate — and the next missed hour — gets in.
Quote-only labor bundles (created only on that quote, never saved as a catalog product) also fail later: you cannot save them as a reusable widget. Build the bundle in the catalog. See Products & Catalog if a labor widget save errors.
2. Price labor in one place — hourly or fixed fee
Salesbuildr does not have a separate "time and materials" switch. You express the commercial model with sell price and quantity:
Do not mix both models on the same catalog product. If you sell a role both hourly and as a project fee, create two Labor products. Otherwise someone will set quantity to 40 on a $12,000 fee.
Pricing belongs in Settings → Financial → Pricing Rules and on categories, not typed onto each quote line. A sell price is copied onto the line when the product is added. Changing the tenant strategy later does not rewrite lines that are already on a draft or a sent quote.
Hardware, professional services, and cloud licenses rarely share one percentage. Put a Labor / professional-services markup on the category. Do not type a sell price on every role "just in case" — an explicit sell price turns the strategy off for that item until you clear it. Use an explicit price to lock a round project fee or a PSA rate you do not want recalculated.
Labor usually has no distributor recommended retail price. That is expected — Product RRP on the line can show n/a. Markup-from-cost is the usual path; see Pricing strategy.
When one customer has a negotiated rate, put it in a pricing book or discount group. The quoter creates the quote for that company; the exception is already on the line.
Approval Rules catch what still slips through — including markup below a percentage. A new quoter can still edit a line's sell price on a draft, but a quote that drops under the floor should not reach the customer without a manager.
Labor lines do not carry a billing term (monthly / annual). Recurring retainers belong on Service products, not Labor.
3. Attach hours to the work — bundles, add-ons, and project widgets
Hours get missed when they are optional memory. Attach them to the catalog item or the job type so adding the work adds the labor.
Bundles: labor with hardware
A bundle is the package: workstations plus install hours, a firewall plus configuration time. Build it in the catalog:
- Child lines keep their own type. Hardware stays a product; hours stay Labor.
- Each child has a quantity per bundle. Quote quantity multiplies: 10 kits × 1.5 install hours = 15 hours on the PSA line.
- The bundle parent does not sync to the PSA. Only enabled children do. The customer can still see the package name on the proposal.
Build those bundles in the catalog, not as a one-off group on a single quote.
Add-ons: labor that appears when hardware is added
On the hardware or service product (or its category), attach the install or professional-services Labor as an add-on:
- Required add-ons are included automatically when the parent is added.
- Suggested add-ons appear as a one-click recommendation.
That is how a new quoter adds a laptop and still quotes racking time. Category-level add-ons apply to every product in the family so you do not maintain the same labor child on fifty SKUs.
Project widgets and templates
A template is the third building block: layout plus the product tables you always need for that kind of job.
Do not start from an empty quote and rebuild the sections. On New Quote, pick a project template. The pattern that scales is one project template and widgets for each job type. Full detail is in Quote Templates.
Create the job widgets at Quotes → Widget templates (or Save a copy as widget template from an Items widget that uses catalog Labor products). Typical widgets: Microsoft 365 migration, firewall cutover, workstation rollout. Each widget already lists the Labor products and default hours; the quoter adjusts hours, not names.
When the same Labor product repeats with different task names, copy the line in the widget editor instead of searching the catalog again.
Lock widgets that must never come off — terms, mandatory labor scope, attachments — so an account manager cannot delete the hours block on a live quote.
You can set a default quote template on the company so the project template is already selected for that customer.
Review widgets when rates change. A widget is only as current as the Labor products sitting in it.
What a quoter or project manager does on each deal
Once the building blocks are in place, the job on a live deal is narrow:
- Start from an opportunity or press Q.
- Pick the project template (or accept the company's default). Do not create a blank quote.
- Add the widget for that job type if the template does not already include it. Or add listed Labor products and bundles from the picker — search by name. Use add-ons the catalog already attached.
- Set quantities. On Labor, quantity is hours (2, 2.5, 40). On a fixed-fee Labor product, leave quantity at 1. Leave cost and sell price alone unless a manager has already put the exception in a pricing book.
- Glance at markup / margin. If a line looks thin, stop — do not type a lower hourly rate to "make it work."
- Add line notes if the delivery team needs context. Notes sync to the PSA with the line.
- Preview presentation view and send.
If Spreadsheet View is on for your workspace, use it to adjust many hour cells at once — same quote, same products. See Spreadsheet View.
That is assembling from approved blocks. Building from scratch is everything this article tells you not to do: a blank layout, a Labor product created in the editor, hours typed into a content widget, a second "Senior Engineer" that survived an acquisition, a quote-only labor bundle that cannot be saved as a widget.
How labor reaches your PSA
Quoted labor is only useful if delivery can see it. Salesbuildr pushes catalog Labor lines, not hours buried in a paragraph.
When you send (and when the quote is approved):
- Each enabled Labor line syncs as its own PSA line — Autotask quote item type Labor (the Autotask role), Halo quotation line, or ConnectWise opportunity product (unit Hour on one-time labor).
- Quantity and sell price on the PSA line are the values stored on the quote, not a live re-read of the catalog. Check hours before send.
- Bundle parents are skipped. Only child Labor (and hardware) lines appear in the PSA. If a child fails to sync, fix that child — it must already be linked to the PSA (and have a category if it was never imported). Listed only controls whether it appears in the picker.
- Lines the customer can still toggle off (unselected options, optional add-ons) must still be PSA-syncable, or Send is blocked.
- Zero-quantity placeholders are dropped on ConnectWise; Halo still carries them. Remove leftover
0hour rows before send unless you mean to keep them visible.
After approval — fulfillment:
- Autotask / ConnectWise: Create ticket. The picker lists Labor (and hardware) as separate rows — not the bundle parent. Service children are not selectable there; they stay on the Autotask quote or ConnectWise opportunity for contract workflows. You can split Labor across more than one ticket.
- HaloPSA: Create Sales Order. Product, service, and Labor lines are all selectable.
- Labor does not enter procurement. It is time, not a distributor order.
- Salesbuildr does not create PSA project phases or tasks from a bundle. The hours land as ticket charges, opportunity products, or sales-order lines. Plan the project in the PSA from those lines.
If a quote total reaches the PSA but a Labor line does not, open the quote's sync card and the PSA quote or opportunity. The usual cause is a Labor product that was never imported or mapped — especially Autotask roles that were never mapped to a category.
See also
- Quoting best practices for new quoters — catalog, pricing rules, and templates in order
- Quote Editor — add products, optional lines, send
- Quote Templates — one project template, widgets for the 10%
- Copy a line item in the widget editor — repeat the same Labor product with different task names
- Product Bundles — hardware plus labor, and what the PSA receives
- Product Detail — Labor type, Listed, pricing
- Importing Products — Autotask roles, Halo product groups
- Autotask Configuration — Roles → Categories
- Pricing strategy — markup vs RRP; labor RRP is often n/a
- Fulfillment Tickets — Create ticket / Create Sales Order
- Products & Catalog — labor widget and bundle save errors
Was this helpful?
Still need help? Ask the team