Convika

यह पेज अभी हिन्दी में नहीं है, इसलिए अंग्रेज़ी में दिख रहा है।

Turn your Excel price sheet into a quote calculator for staff or clients

Quick answer

Make two calculators from one Excel price sheet: one for staff, with costs and margins, behind a password, and one for clients with prices only, since anyone can read a web page's source. The client page carries a form that sends you each quote request. Each price change goes live as a new version at the same link.

A working example: change any value. It computes in your browser and sends nothing.

For your team only, publish it on a private link or behind a password, both with Pro.

Make your team's version

Convika's AI rewrites this calculator from what you write. You try it on your phone before you keep it, with no account.

Paste your price table, options, minimum order, and tax rate, and your shop's name. Leave your costs out. Up to 8,000 characters.

You don't need an account to try it. The preview works for 3 minutes once it's ready.

On this page

Your prices live in a workbook: a tier table, a few options, a minimum order, the tax line, and on another sheet what each job costs you. Staff quote from it on a laptop, and clients email to ask "how much for 500 flyers?". This guide turns that workbook into two phone calculators: one for staff with costs and margins, one for clients with prices only and a form that sends you their quote. It works through a sample flyer price sheet, with the Excel formulas, the JavaScript they become, and 8 test cases with expected totals.

Vendor and Microsoft pages quoted here were read on November 6, 2026.

Two calculators from one price sheet

Staff versionClient version
Who opens itYour team, on site or on the phoneAnyone you send the link to, or who finds it
What it showsPrices, the quote, your cost, margin, and margin %Prices and the quote only
What's in the fileThe price table and the cost tableThe price table only
Who can open this page?Only people with the password (Pro)Public (Free) or Private link (Pro)
FormNone needed"Send me this quote"

Why two files and not one with the costs hidden: a web page is a file the browser downloads whole. Anyone who opens the client page can save it or read its source, and every number in the file is there, whatever the page hides on screen. So the client file must not contain a cost, a margin, or a markup, not even in a comment.

Why a password for staff, not a private link: Convika's publish dialog describes a Private link as "Anyone with the link can open it, with no password or account. It stays out of search results and out of the gallery." That keeps a page unlisted. It doesn't keep out a client who gets the link forwarded by a staff member. With Only people with the password, Convika's server checks the password before it sends the page, so a forwarded link opens a password screen (how it works).

Ways to put a price sheet in front of staff and clients, compared

OptionBuilt from your sheetQuote requests by formCheapest plan that takes themWhere people open itKeeping costs from clients
ConvertCalculatorRebuilt in its editor, with "the functions you know from Excel"Yes: Starter has Platinum's features under 100 visits a month; Pro takes "200 submissions" a monthStarter, free under 100 visits a month; above that, Pro, $40 / mo (pricing). Hobby: "No submissions"On your website; custom domains on PlatinumIts pricing page doesn't say
CalconicRebuilt in its editorOrder Form and Mail Results are premium elements; Light has 750 email notifications a monthLight, $5 a month billed annually, or $6 billed quarterly (pricing)"any website that supports JavaScript or iFrame embedding", or its custom landing pagesIts pricing page doesn't say
An Excel workbook embedded from OneDriveThe sheet itselfNo formMicrosoft's embed page names no priceInside your web page: "Anyone who visits the webpage with this embedded file will be able to view it without signing in"Costs on another sheet are still in the workbook you share
The .xlsx file, sent by emailThe sheet itselfNo, the client emails you backNothing extraExcel or a viewer on the client's phoneThe costs travel with the file
An AI-written page on ConvikaYour AI rewrites the formulas in JavaScript, and you check them with test casesYour page's own form, connected: entries stored and emailedFree shows 50 entries a month; Pro shows all, at $12 a monthIts own link, on any phoneTwo files: prices only for clients, costs behind a password for staff

