A quote is an offer to a client: the work, the price, a payment plan and your terms. You send it by email. The client opens a link, asks for a code that goes to their email, types their name and accepts. TimeLeaf keeps a record of that acceptance. From then on it helps you bill the job: an optional deposit, optional payments on dates or at stages, and a final invoice for what is left.
Quotes are built for trades and field service work: replacing a water heater, re-piping a basement, a bathroom rough-in. They sit inside Client Invoicing and use its clients, job sites, rates and invoices.
What you need
- The Client Invoicing add-on. It is available on the Professional plan and above, for $49 a month. Quotes are part of it, at no extra cost.
- An admin, an owner, or someone with the Billing role. They can write and send quotes and manage invoices. Managers cannot open quotes. See Roles & Permissions.
- For quotes that bill real hours: Shift Scheduling with job sites, and Time Tracking, exactly as for invoices.
Set it up
Add Client Invoicing
Go to Settings › Billing, find Client Invoicing under Add-ons & Options and click Add. Quotes, Price list and Labor costs appear in the Clients group of the admin menu, beside Clients and Client Invoices.
Add your clients and their job sites
Each quote is for one client, and usually for one of their job sites. See Setting up clients. On the client form, Language for quotes sets the language the client reads quotes in (see Languages).

Fill in your price list
Go to Clients › Price list. List the materials and services you quote again and again, each with a cost, a price and whether it is taxable. A line you add from the price list starts with that price. The cost is for you only: the client never sees it.

Set a cost per hour for each role (admins and owners)
Go to Clients › Labor costs. For each shift role, enter what an hour of that role costs you: wages plus payroll taxes and insurance. It is your own planning estimate, not anyone's pay. TimeLeaf uses it only to show job profit. You can also set an Overhead percentage and a Target margin percentage. Only admins and owners can open this page.

Check the quote settings (admins and owners)
Go to Clients, click Invoice settings and find the Quotes section. Set the Quote Number Prefix, how many days a new quote stays open (Quote Validity) and your Default Quote Terms. The default terms are copied onto every new quote, and you can change them on any one quote. This is also where Ask for the code to open quotes is (see Opening a quote).

Tell clients how to pay (optional, admins and owners)
Enter your Payment Instructions in the same invoice settings, and connect Stripe on Settings › Billing if you want clients to pay by card. See Getting paid online.
The quotes list
Clients › Quotes lists every quote with a status chip, its total, margin, what has been paid and what is owed. Each row says what to do next, such as "Finish and send" or "Invoice the Fixtures set when the stage is done". Use the filters (Needs action, Deposit unpaid, Drafts, Sent, Accepted and more) or search by number, title or client.

A quote has no number until you first send it. Then it gets the next one, such as Q-0001, and keeps it.
Write a quote
Click New quote, pick the client, and give the quote a title. The editor opens. Nothing reaches the client until you send.

Fixed price or estimate
Choose how the final invoice is billed:
- Fixed price. The final invoice bills the quoted lines, whatever the hours turn out to be.
- Estimate. Hour lines bill the real approved hours at the quote's job site. Everything else bills as quoted. An estimate needs a job site. Add an hours line so the client sees the rates they will pay.
For an estimate you can also fill in Tell the client before the total goes more than this much over. The client then reads "We'll ask you before the total goes more than N% over this estimate". It is a promise you make. TimeLeaf does not stop a final invoice from going over it.
Lines
A quote is made of lines. There are four kinds:
| Line | What it is | Becomes on an invoice |
|---|---|---|
| Hours | A role, a number of hours and a rate. The rate comes from the client's rates for that site and role, and you can change it. | An hours line |
| Service | From the price list or typed in. | An "other" line |
| Material | From the price list or typed in. | A material line |
| Free line | Any text, a quantity and a price. | An "other" line |
Each line has a tax rate. It starts the way an invoice line's does: hours follow the client's Tax applies to setting, a material is taxed, and a service is untaxed unless its price list item says otherwise. You can change any of them. Quantities cannot be negative, and there are no discounts in v1: put the price you want to charge.
Tick Show costs to see and edit your cost on each line. Costs are for the office only. They are never on the quote, the PDF or the client's page.
Payment plan
A payment plan is optional. Without one, the whole price is billed on the final invoice. With one, add as many payments as you need:
- When the client accepts. At most one, and it comes first. It is invoiced as soon as the client accepts, so they can pay straight away.
- On a date. TimeLeaf makes a draft invoice on that day for you to check and send. The date cannot be in the past.
- At a stage I mark done. You bill it yourself from the quote, when the stage is finished.
Each payment is a percentage of the total or a fixed amount. The presets Deposit + balance (50% on acceptance), 30 / 40 / 30 and All at the end fill the rows for you, and every row stays editable. The balance is never a payment of its own. It is what the final invoice bills after the others.

