Quotes — price a job and get customer sign-off before the work starts
Who it's for
Owners and managers build and send quotes. Designers may access quotes from the billing tab while pricing design work. Front-desk staff with the Billing & Quotes permission can create quotes from an existing customer record or directly from a job.
Customers interact with quotes entirely from a public link — no login required. They can view itemized pricing and click a single button to approve.
Where it fits
Quotes live between the Lead and Approved stages in your workflow. After a customer inquiry comes in (from a phone call, walk-in, or the public request-a-quote form), you create a quote, fill in materials and labor, and send it. When the customer approves it you convert it to a job and proceed to scheduling, design, and production. See workflow-map.md for the full lifecycle.
Overview
A Wraptor quote is a branded, itemized price sheet with materials, labor, subtotal, tax, and a total. Every quote gets a unique number in the format SO-00001, SO-00002, and so on. When you mark a quote as Sent, Wraptor generates a private public link (no login required) that you can email to the customer. The customer opens the link, reviews the line items, and clicks Approve Quote to accept.
Once approved, you can convert the quote to a job with a single click. Wraptor carries over the customer, vehicle, wrap type, and title, creates a new JOB-XXXX record, and links the quote to it permanently so you can always trace back to the original price.
A quote doesn't have to start from a blank builder. Wraptor can draft one for you: from a WrapStudio design's measured coverage (Design-to-Quote), or from an inbound WraptorMail inquiry (Email-to-Quote). Both land as a DRAFT you review before sending — nothing is ever auto-sent. And instead of one price, you can offer the customer Good / Better / Best tiers and let them pick.
Screens & navigation
Quote list (Billing → Quotes tab, /billing?tab=quotes)
The Billing screen has a Quotes tab that lists all quotes for the shop, ordered newest first. Each row shows quote number, status badge, customer, vehicle, wrap type, and total. Click any row to open the quote detail. (Billing lives in the "More" menu.)
New Quote dialog Click the New Quote button on the Quotes tab to open the dialog. Select or create a customer, optionally select or create a vehicle, choose a coverage (wrap) type, add a title, and add notes. The dialog can create a brand-new customer and vehicle on the fly — no need to leave the Billing area. Saving opens the new quote's detail page.
Quote detail page (/quotes/[id])
The quote editor. It has:
- Header — a back arrow to the Quotes tab, your shop logo (if configured), the quote number, status badge, a PDF download button, and the Actions dropdown.
- Quote Builder — a compact, two-column estimator (not a free-form line-item grid). It walks you straight to a price:
- Quote — title, customer (read-only), Attn (contact person), and a Tax zone chip selector.
- Vehicle — a free-text vehicle description, a Type chip selector (Car, SUV, Pickup, Van, Box Truck…), and a Coverage selector (Full / Partial) with an editable sq ft field that pre-fills from the vehicle preset.
- Material — pick a material from chips drawn from your rate card (each shows its durability in years), or add a one-off roll for this quote with + Add roll (brand, product, vinyl $/sqft, lam $/sqft, years). Vinyl and laminate $/sqft pre-fill from the catalog and can be overridden per quote.
- Labor — Design, Production, and Install rows, each with editable hours × rate that default from your rate card and the chosen vehicle/coverage.
- Offer tiers — a toggle above the estimator. Off (the default) is exactly the single-price builder described above. On, it replaces the single estimator with three tabs — Good / Better / Best — see Good/Better/Best tiers below.
- AI Price Assist — see below.
- A total bar at the bottom shows Material, Labor, Tax, the grand Total, and (when enabled) a deposit toggle with an adjustable deposit percentage and the resulting deposit amount. With tiers on, the bar shows the active tab's numbers plus a compact 3-up summary strip across all tiers.
- Preview PDF and Save buttons sit in the builder's top bar. Editing is only enabled while the quote is in DRAFT status; sent/approved quotes are read-only here.
- AI Price Assist panel — an expandable section inside the builder. Click it and Wraptor returns a rate-card estimate (suggested line items and subtotal) plus your shop's historical price range (min/avg/max from completed jobs) with a confidence label. You can apply its suggested sq ft to the estimator; the rest is informational.
The builder does not include a saved-template picker, a PDF/image import, a free-form terms-and-conditions box, or a quote-theme selector. The estimator with material/labor chips above (plus the optional tier tabs) is the whole editing surface.
Good/Better/Best tiers
Turn on Offer tiers in the quote builder to price up to three tiers — Good, Better, Best by default — instead of one number. Each tier is its own parallel estimate:
- Each tab has its own material, sq ft, price overrides, and Design/Production/Install hours and rates. The vehicle and customer info are shared across tabs.
- Rename any tier (up to 24 characters) and mark exactly one as Recommended (the star icon) — it's the tier the customer sees pre-highlighted.
- Copy from tier… duplicates another tab's inputs into the one you're editing, so you don't have to re-key a similar Better tier from Good.
- Wraptor seeds sensible starting points: wrap quotes seed Good/Better/Best from your Economy Calendered / Commercial Cast / Premium Cast material tiers; tint-flavored quotes seed Dyed / Carbon / Ceramic naming.
- Every tier's material total automatically includes a material waste allowance line, using your shop's default waste percentage (set in Settings; ships at 15%) — shown as "Material waste allowance — {pct}%" in each tab's summary.
- Quote-level totals (the number that drives the deposit, invoicing, and job pricing snapshot) always reflect the active tier: the customer's selected tier once they pick one, otherwise your Recommended tier.
- Turning the toggle off on a tiered quote does not delete your tier data from the database, but the quote reverts to showing the single-estimator view; turning it back on restores your tabs.
On the public quote page, a SENT tiered quote shows three selectable cards (name, total, "what's included," a Recommended badge) instead of a single price table. The customer picks a card — the line-item table and totals below update to match their pick — then clicks Approve Quote. Their choice is stamped onto the quote atomically with the approval: once approved, the public page (and everything downstream — the job's pricing snapshot, the PDF) shows only the tier they chose. Tier-less quotes ("Offer tiers" left off) look and behave exactly as before — nothing changes for them.
The quote PDF is tier-aware too: before a tier is picked, it opens with a compact tier-comparison table (each tier's subtotal/tax/total, Recommended flagged) followed by the Recommended tier's line items, labeled "Shown: {name} — see comparison above." Once a tier is selected (by the customer's approval, or because you picked one for them), the PDF shows only that tier's items with a "Selected: {name}" line — same as a tier-less quote's PDF otherwise.
Actions dropdown (on quote detail)
| Action | Available when |
|---|---|
| Mark as Sent | DRAFT status |
| Mark as Approved | DRAFT or SENT status |
| Mark as Rejected | SENT status |
| View Public Link | Quote has a public token |
| Create Job | APPROVED status and no job yet linked |
| Create Invoice | APPROVED status and already linked to a job |
| Delete Quote | Any status |
Public quote view (/quote/[publicToken])
A no-login page the customer sees when you share their quote link. Shows the shop logo, quote number, customer name, vehicle, project type, itemized line-item table (description, quantity, unit, unit price, total), subtotal, tax, and grand total — or, for a tiered quote, the three tier cards described above. If the quote is in SENT status, an Approve Quote button is shown (disabled until a tier is picked, on a tiered quote). After approval, the button is replaced with a confirmation message and the approval date.
Every open of a SENT quote's public page is recorded — Wraptor counts views and timestamps the last one. That view record is what powers the Viewed chip in your quote list and, if you've opted in, the automatic follow-up emails below.
Public touchpoint: request-a-quote
Request-a-Quote page (/request-quote)
A fully public form embedded at your shop's /request-quote URL. No login required. Visitors fill in:
- Contact information: name (required), email (required), phone, company.
- Vehicle information: year, make, model, color, vehicle type (Car, SUV, Truck, Van, Trailer, Bus, Boat, Other).
- Wrap type (Full Wrap, Partial Wrap, 3/4 Wrap, Color Change, Commercial Fleet, Lettering, Spot Graphics, Decals, PPF, Window Tint, Chrome Delete, Stripes, Other).
- Project details: free-text description of the project.
When submitted, Wraptor:
- Checks for spam via a honeypot field (silent pass for bots).
- Finds or creates a customer record using the visitor's email.
- Creates a vehicle record (or a placeholder "TBD" vehicle if no make/model provided).
- Creates a Job in
LEADstatus with the visitor's message as a note. - Sends a confirmation email to the visitor with their reference number.
- Sends a notification email to the shop team.
The visitor sees a thank-you screen with a JOB-XXXX reference number. The shop team then opens the lead in the Jobs board and creates a quote against it.
Note: the request-a-quote form does not create a Quote record directly — it creates a Job at LEAD status. The shop staff then builds and sends a quote from that job.
Design-to-Quote (from WrapStudio Design)
If you've already designed the job in WrapStudio Design, you don't have to re-measure it in the quote builder. Open the design's export dialog and, in the job-loop section:
- Create draft quote from this design (or New draft quote from design, if the job already has quotes) prices a fresh DRAFT quote from the design's real coverage — the artboard's measured square footage, panel count, your chosen material tier, and your shop's material rate for it — plus the material waste allowance.
- The design must be linked to a job that has a customer before you can create a quote from it; if it isn't, link it first.
- The new quote opens in the normal quote builder, already priced — review it, adjust anything, and send it like any other quote.
Email-to-Quote (from WraptorMail)
An inbound inquiry in your Inbox doesn't have to become a job before it becomes a quote. On an inbound email, click Draft Quote next to Create Job:
- Wraptor reads the AI-extracted inquiry details (vehicle, wrap type, customer info) and drafts a DRAFT quote — tiered (Good/Better/Best) when it recognizes the vehicle and a full-wrap-style service, priced from your real material and labor rates.
- If the AI can't confidently identify the vehicle or the service isn't one it can price (e.g., PPF or tint), you still get an unpriced draft shell — customer, vehicle, and title filled in, ready for you to price manually — rather than nothing.
- The quote's notes cite the source email so you can trace the price back to what the customer actually asked for.
- It is always a DRAFT — Email-to-Quote never sends anything to the customer on its own. A toast links straight to the new quote so you can review and send it.
Capabilities
Building quotes
- Create a quote from the Billing → Quotes tab (New Quote), from a customer record, or from a job detail panel.
- Set title, coverage (wrap) type, notes, and the contact person at creation time; edit the title, attn, vehicle, tax zone, material, and labor from the quote builder.
- The builder is an estimator: pick a vehicle type and coverage, set sq ft, choose a material (with per-quote vinyl/lam price overrides), and dial in Design/Production/Install hours and rates. Wraptor computes Material, Labor, Tax, and Total live.
- Material cost = sq ft × (vinyl $/sqft + lam $/sqft). Labor = hours × rate per row. Subtotal = material + labor.
- Tax is calculated from the selected tax zone: Standard (0% by default), UEZ (3.31%), or Exempt (0%). The shop's default tax rate ships at 0% — set your own state rate in Settings. If the customer is marked tax-exempt in their record, tax is 0 regardless of the zone.
- Enable or disable a deposit. When enabled, set the deposit percentage (default 50%); the deposit amount shows in the total bar.
- Add a roll on the fly — if you're quoting a material that isn't in your rate card yet, use + Add roll in the Material section to add it for this quote (brand, product, vinyl/lam price, durability years).
- Start a quote pre-priced from a WrapStudio Design export, or from a WraptorMail inquiry — see Design-to-Quote and Email-to-Quote above.
Good/Better/Best tiers
- Toggle Offer tiers in the builder to price up to 3 parallel tiers instead of one price. Off by default — a brand-new quote is single-priced unless you turn it on.
- Name each tier, mark one Recommended, and duplicate inputs across tiers with Copy from tier….
- The customer picks a tier on the public quote page; their pick is bound to the approval and flows into the job's pricing snapshot and the PDF.
- See Good/Better/Best tiers above for the full behavior.
AI Price Assist
- Expand the AI Price Assist panel inside the quote builder. It uses the quote's wrap type, vehicle type, and estimated sq ft.
- The panel returns a rate-card estimate (suggested line items + subtotal) and your shop's historical price range (min, avg, max) from completed jobs, with a confidence label ("High confidence," "Some history," "Limited history," or "Rate card only").
- You can apply the suggested sq ft to the estimator with one click; the rest is informational.
Sending and customer approval
- Mark a quote as Sent from the Actions dropdown. This sets the
sentAttimestamp. - Click "View Public Link" to copy or open the customer-facing URL (
/quote/[publicToken]). - Share the link with the customer by email, text, or any channel.
- The customer opens the link and clicks Approve Quote. This sets status to APPROVED and
approvedAtto the current timestamp. - Staff can also manually mark a quote as Approved from the Actions dropdown (no customer action needed).
- When Wraptor shows you a preview before sending a quote email, you can click Schedule for later instead of sending immediately — pick a date and time, then Schedule Send. Manage or cancel anything queued from Settings → Email & Notifications → Scheduled emails. See Inbox (WraptorMail) for the full send-later and quiet-hours picture.
Knowing when a customer looks — and following up automatically
- Every open of a SENT quote's public page increments a view counter and timestamp on the quote — no setup required.
- A Viewed N× chip appears on the quote in your list and on the quote detail page once it's been opened, with the last-opened time on hover.
- Automatic quote follow-ups (off by default) send a polite nudge if the customer hasn't opened the quote after 24 hours, and a second nudge if they opened it but haven't approved after 72 hours. Turn it on in Settings → Email & Notifications → Quote follow-ups. Follow-ups stop the moment the customer approves, rejects, replies, the quote expires, or you pause them.
- Pause follow-ups on any individual SENT quote from its Actions menu, without turning off the feature shop-wide.
Dead-quote win-back
- A separate, also-off-by-default automation for quotes the follow-ups above have stopped touching: one email 30 days after sending with no answer, and another at 60 days with a seasonal check-in. No fake discounts or countdown timers — just an honest "still here if you want it."
- Turn it on in Settings → Email & Notifications → Dead-quote win-back. It respects the same stop conditions as follow-ups (reply, approval, status change, pause) and never re-touches a quote it's already nudged at that stage.
- Both the quote-chaser (follow-ups) and the win-back engine are listed with real 30-day send counts on the Autopilots gallery, where you can also flip their switches.
Converting to a job
- Once a quote is APPROVED and not yet linked to a job, the Actions dropdown shows Create Job.
- Click it to create a new job. The job inherits the customer, vehicle, wrap type, and title from the quote. If the quote was APPROVED, the job starts in APPROVED status; otherwise it starts as LEAD.
- The quote and job are permanently linked. The job number appears on the quote; the quote appears in the job's Quotes & Invoices tab.
- A vehicle must be assigned to the quote before a job can be created.
PDF download
- Click the PDF button on the quote detail page to download a PDF of the quote (
/api/quotes/[id]/pdf).
Deleting quotes
- Delete a quote from the Actions dropdown. If the quote is linked to a job, the link is cleared (the job is not deleted). This action is permanent.
Step-by-step tasks
-
Create and price a quote
- Go to Billing (in the "More" menu) and click the Quotes tab.
- Click New Quote.
- Select an existing customer from the dropdown, or click the + icon to create a new customer (company name, email, phone, address).
- Optionally select a vehicle linked to that customer, or click + to add a new vehicle (make, model, year, vehicle type).
- Fill in a title (e.g., "Full Wrap — 2023 Ford F-150"), choose a coverage type, and add any notes.
- Click Create Quote. Wraptor opens the quote detail page.
- In the Quote Builder, set the vehicle type and coverage, adjust the sq ft if needed, pick a material (or add a roll), and dial in the Design / Production / Install hours and rates.
- Set the tax zone and toggle the deposit if you want one.
- Optionally expand AI Price Assist to sanity-check against your rate card and past jobs.
- Click Save, then Preview PDF to see the customer-facing quote.
-
Send a quote to a customer
- Open the quote and verify the price, totals, and customer are correct.
- Click Actions → Mark as Sent. The status changes to SENT and
sentAtis recorded. - Click Actions → View Public Link. The customer-facing URL opens in a new tab.
- Copy that URL and send it to the customer via email, text, or any channel.
- The customer opens the link and reviews the itemized quote. If they are satisfied, they click Approve Quote.
- The quote status changes to APPROVED and a timestamp is recorded.
-
Manually approve a quote and convert it to a job
- Open the quote in the quote detail page.
- Click Actions → Mark as Approved (if you have verbal approval and don't need the customer to click the link).
- Once the status shows APPROVED, click Actions → Create Job.
- Wraptor creates a new job (
JOB-XXXX), links it to the quote, and navigates you to the job detail panel. - From the job, proceed to scheduling, design, and production. (Once the quote is linked to a job, the Actions menu also offers Create Invoice.)
-
Handle a request-a-quote submission
- A customer visits your
/request-quotepage and fills in their contact info, vehicle, wrap type, and project description. - After submitting, they see a thank-you screen with a
JOB-XXXXreference number. - In Wraptor, open the Jobs board. The new lead appears in the LEAD stage.
- Open the job. The customer's message is saved as a note.
- From the job detail, create a quote: click the Quotes & Invoices tab and use New Quote, or go to Billing → New Quote and select this customer and vehicle.
- Build the quote, send the link to the customer, and wait for their approval.
- A customer visits your
-
Offer Good/Better/Best tiers
- Open a DRAFT quote's builder and toggle Offer tiers on.
- Wraptor seeds three tabs (Good/Better/Best) from your material tiers — adjust each tab's material, sq ft, and labor as needed, or use Copy from tier… to start one tab from another.
- Rename tabs if you like, and click the star to mark your Recommended tier.
- Click Save. Send the quote as usual — the customer now sees three cards on the public page instead of one price.
-
Draft a quote from a WrapStudio design
- Open the design in WrapStudio Design and open the export dialog.
- In the job-loop section, pick a material tier and click Create draft quote from this design.
- Wraptor opens the new DRAFT quote, already priced from the design's measured coverage plus material waste — review it, adjust if needed, and send.
-
Draft a quote from an inbound email
- Open an inbound inquiry in your Inbox.
- Click Draft Quote. Wraptor reads the AI-extracted details and creates a DRAFT quote (tiered, when it recognizes the vehicle and service).
- Click the link in the confirmation toast to open the new quote, review the pricing and notes (which cite the source email), and send it once it looks right.
-
Turn on quote follow-ups or win-back
- Go to Settings → Email & Notifications.
- Toggle Automatic quote follow-ups on to nudge customers who haven't opened or approved a sent quote.
- Toggle Automatic dead-quote win-back on to re-engage quotes that have gone quiet for 30+ days or expired.
- Both are off by default and respect quiet hours if you've set them. Check the Autopilots gallery any time to see how many nudges each has sent in the last 30 days.
Settings & permissions
Who can access quotes
The billing permission slug ("Billing & Quotes") controls access to the quotes area. It is granted by default to:
- Manager — full access (create, edit, send, approve, delete).
- Designer — has
billingpermission; can view and edit quotes. - Production — does not have
billingby default; cannot access the Billing screen. - Installer — does not have
billingby default; cannot access the Billing screen.
Owners always have full access. Custom roles can be granted or denied the billing permission in Settings → Team.
Tax zones Set the shop's default tax rate in Settings. The default rate ships at 0% — set your own state rate so new quotes calculate tax correctly. On any individual quote you can switch the zone (Standard, UEZ 3.31%, or Exempt).
Plan tiers
Quotes are available on all paid plans (Installer, Shop, Pro Shop, Multi-Shop, Franchise). The free_claim tier has no access to the operational dashboard including Billing. There are no per-quote count limits enforced by the plan.
Multi-location On plans with multiple locations (Pro Shop and above), quotes are scoped to the shop but the resulting job is assigned to the shop's default location.
Material waste allowance Every tiered quote (and every design-to-quote or email-to-quote draft) adds a material waste line using your shop's default waste percentage, set in Settings. It ships at 15% — adjust it in Settings if your shop runs tighter or looser than that.
Follow-ups and win-back are opt-in, off by default Both automations require you to flip their toggle in Settings → Email & Notifications → Quote follow-ups / Dead-quote win-back before they send anything. A brand-new shop sends none of these emails until you turn them on.
Tips & common pitfalls
- Quote number format: Quote numbers are formatted
SO-00001. This is a sales-order style prefix. You can edit the quote number field if you need a custom format, but keep it unique. - Vehicle is required to convert to a job: You can create and send a quote without a vehicle, but you cannot click "Create Job" until a vehicle is assigned. Assign one from the quote builder before sending if you want the conversion to be frictionless.
- Approved ≠ invoiced: Approving a quote does not create an invoice. An invoice is a separate step (the Create Invoice action, once the quote is linked to a job), typically after the work is done.
- Deleting a quote unlinks it from the job: Deleting a quote removes it permanently but does not delete the job it was linked to. The job simply loses the quote reference.
- Edit only while DRAFT: The quote builder is editable only while the quote is in DRAFT status. Once you mark it Sent or Approved, the builder goes read-only — revert isn't a button, so price it before you send.
- Set your tax rate first: Because the default tax rate is 0%, a brand-new shop's quotes show no tax until you set your state rate in Settings (or pick a non-zero zone on the quote).
- Request-a-quote creates a job, not a quote: Staff sometimes expect a Quote record to appear in Billing after a web form submission. The web form creates a Job (LEAD status) and a customer + vehicle. Staff must then create the quote manually.
- Tax-exempt customers: If a customer record has the tax-exempt flag set, the quote automatically uses a 0% tax rate regardless of the selected tax zone. Check the customer record if tax is not calculating as expected.
- AI Price Assist gets better with history: The panel shows richer suggestions once your shop has completed jobs with pricing snapshots. Brand-new shops get rate-card-based estimates only.
- Tiers are all-or-nothing per quote: You can't offer two tiers and one flat item — "Offer tiers" is a quote-wide toggle. If a job genuinely needs a mixed structure, use notes to explain it.
- Only SENT quotes record views: Draft previews you open yourself, and quotes you reload after approval, don't count toward the view total — only opens of a quote in SENT status do.
- Win-back never touches a REJECTED quote: If you've explicitly marked a quote Rejected, win-back leaves it alone — a real "no" isn't treated as silence.
Related modules
- Jobs — quotes feed into jobs; a quote converts to a job when approved.
- Invoicing & billing — invoices are separate from quotes; creating an invoice is a distinct step after the job is complete.
- Customers — every quote must belong to a customer; customer records show all their quotes.
- Vehicles — vehicles are optionally linked to quotes; required for job conversion.
- Proofs — proofs are sent from a job, not a quote; quote approval comes before proof.
- Inventory — quote line items can be linked to inventory items; material costs inform the AI price panel.
- WrapStudio Design — where a Design-to-Quote draft is priced from.
- Inbox (WraptorMail) — where an Email-to-Quote draft is created, and where send-later and quiet hours are documented in full.
- Autopilots — the follow-ups and win-back engines, named and stats-tracked alongside the shop's other automations.
- Settings — turn on tiers' waste percentage, follow-ups, win-back, and quiet hours.
- Workflow map — shows where quotes fit in the lead-to-invoice pipeline.
- Personas — details how managers, designers, and customers interact with the quote flow.