Details from each vendor's page:

  • ConvertCalculator describes its free Starter plan as access to "Platinum features like these and more on the Free plan until you reach 100 visits per month." Its FAQ adds: "Once this limit is exceeded, your account will no longer be eligible for the free plan and your live calculators will be disabled." On its pricing page, Hobby is $20 / mo for 2,000 visits with "No submissions"; Pro is $40 / mo for 10,000 visits and 200 submissions, "Perfect for lead generation, product configuration, and quote forms"; Premium is $100 / mo; Platinum is $200 / mo and adds custom domains. The page says to "Pay annually, get two months for free."
  • Calconic's free plan has "5 active calculators" and "500 impressions / mo." On its pricing page, Light is $5 a month billed annually (10 active calculators, 3,000 impressions and 750 email notifications a month), or $6 a month billed quarterly (5 calculators, 2,000 impressions, 500 email notifications), both excluding VAT. Paid plans remove the Calconic brand line, and the page offers a "30-day Money Back Guarantee".
  • An embedded workbook. Microsoft's OneDrive embed page warns: "Anyone who visits the webpage with this embedded file will be able to view it without signing in." Its page for SharePoint and OneDrive for Business says "You can't edit an embedded Excel for the web workbook", and its interactivity setting is for sorting and filtering tables and PivotTables. Neither page says a visitor can type a quantity into a cell.

The sample price sheet

A small print shop's flyer prices. Every number is the example's. Replace them with yours.

Flyers ordered, fromPrice each, one side
1$0.90
100$0.60
250$0.45
500$0.35
1,000$0.28
  • Both sides: the price each × 1.4, rounded to the cent.
  • Lamination: $0.15 a flyer. Design: $45 once.
  • Minimum order: $35 before tax. A smaller order gets a "minimum order" line that makes up the difference.
  • Sales tax: 8.25% of the subtotal, rounded to the cent.
  • Over 10,000 flyers: "Ask us for a price."
  • Staff only: cost $0.11 a flyer one side, $0.16 both sides, $0.05 a flyer to laminate, $25 of design time.

The sheet's formulas, with Tiers the named range of the table above:

B2  Quantity             (a whole number, 1 to 10,000)
B3  Both sides           TRUE or FALSE
B4  Lamination           TRUE or FALSE
B5  Design               TRUE or FALSE
B8  Price each           =VLOOKUP(B2, Tiers, 2, TRUE)
B9  Price each, quoted   =IF(B3, ROUND(B8*1.4, 2), B8)
B10 Flyers               =ROUND(B2*B9, 2)
B11 Lamination           =IF(B4, ROUND(B2*0.15, 2), 0)
B12 Design               =IF(B5, 45, 0)
B13 Items                =B10+B11+B12
B14 Minimum order        =MAX(0, 35-B13)
B15 Subtotal             =B13+B14
B16 Sales tax            =ROUND(B15*8.25%, 2)
B17 Total                =B15+B16

Staff sheet only:
B20 Cost                 =B2*IF(B3, 0.16, 0.11) + IF(B4, B2*0.05, 0) + IF(B5, 25, 0)
B21 Margin               =B15-B20
B22 Margin %             =B21/B15

To copy your own formulas out, FORMULATEXT "Returns a formula as a string" (Microsoft): put =FORMULATEXT(B8) beside each cell and paste both columns to your AI. Paste each table as text, with its header row.

Tiered prices: VLOOKUP's approximate match in JavaScript

VLOOKUP(B2, Tiers, 2, TRUE) is the approximate match. Microsoft's VLOOKUP page says it "assumes the first column in the table is sorted either numerically or alphabetically, and will then search for the closest value." In practice it returns the row with the largest "from" quantity that is not above the order, the same as XLOOKUP's match mode -1: "Exact match. If none found, return the next smaller item" (Microsoft). Below the first row, "you'll get the #N/A error value."

The JavaScript for it, with the table written into the file:

// From quantity, price each (one side), sorted by quantity
const TIERS = [
  [1, 0.90],
  [100, 0.60],
  [250, 0.45],
  [500, 0.35],
  [1000, 0.28],
];

function priceEach(qty) {
  let price = null; // null is VLOOKUP's #N/A: no row at or below qty
  for (const [from, each] of TIERS) {
    if (qty >= from) price = each;
    else break;
  }
  return price;
}

