Why material cost fails as a price
A slicer is good at two numbers: how much filament the model needs and how long the machine will run. Multiply the first by the spool price and you have the plastic. That number feels like a cost because it is the one you pay at the till, but it ignores almost everything that makes a print shop a business.
It ignores the purge block, the brim, the first layer you bin and the spool that tangles at hour six. It ignores the machine depreciating in the corner, the twenty minutes of support removal and packing, the marketplace fee on the sale price, and the prints that simply fail.
The result is the familiar pattern: a quote that looks profitable per gram and disappears by the end of the month. The fix is not a cleverer price per kilo. It is a cost model with enough lines to be true, and a price formula that keeps margin after fees.
The six cost lines
The builder uses six lines per product. Every one is an input you control; nothing is inferred from a market average.
machine = Σ(part min × qty) ÷ 60 × $/hour
bought-in = hardware + packaging
failure = (filament + machine) × failure%
labour = labour minutes ÷ 60 × $/hour
unit cost = filament + machine + bought-in + failure + labour
Waste is applied to grams, because purge and failed first layers consume filament. The failure buffer is applied to filament and machine cost, because a failed print consumes both. Labour is deliberately separate from machine time: a printer can run unattended overnight, but someone still has to set the plate and finish the part.
Hardware and packaging are per product, not per part. Four inserts and one carton belong to the finished assembly, so they do not multiply with the number of printed components.
Fee and margin, in the right order
A platform fee is charged on the price the customer pays. If you mark up cost by 40% and the marketplace takes 15%, you did not keep 40%; you kept 40% of the price minus 15% of the price, which is a much smaller number. Margin and markup are not the same thing, and the order of operations matters.
The builder solves for price directly, with margin defined on net revenue:
With a 3% fee and a 40% target margin, a $10 unit cost becomes $10 ÷ (0.97 × 0.60) ≈ $17.18. The fee takes about $0.52, net revenue is about $16.67, and profit is about $6.67 — 40% of net revenue. To price by markup instead, set the fee to 0% and treat margin as markup.
Price breaks without giving away the margin
Quantity discounts are quoted as a percentage off the unit price. That is fine, but cost per unit does not automatically fall when you print more: setup labour might spread out, machine time and filament do not. A 10% discount on a job priced at a 40% margin leaves a 33% margin.
The builder shows three breaks — 10, 50 and 250 units — with the discount you set, the unit price, order revenue, order cost, profit and margin. If a discount pushes margin below zero, the row is flagged. A price break is a decision about margin, not a formatting choice.
What the importer accepts, and what it refuses
The importer reads three shapes and says so when it sees anything else. Bambu Studio and Orca Slicer plate CSVs are matched by header names for object, filament weight and print time. PrusaSlicer statistics CSVs are matched by object name, filament used in grams and estimated printing time. Pasted TSV or CSV is read positionally as name, grams, minutes.
Header matching is alias-based, so a column called “Filament weight (g)” and one called “Filament used [g]” both work, and kilogram or hour units in the header are converted. Quoted fields containing commas are handled. Total rows are dropped. Rows with no name, no usable number or a negative weight are skipped and listed with their line number.
Cura, Simplify3D, ideaMaker and Slic3r exports are not supported. Neither is a G-code file. If your slicer is not on the supported list, copy its object rows into the paste box as name, grams, minutes; the importer will say what it mapped rather than guessing.
Where the estimate stops
This is an estimate, not a binding quote. The model does not know your electricity tariff, your rent, your tax position or what a customer will actually pay. It does not include shipping, card processing beyond the fee you enter, or a reprint caused by a design fault.
The spool shelf is a stock check, not inventory software: it compares grams needed for the order quantity against grams remaining and prices the next spool at its $/kg. It does not reserve stock, track partial spools across jobs, or reorder anything.
Nothing is uploaded. The job is saved in your browser and can be encoded into a share link; that link contains the whole bill of materials, so treat it the way you would treat a quote sent to a customer.
Questions
Does this replace the estimate in my slicer?
No. The slicer knows the model and the profile; it can estimate filament grams and print time. It does not know your machine rate, your labour, your packaging, the failure rate of your shop or the fee a marketplace charges. The quote builder starts from slicer output and adds those costs.
Which slicer files can I import?
Three shapes: Bambu Studio or Orca Slicer plate CSV (object, filament weight, print time), PrusaSlicer statistics CSV (object name, filament used in grams, estimated printing time), or pasted TSV/CSV rows as name, grams, minutes. Cura, Simplify3D, ideaMaker and Slic3r exports are not parsed. The importer lists what it matched and skipped.
How is the suggested price calculated?
Unit cost is filament plus machine time plus hardware plus packaging plus the failure buffer plus labour. Price is unit cost divided by ((1 − platform fee %) × (1 − target margin %)). That solves for a margin measured on net revenue, after the fee has been taken, rather than a markup on cost.
Why is there a separate failure buffer?
Because failed prints consume filament and machine hours without producing a saleable part. The buffer is a percentage you set, applied to filament and machine cost only. It is not a warranty reserve, and it does not cover reprints caused by a design error you have not costed.
Is my BOM uploaded, and can I share a quote?
Nothing is uploaded. The job lives in your browser, is saved to localStorage on this device, and the share link encodes the whole job into the URL fragment of the page address. Anyone with the link can read the job; treat it like a quote, not a secret.
Import a slicer file, set your rates, print the quote.