🐇 Rabbithole ← All lessons Work with us →
Step 0 of 6
Day 3 of 30
Rabbithole · Learn · ~12 min read

Job Quote & Invoice Bot

Text the job details, get a clean quote (and invoice) drafted — you approve, it sends.

General contractorsPlumbingHVAC ElectricalRoofingLandscapingPainting

Stop losing your evenings to writing quotes

You're in the truck, not at a desk. A customer describes a job; later that night you sit down and turn it into a tidy, line-itemed quote — measuring, pricing materials, adding labor, working out tax. It's the part of the job nobody got into the trades to do.

This bot does the typing. You text it the job the way you'd text your office — "200 sq ft bathroom remodel, retile + new vanity" — and it drafts a professional, line-itemed quote in seconds, pulling every price from your own price book. You read it, tweak it if you want, and approve before it ever reaches the customer.

Plain-English glossary, once: A bot is just an account a small program controls (here, on Telegram — the free messaging app). Claude is the AI that reads the job and does the drafting. Your price book is a plain file you own and edit — your materials, labor rates, and the line items you bill. That last one is what makes the quotes yours.
1

Give the bot a phone — reuse your Telegram bot

What's happening: The bot needs somewhere to receive your texts. A Telegram "bot" is a free account your program controls — you create it by chatting with Telegram's official robot, BotFather, who hands you a secret token (a password your code uses to send and read messages as that bot).

You already did this exact step in Lesson 2 — Build your AI Secretary. If you have a bot token from that lesson, you can reuse it here — same phone, new brain.

  1. Open Telegram, search @BotFather (the one with the blue check).
  2. Send /newbot, pick a name and a username ending in bot.
  3. He replies with a token like 123456:ABC-DEF… — that's your phone line.
2

Give it a brain — connect Claude

What's happening: Telegram can carry your message, but it needs a brain to understand "retile the floor and shower, swap the toilet" and turn it into the right line items. That brain is Claude. The kit uses Anthropic's official toolkit and asks Claude for a structured quote — a typed list of items, quantities, and SKUs — never loose prose.
  1. Go to console.anthropic.com and sign in.
  2. Open API KeysCreate Key.
  3. Copy the key (it starts with sk-ant-).
Default brain: claude-opus-4-8 (sharpest). High volume? Set claude-haiku-4-5 to cut cost.
3

Give it your price book — the file you own

What's happening: This is the part that makes a quote accurate — and it's yours. Your price book is a plain file (data/price-book.json or a CSV) listing every line item you bill: a SKU, a description, the unit you sell by (sq ft, hour, each, linear ft…), the price, and whether it's taxable. You edit it freely; the bot reads it and quotes only from it. A small slice of the sample that ships with the kit:
SKULine itemUnitPriceType
TILE-PORCPorcelain floor/wall tile — materialsq ft$4.25material · taxed
TILE-SETTile setting labor (thinset, level, grout)sq ft$9.00labor
VANITY-3636" vanity cabinet + countertop — materialeach$720.00material · taxed
PL-TOILETToilet — standard 2-piece, materialeach$280.00material · taxed
ROOF-ARCHArchitectural asphalt shingles — materialsq ft$2.40material · taxed
LAB-GENGeneral labor (skilled tradesperson)hour$85.00labor
Why this keeps you safe: the price book lives on your machine. The bot is told, in plain rules, that it may only quote items that exist in this file — and the kit double-checks every line against the file after the fact. Anything the customer asks for that isn't priced goes into a clearly-labeled "needs manual pricing" list instead of getting a made-up number. The bot can never invent a price.
4

Try it — draft a real quote, send nothing

What's happening: Type a job the way you'd text it. The bot reads it, matches it to your price book, and drafts a full line-itemed quote — items, quantities, unit prices, subtotal, tax on materials, and total. It then shows you the draft and waits. This is confirm-before-send: it drafts, you approve. This planner is live — try it. It sends and charges nothing.
Quote Bot · your Telegram

Tap a sample, or write your own:

Pure in-browser dry run — no API call, no send, no charge.
5

Approve → it builds the PDF and emails the customer

What's happening: Only after you tap Approve does the kit render the quote to a clean, printable document and email it to the customer. Tap Edit and you can change quantities or prices; tap Decline and nothing leaves your phone. The draft above is wired to exactly this — try the buttons.
Three promises the kit keeps:
• Nothing reaches a customer without your explicit tap.
• The bot never invents a price it can't justify from your price book.
Money is never moved — it drafts quotes and invoices; it does not charge cards.

In the kit, the quote renders to a self-contained HTML document you can Cmd/Ctrl-P straight to PDF (the README shows the ~10-line Puppeteer add-on if you want true .pdf files generated automatically).

6

Bonus: one tap turns an accepted quote into an invoice

What's happening: When a customer says yes, you don't re-type anything. The same priced quote becomes a draft invoice with npm run invoice — same line items, same totals, new document. It's still a draft you approve, and it still never charges a card; it just produces the bill so you can send it however you already get paid.
npm run dryrun     # draft a quote in your terminal, nothing sends
npm run quote      # draft + render the printable quote
npm run invoice    # turn an accepted quote into a draft invoice
npm start          # run the Telegram bot for real

Run it yourself — it's free and it's the real thing

The kit is a complete, runnable repo: Telegram in, Claude brain, your price book, a printable quote out, and a one-step draft invoice. MIT-licensed, runs on your machine, nothing crippled. npm run setup and you're drafting quotes.

Get the free kit on GitHub →

Go live

With the kit downloaded and the checklist green:

npm install
npm run setup     # Claude key, price book, email — saved on YOUR machine
npm start

Open Telegram, find your bot, tap Start, and text it a job. It drafts the quote and shows it to you right there — you approve before anything goes out. Prefer the command line? npm run dryrun drafts from a text file. It also runs as an MCP server (npm run mcp) if you'd rather drive it from Claude — the same idea from Lesson 1.

Want it wired to your real business — and run for your whole crew?

This kit is the DIY taste. We connect it to your real CRM, your live price book, and your accounting — QuickBooks or Jobber — so approved quotes flow straight into invoices and your books, and we run it for your team.

Have Rabbithole build it → ↳ Back to Lesson 2: AI Secretary