The amounts the client sees are exact to the cent and add up to the total. TimeLeaf checks that each payment is at least the smallest amount Stripe can charge, so every payment can be paid online.
Words the client reads
Under Words the client reads you can add:
- Your right to cancel. Your own words about the client's right to cancel. They appear in a box directly above the Accept button and are printed on the signed copy.
- Notes for the client and Terms and conditions. The terms start as your default terms.
TimeLeaf does not add or enforce a cooling-off period, and this page is not legal advice. Your own terms must state any right to cancel that your law gives the client, for example rules for sales made at the client's home, home-improvement rules, consumer-protection rules, or a 14-day right for sales made at a distance. Ask your own counsel what applies to you.
Job profit
The Job profit panel is for the office only. It shows the margin (profit divided by price), the profit in dollars, and how far you are above or below your target. Open More numbers for cost, markup, profit per labor hour and the price that would reach your target. Under Watch, it flags risks: lines with no cost, labor running 20% over, whether the payments before the balance cover the cost of the materials, and how the client has paid before.
Labor cost is the hours times the role's standard cost per hour from Labor costs. No wage, contract or timesheet pay is ever read. Admins, owners and Billing users see profit and margin. Only admins and owners see the cost-per-hour page.

Show to client
Hand the phone to the client at the kitchen table? Tick Show to client at the top of the editor. It hides every item marked Office only, so the client sees only what they will read. Preview shows the quote exactly as the client will get it.

Send the quote
Click Send…. The dialog shows who the quote goes to, the client's language, and what they will get. Confirm the email address: the 6-digit code to accept goes only to this address.

