Skip to content
SlashClone
Made by@dealdesk

Quote builder

@dealdesk/quote-builder

Price a quote from your price book CSV and the products a customer picked. Handles flat, volume, and graduated tier pricing plus line and deal discounts, checks per-product discount limits, and writes a customer-ready quote and a deal file for the order form.

SkillRevOpsv1.0.0 (latest)Tested
Activity
New: be the first to try it

Real output from this kit

How this works

  1. It is a skill: written instructions Claude reads when your request matches what the skill is for. You do not call it by name; just ask for the task.
  2. While it works, it reads and changes files in the places it lists, nowhere else.
  3. It runs these commands on your computer: node scripts/quote.mjs.
  4. Nothing runs until you choose to use it, and you can remove it any time.

SKILL.md

Quote builder

Prices a quote the same way every time, from the price book, so nobody does tier math in their head. The script does the math; you collect the selections, explain the result, and flag anything that needs approval.

When to use

  • A rep needs a quote for a set of products, quantities, a term, and maybe a discount.
  • Comparing options: "what if they go to 200 seats?" or "1 year vs 3 years".
  • Not for usage billing after the fact, and not for changing the price book itself (offer to edit the CSV only if the user asks).

Inputs

  1. Price book at data/price-book.csv (see the kit's examples/price-book.csv). One row per price tier:

    ColumnMeaning
    sku, name, unitProduct identity
    billingrecurring (priced per unit per year) or one_time
    pricingflat, volume (every unit gets the tier the total reaches), or tiered (each band priced on its own, like tax brackets)
    min_qty, max_qtyTier band. Leave max_qty empty on the last tier. Bands must be contiguous
    unit_pricePrice per unit in that band
    max_discount_pctOptional: the most total discount off list allowed without approval

    If the user's price book is a spreadsheet or another layout, convert it to this shape in data/ and show them the result once.

  2. Selections at data/selections.json: customer, term_months (default 12), currency (default USD), optional deal_discount_pct (applies to recurring lines that do not set their own), optional discount_one_time: true to also discount one-time fees, valid_days (default 30), and lines of { "sku", "quantity", "discount_pct"? }.

Ask for the term and quantities if missing. Never guess a discount.

Steps

  1. Check the price book has every SKU the user named. If a name is close but not exact, ask which SKU they meant.
  2. Write data/selections.json and show the user the selections in one short table.
  3. Run:

    node scripts/quote.mjs data/price-book.csv data/selections.json --out out --name quote

    Use a distinct --name per scenario (quote-1yr, quote-3yr) when comparing.

  4. Read out/<name>.json. Report the totals, per-line savings, and every item in warnings.
  5. For comparisons, put scenarios side by side: total for term, annual recurring, effective discount.
  6. Next steps: out/<name>-deal.json feeds straight into discount-approval-check and po-creator (add the start date, billing contact, and terms first).

Output to the user

**Quote Q-2026-0311, Northwind Traders LLC, 24 months:** $82,970.00 total ($38,985.00 per year recurring, $5,000.00 one-time). 16.2% off list.

| SKU | Qty | Your price / unit | Savings |
| --- | ---: | ---: | ---: |
| PLAT-SEAT | 60 | $486.00 | 19% (volume tier 10% + 10% deal discount) |

Warnings: none. Files: out/quote.md (customer copy), out/quote.json, out/quote-deal.json.

The "How the price was built" and "Warnings" sections in quote.md are marked internal. Remind the user to delete them before sending the quote to a customer.

Guardrails

  • Prices come only from the price book. If a SKU has no price, stop and ask; never estimate.
  • A discount past max_discount_pct is a warning, not a block. Say plainly who usually approves it and suggest discount-approval-check.
  • Do not change the price book unless the user asks you to.
  • One currency per quote. If the price book has several, ask which one.

README.md

Quote builder

Builds an accurate quote from your price book and the products a customer picked. Volume tiers, graduated tiers, and discounts are worked out by a script, so the same inputs always give the same price.

Who it is for

Account executives, sales engineers, and deal desk teams who quote from a spreadsheet price book and want fewer math mistakes and faster "what if" scenarios.

Example

Input: examples/price-book.csv plus

{ "customer": "Northwind Traders LLC", "term_months": 24, "deal_discount_pct": 10,
  "lines": [ { "sku": "PLAT-SEAT", "quantity": 60 }, { "sku": "API-1K", "quantity": 2500 },
             { "sku": "SUP-PREM", "quantity": 1, "discount_pct": 0 }, { "sku": "ONB-STD", "quantity": 1 } ] }

Output (out/quote.md):

SKUQtyList / unitYour price / unitSavingsTotal for term
PLAT-SEAT60$600.00$486.0019%$58,320.00
API-1K2500$2.00$1.5323.5%$7,650.00

Total for term $82,970.00, 16.2% off list. Plus out/quote-deal.json, ready for the PO creator and the discount approval check.

What it can access

  • Runs node scripts/quote.mjs (Node built-ins only, no network).
  • Reads data/ (plus the kit's own examples/), writes data/ and out/.

Setup

None. Export or copy your price book into data/price-book.csv.

Files

  • README.md
  • SKILL.md
  • examples/price-book.csv
  • examples/selections.json
  • kit.json
  • scripts/quote.mjs

Did it work?

0worked for them0did not work

Sign in to say whether it worked for you.

Nobody has said yet. Tried it? Tell the next person.