TimeLeafTimeLeaf
Back to site

Core Features

Quotes

Write a quote, send it by email, let the client accept it with an email code, then bill it as a deposit, stage payments and a final invoice.

Last updated: October 25, 2026

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

1

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.

2

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).

The client form with Language for quotes set to Français (Canada)

3

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.

The price list with materials and services, each with its cost and price

4

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.

The Labor costs page with a standard cost per hour for Apprentice and Plumber, an overhead and a target margin

5

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).

The Quotes section of Invoice settings, with the quote number prefix, validity, default terms and Ask for the code to open quotes

6

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.

The quotes list showing drafts, sent quotes and accepted quotes, each with a status chip and a next step

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.

The quote editor with the client and job, the billing choice, a summary and the job profit panel

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:

LineWhat it isBecomes on an invoice
HoursA 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
ServiceFrom the price list or typed in.An "other" line
MaterialFrom the price list or typed in.A material line
Free lineAny 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 payment plan with the 30 / 40 / 30 preset: a deposit when the client accepts, a progress payment at a stage, and the computed balance

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.

The Job profit panel with margin, profit, more numbers and a watch list

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.

The editor in Show to client mode, with costs and profit hidden

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 Send quote dialog showing the recipient, the client's language and what the client gets

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.

The quote as the client reads it on a computer, with the lines, a fixed price banner and the Accept this quote bar

It works on a phone too:

The quote on a phone, showing the totals, the payment plan, the right to cancel, and the Accept this quote button

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

1

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.

The first step of accepting, after the code was emailed, with the Code from the email field

2

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.

The accept form with the client's name, the three confirmations, your right to cancel and the Accept quote button

3

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 accepted page with the payment schedule: a deposit that is due now, and the stage payment and balance upcoming, with a Pay now button

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.

The Certificate of acceptance page: who accepted, when, from which IP address and device, what was agreed, the trail, and the checksum of the quote

The client's copy of the certificate: the same page without 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.

An accepted quote with its payments, the deposit paid, a stage payment not billed yet, and the quoted vs so far panel

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.

A quote with a deposit paid, a progress payment issued and not paid, and a draft final invoice for the balance

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.

A draft final invoice with the quoted lines, the deposit and progress payments taken off, and the quoted and final margin

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.

A draft final invoice for an estimate, with a check that compares quoted and worked hours and warns that hours are 10% over

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.

An accepted quote showing the job site and hours and its add-on quotes

Change, withdraw, cancel, close

Click More on a quote to see what you can do. The choices depend on the quote's state.

The More menu of an accepted quote: Add-on quote, Cancel job, Close quote, Duplicate, Copy link and Share link

ActionWhenWhat it does
ReviseA sent or declined quotePuts it back to a draft. The next send is a new version, emailed to the client, with an optional note on what changed.
Resend emailA sent or declined quote that has not expiredSends the same version to the same address again.
WithdrawBefore acceptanceTakes the quote back. The link then says it is no longer available. You can tick Tell the client.
Delete draftA draft that was never sentRemoves it for good.
Cancel jobAn accepted jobStops 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 quoteAn accepted or cancelled jobFinishes 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.
DuplicateAny quoteStarts a new draft from it.
Copy link or Share linkOnce the quote has been sentGives 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 quote page in French, with the labels, dates and amounts in French and the business's own words as typed

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.