The client gets an email with a link to the quote and the quote as a PDF. TimeLeaf warns you, but does not stop you, in three cases: a fixed-price quote with no job site (ordinary invoices can still bill those hours), an estimate (it holds the site's hours until its final invoice is issued), and a client whose billing address is in Quebec when the quote language is not French (Canada).
If you send a quote to a different address than before, the old link stops working and the client gets a new one.
One open quote per job site. While a quote at a site is waiting for an answer, or its job is still open, you cannot send another quote for that site. Extra work on an accepted job is an add-on quote.
What the client sees
The client opens the link. No login is needed. They see your name and phone number, the quote with its lines, totals and payment plan, your notes, your right to cancel, and your terms. They can switch language, download the PDF, ask a question or request changes, decline, or accept.

It works on a phone too:

You are told when the client first opens the quote, declines it, or sends a message. A client who asks a question gets their message by email to you, with their address as the reply-to, and the quote's status does not change.
A client who declines can still accept until the quote is revised or expires. The quote is expired the day after its Valid until date. To extend it, revise it.
How the client accepts
Ask for a code
The client presses Accept this quote, then Email me a code. A 6-digit code goes to the address you sent the quote to, shown masked on screen ("m****@example.com"). The code works for 15 minutes. A new one can be requested after 60 seconds. Five wrong tries cancel the code and a new one is needed. Someone who only has a forwarded link cannot accept: accepting needs the code sent to the recipient's email. At most 5 codes can be requested per hour.

Type a name and confirm
In one form the client types the code, their full name, optionally their title and "also accepting for" (for example, a spouse), and ticks three boxes: they have read the quote, they are the client or may accept for them, and they agree to sign electronically. Your right to cancel is shown above the button. A pasted code like "482 913" works.

Accepted
The page now says Accepted — thank you, offers the accepted quote as a PDF, and shows the payment schedule. If a payment is due now, there is a Pay now button when your Stripe account is connected, or your payment instructions when it is not.

The client also gets a confirmation email with their copy of the accepted quote. You are told when they accept.
Asking for the code to open a quote
By default the link opens the quote, so a client can forward it to a family member to read. Only accepting needs the code. For sensitive work, such as home care, tick Ask for the code to open quotes in the Quotes section of Clients › Invoice settings.
When it is on:
- The client must enter the emailed code before they see the quote or any invoice made from it. Until then the page shows only your name and the quote number.
- The emails then say only "open the link": no amount, no title and no attachment.
- No text message is sent for the quote's invoices.
- A correct code opens the quote on that browser for 30 days. The same code still works to accept while it is valid.
The record of acceptance
Each time you send a quote, TimeLeaf keeps that version exactly as the client saw it, with a checksum (SHA-256) of its content. An accepted quote cannot be edited or deleted. The quote's record shows:
- Who accepted: the typed name, title, the address the code went to, and when the code was checked.
- When and from where: the time in UTC and in your time zone, the IP address when it is known, and the device.
- What was agreed: the three confirmations, with the exact words shown, in the language shown.
- The trail: sent, opened, code requested, accepted, and every later step.
Click Download signed copy on the record to get the quote as a PDF with a Certificate of acceptance page. The client's own copy is the same quote stamped "Accepted by {name} on {date}", with a certificate that leaves out the IP address and device.


What this is, and is not. The certificate is a record of what the client saw and did. TimeLeaf does not currently seal the PDF digitally. Its integrity is checked against the checksum TimeLeaf stores. Laws on electronic signatures differ by country and by the kind of sale, and TimeLeaf does not give legal advice. Have your own counsel check the wording, including the consent text, for the places you work.
After acceptance
Open the quote from Clients › Quotes. The record shows a chip such as Accepted · Fixtures set not billed, the one next action, and the payments.

Payments
- On acceptance. TimeLeaf makes the deposit invoice and issues it at once. The client sees it on the accepted page.
- On a date. On that day TimeLeaf makes a draft invoice and tells you. Check it, then click Issue and send. It is never sent without you.
- At a stage. When the stage is done, click Invoice this payment. If you decide a payment needs no invoice of its own, click Don't bill separately.
- Mark paid. When a client pays by cheque or transfer, click Mark paid and enter the day and a reference. A paid invoice is a settled record, so there is no Undo.
- Remind. For an issued payment that is not paid yet, Remind emails the invoice to the client again.

Quoted vs so far
For the office only, an accepted quote shows labor and materials as quoted against what has been used so far, the amount invoiced, and the projected margin at the end. A fixed-price job that runs over the quote shows a warning.
Hours at the job site
Once a quote is accepted, hours worked at its job site since acceptance are reserved for it. A fixed price covers them, and an estimate bills them on its final invoice. They cannot also land on another invoice, so no hour is billed twice. They show in Not on this invoice as Reserved for a quote. The record also tells you when hours at the site are already on another draft invoice.
The final invoice
When the work is done, click Create final invoice. TimeLeaf makes a draft you can edit.
- Fixed price. It bills the lines as quoted.
- Estimate. Hour lines bill the real approved hours at the site, one line per role, at the rates on the quote. Everything else bills as quoted. Click Refresh hours to pick up hours approved since.
- Every deposit or stage payment already invoiced comes off as a line such as "Less Deposit (INV-0002)". The balance is what is left, to the cent.

For an estimate, Check before you issue compares the quoted and worked hours per role and warns you when the worked amount is more than 10% over the quote, so you can tell the client first.

Issuing the final invoice ends the job: the quote is closed and the hours are released. A few special cases:
- If the payments already cover the whole price, there is no balance to bill. The record says so and offers Close quote.
- If the final total is exactly zero, you can still issue it. It is marked paid at once and prints "Paid in full".
- A final total below zero cannot be issued. Refund or credit the difference outside TimeLeaf, delete the draft final invoice, then close the quote.
- A draft payment invoice must be issued or deleted before the final can be issued.
Invoices made from a quote use the quote's language, on the invoice page, the PDF and the emails.
Add-on quotes
Extra work after acceptance is its own quote. Open the accepted quote, then More › Add-on quote. The add-on is for the same client and site, always fixed price, and it has its own number ("Add-on to Q-0001"), code, record and payments. The client accepts it with a code, the same way. An add-on with an hours line covers the site's hours from its own acceptance, like a fixed-price quote. It is not available on a cancelled, closed or unaccepted quote, and an add-on cannot have an add-on.

Change, withdraw, cancel, close
Click More on a quote to see what you can do. The choices depend on the quote's state.

| Action | When | What it does |
|---|---|---|
| Revise | A sent or declined quote | Puts it back to a draft. The next send is a new version, emailed to the client, with an optional note on what changed. |
| Resend email | A sent or declined quote that has not expired | Sends the same version to the same address again. |
| Withdraw | Before acceptance | Takes the quote back. The link then says it is no longer available. You can tick Tell the client. |
| Delete draft | A draft that was never sent | Removes it for good. |
| Cancel job | An accepted job | Stops it. Payments not yet billed stop, and draft payment invoices and the draft final invoice are deleted. Issued invoices stay. You can also withdraw the job's open add-on quotes. Cancel never refunds: to refund a card deposit, void its invoice. You can tell the client. A cancelled job can still get a final invoice for the work done. |
| Close quote | An accepted or cancelled job | Finishes it. You give a reason (paid in full, refunded the difference, or other). Closing cannot be undone. It is refused while a draft final invoice exists: issue or delete that first. |
| Duplicate | Any quote | Starts a new draft from it. |
| Copy link or Share link | Once the quote has been sent | Gives you the client's link. |
You can no longer cancel a job once its final invoice is issued.
Languages
A client reads quotes in English, Spanish, Portuguese (Brazil) or French (Quebec). It is chosen in this order: the language the client picked on the page, then Language for quotes on the client form, then English. The language they saw when they accepted is recorded.

The page, the PDF, the emails, the consent wording and the invoices made from the quote follow that language. Dates show the month by name, and amounts show in the quote's currency.
Your own words print as you typed them: line descriptions, notes, your right to cancel and your terms. TimeLeaf does not translate them. If you write terms in English for a French-speaking client, they will read English terms. The admin screens stay in English.
If a client's billing address is in Quebec and their quote language is not French (Canada), TimeLeaf warns you when you send. Quebec's language law asks for French on consumer contracts. Check what applies to you.
In Spanish, Portuguese and French, the consent text is shown in that language with the English original beneath it, and both are stored with the acceptance. The Spanish, Portuguese and French consent wording has not yet been reviewed by counsel; that is why the English original is shown beneath it.
AI copilot
With the AI copilot, an assistant such as Claude can read your quotes and invoices and prepare drafts. It cannot send anything. A person always sends a quote, issues an invoice, marks it paid, withdraws, cancels, closes or skips a payment, and the client always accepts through the email code.
It needs the Business plan and the Client Invoicing add-on, and it works only for an admin, an owner or a Billing user. An assistant can:
- Read. Find a client, list the price list, list and open quotes, list invoices, show a client's balance, and show a quote's job profit. It never sees your costs per line, the cost-per-hour settings, anyone's pay, a client's link or the signed copy's details.
- Draft. Draft a quote, change a draft quote, and prepare a draft payment or final invoice. The assistant cannot put in a recipient email, a cost or a tax rate. You choose the recipient when you send.
Each draft goes to you first as an approval card. The card lists every line and the total TimeLeaf worked out. Only when you approve it is the draft saved, and the card then reads "Draft saved. Nothing was sent." with a link to review and send it in TimeLeaf. Drafting needs Let assistants propose changes switched on.
Troubleshooting
The client says the code never arrived. Ask them to check spam, then press the button for a new code after 60 seconds. If the email address is wrong, correct it and send the quote again: a new address gets a new link and a new code. The client's page also has This isn't my email, which sends you a message.
I cannot send a quote. Another quote at the same job site is open. Withdraw it, finish it, or make the new work an add-on quote.
There is no Pay now button. Pay now shows only when your Stripe account is connected and the payment is at least Stripe's minimum. Otherwise the client sees your payment instructions. Use Mark paid when the money arrives.
An hour is missing from the final invoice. The hours must be approved, at the quote's job site, and dated on or after the quote was accepted. Refresh hours picks up newly approved ones. The Check before you issue panel lists hours at the site that are not approved yet.
I changed my mind after the client accepted. An accepted quote cannot be edited. Cancel the job, or send an add-on quote for the change.