Two things to settle before the AI writes it:

  • Every flyer at the tier's price, or each band at its own price. The sample charges every flyer at its tier's price, so 99 flyers cost $89.10 and 100 cost $60.00. A sheet that charges each band separately, like tax brackets, makes 250 flyers $179.55 (99 × $0.90 + 150 × $0.60 + 1 × $0.45) instead of $112.50. Tell the AI which one your sheet does, and test 99, 100, 249, and 250.
  • Sorted table, whole numbers. Microsoft: "If the first column isn't sorted, the return value might be something you don't expect." Keep the table sorted in the file, and have the page refuse 0, blanks, and fractions of a flyer.

Minimum charge, tax, and rounding

Write the order of the steps down, because the page has to follow it exactly: price each, both-sides price rounded, each line rounded, items added, the minimum applied, tax on the subtotal rounded, the total. Rounding a line in a different place moves a total by a cent.

Excel's ROUND rounds the number as Excel shows it, half away from zero. JavaScript's own rounding works on the binary number underneath. Two of Microsoft's own ROUND examples, and one line of the sample sheet, show the gap:

ExcelExcel givesJavaScriptJavaScript gives
=ROUND(2.15, 1)2.2(2.15).toFixed(1)"2.1"
=ROUND(-1.475, 2)-1.48Math.round(-1.475 * 100) / 100-1.47
=ROUND(138*8.25%, 2)11.39(138 * 0.0825).toFixed(2)"11.38"

The last row is case 5 of the test table below: 230 flyers, $138.00, and a total of $149.39 in Excel against $149.38 from toFixed. Ask the AI for this function and use it for every rounding step:

// Excel's ROUND for digits >= 0: half away from zero,
// on the number read at 15 significant digits, as Excel shows it
function excelRound(x, digits) {
  const f = 10 ** digits;
  const scaled = Number((Math.abs(x) * f).toPrecision(15));
  return (Math.sign(x) * Math.round(scaled)) / f;
}

It gives 2.2, -1.48, and 11.39 for the three rows above. Three more spreadsheet habits to tell the AI about:

  • Percent cells. A cell showing 8.25% holds 0.0825. Write 0.0825 in the file, or divide by 100 once, in one place.
  • Rounding to a multiple. MROUND "rounds up, away from zero, if the remainder of dividing number by multiple is greater than or equal to half the value of multiple", but Microsoft lists a known limitation: "MROUND(6.05,0.1) returns 6.0 while MROUND(7.05,0.1) returns 7.1" (Microsoft). JavaScript can't copy a direction Microsoft calls undefined, so test those midpoints if your sheet rounds to 5 or 10 cents.
  • Rounding up to a step. CEILING.MATH(x, 0.25) becomes Math.ceil(Number((x / 0.25).toPrecision(15))) * 0.25. Without the 15-digit step, 24.750000000000004, which is what JavaScript gets for 15 × 7.5 × 0.2 × 1.1, rounds up to 25. Check that case in your workbook, too.

What the quote shows

Show every line the price comes from, so a client can see why 250 flyers cost what they do, and staff can read the quote out on the phone. Case 6 below, on the client page:

250 flyers, printed both sides   250 × $0.63   $157.50
Lamination                       250 × $0.15    $37.50
Subtotal                                       $195.00
Sales tax 8.25%                                 $16.09
Total                                          $211.09
Prices valid until December 31, 2026 · v1

A 20-flyer order adds a line, "Minimum order $17.00", above the subtotal. The staff page shows the same lines, then Cost $52.50, Margin $142.50 (73.1%).

The test table

Computed with a Node script that follows the formulas above and Excel's ROUND, which matches Microsoft's published ROUND examples. Run each case in your workbook too, and use what your workbook gives.

