Jump to…
- Your services, grouped into families
- See your cost and profit margin at a glance
- Preview costs at your typical job size
- What a service is
- Service flags
- Cost codes
- Telling BidCraft how long the work takes
- Setting your own materials estimate
- Pricing by markup or margin — your choice
- Picking a unit
- Service bundles
- Service variants
- How proposals use your catalog
- The catalog grows on its own
- Every bid you send teaches BidCraft your real prices
- Editing and pricing
- Keeping an eye on your catalog
- Finding and merging duplicates
- Starting over
- Auditing your catalog
- Archiving vs deleting a service
- Next steps
Building your service catalog
Your service catalog is the menu of work you sell. Each entry is a reusable, priced piece of a job — Demo and prep on a small bath, Kerdi shower install, Heated floor install per sqft, Plumbing rough-in, Edge trim install per linear ft. When BidCraft builds a proposal, it tries to match every line of work to something in your catalog. The closer the match, the better the price.
You'll find it in the sidebar under Catalog → Services, or directly at /my-services.
On a computer, click a service's row to open the line editor right there: its name, what the homeowner reads, how it's priced (Per sq ft, Per lin ft, Each, Flat for job, By the day or At cost), and its materials and tasks. It's the same editor your job-type templates use, and it lists every template that uses the service, since a change here reaches all of them. Click the service's name (or Details in its ⋮ menu) for the full service page.
Once you're inside a service, a sticky pill bar at the top jumps you between Overview, Pricing, Materials, Tasks, and GHL Sync — the full editor in one scrolling page.
Your services, grouped into families
If you sell the same job in a few flavors — Standard, Plus, Premium — those tiers group together on the list under one row: the base service with a small "N tiers" pill next to it. Tap the row to expand it and see every tier indented underneath, each with its own badges showing what makes it different (pattern, tile size, material, or a custom tag).
This keeps the list scannable even once you've got a dozen variations of the same core job. Search for a tier by name and its family expands automatically so you can see it in context next to its siblings.
[!tip] Don't have tiers yet? Any service can grow one — see Service variants below.
See your cost and profit margin at a glance
Every row on the list shows four numbers side by side, so you don't have to open a service to know if it's actually making you money:
- Cost — what this job costs you: materials plus labor, added up from what you've told BidCraft the service consumes and how many crew-days it runs
- Price — what you charge for it
- Margin — your profit as a percentage, color-coded so it's readable in half a second: green for healthy, amber for thin, red for a margin that needs attention. A pass-through service (permits, fees — no markup) shows "at cost" instead of a percentage
- Basis — the job size these numbers are calculated against, like "@ 90 sqft"
If a service's cost shows a small amber dot next to it, that means a material on the list still needs a product picked or a price set — the cost you're seeing is a partial number, not the real one yet. Hover the dot for specifics, then head into the service to finish setting it up.
Preview costs at your typical job size
Cost and price for a per-sqft or per-linear-ft service only mean something next to a job size — $14/sqft is a different number on a 40 sqft backsplash than a 400 sqft floor. That's what Basis is: the typical job size BidCraft previews the numbers against.
Every service starts with a sensible default (a 40 sqft backsplash, say, or a 90 sqft shower floor) based on its category. Want to see the numbers for how you actually run that job? Open the service and tap the job size in the Economics section to set your own — the cost, price, and margin recalculate immediately, everywhere that service shows up.
What a service is
Every service has these pieces:
- Name — what you call this work
- Category — the bucket it falls into (demo, install, waterproofing, accessories, plumbing, etc.)
- Pricing model — how you charge for it: fixed, per sqft, per linear ft, hourly, per unit, or pass-through (for permits and fees with no markup)
- Base price — your starting number for that pricing model
- Dimension variable — the project measurement that scales the price (e.g., floor square footage drives a per-sqft floor install; perimeter drives per-linear-ft baseboard tile)
- How long it takes — a default crew-days number (on fixed-price services) or a production rate (on per-sqft / per-linear-ft services). See below.
[!tip] Set the dimension variable correctly and BidCraft will auto-size the quantity from the project's measurements. A 48 sqft floor with a $14/sqft service line writes itself.
Fixed and per-unit prices hold. A service priced fixed or per unit with a base price charges exactly that price on every bid — it isn't re-worked from your day rate. A per-unit service charges the price times the count on the line: one niche at $650 is $650, two niches are $1,300. Set the count on the line's price box when you review the scope. An hourly service priced by the day charges its day price × the line's crew days; one priced by the hour charges its rate × the hours you type on the line (until you type hours, it's priced the way it always was — your usual price for it, or crew days × your day rate).
Service flags
Every service also carries four switches, found on its detail page under Flags:
- Taxable — sales tax applies to this service on invoices. On by default; flip it off for labor-only or otherwise exempt lines.
- Allowance item — a budget placeholder rather than a firm price. The real number gets set once the client makes their selections. Services flagged this way show a small Allowance tag next to their name on the Services list.
- Allows customer write-in — marks this line as one where a customer can attach their own notes or selections.
- Specification item — a spec/detail line shown for clarity rather than priced on its own (e.g. "Grout color: match existing").
These are metadata for now — they describe the line item so your catalog stays organized and future features (like tax rollups and a customer-facing portal) have something to build on.
Cost codes
Every service also has an optional Cost code — an accounting code like "2200 Tile & Stone" you can use to group services for job costing. It sits right next to Category on the service page, with the same type-ahead suggestions the unit picker uses: a curated starter list of common remodel-trade codes, but you're free to type your own if your bookkeeping uses different numbers. Set one and it shows as a small line under Category on the Services list.
Cost codes are optional and don't affect pricing or proposals today — they're groundwork for accounting-export features down the road.
Telling BidCraft how long the work takes
Price is only half the picture — BidCraft also tracks how many crew-days each piece of work runs, so your proposals come with a realistic schedule instead of a guess.
Every pricing model gets a Default Crew-Days field now — fixed, hourly, and per-unit services included, not just the ones that scale by area. Put in how many days this work usually takes (quarter-days are fine — 0.5, 1.25, 2).
Per-sqft and per-linear-ft services also show a Production Rate alongside it — how much your crew gets done in a day (e.g., 120 sqft/day, or 60 lf/day). BidCraft divides the project's measurement by your rate to estimate the days. Set both and production rate wins; crew-days is the fallback when there's no rate.
Either way, the number you set becomes the starting point on every proposal. When BidCraft drafts the scope, it begins from your crew-days and only nudges it up or down for things specific to that job. You can always adjust it during scope review. Production rate is used for scheduling only — it never changes the price.
Setting your own materials estimate
The Materials tile in a service's Economics section normally shows a roll-up — the sum of everything on the service's materials list. If that list is incomplete or you just know the number off the top of your head, click the Materials tile and type in your own estimate. BidCraft prices the service off your number from then on, and shows the roll-up total underneath for reference so you can see how the two compare. A Use roll-up button switches back to the computed number any time.
Pricing by markup or margin — your choice
Below the four economics tiles sits a small pricing grid: Unit Cost, Unit Price, Markup %, and Margin %. They're all connected — change any one and the others recalculate:
- Type a new Unit Price and BidCraft recalculates your markup and margin against it.
- Type a Markup % (price as a percentage above cost) and BidCraft raises or lowers the price to hit it.
- Type a Margin % (profit as a percentage of price) and BidCraft solves for the price that gets you there.
Use whichever number you think in. Some contractors price by "cost plus 40%," others think in terms of "I want a 30% margin on this" — the grid does the math either way and they always agree with each other. The grid is hidden on pass-through services (price = cost, no markup by design) and on bundles (price = the sum of the bundle's children).
Hourly and per-unit services don't ask for a production rate — they're already measured in hours or item count.
Picking a unit
When you set a service's unit label — the "sqft" in "$14/sqft," the "each" in "$45/each" — start typing and BidCraft suggests from a comprehensive list of common trade units (sqft, linear ft, hour, day, room, niche, bag, roll, and more). Keep typing if you don't see what you want; any label you type is accepted. Per-sqft and per-linear-ft services lock the unit to match their pricing model since the math depends on it — you'll see a "Locked by pricing model" note instead of a picker there.
Service bundles
Some work is really a package — "Standard shower install" might actually be demo + waterproofing + tile install + trim + grout + clean. You can build a bundle: a parent service that contains child services with quantities. When the bundle hits a proposal, it expands into its children.
Bundles are useful when you sell consistent packages (showers, full baths, kitchen backsplashes) but want the underlying lines to remain priced individually so margins stay clean.
Service variants
A different problem: you sell the same kind of work in several flavors — Wall tile install for small tile, Wall tile install for large format, Wall tile install in herringbone. Same service, different difficulty, different price. Variants are how you handle that without copy-pasting your service three times — and they're exactly what shows up as the tiers in a service family (see above).
On any service detail page, hit the + Variant button (also available right on the Services list, next to a family's parent row). A small modal opens that pulls from your pricing multipliers (tile size, tile material, pattern — the ones you tuned in the pricing interview):
[!steps]
- Pick the modifier(s) that describe this variant — Pattern: Herringbone, Tile size: Large format, etc. Each dropdown shows your configured multipliers next to the label, like
Herringbone (1.35×).- Quick-pick chips below the modifier dropdowns cover common one-off qualifiers — Small / Medium / Large / Curbless / With niche / Premium. Click a chip or type your own.
- The Preview block shows the variant's name (parent name + modifier labels joined) and the calculated base price:
parent price × compound multiplier.- Hit Create variant. BidCraft deep-copies the parent's materials and tasks (with fresh IDs so future edits stay independent), names the new service, and drops you into its detail page.
Each variant shows a small badge row at the top of its detail page — and on the Services list — that surfaces which modifiers it carries. Pattern badges are terracotta, size badges are brass, material badges are sage, free-text qualifier tags are neutral. That makes the list scannable: you can see at a glance which row in your catalog is the herringbone variant, which is the natural-stone variant, etc.
[!tip] Variants are independent after creation — edit the materials, swap a task, raise the base price, and only that variant changes. The parent service is unaffected.
If you've been wondering where Build Recipes went, Variants is the answer — same goal (don't rebuild similar services from scratch every time), simpler mental model (it's just a service that points back at its parent).
How proposals use your catalog
When you generate a proposal, BidCraft compares each piece of work the AI identified against your catalog:
- Exact match — the work clearly maps to one of your services. The line uses your service's pricing as-is: your square-foot rate times the measured area, your flat price, or your per-unit price times the count.
- Likely / partial match — the AI thinks it's similar but isn't sure. It'll suggest the match but you confirm.
- No match — the AI falls back to your pricing rules (day rate, multipliers, rules of thumb) to build a fresh line.
The more of your catalog is filled in, the less the AI has to guess. Most contractors start light and grow it as they ship jobs.
When you're manually linking a line to a service — during scope review or in a project template — and that service has tiers, the picker shows them grouped the same way: the base service first, its variants indented underneath with their modifier badges, so you can pick the exact tier the job calls for instead of settling for the base version.
The catalog grows on its own
Two things automatically expand your catalog over time:
- Save as Service — on any line of a generated proposal, hit "Save as Service" and that line becomes a permanent entry in your catalog. Next time work like it shows up, it'll match.
- Auto-save on signed proposals — when a proposal you shipped gets signed, BidCraft offers to save its line items as services. Pre-checked smart defaults (skips one-off allowances, flags duplicates of existing services). Just confirm.
When BidCraft creates services from a proposal this way, it also auto-fills the materials list and starter tasks in the background. They appear within a few seconds on the service page — you can refine or swap anytime.
This means your catalog quietly fills in with the actual work you actually do — not generic templates someone else picked.
[!note] Catalog services also remember your historical pricing. If you saved a "Demo and haul" service at $1,400 on three different jobs, BidCraft sees the spread and uses it as evidence the next time it builds a similar proposal.
Every bid you send teaches BidCraft your real prices
You don't have to save anything for your catalog to learn what you charge. Every time you send a proposal, BidCraft notes the price you actually sent for each catalog service on it. It's one price per job per service:
- Resend at a new price and that job's price is updated. It isn't counted twice.
- When the client signs, the price is marked as signed and set to what they signed, including the options they picked. An add-on they turned down or a package they didn't choose doesn't count.
- Save as Service on the same job doesn't add a second price either. One job is one price.
What gets noted:
- Per sq ft and per lin ft work: your rate before tile difficulty. A $16 rate that came out at $20 because of large-format tile is noted as $16.
- Flat and per-item services: the price per item, when it came from your catalog or you typed it yourself.
- A discount on the bid: the price before the discount, with a note that the job had one.
What's never noted: jobs you priced by the day, lines priced as days × your day rate, permits and fees at cost, your minimum charge, the sample project, and change orders. Proposals are only learned from when you send and when the client signs, never while you're still drafting.
Range prices follow what you send. A service priced as a range uses these prices straight away. A fixed price never changes without you. Your sent prices are kept as history next to it, and that's what lets Biddy tell you when the price you saved and the prices you actually send don't agree.
Editing and pricing
Click any service to open its detail page. From there you can edit the name, change the pricing model, adjust the base price, and build out its two parallel lists:
- Materials — what your crew consumes when performing this work. See Service materials and favorite-for-roles.
- Tasks — what your crew physically does when performing this work, with realistic hour estimates. See Service tasks and execution checklists.
Both lists travel with the service. When a client signs a proposal that uses the service, the materials show up on the project's internal materials list and the tasks land in the project's Schedule & Tasks section — automatically.
Keeping an eye on your catalog
Right under the Services heading there's a one-line health check:
59 active · 3 possible duplicates · 30 auto-created in the last 30 days
That third number is the one worth watching. Because your catalog fills in on its own from the jobs you ship, it can grow faster than you notice — and if the same work gets saved under a slightly different name a few times, your estimates end up choosing between copies instead of matching the one you actually price from. A steady stream of auto-created services is the early warning.
Both of the last two numbers are clickable. Possible duplicates opens the duplicate finder below; auto-created re-sorts the list newest-first so you can see what's been arriving.
Finding and merging duplicates
Tap possible duplicates in the health line and you'll get the one duplicate finder — there used to be a second one inside the Catalog Audit that could disagree with it and with the dashboard's nudge; they're one now. Each group wears a chip saying how it was found: same name (copies your estimates genuinely can't tell apart), looks the same (same work, reworded), or might be the same (the loose net — worth a look, merge only if they really are one service). The health line counts the first kind as duplicates and the rest as "to check". Each row shows what you need to pick a winner:
- the price and pricing model
- how many times it's been used
- how many past prices it's collected
- when it was created, and whether a build created it (an auto-created tag)
- whether it has a materials list built in (and how long it is) — a copy with no materials says so in as many words, because that's usually the fact that decides it
BidCraft pre-selects the one to keep — the most-used, then the one with the most pricing history, then the oldest — but it's a radio button, so change it in one tap. Hit Merge into "…" and everything else in that group is archived, not deleted. Anything pointing at the archived ones — project templates, estimates you haven't locked yet, proposals — is re-pointed at the one you kept, so nothing loses its link. If the one you kept had no materials but a copy you archived did, the merge carries that list across onto the keeper first — so picking the most-used copy never costs you the materials someone built on the other one.
If you change your mind, switch the filter to Archived and restore any of them.
[!tip] Merging is the fix for "it keeps making a new service instead of using mine." Once there's only one service by that name, your estimates match it every time. Until you do merge, when two copies fit a line equally well, your estimate picks the one that carries materials, then the one with a price, then the most-used — so a hollow duplicate born from a build doesn't win over the service you actually set up.
Starting over
Sometimes a catalog isn't worth cleaning up piece by piece — the prices aren't how you really work any more, and you'd rather start fresh. At the bottom of the Services page (owners only) there's Start over.
It archives every active service at once. Nothing is deleted: they all move to the Archived filter, and you can bring back any one of them whenever you like. It also stops any estimates you haven't locked yet from queueing their lines to be saved as new services — otherwise clearing the catalog would quietly rebuild it on your next proposal. Estimates you've already locked and proposals you've already sent are left exactly as they are.
There's a checkbox to add back a set of standard starter services (shower demo, waterproofing, tile install, and so on). These come with names and units only — no prices — so you'd price each one yourself. Leave it unticked to start completely empty.
You'll have to type RESET to confirm, because it's a big move.
Auditing your catalog
Over time, a catalog that grows from real jobs picks up services that were used exactly once — scope that should have been rolled into another service or kept as a pass-through. The Unused services check at the top of the Services list (owners and admins) lists them — used on exactly one project, more than 30 days ago — with a per-row Archive action. Duplicates aren't in here any more: they live in the one duplicate finder above, which is also what the dashboard's "Review N duplicate service groups" nudge opens. When there's nothing to act on, the check collapses to a sage "Catalog is clean" pill.
[!tip] A leaner catalog produces better proposals. The AI has to choose between fewer candidates, so its matches are more confident — and the Save as Service offer on signed proposals stops re-creating near-duplicates.
Archiving vs deleting a service
When you stop offering a service, you've got two options:
- Archive — the reversible one. The service drops out of proposal matching but sticks around for historical context, and you can restore it any time from the Archived filter on the Services list. Use this when you might bring the work back later, or when older proposals still reference it.
- Delete — permanent. It removes the service from BidCraft entirely and can't be undone. If the service was synced to GoHighLevel, the GHL product itself is left untouched — only the link from BidCraft goes away.
You'll find Archive and Delete side by side on each row of the Services list, plus a Delete service button at the top of any service's detail page. Both ask you to confirm first. When in doubt, archive — you can always delete an archived service later.
Next steps
- Wire up what each service consumes: Service materials and favorite-for-roles
- Wire up what your crew does for it: Service tasks and execution checklists
- See how proposals turn services into priced lines: Materials lists explained
- Stock the products your services depend on: Your materials library
- See the templates that drive proposal composition: How job type templates work
Email andy@businessupai.com and a real person on the BidCraft Tile team will get back to you. If you're signed in, you can also ask Biddy from any page in the app.