CaseOrderPrice eachLinesSubtotalTax 8.25%TotalStaff: cost, margin
120, one side$0.90$18.00 + $17.00 minimum order$35.00$2.89$37.89$2.20, $32.80 (93.7%)
299, one side$0.90$89.10$89.10$7.35$96.45$10.89, $78.21 (87.8%)
3100, one side$0.60$60.00$60.00$4.95$64.95$11.00, $49.00 (81.7%)
40—"Enter a whole number of flyers, 1 or more"————
5230, one side$0.60$138.00$138.00$11.39$149.39$25.30, $112.70 (81.7%)
6250, both sides, laminated$0.63$157.50 + $37.50$195.00$16.09$211.09$52.50, $142.50 (73.1%)
7500, one side, laminated, design$0.35$175.00 + $75.00 + $45.00$295.00$24.34$319.34$105.00, $190.00 (64.4%)
81,000, both sides, design$0.39$390.00 + $45.00$435.00$35.89$470.89$185.00, $250.00 (57.5%)

Cases 2 and 3 are the tier boundary: one more flyer makes the total $31.50 cheaper. Case 5 is the rounding trap from the section above. Case 8's price each is $0.28 × 1.4 = $0.392, rounded to $0.39 before it's multiplied, as the sheet does in B9.

The prompt

Make the client file first, in a conversation where you paste prices only. Then ask for the staff file. Keeping the costs out of the first conversation is the simplest way to keep them out of the client file.

The prompt is written for the sample flyer sheet. For a cleaning firm, a contractor, or an agency, change rules 3 and 5 to your own sheet's inputs (rooms, square feet, hours, materials), lines, minimum, and tax rate. Change "for flyers" and both titles to your trade, keeping " - staff only" on the staff one, such as "Cleaning quote" and "Cleaning quote - staff only". Keep the other rules as they are.

Below is my price sheet for flyers: the tier table, the options, and the formulas,
pasted from Excel. Make a quote calculator from it as one HTML page that works on a phone.

Rules:
1. One file: HTML, CSS, and plain JavaScript inside it. No libraries, no build step,
   no eval, no new Function, no fetch, no XMLHttpRequest.
2. Write the tier table and every price into the file as JavaScript constants.
3. Inputs: quantity (a whole number from 1 to 10,000), both sides (check box),
   lamination (check box), design (check box). Over 10,000, show "Ask us for a price".
4. Port each formula as its own named function, in the sheet's order. VLOOKUP with
   TRUE is an approximate match on a sorted table: the last row at or below the quantity.
   Round with an excelRound(x, digits) function that rounds half away from zero on the
   number read at 15 significant digits (Number(x.toPrecision(15))), and round in exactly
   the cells the sheet rounds. Never use toFixed for a value you calculate with.
5. Show the breakdown: each line with its quantity and price each, the minimum order
   line when there is one, subtotal, sales tax 8.25%, total, "Prices valid until
   December 31, 2026", and "v1". Recalculate on every input.
6. Under the breakdown, a form: a text field named "name", an email field named "email",
   a tel field named "phone", a text area named "notes" for the job details, a
   read-only text area named "quote" that the script fills with the breakdown whenever
   it changes, and a "Send me this quote" button. The form has no action and no onsubmit.
   The script has no fetch, no window.open, no mailto: or tel: links, and no variable
   named location.
7. Large tap targets and one column on a phone. Give the page the title "Flyer quote".

[paste the tier table, the options, and the formulas here]

Then, in the same conversation, for the staff file:

Now make a staff version as a separate file. Same prices, functions, and breakdown,
plus my costs below: show Cost, Margin, and Margin % under the total. No form.
Give it the title "Flyer quote - staff only". Keep the client file exactly as it is.

[paste the cost table and the cost formulas here]

Rule 6 is what lets Convika connect the client form. A form with an onsubmit, or a page whose script calls fetch, opens a window, sets the location, or builds a mailto: or tel: address, is left alone, and a script variable named location reads as one that sets it. Convika's form script also takes the form's submit before the page's own submit code runs, which is why the quote must already be in the text area when the client presses Send me this quote.

Keep costs out of the client file

Before you upload the client file, open it in a text editor and search for:

  • each cost from the staff sheet (0.11, 0.16, 0.05, and the design time's 25 in the sample);
  • the words cost, margin, markup, and profit, in any spelling, comments included;
  • a formula that works the price out from a cost (price = cost × markup), which puts the cost in the file under another name.

Nothing should turn up. Hiding a number with CSS, or leaving it in a variable the page doesn't show, still sends it to every visitor.

The staff file can hold costs because Convika's server checks the password before it sends that file. Everyone with the password reads the same page, so change the password when someone leaves the team: everyone who entered the old one sees the password screen again.

Build both calculators in 7 steps

1. Get the two files from your AI

Send the two prompts above, with your sheet pasted in. Save the files as flyer-quote.html and flyer-quote-staff.html.

2. Check both against your workbook

Open each file in a browser on your computer and type in the 8 cases above, then the same cases in your workbook. Every total has to match to the cent. When one doesn't, ask the AI to show the intermediate values for that case (price each, each line, subtotal, tax before rounding) and compare them with the sheet's cells. Then search the client file as in the section above. For a general check of any AI-made page, read what to check before you share the link.

3. Upload the client file

Sign up at app.convika.com without a card. Click Upload an HTML file, drop the client file on the Upload a file tab, and click Create my preview. The upload box below shows the page with scripts off, so the quote stays blank there until you press Keep this page — free, no card.

4. Connect the "Send me this quote" form

On the page's screen, Convika says "A form on this page sends entries nowhere". Click Connect this form. The form keeps its own fields and look, the read-only quote included, and Convika makes a new preview that sends each entry to you. If no notice appears, a script on the page sends or opens something: read why an AI-made form doesn't send anything.

5. Upload the staff file as its own page

Back on your pages, upload the staff file the same way, with Upload an HTML file, as a page of its own with its own link. The staff file looks like the client page, so Convika may ask "Is this file a new version of this page?" or say "This file looks like a new version of this page". Click Create a new page instead, or Make it a separate page, whichever the card shows. Never click Upload as a new version or Update the live page there: either one puts the staff file, costs and margins included, at the client page's link.

The same goes for publishing. On Free, with the client page already live, the publish dialog may say "This looks like a new version of your live page" or ask "Is this a new version of your live page?". Click Publish it as another page, never Update the live page (free).

6. Publish the staff page behind a password

On the staff page, click Publish page. Under Who can open this page?, choose Only people with the password, type a password of 8 to 128 characters, and click Next. The first time, a password opens an order for Pro monthly (1 day free with a card, then $12 a month). Click Subscribe, free for 1 day and add your card on the next screen. The page goes live once the trial starts or the payment goes through.

7. Publish the client page and send a test quote

On the client page, click Publish page, choose Public, and click Publish. With Pro, the page has no Convika bar, and Pro keeps up to 100 pages live. Open the live link on your phone, type an order, and press Send me this quote: test entries sent from a preview aren't saved. The entry arrives by email, and under View entries on the page's screen.

Only want the client page? Publish it as Public on Free: click Next, and the first time, Publish free. It shows the Convika bar at the foot of the page.

The quote requests you get

Each "Send me this quote" entry holds the client's name, email, phone, notes, and the quote text exactly as the page showed it, with its version line, so you know which prices they saw.

  • Email. On Free, Convika shows and emails the first 50 entries a month across your forms; Pro emails them all. Each email holds every answer, and replying goes to the address the client typed. Past 5 entries in a minute, or 100 in a day, on one form, the rest aren't emailed one by one: one email a day says how many there were.
  • The list. Under View entries, with Download CSV to open them in Excel.
  • How many. On Free, entries past the first 50 a month are kept and show once you're on Pro, which shows them all. Convika accepts up to 5 entries a minute and 20 an hour from one network.

To see which link or campaign brings the requests, read how to see who visits a page you made with AI.

When a price changes, change the sheet first. Then update each page from the version Convika has, so the client page keeps its connected form:

  1. On the page's screen, under Update from an HTML file, click Upload a new version.
  2. In the box titled "Latest version (v1) as HTML" (with your number), click Copy HTML. Paste it into the chat with the new prices, and ask for the next version number and date. For the client page, add: "Keep the form and every script Convika added exactly as they are."
  3. Run the test table again, with the expected totals from the updated workbook.
  4. Upload the AI's answer, check the preview, and click Publish v2 at the same link (with your number).

Don't upload a client file the AI made before you connected the form: it brings back the form that sends nowhere, and Convika adds the connected form again near the end of the page, so clients would see two. Clients and staff keep the links they have. Keep one link per calculator, and the version and date at the foot of each page, so a quote request always names the prices it came from. Details: update an AI-made page without changing its link.

Convika doesn't limit a page to company email addresses, single sign-on, or named accounts, and doesn't make it work offline or install as an app. The staff password is one password, shared. You stay responsible for checking every quote the page gives against your own price sheet.

Frequently asked questions

How do I make a pricing calculator in Excel?

Put your prices in a table sorted by the quantity they start at, look up the price each with VLOOKUP(quantity, table, 2, TRUE), add options with IF, apply a minimum with MAX, and round the tax with ROUND(subtotal*rate, 2). The sample sheet on this page has every formula. To let staff or clients use it on a phone, rewrite it as a web page and check it against the workbook.

Can I turn my Excel price sheet into a calculator clients use on their phones?

Yes. Give ChatGPT, Claude, or Gemini the price table and the formulas, ask for one HTML file with plain JavaScript and Excel's rounding, and check it with test cases from your workbook. Then put the file at a link. On Convika, a Public page is free, with the Convika bar.

How do I share a quote calculator without showing my costs?

Make two files. The client file holds prices only, because anyone can read a web page's source. The staff file holds the costs and goes behind a password, which Convika's server checks before it sends the page. Search the client file for each cost number before you upload it.

No. A private link is unlisted, not locked: Convika's dialog says "Anyone with the link can open it, with no password or account." A link forwarded to a client opens the page. For costs and margins, choose Only people with the password, which needs Pro.

How do I convert VLOOKUP with approximate match to JavaScript?

Write the table into the file sorted by its first column, then loop through it and keep the last row whose first value is at or below the one you look up. No row at or below it is VLOOKUP's #N/A: show a message instead. The code is in the section on tiered prices above.

Why is my JavaScript total a cent off from Excel?

Usually rounding. Excel's ROUND rounds the number as it shows it, half away from zero, while JavaScript's toFixed and Math.round work on the binary value: (138 * 0.0825).toFixed(2) gives "11.38" where Excel's ROUND gives 11.39. Use one rounding function that reads the value at 15 significant digits, and round in the same cells the sheet rounds.

Can clients send me the quote from the calculator?

Yes, through a form on the page. Ask the AI for a form with a read-only text area that holds the quote, and no action, onsubmit, or sending script. On Convika, click Connect this form: each request is stored, emailed to you, and listed under View entries. Free shows and emails the first 50 entries a month.

What do ConvertCalculator and Calconic cost?

ConvertCalculator's Starter plan is free, with Platinum's features, until you pass 100 visits a month. Past that, it lists Hobby at $20 / mo with no submissions, and Pro at $40 / mo with 200 submissions a month, which is the plan for quote forms. Calconic lists Light at $5 a month billed annually, or $6 billed quarterly, with email notifications. With both, you rebuild the calculator in their own editor, and their pricing pages don't say how they keep costs from clients.

Upload the new file as a new version of the same page and publish it. On Convika, click Upload a new version under Update from an HTML file, check the preview, and click Publish v2 at the same link. Everyone's link opens the new prices.

Sources

Next step

How to check that an AI-made calculator matches your Excel sheet

Run the same input sets through Excel and the AI's page, compare to a stated tolerance, and find the places where Excel and JavaScript round differently.

Related articles

More calculators built from Excel sheets

AI Skill Pod

Share AI skills with your team, the easy way

Everyone uses your team's skills in their own ChatGPT, Claude or Gemini, on any plan. Send one invite link. Free to start.

Start free on AI Skill Pod⁠

AI Skill Pod is made by the team behind Convika.

Share this article

Put your quote calculator at a link

Paste your price table and options. The AI rewrites the calculator above with your prices, you check the totals against your workbook, then keep it with a free account and publish it at a link.

Make my team's version

Free plan: no credit card, 50 form entries a month shown. A password needs Pro, $12 a month.