Changelog
What's new
The workbench moves almost daily. Updates are grouped by area below, with the most recently-touched area open first. Open any section to see what shipped there, newest first. The math behind any number is always published at /the-math.
3D printing
99July 28, 2026
Give a one-size listing its whole size range
Some listings were built back when a product only came in one size: a row of colors, one price, no size options. Adding sizes to one of those used to be a job for Etsy's editor, because it rebuilds the listing rather than adding to it. Anvil can do it now. It shows you exactly what changes first, including that the single price it sells at today is replaced by your catalog's prices for each size, and your colors keep their swatches and photos. Nothing is written until you say so.
Get a listing right before it goes live
If you build your Etsy listings as drafts first, putting SKUs on one used to count for nothing: the size ladder still refused to reconcile until the listing was live, which is backwards. Stamping a draft now counts, so you can square a product away and publish something already correct. Your progress bar still tracks live listings only, since that is what buyers can see.
Tell it which part is the size
A multi-part product gets its size from its main part, which Anvil picked as the heaviest one. That is usually right, but a base or saucer can outweigh the body it belongs to, and then the whole collection gets measured off the wrong piece. Beside the width/height switch you can now say which part names the size, and it sticks.
Width or height is your call now
The size ladder tool has a "Sized by width / height" switch, but it only changed what you were looking at: underneath, Anvil kept deciding for itself which one a collection was really sized on, and it guessed from the name. That went wrong for anything shaped unexpectedly, like a vase that's sized by how wide it fans or a bowl that's twice as wide as it is tall, and a collection could quietly drop off the list because the guess said it was already fine. Now the switch sticks. Whichever one you pick is what the cards, the next-up card and the reconcile all use, until you change it. Also fixed: if your slicer renamed a single-part product's part between runs, the re-slice used to sit beside the original instead of merging into it.
A clean SKU when a sliced product joins your catalog
When you promote a sliced product from the drafts inbox, its catalog SKU is now built from your shop code, the product name, and the size (like DW-TOLP-XXS), instead of carrying whatever the slicer named the part file. A messy part name used to produce a messy SKU that could run past Etsy's 32-character limit. Your own typed SKU still wins if you set one, and re-slicing a product you already promoted leaves its SKU exactly as it is, so nothing an order relies on ever moves.
Tick every leftover row at once
When you sync a listing's sizes, any row with no catalog counterpart is listed for you to tick if it should come off the listing. A collection coming off the old size wording can leave dozens of them, and ticking each one by hand was most of the job. There's now a "Tick all" next to that list, and a second click unticks them. It only appears with more than a couple of rows, and nothing is ever ticked for you: removing a row takes that option off your live listing, so the choice stays yours.
The ladder ride stops bouncing you back and forth
The ride's last three steps (stamp the SKUs, add missing sizes, sync the sizes) all live on the same listing card, but each one used to send you back to the ladder, which then sent you straight back to that same card for the next one. Now the glow just moves to the next control where you already are, and the ride only returns to the ladder once the last of them lands. The page also scrolls to the buttons rather than the top of the card, so the work is under your cursor when you arrive instead of a scroll away.
Rename a part once, every size follows
A part is the same physical thing in every size, so its name is really a fact about the collection, not about each listing. Renaming one meant opening every size and typing the same word again. There's now a "Rename a part across every size" line on each collection: pick the current name, type the real one, done. Only the name moves. SKUs, listings and job history stay exactly where they are, so nothing on your shop needs touching. Handy if old products are still carrying a placeholder name from before their files had proper part names.
A listing tool that stalls now says so
"Sync sizes from catalog", "Add missing sizes" and "Push to Etsy" could sit on their working label forever if the request never came back (a slow Etsy call, a dropped connection, a deploy landing mid-click). The work had stopped, but the button had no way to tell you, so the only way out was a reload. Those calls are now caught: you get a plain line saying it never came back and that nothing was written, and the button is ready to click again. The ladder ride's sync step also narrates its legs (reading the listing, recording the pass, heading back) instead of showing one frozen message through all three.
Some products just don't take a nursery pot
A vase is excused from the nursery step automatically, but a box, a bowl or a lamp looks like a planter to any rule we could write, so the ride kept asking them for a nursery run that was never coming. There's now a one-click "Doesn't need one" on that step: the collection is marked, the step disappears, and the ride finishes. You decide rather than a name pattern, because names genuinely can't tell (a Pot might well take nursery sizes). Undo any time.
Nursery sizes can live on the same listing as the rest
A planter and its nursery-pot sizes used to be two products and two listings, which meant two of everything to photograph, write, and keep in sync. They can now be one: the nursery sizes sit in the same collection as the letter sizes, and the ride's last step puts them on the SAME listing instead of asking you to draft a second one. Each family still prices on its own ladder, and the size dropdown keeps the letters first and the nursery sizes after. Nothing forces the change: a collection that still has a separate nursery companion keeps working exactly as before.
The ladder ride waits for the whole run, then takes you to it
While a ride waits on a slicer run, the waiting card watches for it: the page checks every 20 seconds and refreshes itself the moment drafts (or doesn't-fit skips) reach your account. It knows which sizes it is owed, so it waits for the whole set instead of the first arrival, shows the progress ('2 of 4 missing sizes are in, still slicing M and XXXL'), and then takes you straight to the drafts inbox. It goes by whether the run has stopped delivering, not by which collection is on screen, so a batch that finishes a different product (or a planter's nursery family) still brings you over once it is done. Deliberately slicing a partial run? A quiet link opens what has already landed.
A collection that was never listed on Etsy reconciles freely
The wrong-size guard demands stamped SKUs before a rename can shuffle size words, because a live listing's buyers pick by the old words. But a collection your shop never listed can't take an Etsy order at all, so there is nothing to misroute — and the guard was still demanding stamps that had no listing to land on. It now checks the shop's whole listing mirror (every state) for real exposure: a shared SKU, a confirmed pairing, or an unaccounted listing leading with the collection's codename. Zero exposure opens the guard and the Reconcile button lights up. Careful by design: a same-codename sibling only counts as accounted for when it is pinned or SKU-matched to its own collection, and any mystery listing that answers to nobody keeps the guard closed.
Sizes now keep at least two dollars between them
The size-price separation guard bumps a tied or inverted larger size up so every size posts strictly above the one below it. The minimum step between sizes is now $2 instead of $1: a bigger size should read clearly bigger on the sticker. Everything else about the guard is unchanged — bump-up only, the smallest size never moves, naturally distinct prices are untouched, and nothing writes to a listing without your confirm.
A size that can't print stops blocking the ladder
Some sizes physically don't fit any of your printers (a 12 inch box on a 350mm bed), so the slicer skips them and the ladder ride used to wait forever on a rung that could never exist. Each missing rung on the ride card now has a one-click 'doesn't fit' control: the size leaves that collection's ladder, the counts read honestly (8 of 8, with the exclusion noted), and the ride moves on. Undo any time. The slicer pipeline can also report these skips itself, and a size that later slices successfully (hello, bigger printer) reopens on its own.
The ladder ride ends with prices verified current
Adding missing sizes puts the new rows on at today's prices, but it never re-prices the rows already on the listing, and the ride used to count an add as good enough. Now only a full sync satisfies the final step, and it has to come after any adds: a finished ride means every row on the listing was rebuilt to your shop policy. A sync that finds nothing to change records the clean check and sends you back to the ladder with a verified note instead of making you read an empty preview.
The ladder lands you on the exact card, glowing
Following a ladder step to the Etsy SKUs page used to drop you at the top of the full listing wall. Now the ride carries its target through: the page scrolls straight to the listing you're working, rings it, and the exact control that step wants clicked (Stamp, Add missing sizes, or Sync) glows so there's no hunting.
A one-size listing can't trap the ladder line either
Some listings sell every size under one price with no Size dropdown at all, marked with the sells-one-size pin. On those, stamping SKUs narrows to the pinned size, so the other word sizes can never be stamped and the wrong-size guard would hold the reconcile forever: the Stamp SKUs first button was a dead end you could click all day. The ride now recognizes that shape: the step says the real move (give the listing a Size variation in Etsy's editor, then stamp), counts as a wait, and the collection rides at the very back of the line with the other Etsy fix-ups instead of blocking your next click.
A deactivated listing waits at the back of the ladder line
Stamped SKUs only protect orders on a live listing, so when a collection's rename is guard-held and its Etsy listing is deactivated, stamping alone can't unlock it: the real remaining move is on Etsy, finishing the listing and turning it back on. The ride used to park those collections at the front telling you to stamp SKUs you may have already stamped. It now reads that state for what it is, a wait: the step says reactivate the listing on Etsy (and that the reconcile unlocks after the next sync, since Etsy's index can lag a reactivation by about fifteen minutes), and the collection sinks behind ones with a real one-click next step, right beside the reslice waits.
Finish a ladder step and land back on the ladder
Ride buttons used to be one-way: click Add missing sizes or Sync from the ladder, land on the SKU page, do the thing, then find your own way back to see the next step. A ride button now marks its trip, so the page it opens shows a Back to the ladder link at the top, and the moment an Add missing sizes or Sync confirm lands, it heads back to the ladder on its own so the next step is right there. Stamping stays put on purpose (its skipped-size questions are answered on that page), and a created nursery draft offers the way back next to the open-in-Etsy link instead of yanking you away from it. Arrive at those pages any other way and nothing changes.
The ride knows a between-rungs size is reslice work, not a button
Some old sizes physically sit between ladder rungs (a 4.7 inch vase on a 3.5 and 5.5 ladder), so the reconcile tool correctly refuses to guess which rung they meant. The ride used to park those collections at the front of the line telling you to click Reconcile anyway, which could only say no. It now reads an all-refusals plan for what it is: reslice work. The step says so plainly (reslice at ladder sizes in your slicer; the old off-rung sizes stay your call to keep or take down), counts as waiting, and the collection sinks behind ones with a real one-click next step.
Sync can now remove old leftover rows, but only the ones you tick
A listing can carry rows the catalog no longer claims: old sizes from before a restructure, sometimes disabled in Etsy's editor but still sitting on the listing. The sync preview always listed them as left alone, on purpose, because a row the catalog doesn't recognize can also be a REAL size you still sell under older wording, and deleting those by guesswork is how wrong-size orders happen. Now each left-alone row in the preview carries a checkbox: tick the ones you know are stale leftovers and the sync drops them in the same confirm, audited like every other change. Nothing is ever pre-checked, unticked rows keep round-tripping byte-identical, and a row that turns out to match a catalog size between preview and confirm heals instead of deleting.
Drafting a listing checks the ride off instantly, with the product pre-picked
Two rough edges from the migration ride's first real lap. First: creating a draft on Etsy didn't satisfy the ride's nursery step until the next hourly sync mirrored it, so the card kept telling you to do the thing you just did. The draft tool now records the new listing itself the moment Etsy confirms it, so the step checks off right away and the ride moves to the next collection. Second: the ride's draft button dropped you on the Draft-on-Etsy page with an empty product picker. It now arrives with the right product already selected; the picker and the template listing stay fully yours to change.
The drafts inbox catches a renamed product before it duplicates
Rename a product folder in your slicing pipeline (or spell it differently from the catalog) and the next run arrives under a name the catalog doesn't recognize: saving would quietly mint a whole new collection beside the original, because a save matches by SKU and generated SKUs follow the product name. The inbox now spots the near miss before you save: when a run's name is one letter off an existing collection (Bamboo vs Bambu), the group wears a warning naming both and the clean path through (rename the old collection to the pipeline's name first, save, then reconcile marries the twins). Deliberately careful about your catalog's real near-name products: an exact name match never warns, a different word count never warns, and one-letter neighbors like Coil and Coin only meet the warning if a brand-new run arrives under a third name near one of them.
A bigger size never posts at the same price as a smaller one
Two neighboring sizes can cost nearly the same to make, and the sticker rounding then lands them on the identical price - which reads to a buyer like a mislabel. Every tool that writes prices to a live listing (price push, sync sizes, add missing sizes, new drafts) now runs the size ladder through a separation pass: walking smallest to largest, a size that ties or undercuts the one below it bumps up by at least a dollar, re-rounded to your sticker style, and the bump ripples so the whole ladder climbs. Bumps only ever go UP, the smallest size never moves, and prices that are already distinct are left exactly alone - the guard fixes what reads wrong, it does not spread your prices apart. Word sizes, inch sizes, and nursery sizes each climb their own ladder. As always, nothing writes without the preview showing you every old and new price first.
Draft and deactivated Etsy listings now show up in the tools
The listing mirror only saw your ACTIVE listings, so an unpublished draft (a nursery listing waiting on its title and description) or a deliberately deactivated listing was invisible: the SKU page couldn't pair or stamp it, and the migration ride kept asking you to draft a listing that already existed. The hourly sync now also mirrors drafts and inactive listings, each marked with its state. The SKU page lists them with a small draft or inactive chip so you can pair, stamp, and sync them like any other row, and the ride's nursery step counts a draft as done: the process happened, publishing is your call. The safety lines don't move: the wrong-size guard, the price-drift watch, and the scoreboard's listing axis still trust only live listings, because a draft's SKU rides no real order and its price drifts at nobody.
The migration ride: a guided step-by-step for every collection
The ladder migration bounces each collection across four pages, and knowing where you left off lived in your head. The size-upgrade page now opens with a ride card: it picks the next collection to work, shows every step of its loop with green checks (reconcile the words, reslice, QC the drafts, stamp SKUs, add missing sizes, sync wording and prices, the nursery line), and puts ONE button on the current step that lands you in the right tool. Waiting on a slicer run? The card says so, and a 'next in line' panel preps the following collection's file drop (the part names to match, the sizes to slice, whether a nursery run is owed) so the printer never waits on you. Nothing is saved or tracked by hand: every step is read live from your catalog and listings, so closing the tab IS saving, and coming back resumes exactly where the data says you are.
Storefront, ladder, and nursery achievements
The whole Etsy machinery arc (SKU stamps, size syncs, price pushes, add-missing-sizes) and the ladder migration itself now award badges. Storefront counts the listings each tool has touched, The Ladder counts collections brought fully onto the size ladder (with Master of the Forge waiting at the end for a complete catalog), and Nursery counts your nursery lines. All earned live from work already recorded, and the categories only appear once you've started that work.
Every catalog navigation link joins the escape hatch
The amber 'tap again' rescue for a stuck navigation only covered the sidebar and one back link - the catalog's top-corner buttons (Back to catalog, Build a quote, Draft on Etsy, Draft a new listing) and the new pipeline strip pills were ordinary links that could still silently queue behind a jam. All of them now pulse when tapped and offer the same force-through after ten seconds, so no matter which link you grab, you can always see it landed or push past a wedge.
The ladder tools get their own strip, and a refresh button
The four surfaces a collection bounces between on its way onto the size ladder - the drafts inbox, the ladder tool, the Etsy SKUs page, and Draft on Etsy - now carry a shared pill strip, so hopping between them never needs the sidebar. And each page has a one-tap Refresh: when your slicer pings that a run finished, one click re-reads the page in place (no full reload, no losing your spot) and the fresh drafts or numbers appear.
The ladder scoreboard now watches Etsy too, and links you there
The size-upgrade scoreboard tracked the catalog's side of the migration but not the listing's - you carried 'stamped but not synced yet' in your head. Each work-list line now also reads 'listing 3/9': how many of the collection's sizes a live Etsy listing actually carries SKUs for, measured exactly the way order matching trusts. Catalog ahead of the listing means the SKU page still owes a stamp, add-sizes, or sync. And every collection name is now a link that opens the Etsy SKUs page pre-filtered to that collection's listings - no more scrolling two hundred rows to find the one you're working. Two pages, one glance, zero memory required.
The drafts inbox picks filament by type, like the estimator
The draft products inbox listed every spool in its filament picker, but the price math pools by material TYPE - every PLA spool produces the identical estimate, so fifteen color options implied a choice that didn't exist. The picker now reads PLA / PETG / and so on, exactly like the drop estimator's: one entry per type, your most-printed type pre-selected, and the saved product points at that type's workhorse spool. Numbers don't move; the picker just stops asking a question the math never asked.
The drafts inbox catches renamed parts before they duplicate
Your slicing pipeline names a product's parts after its files - and if those names drift from the catalog's (the run says Pot and Plate, the catalog says Top and Bottom), saving the drafts quietly duplicates every size instead of updating it, and the ladder tool can't pair the copies afterward. The inbox now spots this before you save: when a run's part names share nothing with the catalog's for the same sizes, the group wears an amber warning naming both sets and the durable fix (rename the part files in your pipeline's product folder, then reslice - renaming in the inbox works once, but the next reslice flips it back). Single-part products and genuine part additions stay quiet.
The ladder tool understands a reslice that came early
If a reslice landed before a collection was reconciled, the old word sizes and the fresh letter sizes sat side by side - and the wrong-size guard would refuse to reconcile until every size was stamped, including the letter twins that exist only in the catalog and so could never be stamped. A dead end. The guard now understands that a size the reconcile itself deletes (a twin being absorbed into its original) can't take an order and doesn't need a stamp. And when the remaining blockers are catalog-only letters, the banner now spells out the way through: stamp the word sizes, use Add missing sizes to put the new rungs on the listing, then reconcile. The guard is otherwise exactly as strict as before.
The size ladder gets a progress bar
Moving a whole catalog onto the size ladder is really three jobs per collection: rename the old word sizes to letters, reslice for the full run of sizes, and add the nursery line. The size-upgrade page now opens with a scoreboard that tracks all three at once: a bar showing done vs needs-a-reslice vs needs-reconciling, and a collapsible work list per bucket with each collection's rung count (3/9) and whether its nursery line exists yet. Products that don't belong on the ladder (lamps, sets) are listed separately and never counted against you. One glance answers 'how much is left' instead of a hand count.
A reslice can't duplicate a product anymore
Reslicing a collection that was already on the letter ladder used to leave twins: the promote couldn't match the new run's SKUs to the stamped ones, so S, L, and XL each ended up with two rows - and the catalog read each pair as a two-part product, so queueing one would have printed both. The ladder tool now recognizes the pattern: the established row keeps its identity (SKU, listing links, job history), takes the fresh slice's numbers and name, and the twin is absorbed. The next reslice updates the survivor directly.
Vases get their own size ladder
The ladder tool used to refuse every vase: their heights (5.5, 7.5, 9.5 inches) sit between the planter rungs, which measure pot width. It turns out the vase line was already authored on its own clean 2-inch ladder, so that ladder is now official: 3=XXS, 3.5=XS, 5.5=S, 7.5=M, 9.5=L, 11.5=XL, 12.5=XXL, measured by height. Collections sized by height check the vase rungs, so a standard vase reconciles with simple letter renames (Small to S) that keep their meaning - no wrong-size risk, no reslicing. The Forge's size labels carry the same map, so a future vase reslice at a ladder height wears its letter automatically.
Size ladder holds back a rename that could ship the wrong size
Moving a collection onto the ladder often shuffles the size words around: your 6 inch "Medium" becomes L, and your 8 inch "Large" becomes XL. Your Etsy listing still shows the old words until you sync it, and the old words and the new letters mean the same thing to the order matcher, so a buyer picking "Large" could have been matched to the row that used to be Medium. A SKU always outranks the size word, so a stamped listing was never at risk. Now Anvil checks: if a rename would shuffle the words and the listing has no SKUs, Reconcile is held back and tells you exactly which pick would land on which size, with a link to stamp them first. Renames that keep their own meaning, like Small to S, are unaffected.
Size ladder: a tray no longer blocks a whole size
The ladder upgrade tool kept leaving sizes alone with a note like "the Flat Base part's footprint 7.5in sits on no ladder rung", even when the planter itself sat dead on a rung. The reason: every part had to land on a rung, and a tray, base, or saucer is naturally a different width from the body it belongs to, so one of them vetoed the whole size. Now the size is named by its main part (the heaviest, the same part whose SKU speaks for the variant on Etsy) and the rest follow it, so a size still moves whole or not at all. Sizes that genuinely sit between two rungs are still left alone on purpose: guessing which way to round is how a listing ends up selling the wrong size.
Sync a listing's sizes from the catalog in one click
Hand-editing variation rows in Etsy's editor is where migration mistakes happen: a SKU pasted onto two rows, a 10 inch wording left on a different rung's SKU. The SKU page's linked rows grew Sync sizes from catalog: Anvil reads the live listing and rebuilds its size section so every row carries the ladder wording with its inches (editable before you confirm), the right SKU, and your posted-price policy price, with colors preserved exactly. The preview shows every field moving old to new, flags provable duplicates for removal, and leaves anything it doesn't recognize untouched with the reason. It doubles as a truth check: zero changes means the listing is proven in sync. Nothing writes until you confirm, and every sync lands in the same audit ledger as price pushes.
Size ladder upgrade: whole sizes only, and vases measure by height
Two fixes to the ladder upgrade tool from live use. First, a size could show a rename for one part while its sibling part (whose dimensions didn't land near any rung) stayed behind — applying that would have split the product in two. Now a size only ever moves whole: if any part of it can't be placed, the whole size stays put and the reason names the part. Second, vases size by how tall they stand, not how wide they sit, so reading their footprint misplaced every one. Each collection now has a Sized-by toggle (width or height) that switches the preview instantly; collections with Vase in the name start on height. Renames also read one line per size now, listing the parts moving together.
Saving a draft no longer freezes the inbox
Saving a draft product to the catalog could leave the page unresponsive for seconds: every pipeline render in the inbox (60 KB and up, each) rode along inside the page and again inside every save's response, so a full inbox meant megabytes of payload per click. The renders now load lazily through their own image route and the inbox list ships without them, so saving a draft comes back fast and navigation stays live. Same treatment the catalog got for its thumbnails.
SM is its own size now
The size vocabulary used to read SM as an abbreviation of Small, so a catalog carrying both an S and an SM had two sizes sharing one rung: they could group together on a drop, generate colliding SKU codes, and read as ambiguous to every size matcher. SM now stands on its own step between S and M (it's the 4.5 inch rung on the size ladder), with its own SKU code and its own place in every sort. Plates named SM group apart from Small, Etsy size matching treats them as distinct, and Add missing sizes can now add an SM row instead of skipping it as ambiguous.
The main part's SKU fronts each size
A multi-part product's size variant carries one SKU on Etsy, and Anvil used to pick whichever part the database returned first — which could put a drip tray's SKU on the listing row while the planter itself sat unnamed, leaving buyers wondering why their order says TRAY. The pick is deterministic now: the heaviest part (by slicer weight) fronts its variant, so the main body's SKU is the one stamping writes, drafts carry, and Add missing sizes uses. Rows already stamped keep their SKU (stamping never overwrites); hand-edit any tray-fronted row in Etsy's editor if the wording bothers you — either SKU still routes orders to the right size.
Grow a live listing's size ladder in one click
When the catalog gains sizes an Etsy listing doesn't sell yet (the listing offers 3, 6, and 8 inch while the ladder now runs 4, 5, 10, and 12 too), the SKU page's linked rows grew an Add missing sizes button. Anvil reads the live listing, works out which catalog sizes are absent, and shows exactly what it would add: every existing color times each new size, priced at your shop's posted-price policy, SKU'd, with buyer-facing wording you can edit before confirming. New rows slot into the dropdown in size order, existing rows aren't touched, and anything unreadable or unpriced is left out with the reason spelled out. Nothing writes until you confirm, and every addition lands in the same audit ledger as price pushes.
The drift queue shows all of it
Price-drift cards were capped at five, biggest gaps first, with the rest waiting for you to clear one — fine when Insights was a single long list, but the drift category now has its own page and a shop with a posted-price policy can have a deep backlog. The cap is gone: the Price drift tile counts every drifted listing, and its view lists the whole queue sorted by dollars left behind, each with its push button. Work it top to bottom or cherry-pick; nothing hides anymore.
Skipped SKU rows can be resolved by hand
Some Etsy size values name no single size a matcher could ever read: a variety set like 'Set of 3 Variety' or a mixed trio. Those rows skipped during SKU stamping, and Etsy's own listing editor exposes no per-variation SKU field to fix them manually. Now a stamp result lists each skipped size value with a picker: tell Anvil which catalog variant it is, click Write SKU, and the SKU lands on Etsy and the catalog through the same stamping machinery. One answer covers every color row sharing that value, and the matcher never guesses on its own — a natural size match always wins over the manual answer.
The pairing picker shrinks as you pair
Pairing Etsy listings to catalog products meant scrolling a dropdown of every product in the catalog, including ones already paired elsewhere. The picker now leads with the products not yet paired to any listing, and sinks the already-paired ones into their own group at the bottom (still selectable, since a product can legitimately appear on more than one listing). The unpaired pool shrinks with every pairing, and when it runs dry you know the remaining listings have no catalog counterpart yet.
Etsy drafts price at your posted-price policy
Draft on Etsy priced each size at the bare suggested price, but a shop that bakes shipping into posted prices or runs a standing sale markup posts stickers above that, so a fresh draft would have needed an immediate price push to land right. Draft prices now apply the shop's posted-price policy (the same basis the drift watch compares against and pushes default to), with a note on the form saying exactly what's included. A shop with no policy set drafts at the bare suggested price, unchanged.
Etsy drafts speak human sizes
Catalog size codes are filename-safe ("N4p6in", "3p5in", "SM") and read as gibberish in an Etsy size dropdown. Draft on Etsy now prefills buyer-friendly wording instead: a nursery size becomes "Fits 4.6 inch Nursery Pot", a ladder letter shows its inches too ("S (4 inch)"), and a plain inch code becomes just the measurement. Every label stays editable before you create the draft, and because drafts carry SKUs and order matching reads the SKU first, the wording is pure presentation: no label choice can misroute an order.
Etsy orders match by SKU first
Every Etsy order line carries the SKU of the exact variation the buyer chose, and Anvil now reads it before anything else. On a stamped listing an order resolves straight to the right catalog product and size with no title guessing and no size-label reading, which makes matching immune to listing wording, renamed sizes, and lookalike titles. Unstamped listings match exactly as before, and an ambiguous SKU (one code claimed by two products) is refused rather than guessed.
A tool for moving old word sizes onto the size ladder
Shops restructuring their sizes around a bigger printer hit a naming clash: on the new ladder the same words mean different inches (the old Large was 8 inches; the new L is 6), so old and new labels can't safely share a catalog. The new Size ladder upgrade tool (catalog Data menu) reads each part's real sliced footprint and moves old word sizes onto their true rung: 4 inch becomes S, 6 inch becomes L, 8 inch becomes XL. When you've re-run a product through your slicer, the original row absorbs the re-run's fresh numbers and keeps its SKU, listing links, and job history, so nothing on Etsy or in your books moves. Anything that doesn't line up cleanly is left alone with the reason spelled out.
One-size listings can stamp, and skips explain themselves
Two SKU-page upgrades from a live stamping session. First: some Etsy listings sell just one of a product's sizes (color variations only, no Size on the listing), and the stamper refused to guess which size that was, so every row skipped. Paired listings with multiple catalog sizes now carry a "Sells" picker: choose the one size the listing actually sells and stamping writes that size's SKU on every row. The same pin guides order matching, so a size-less order queues the right size instead of going to review. Second: a skipped row now says why (no Size on the listing, or a size the catalog doesn't name) right on the result, with the fix spelled out, instead of a bare skipped count.
Etsy drafts carry package size and weight for calculated shipping
Shops whose Etsy shipping profile calculates rates from the package hit a wall creating drafts: Etsy requires the listing's item weight and dimensions up front. Draft on Etsy now sends them, prefilled from what the catalog already knows: the heaviest size's sliced filament weight and the largest part dimensions from the slicer (or your explicit box size when you've set one). All four fields are editable on the draft form, so you can add room for the box and packing before creating.
Inch sizes match on Etsy again, and drafts satisfy Etsy's new rule
Two Etsy fixes from a live selling day. Etsy sends listing text with quote marks encoded, so a size like 4" never matched during SKU stamping or price pushes — whole numeric-size listings skipped every row while word sizes worked fine. The matchers decode Etsy's encoding now, so inch ladders stamp and push like everything else. And Etsy recently made a processing-time "readiness state" required on new physical listings, which blocked Draft on Etsy: the draft flow now clones it from your template listing automatically, right alongside the shipping profile.
The drift watch understands your posted-price policy
If your shop bakes shipping into prices or runs a marked-up sale, your stickers sit well above the bare suggested price — which meant costs could creep up underneath them for months without a word from the drift watch. Each shop now carries a posted-price policy (on the shop form in Settings): whether prices bake shipping in, and the standing sale markup. The drift watch compares every listing against the policy's target instead of the bare suggested price, so a rising cost pokes through even a marked-up sticker. Price pushes default to the same policy on every device, and the push confirm still lets you override per push. Shops that leave the policy unset behave exactly as before.
Decimal and nursery sizes sort where they belong
Two size notations the catalog didn't understand now sort numerically everywhere. Filename-safe decimals (3p5in meaning 3.5 inches, since a dot breaks gcode filenames) rank right between their neighbors, so a 3in / 3.5in / 4.5in / 5in / 10in ladder reads in order instead of dumping the decimals at the bottom. And nursery trade sizes (N3 through N10 pots) sort as their own numeric family, so N10 comes after N8, not before N3 the way alphabetical order had it. Order matching learned both too: a buyer's 3.5 inch pick lands on the 3p5in variant, and a nursery N3 can never be mistaken for a physical 3 inch.
Price pushes learned free shipping and sale markups
Two new options on the Push to Etsy confirm, for shops that don't price the plain way. "Bake shipping into the price" pushes the stay-whole price (the item price with your carrier cost folded in) instead of the bare suggested number — for free-shipping shops where a separate shipping line doesn't exist. "Sale markup %" marks the posted price up so a platform sale's advertised discount nets the price you actually intended, rounded up to your own price step so the sticker is postable and never dips under the floor. The confirm shows every variation's old and new price under whatever options you pick, and the push audit records them. And pushing is no longer only for drifted listings: every linked listing on the SKU page has its own Push price control now.
Erase a tag, dismiss a single draft size, and find Draft on Etsy
Three small unblocks. The Spools page gained an "Erase a tag" tool for the desktop reader: wipe whatever an NTAG carries (OpenSpool or ACE data) so it reads as blank again — the tag's identity never changes, so a registered spool still resolves. The Forge drafts inbox now lets you dismiss one size row instead of the whole group, for when a batch slices six sizes and only four are worth selling. And "Draft on Etsy" is one click from the catalog header now, instead of hiding behind the SKU tool.
The desktop reader finds registered tags, and phones keep the tag to themselves
Two scanning fixes from live use. Tapping an already-registered tag on the USB reader used to open the register form as if the tag were new; it now opens the spool's page, exactly like a phone scan. And on Android, finding a spool used to also pop the system's own "new tag scanned" sheet over the top (the phone reading the tag's raw contents the instant our scan session ended) — the session now lingers a few seconds so you can lift the phone away in peace.
Write printer-native spool tags from the desktop reader
The desktop reader learned to write. Every spool's page now has "Write ACE tag": tap a blank NTAG213 on the USB reader and it comes off carrying the exact format an Anycubic ACE slot reads natively, so the printer's own screen shows the right filament, color, and temps. The tag registers to the spool the moment the write lands. OpenSpool tags write from the desktop too (the same tags phones write, for setups where the phone can't). Browsers can't write these raw tag formats at all — this is what the desktop agent exists for.
A USB desktop reader joins the Spool Vault
Phones are picky about factory spool tags. A small desktop app (the Anvil NFC agent) now owns a USB reader like the ACS ACR1552U and reads any tag, every time. Pair it once in Settings under Bridges & readers, then hit "Use the desktop reader" on a spool's page (the tap attaches the tag to that spool) or on the Spools page (the tap opens a pre-filled register form). The web page and the reader don't even need to be on the same machine: start the read from your phone, tap the tag on the shop computer's reader. Writing printer-native ACE and CFS tags on the same reader is next.
Marking a plate done finishes just that part, unless you say otherwise
When a printing part had queued siblings on the same printer, the Mark done panel used to pre-tick all of them as a shared plate — forget to untick and you finished parts that never printed. Flipped: only the part you are finishing is ticked by default, and you tick the others when they really shared the plate (a sibling that is also actively printing on that printer stays ticked, since one machine can only be printing one plate). The print-time estimate follows your ticks live.
Weigh spools in kilograms or pounds, right off the shipping scale
Shipping scales read kilograms or pounds, not grams. The Weigh & reconcile form and the register form's "left now" field both take the raw scale reading with a unit picker (g, kg, lb) — and registering a partial spool can take the gross reading with the spool included, subtracting the core weight the filament catalog already filled in. The register form shows the computed filament grams as you type, and calls out a number bigger than the spool could hold (the classic 64-instead-of-0.64 typo) before it saves.
Tag scanning says what happened, every time
Three quiet failure modes, all fixed. Holding a tag against the phone used to log a dozen duplicate scans (one lookup at a time now, with a short same-tag cooldown). A tag the browser cannot read (Bambu and CFS factory tags on some phones) used to look like nothing happened — now it says so and points at the QR label or NTAG sticker fallback (on phones that CAN read them, a Bambu factory tag works as the spool's identity: tap, register, done). And backgrounding the app used to silently kill the scanner while the button still said Ready — it now tells you scanning stopped and one tap re-arms it.
Weigh a spool, and the cost engine learns your real waste
Spool Vault phase three closes the loop from tracking to truth. Every spool page gained a Weigh & reconcile form: put the spool on a kitchen scale, enter the reading (with the core weight on file, the gross reading is enough), and the gap between what the scale finds and what the tracking says is recorded as your real drift. Spools that printed 200g since their last weigh (or hit zero) wear a quiet "weigh due" chip. Those weighs add up to a scrap report on the Spools page: how much filament each material and printer actually used, how much went to multi-color purge, and how much simply went missing beyond what the gcode said. That last number is exactly what the Waste % assumption prices, so the field in Settings now shows your measured rate with a one-click fill — like the learned failure rate, it is a signal, and nothing changes until you apply it and save (purge is never in that number; the purge-per-color assumption already prices it). The page also compares each product's estimated filament against what its finished jobs really pulled off the spools, priced at the real spool cost, so a product that always runs over stops hiding. And Running low on Insights now checks physical spools against the queue: when queued orders need 480g of a color and your spools hold 310g, you hear about it before the printer does.
Adding a filament color twice can't duplicate it anymore
A double-tap on the save button (easy on a phone) used to fire the add twice and quietly create two identical color entries — which split your stock number across two rows and could confuse order color-matching into sending orders to review. Creating a color that already exists (same brand, type, and color name) is now a clean no-op everywhere: the material form, the multi-color add, and the CSV import all check first. Registering a spool also got more honest about near-matches: when several of your existing colors look like the one you picked, the form says so and asks you to choose, instead of quietly adding a new entry.
QR labels: spool tracking for any phone, no NFC needed
NFC tag scanning needs Android Chrome, and not everyone has that in their pocket. The Spools page now links to a printable QR label sheet: print, cut, stick one on each spool, and pointing ANY phone camera at a label opens that spool (a fresh label opens the register form with its identity pre-filled, so labeling a rack is print, stick, scan, four fields). A label is just another identity on the same record, so a spool can carry a QR label and an NFC tag at once and both open the same place. Sticker paper is nice; plain paper and tape works.
Your printers now report starts and failures, not just finishes
The printer bridges (Bambu MQTT and Klipper/Moonraker, which covers a Rinkhals-flashed Anycubic) now relay every meaningful transition, not just the happy ending. A print starting flips the matching job to printing on its own; a failure marks the job failed with the wasted filament and hours estimated from how far the print got, which also decrements the right spool proportionally; a cancel puts the job back in line. Bridges also report the gcode filename, so Anvil matches the exact job by name and SKU instead of assuming the oldest one (and still falls back safely when it can't be sure). The jobs board gained a printer strip: one chip per printer showing what it's printing and roughly how long to go, or idle. Existing bridge setups keep working untouched; update the bridge script to get the new events.
Register a spool by picking it, not typing it — and write its tag
The spool register form now searches a built-in catalog of about 5,100 filaments across 53 brands (community data, credited on the sources page): type a few letters, tap your filament, and the brand, material, color with a swatch, net weight, and even the empty core weight fill themselves — you just confirm what you paid. A picked filament also carries its print temperatures and density, which powers the new Write tag button: hold a blank NTAG sticker to your phone and Anvil writes an OpenSpool-format tag AND registers it as the spool's identity in one touch. Registration can also add the color to your filament library and stock in the same motion, so pricing, order color-matching, and the color-level inventory all learn the new spool without a second trip to Settings. Everything stays editable, and hand-typing still works for anything the catalog doesn't know.
Spools load onto printers, and finished jobs pay from the right one
Spool Vault phase two closes the loop from tag to grams. Every spool now loads onto a printer (and a slot, for an AMS/ACE-style unit) with one button on its page: loading a position moves whatever was there back to the shelf, the Spools page shows the whole loadout at a glance, and the Kobra ACE's slot 4 (a known hardware fault) warns before it accepts. From there, consumption is automatic: a slicing pipeline can send each plate's per-slot filament estimate ahead of time, and when the matching job finishes, Anvil takes the grams off the exact spools that were loaded, purge and flush split out on multi-color jobs, partial prints scaled by how far they got. No pipeline? A finished job still decrements the printer's sole loaded spool from its own numbers. Grams that arrive for a slot with nothing loaded are never dropped silently: Insights tells you which printer printed untracked plastic. Scans and load actions taken at the printers on flaky WiFi queue on the phone and send when the connection returns.
Spool Vault: every physical spool, one tap away
The new Spools page (3D printing, under Workshop) tracks each physical spool as its own record: brand, material, color with a swatch, what you paid, and a live remaining-grams bar. The headline is NFC: stick a cheap NTAG sticker on a spool, tap it with your phone (Android Chrome), and the spool's record opens in seconds; an unknown tag jumps straight into a pre-filled register form, so tagging a whole rack is tap, four fields, next. A spool can carry several tags (different printers speak different formats) and any of them resolves to the same record; dead tags get replaced without losing history. This is phase one of a bigger arc: automatic consumption from sliced jobs, scale reconciliation, and a real waste factor for the cost engine ride on top of these records next.
An order for a size you don't carry yet goes to review, not to its neighbor
When an Etsy listing offers a size before your catalog does (say the listing grew an X-Large option while the catalog still ends at Large), an order for that new size used to slip onto the closest existing size and quietly queue the wrong print. Now a size Anvil recognizes but can't find in the catalog sends the order to the review queue instead, where you pick the right product once the size exists. Numeric sizes are untouched: a 6 inch order still finds a variant named 6 inch.
Add filament colors by tapping, not typing
Adding a material's colors now shows the line's color palette as tappable chips: pick your filament (say, Polymaker PLA), tap Muted Blue, Fossil Grey, and Army Beige, and each lands as a ready color row with its name and a starting swatch. Everything stays editable, and other brands get a common color wall (Black, White, Grey, and friends). This matters beyond convenience: order color matching scores buyer choices against your color names, so a hand-typed name with a stray letter can quietly send an order to the wrong spool. Picked names do not have typos. Swatches are close rather than color-matched; the hex printed on your spool wins.
The jobs board now tells you when a buyer's color didn't match
When an order comes in with a color choice Anvil can't confidently match to one of your spools, it queues the work at the product's default color rather than guessing. That was the right call, but it happened silently, so a Mist Blue order could sit in the queue wearing Terracotta until you caught it by eye. Those jobs now wear an amber heads-up right on the card: buyer chose "Mist Blue". Pick a color on the job and the note retires. The tooltip also shows the permanent fix: put the listing's color name on the spool in Settings (a color like "Muted Blue - Mist Blue" matches orders on either half). The Materials form now explains which field does what, too: Color is the label shown on jobs and matched against orders; Name is your internal label.
Failed a print at the packing table? Now you can say so
Sometimes a print finishes, gets marked done, and then fails the eyeball test when you pick it up to pack it. Finished prints now carry a Mark failed button: one click flips it to a real failure, reverses any sale or shelf unit it recorded, and sets its order to wait for the reprint, so your win/loss record and your money both stay true. Also fixed: hitting Reprint on a finished part quietly queued the new attempt behind the old card, with no Start button anywhere. The fresh attempt now shows up front and center, ready to start.
The catalog is fast again at any size
A catalog with a thousand listings was quietly shipping every collapsed product group's full contents on every single page load, about 19 MB of it, which took long enough that clicking Save or Delete looked like nothing happened and navigating to the catalog looked broken. Collapsed groups now ship only their headers; a group's contents load the moment you expand it, in a few hundred milliseconds. Search across collapsed groups still works exactly as before, and small catalogs are untouched.
Pick the shops right in the draft inbox
Saving a draft product used to list it only on shops flagged as defaults in Settings, and if none were flagged it saved unlisted without saying so. Now every draft group shows Listed on checkboxes right in the inbox, pre-checked from your default shops and editable per product before you save. Checked shops attach to new products and get added to a product a re-save updates (never removed, so a re-slice can't unlist something you set up). And if no shop is flagged as a default, the inbox says so plainly instead of staying quiet.
The Hobbyist date filter now actually filters for 3D printing
Picking a time period on the Hobbyist dashboard scoped every craft's numbers except 3D printing, which kept showing all-time totals no matter which chip you picked. One missed connection when the filter shipped. Fixed: prints, hours, filament, cost to make, and the making pulse all follow the selected period now, scoped by when the work finished.
Slicer feeds can send a product picture now
A slicing pipeline that feeds the Draft products inbox can include a product render with each slice (an optional image field in the same POST). The render shows on the draft group in the inbox, so you can tell products apart at a glance, and when you save the group to your catalog it becomes each listing's thumbnail. It never overwrites a photo you added yourself: a product that already has a picture keeps it. The batch's parts all carry the same render, and Anvil stores just one copy per product.
Your slicer can feed the catalog now, through a review inbox
If you run your own slicing pipeline, it can now send each sliced part's numbers (SKU, grams, minutes, printer) straight into Anvil. Add a feed under Settings, Shops & Fees, drop the secret into your pipeline's config, and every slice lands in a new Draft products inbox: grouped by product, each size and part priced through the real engine with your filament costs, machine rates, electricity, and failure buffer. You review the names and prices, then one click saves the whole product to your catalog, listed on your default shops. Nothing touches live products until you say so, and re-slicing the same SKU updates its draft (or its already-saved product) instead of creating a duplicate.
Shared plates can book their real filament, not a doubled estimate
When parts print together on one plate, each part's slicer estimate includes its own file's plate overhead (the prime line, skirt, and color-change purge), so summing the parts counts that overhead once per part even though the real combined plate only paid it once. The "printed on one plate" finish now takes an optional actual filament total alongside the actual print time. Leave it blank and each part books its own estimate exactly as before. Enter the real figure (your slicer's combined-plate number, or a spool weigh-in) and each part takes its proportional share, the same way the plate's real print time already splits. Single-color plates barely move; multi-color plates with purge waste are where the real number earns its keep.
The estimate screen got a big refresh
Drop G-code now answers faster and scrolls less. Material is picked by type (PLA, PETG, and so on) instead of a specific spool, because the estimate already prices on your real average for the type and any color of it prints the same listing. Every store shows its price at once: Direct plus each shop in one tidy list, each row carrying its suggested price and take-home with the numbers lined up, so comparing stores is one glance instead of flipping a dropdown (and it stays clean no matter how many stores you run; multi-size drops show each store's price range). The save box became one card: name, collection, and size on a single line, your stores below, and the Save button at the bottom once you've checked everything over. Your plates now live in one card, grouped by size from largest to smallest with a subtotal per size and a totals row, replacing the loose pile of cards and the separate combined-stats block. And once plates are staged the page flips to check-over-and-save: the name and save controls lead, the pickers follow, and the drop zone waits at the bottom as a slim add-more strip. The parsed numbers on a single-file drop collapsed to one stat line (the slicer source lines are one tap away, still fully auditable), the cost build-up tucks behind a toggle so the raw-to-loaded-to-price story leads, and a multi-size drop shows a tidy price-per-size list you expand as needed. On a desktop the page splits into two columns with the price riding along on the right as you work; on a phone a floating price pill follows you down the page and taps back to the full breakdown. The estimator also remembers your usual printer, assumption set, channel, and the stores you list on, on this device, so every drop starts where you left off.
Shipping now accounts for box size (dimensional weight)
Carriers bill the greater of a parcel's actual weight and its dimensional weight (box volume ÷ a carrier divisor), so a light but bulky product ships heavier than the scale says. Give a 3D product its box size (L × W × H) on Edit details and set the divisor on your shipping profile (139 for UPS/FedEx, 166 for USPS), and the shipping estimate bills on whichever is greater, per box. Leave the box size blank and everything prices by weight exactly as before. It only ever moves the shipping line, never the item price.
Finish parts that printed on one plate together
Printing a few parts of a product on a single plate? When you mark the plate done, Anvil now spots the other parts of that project sitting on the same printer and offers to finish them together. Enter the one real print time for the whole plate and it splits across the parts, so the product's cost reflects the actual print instead of adding up each part's separate estimate. Filament is unchanged (same plastic either way), and it only touches the cost side: your listed price and what the sale records are exactly as before. Untick any part that actually printed on its own.
Switch a queued job to any filament, not just the same type
The color picker on a queued 3D job used to only offer other colors of the same material type. That was fine for swapping a PLA job to another PLA color, but if an order matched to the wrong material entirely (say a PETG spool when you printed PLA), you were stuck with no way back. Now the picker lists every spool you have, with your job's own type first and the rest grouped by type below, so you can always correct it to the filament you actually used.
Catalog header no longer scrolls sideways on a phone
On a narrow screen the catalog's top actions (currency, Build a quote, Data) ran off the right edge and let the whole page scroll left and right. They now wrap onto a second line instead, so the page stays put.
Capacity planning now allows for reprints
The capacity planner projects when your machines free up from your queue and each job's expected time. Now a queued product with a learned failure rate carries a reprint allowance: a product that fails a third of the time is planned to tie up its machine about half again as long, because on average that's what it takes to get one good unit. It only kicks in once a product has enough recent jobs to have a real rate, and it's capped so one very flaky product can't blow the timeline up. Running jobs are untouched. So the 'can I promise this by Friday?' answer accounts for the reprints you actually do.
Tell a product it ships in two boxes
A bulky product that genuinely ships in two boxes pays the carrier's base rate twice and carries two boxes' packaging weight, but the estimate assumed one box, so the projected take-home read high and the stay-whole break-even read low. Now a 3D product's Edit details has a "Ships in" field: set it to 2 and the shipping estimate charges a base rate and packaging weight per box everywhere it shows (catalog cards, the cost breakdown popup, quotes, exports, dashboards). It covers the whole product: on a multi-part product, set it on any one part and the highest value wins, so parts you leave alone never add boxes. Everything else stays put: the item's list price never moves, and every product stays exactly as it was until you change the field.
Lock a part's color
A 3D part can now lock its color: check "This part is always this color" on Edit details and it always queues in its own saved filament, even when an incoming order carries a color choice. Made for parts that ship in one fixed color no matter the listing, like a planter's wood-look stand staying brown while the pot prints in the buyer's color. You can still change a queued job's color on the board.
Log a failed print's waste, even with no layer data
When you mark a print failed, Anvil estimates the wasted filament and time from the layer it died on. If a product has no saved layer count (a catalog or imported item that was never sliced here), there's now a "% wasted" field you can type directly, and a clear note telling you why the layer box is blank, instead of the amounts quietly sitting at the full print. Either way you can still fine-tune the grams and hours by hand.
Save a multi-plate product as one priced listing
If a product is really a few plates that sell together (say a Head and a Body), the new Assemblies section on your catalog lets you save that combo and see one price to post for it. Anvil prices the plates together so fees and packaging count once, not once per plate, which is the accurate number to list. Pick the product group, tick the plates that make the full print, name it, done.
Capacity planner: promise dates in prints, not hours
The 'can I promise it by?' checker used to make you type a new print's hours. Now you can pick one of your 3D products and a quantity, and it fills the time from that product's own print estimate, so you can answer 'can I make three more Planters by Friday?' directly. The date defaults to a week out so an answer shows right away, and the summary now tells you how many prints and how much print time are ahead of you.
Bambu Studio .gcode files price correctly now
If you exported a plain .gcode straight from Bambu Studio, Anvil read the print time, colors, and size but showed 'Filament: Not found', so it couldn't price the job or let you save it. Bambu stamps the filament weight a little differently from PrusaSlicer (a different word and separator), and we were only reading the Prusa wording. We now read both, so a Bambu export drops in and prices the same as any other slicer's file.
Dual and tri-color spools
A filament can carry a second and third hex, and every swatch (inventory, queue demand, trend bars, color pickers) paints the split. The filament shelf also regrouped by type first, then brand, matching how the pricing engine pools your spools.
Filament by the month
A monthly filament tally on the jobs page, by color, with an archive of earlier months. The home HUD shows the month's burn when there is one.
Filament pools by type
Listings price on your real average cost for a material type (any brand of PLA+ counts), and any same-type spool is interchangeable at print time. Actual job costs still use the exact spool you printed.
Pick the spool at print time
Queue a 3D job in any color of the same material type. The jobs page shows what the queue needs by color against your stock, flags shortfalls, and reorders a spool in one tap. Plus bulk filament import from CSV and a field-by-field tuning guide at /tune.
Multi-piece products and the breakdown popup
A product can be four identical sides printed two to a plate: quantity and fits-per-plate price it correctly (purge and handling per plate, labor and fees once per listing). And every catalog card gained a Breakdown button that opens the full cost build-up, the same math the estimator shows.
All crafts
39July 28, 2026
Attach the replacement you actually sent
When an order goes wrong you can already say you remade it, which counts another unit of that same product. That never fitted the common case: you sent something different. Sold an 8 inch planter to a buyer who wanted the nursery size, printed the nursery one, mailed it out. There's now a Replace panel on a sold order: pick the finished make you sent, add the postage, and say whether the original came back. The order keeps its revenue and takes on that make's real cost, so take-home reflects what making it twice actually cost you. The replacement print also stops sitting on the jobs board waiting for a sold-or-stock answer, because it was neither. If the original came back and is still sellable, one option puts it on your shelf and takes its cost off the order.
The catalog paints before it prices
A big catalog had to price every product before it could show you anything, which on a large shop is thousands of calculations standing between a click and the page. Now the catalog appears straight away and the value figures at the top arrive a moment later on their own. Nothing about the numbers changed, only when they show up. Sorting by price still waits, because it genuinely needs the prices to put things in order.
A shorter sidebar, with two landing pages
The sidebar listed every destination, which was a lot to scan and worse on a phone. The things you open all day (catalog, jobs, history, inventory) are still one tap. Everything else now sits behind two doors: Dashboards for your numbers, and Tools for the helpers, sale mode, quotes, importing and reporting a bug. Both landing pages are plain lists on purpose, so they open instantly.
The Refresh button actually refreshes now
The quiet Refresh button (jobs board, the ladder's waiting card, the pipeline strip) could spin and then show you the exact same page: the soft re-fetch sometimes reconciled against the router's cached tree and changed nothing, so you had to click away and back to see work that had already landed. It now revalidates the page on the server first, the same mechanism every form uses, so pressing it reliably shows what's new.
Mark a listing as taken down
Pulled a listing off Etsy or your site but want to keep the product? The Edit details form now has a 'Taken down' checkbox: tick it and the catalog card wears a quiet amber 'Taken down' badge, so you can tell retired listings from live ones at a glance. Everything else stays exactly as it was - SKUs, job history, recorded sales, and pricing all keep working, and an order placed before you pulled the listing still routes correctly. Searching 'taken down' in the catalog lists every pulled product. Untick the box when it's back up.
Sort the catalog into a work list
Two new catalog sorts for working through the whole catalog systematically. 'Oldest added' walks your products first-to-last, a stable order that never shifts under you. 'Least recently updated' is the sharper tool: products float to the top the longer they go untouched, and anything you edit, rename, or restamp sinks to the bottom - so the top of the list is always the next thing to do. A collection stays up top until every one of its sizes has been touched, which makes it an honest checklist for a catalog-wide pass like a size restructure.
Deleting a product no longer erases the work behind it
Deleting a product used to take every job it ever had with it: print counts, real grams and hours, failures, and completion dates, all gone. Worse, because the dashboards add up money by walking those jobs, that product's past sales quietly stopped counting there while the profit and loss page kept crediting the revenue, so your profit read higher than it was. Now a delete removes the listing and leaves the history standing. Finished jobs keep their numbers, and recorded sales keep counting with the figures frozen at sale time. Deleting a whole collection or size follows the same rule, and the confirm now says so before you commit. Nothing about your existing data changed; this only affects what happens the next time you delete something.
Customer orders: build them up front, track them as one
A customer asking for several things used to mean queuing each item separately and combining the sales afterward. The jobs page now has Start a customer order: pick the products, quantities, and colors, and the whole thing gets a real order number up front. Every item queues under it, a Customer orders block on the board shows each open order's progress at a glance, and when the work finishes the sales land on one History card automatically. That card grew too: edit the customer name and notes, enter ONE shipping cost for the whole order (it lands once, never double-counted), and print a packing slip, a clean price-free sheet of what goes in the box. New accounts can also pick their order prefix right in the welcome flow.
Insights is a category hub now, and it opens on this month
Insights used to be one long list, easy to skim past. It now opens as five tiles, each with a live count and the dollars at stake: Repeat offenders, Costing you money, Price drift (its own category now), Worth a look, and Running low. Tap a tile for a clean view of just that category, led by a what-to-do-about-it box with the specific moves, including the one-click Etsy price push on drift cards. The page also starts on the current month instead of the last 90 days, matching the dashboards; every window is still one tap away.
Every price now agrees on your learned labor time
Once a handmade product has enough finished jobs with a recorded hands-on time, Anvil prices it at the learned median instead of your original guess. The catalog card has done that for a while, but the dashboards, quotes, the price sheet export, the workbench totals, and the frozen numbers on a newly recorded sale were still pricing at the hand-typed estimate, so two screens could quote the same product differently. Now every surface prices at the same learned time, and your saved estimate stays untouched on the edit form. Applies to the eleven hands-on crafts; 3D printing prices machine time, not typed labor, and is unchanged.
Refunds count on the day they happen
Refunding an old order while looking at This month used to show nothing anywhere: every refund adjusted the numbers of the period its SALE was dated in. Now a refunded sale is two dated events, the way your bank statement sees it. The sale's period keeps the full sale it really had, and the period you issued the refund in shows the money going back out: revenue and take-home drop there, the Refunds & remakes card counts it there, and the by-month table carries the adjustment in the right month. The P&L and the year-end tax pack follow the same rule, so a December sale refunded in January lands in both years the way a cash ledger (and Schedule C) states it. Any view wide enough to contain both dates nets out exactly as before, and what you made (the cost side) stays with the period the work happened in. Remakes still anchor to their sale's date, since they have no date of their own.
One friendly pointer to the free trial, a few days in
If you sign up for a free account and never poke at the paid plans, Anvil now sends exactly one email a few days later: the estimators stay free forever, and here's what the 14-day no-card trial adds if you're selling your work. One email, ever. It respects the product news toggle in Settings, carries a one-click unsubscribe, and if you've already found the pricing page on your own, it stays quiet.
Big catalogs got their speed back
Three code paths were quietly hauling every product photo out of the database as one giant blob: the catalog page's assemblies section, the Insights price-drift check, and queueing work from a tracked quote. On a catalog with hundreds of photographed products that meant tens of megabytes per page load, which read as the whole app going slow. All three now fetch photos the way the rest of the app does: lazily, one image at a time, only when shown. If the catalog felt heavy today, this was why.
A straight answer when your trial ends
The 14-day trial already came with a reminder email a week before it ends. Now the moment after is covered too: if your trial wraps up without a card on file, you get one honest email saying you're back on the free plan, nothing was deleted, and everything you set up during the trial (products, jobs, dashboards, history) is waiting exactly where you left it, one click away. No drip campaign, no countdown pressure. Just the state of your account, said plainly.
Your data export caught up with everything Anvil learned this summer
The one-file backup under Settings, Account was complete when it shipped in June, but Anvil has grown a lot since: order numbers, the made-to-stock shelf, tracked quotes, saved templates, assemblies, business profiles, price history, achievements, and the bookkeeping that stops a marketplace re-sync from double-recording your history. None of that was in the download. Now all of it is, in the same single JSON file, along with a list of your connected shops (minus their passwords and tokens, which are never exported and get re-issued when you reconnect). If you keep backups, download a fresh one.
Three finishing touches across the weekend's work
The price-changes readout now shows on every craft's Seller dashboard, not just 3D printing (the weekly snapshot always covered every craft; the card just hadn't reached the other eleven). The inventory Make list now estimates non-3D products too, using each product's saved hands-on minutes and labeled as such, so a soap maker's deficit line reads "~2h hands-on" instead of nothing; only real printer time feeds the done-by date. And a refund on your own website now reaches from-stock orders: a unit that shipped straight off the shelf used to need its refund recorded by hand, but the site's refund webhook now finds the sale through its order number and reverses it, with the goods' fate (loss, or back on the shelf) still your call on History.
X-Large, XX-Large, and inch sizes all detect properly now
Dropping plates named X-Large or XX-Large used to lump them in with Large: the hyphen split the name apart and the size detector only saw the "Large" half. Fixed, through 5XL, and every spelling of a size now counts as the same size (XL, X-Large, and Extra Large are one group, not three). Dimension sizes work too: name a plate 4'', 6in, 4.5 inch, or 100mm and it's detected and ordered by physical size, decimals intact (a bare number without a unit is deliberately NOT a size, so a "Planter 2" doesn't become a two-inch pot). The same vocabulary now drives the catalog's size ordering and Etsy order matching, so an incoming X-Large order lands on your X-Large variant instead of tying with Large.
Quotes now charge the same price as your catalog
The quote builder was the one pricing surface that skipped the learned per-product failure rate: a product running hot (5 or more finished jobs with real failures) priced higher on its catalog card than on a quote, so quoting it undercharged. Quotes now apply exactly the rule the catalog uses, learned rate when it's on, your assumed buffer when it's off, so a quote line always equals the catalog price to the cent. Heads up: if you have hot products, their quote totals rise to match the catalog. That is the fix, not a bug; they were quietly underpriced before.
One learned-rate window, said plainly everywhere
Every learned failure rate on your bench is measured over one window: the 30, 60, or 90 days set on your default assumption set. The screens now say so honestly. The window picker lives only on your default set's form (other sets show the window read-only, since theirs never drove the data), catalog cards quote that same window in their observed-rate note, and the Insights buffer tune-up card now measures over your chosen window too instead of a fixed 90 days, so it can never disagree with the nudge on Settings. Signing in while already signed in also stopped showing a login form: visiting the sign-in page just takes you back to your workbench, and the footer's "Sign in" link is now session-aware like the header.
Signed in stays signed in, everywhere
Wandering from your workbench onto a public page (the calculators, pricing, the math) used to greet you with a "Sign in" button even though you were still signed in, which read like you'd been logged out. You never were: those pages just didn't check. They do now. When you're signed in, every public page's header shows "Your workbench" and takes you straight back home.
The learned failure rate is yours to use, or just to watch
When a product racks up 5 or more finished jobs, Anvil learns its real failure rate and, until now, always folded that into the product's price. Some makers want that; others use the learned rate as a warning light and price on their own assumed buffer, so a rough patch of failed prints doesn't quietly push a product's price up. That is now your choice. On Settings, under Assumptions, a new switch decides whether a product's learned failure rate is used in its price or kept as a signal only. With it off, every price (catalog, estimates, quotes, exports) uses your assumed buffer, and the catalog card still shows the real observed rate so you always know when a product is running hot. You can also pick how far back the learned rate looks: 30, 60, or 90 days. A shorter window reacts faster to a fresh problem and forgets an old one sooner; the 5-jobs minimum still applies, so a shorter window simply makes the learned rate engage less often and heal faster.
Recording a sale shows the price before you save
The "Sold for" box on a finished job now starts filled in with the price the sale would record at (your listed price), instead of leaving it blank and filling that number in behind the scenes. If a product's price is running high from a recent string of failures, you see that number and can correct it before recording, rather than booking revenue you never looked at. Leave it as-is to record at list, or type what the buyer actually paid.
The print queue reads first-in-first-out at a glance
Three fixes for a queue that seemed to shuffle itself. Reprints now keep their place in line: failing a print and requeuing it used to restamp it as brand new work, sending it to the back of the queue and making its whole project jump around the board. A reprint now inherits the original attempt's queue time and drag position, because it's the same work. Every card in the queue wears its position (#1, #2, #3) in the exact order the board renders, and the head of the line gets a NEXT UP tag, one slot per idle machine, so what to grab when a printer frees is never a judgment call. And order-driven work now shows the date the customer actually placed the order (with the waiting age measured from it), the one date that never moves no matter what happens in the shop.
Pick your default stores once, in Settings
Each shop on Settings now has a "List new products here by default" checkbox. Tick your usual stores and every estimator pre-checks them when you save a new product, on every device you use. The estimate screen still remembers the exact set from your last save on each device (that most recent choice wins there); the Settings default is what a fresh device or the other estimators start from. Existing products are never touched.
Saving an estimate lands you on the new product
Save from an estimator and the catalog now opens with your new product as the focus: its collection expands, the page scrolls to it, and it glows for a moment so there's no hunting for what you just made. Everything else starts collapsed. Collections also stop remembering that they were open last visit; the catalog starts folded every time, and only what you open stays open while you're there.
Every estimator: the price rides along on desktop
The two-column desktop layout from the 3D estimate screen now reaches every form-driven estimator: laser, resin, candle, soap, vinyl, embroidery, sewing, crochet, pottery, woodworking, and jewelry. On a monitor your inputs sit on the left and the price breakdown and save box ride in a column on the right that stays with you as you scroll, so tuning a number and watching the price move never means scrolling back down. Phones keep the same single column as before.
Slimmer, theme-colored scroll bars
If your system shows scroll bars all the time (common with a mouse plugged in), Anvil used to wear the chunky grey system bars. Every scrollable area now uses a slim, rounded bar in the app's own colors on a clear track, and purely decorative ones (like the sidebar) hide their bar entirely while still scrolling.
The installed app opens a touch quicker
The installed Anvil app used to load its launch page and then redirect on to your home, so tapping the icon meant two page loads every time. It now opens straight to your home in one load. If the app ever looks like it loads more than once, that is usually your catalog waking up a sleeping database on a cold open, not a reload.
Add a made product straight to your shelf
Made something for stock without queuing a job for it? Inventory now has an Add to shelf card: pick the product and how many, and each unit lands on your made-to-stock shelf at its cash cost, ready to sell. Because you actually made it, the materials and hours count as used. For a 3D product you can set the spool each part was made in, so the right color comes off your tracked stock (it defaults to the part's saved color, and a color-locked part stays fixed on its own). No more queuing and clicking a job through just to stock a unit. If you add one by mistake, deleting its job from the board puts the materials back.
See the labor Anvil learned from your jobs
For the crafts where you enter hands-on minutes, once a product has five finished jobs with a real time logged, pricing already uses the median of those times instead of your original estimate. Now the catalog card says so, right under the failure line: Learned labor N min, median of M jobs, used in pricing. The number you saved stays put on the edit form; this just shows you when the learned figure is the one driving the price.
Pin the worlds you work in
The forge floor (the world switcher) now lets you PIN the crafts, trades, and services you use most. Hover a world and click the pin, and it stays in a Pinned row up top, one tap away no matter how the recents shuffle. Pins are saved on your device. Searching the floor also got a small upgrade: press Enter and it steps straight into the top match, the same as the command palette.
A rough patch stops taxing your prices forever
Once a product has five or more logged jobs, Anvil prices it off your real observed failure rate instead of the assumed buffer. That number now only looks at the last 90 days. A bad run you have since fixed (a warped bed, a cursed spool, a stretch of failed prints) ages out on its own instead of inflating that product's price for good, and if a product drops under five recent jobs the assumed buffer takes back over until there's fresh data. The catalog cards spell it out: "Observed X% failure (N jobs in the last 90 days)."
A calmer Edit details form
A 3D product's Edit details had grown into a wall of twenty fields. It now leads with the essentials (name, collection, printer, material, weight, hours) and folds the rest into three labeled sections: Selling & shipping (where it's listed, fulfillment, ships-in boxes, stock), Print details (colors, quantity, plates, color lock), and Parts / components. Each closed section shows its current values on the header line, so you can read the whole product without opening anything, and everything still saves exactly as before. Every other craft's edit form got the same treatment: shop listings and parts now sit in the same tidy collapsed sections there too.
Hide the sidebar
The hamburger button in the top bar now works on desktop too: click it to tuck the sidebar away for a full-width workspace, click again to bring it back. Your choice sticks across visits. The top bar's quick actions (Estimate and the dashboards) keep you moving while it's hidden.
See your dashboards in another currency
The seller and hobbyist dashboards gained the same "Show prices in" switcher the catalog has: pick a currency and every figure converts at once, revenue, take-home, cost, fees, the revenue pulse, and the leaderboards, approximate at rates as of June 2026, with your saved numbers untouched. The free, no-sign-in demos at /try got it too, so you can price your craft in your own currency before you ever make an account.
The money lens runs on actuals
A sold unit's cost now comes from the job's real consumption (the grams it actually ate, the hours it actually took, the exact spool it ran on), not the catalog spec. Editing a job's actuals moves every dashboard number; an untouched job still matches the catalog to the cent. Sold 3D jobs also show a per-sale take-home line right on the jobs page.
Parts and components
Products can carry purchased parts (screws, magnets, LEDs, hooks) on every craft. Their cost flows through the price suggestion and the seller dashboards, and finishing a job decrements them from inventory.
See prices in any currency
A display-only currency switcher across the catalog, all estimators, the launcher, and quotes, plus a standalone converter tool. Rates are dated and approximate by design; your saved numbers never convert behind your back.
Sales truth
Every finished job (or whole project run) records what happened: sold on which channel, or moved to stock. The dashboards stopped assuming everything sold at list. Money numbers got real on every craft.
Selling
60July 22, 2026
Syncing Etsy can't blank the jobs page anymore
A long Etsy sync (lots of orders, or the fuller listings mirror) could outlive the server's time limit for the jobs page: the sync kept going, but the page never got its answer back and painted blank. The routes that run syncs now get the same generous time budget as the rest of the long-running work, so the sync finishes and the page comes back with its usual counts.
A slow Etsy response can't freeze the page anymore
Actions that talk to Etsy (stamping SKUs, syncing sizes, pushing prices, creating drafts) used to wait forever if Etsy stalled, and while one waited, every other click on the page quietly queued behind it: links looked dead, refresh spun endlessly, the page read as frozen. Every Etsy call now gives up after 30 seconds and tells you what happened instead, so one slow response can never wedge your whole tab again.
Etsy orders find the right size on their own
Two order-matching upgrades for shops moving onto the size ladder. First: an order carrying inches ('6 inch', a size like 'XX-Large 12"') now matches the ladder letter that IS those inches - the buyer's number outranks the word, so a 12" order can never land on the 10" product just because the words lined up. Second: orders whose size genuinely can't be read now show exactly what the buyer picked ('Ordered as: ...') on the review screen, and the 'had no awaiting job' count from a sync is now a list you can open - title, price, and date per sale - instead of a mystery number.
The SKU page remembers what you already did
Working through a catalog of listings, it was easy to lose track of which ones you had already stamped, synced, or re-priced. Each linked listing on the Etsy SKUs page now carries a quiet line reading like "SKUs stamped just now · sizes synced 2h ago · prices pushed 2h ago", read from the same audit ledger every Etsy write already lands in. Stamping SKUs also records itself there now (it was the one Etsy write that left no trace).
Connecting a shop now shows you exactly where the keys live
Square, Shopify, and WooCommerce each hide their API credentials somewhere in a developer dashboard, and finding them was on you. Each connect form now has a "Where do I find this?" expander with the exact clicks: which admin page, which button, which value to copy (and the gotchas, like Shopify only showing its token once). Nothing else about connecting changed — paste the key, done.
Draft a new Etsy listing straight from your catalog
The new Draft on Etsy page (under Catalog) turns an approved catalog product into a ready-to-review Etsy draft in one screen: size variations priced by the engine through your Etsy fees, SKUs where you've stamped them, and your product render attached. Instead of a blank form, you clone one of your existing listings as the template, so the description, tags, category, shipping profile, return policy, color palette, and even the size wording arrive pre-filled and editable. The listing is created as a draft: invisible to buyers, reviewed and published by you inside Etsy (Etsy's listing fee applies when it goes live). Anvil never publishes anything on its own.
Stamp SKUs onto your Etsy listings in one click
SKUs are how Anvil matches an Etsy listing to your catalog exactly: the price-drift watch, the one-click price push, and order matching all read them before falling back to guessing from titles. The new Etsy listing SKUs page (under Catalog) shows every live listing in three buckets: listings already linked by SKU, listings paired with a product and ready to stamp, and listings that need you to pick their product from a dropdown (that pairing is remembered and improves order matching on its own). Stamping writes a BRAND-MODEL-SIZE SKU per size onto the Etsy listing and into your catalog, fill-only: an existing SKU on either side is never overwritten, it's shared with the side that lacks it. Rows that can't be matched to a size are left untouched.
Push a drifted price back to Etsy in one click
When the price-drift watch flags an Etsy listing that fell behind your costs, the Insights card now carries a Push to Etsy button. It fetches the live listing, shows every variation's current price next to what the engine suggests (sizes matched by SKU first, then by size name; anything Anvil can't match confidently stays exactly as it is), and only writes after you confirm. Every push is recorded: who, when, and each price's old and new value. Nothing is ever pushed automatically or on a schedule; the button and its confirm screen are the only door. Needs your own Etsy listing connection from Settings.
Connect your own Etsy app for listing management
Settings now has an Etsy listing connection under Shops & Fees: create your own Etsy app, paste its keystring and shared secret, register the callback URL shown in the setup steps, and authorize it with listing permissions. This is the write channel the upcoming one-click tools act through: pushing a drifted price back to Etsy, and drafting new listings straight from your catalog. Keys stay on the server, masked in the UI, and never leave in your account export. Anvil never changes a listing on its own; every push will be a button you press, with a confirm first.
Insights now catches Etsy prices that fell behind your costs
Costs creep: filament prices move, rates change, the failure buffer learns. Your Etsy listing keeps whatever price you set months ago. Every hourly Etsy sync now also reads your shop's live listing prices, and Insights compares them against what the engine currently suggests for each product, priced through your Etsy fees. When a listing sits meaningfully below suggested, you get a card naming the listing, both prices, and the gap you leave behind on each sale. It only flags listings priced too low: a sale sticker posted above suggested is a deliberate choice and stays quiet. Matching uses your product SKUs first, listing titles second, and skips anything ambiguous rather than guessing.
Connected shops can queue made-to-order work now
Square, Shopify, and WooCommerce orders have always synced in as finished sales, which is right for a point-of-sale counter where the item already left with the buyer, and wrong for a made-to-order shop. Each connection now has its own switch: turn on "Queue made-to-order items on the jobs board" and a synced order behaves exactly like one from your own website. Items you stock ship off the shelf and record immediately; items you make land on the jobs board as jobs or runs, labeled with the order number, and record their sale automatically when you finish them, honoring your shop's fulfillment mode and any per-product override. The switch is off by default, so nothing changes until you flip it, and the new-order email covers these too.
The cha-ching: an email the moment an order lands
Orders from Etsy, your own website, and connected shops used to land on your jobs board silently, found whenever you next looked. Now each new order sends one email the moment it arrives: what sold, through which channel, and whether it came off your shelf or is queued to make. A make-to-order commission can't age unnoticed anymore. On by default with a one-click unsubscribe in every email, and its own switch under Settings, Account, alongside the other email preferences.
Anvil remembers your big month
If last November sold three times your average month, that wave is coming back, and until now Anvil watched it happen without saying anything. Insights gained a seasonality heads-up: when a genuinely hot month from last year is a few weeks out (or already underway), a card says how big it ran and points you at your shelf targets and the Make list so stock is ready before the rush instead of during it. It stays quiet unless there's a real prior-year spike to point at.
Price changes get a memory, and an honest readout
Anvil prices your catalog perfectly but never remembered what it used to charge, so "did that price raise slow my sales?" had no answer. Now a weekly snapshot logs each listing's price, keeping a row only when the price actually moved, and the Seller dashboard shows the readout: the change, when it happened, and units per week before versus after, measured over same-length windows on both sides. It only speaks when there's enough time and enough sales for the comparison to mean something, and it deliberately stops short of advice: seasonality and better photos move numbers too. You get the facts; the pricing call stays yours.
Quotes become records: statuses, expiry, deposits, and one-click queue
A quote used to be a printable page and nothing more: send it, and there was no record of what you promised, to whom, or whether they ever answered. Now the printable page has a "Save & track" button that freezes the quote's exact numbers into a ledger with a real Q-number (a sent quote is a promise, so its prices never drift under you; a Reprice button refreshes them deliberately). The new Quotes page shows every tracked quote with its status (sent, accepted, declined, expired), an expiry date so follow-ups don't slip, and deposit tracking for commissions: what you asked, whether it's been received, and what's still outstanding. When a quote is accepted, one click queues its items onto the jobs board, labeled with the Q-number and client. A deposit is never counted as revenue by itself; it's simply part of the sale's price when the work sells. Building and printing a quote stays free; saving and tracking the ledger is Pro.
The shelf tells you what to make: restock targets + a Make list
Your made-to-stock shelf was just a count, so a shop selling from stock could quietly sell a product to zero. Each shelf line now takes a "keep N stocked" target, and any product below it lands on a Make list at the top of the shelf: how many to make, the estimated print time and filament to close the gap, and one click to queue them as ordinary make jobs (finish one, answer "made for stock", and it's on the shelf). The list also reads your live queue and says roughly when it all lands if you queue it now, so "can I be restocked by Saturday's market?" has an answer. Products below target show up under Insights' Running low too, right next to the materials forecast.
Your own website's orders now carry true fees, like Etsy's do
When your own Stripe-checkout site sends an order to Anvil, it can now include what the buyer paid for shipping and the sales tax the site collected. Stripe charges its roughly 2.9% on the whole shipping-and-tax-inclusive total, not just your item price, so those dollars were quietly missing from every own-site order's fees; Etsy orders got this exact fix earlier in the summer. Send the two amounts (the setup snippet gained three lines) and each order's recorded fees include the processing cut on them, your History cards show what the buyer paid to ship beside your own label cost, and a multi-item website order now groups into one numbered order card. Sites that don't send the amounts record exactly as before.
Match orders to products by SKU
Website and shop-connector orders match to a catalog product by name, which is fragile when a listing gets renamed. Now each product can carry your own SKU (on the 3D Edit details form, under Selling and shipping). Stamp that SKU into your site's Stripe metadata or your Shopify/WooCommerce line, and an incoming order matches EXACTLY by SKU, falling back to name only when there's no SKU. It's optional: leave it blank and everything matches by name exactly as before.
The Etsy statement now fills in your shipping label costs
Etsy's API doesn't share what a shipping label cost you, which meant hand-typing postage on every sale. The monthly statement has every label with its order number, so the statement importer now matches them up and fills each sale's Shipping paid automatically, but only where it's still blank: anything you entered by hand wins, and re-uploading stays safe. An order that shipped in two boxes gets both labels summed into one true figure.
A tidier Shops & Fees, with secrets hidden
The connector sections (Your websites, Square, Shopify, WooCommerce) now collapse to one line each, so the tab isn't a screen of exploded forms; a section pops open by itself when it has something to show you, like a fresh sync result or a just-added site's credentials. Website secrets render masked with an eye to reveal and a copy button that grabs the real value either way.
Your logo on every client-facing document
Each business profile can now carry a logo (Settings, then Business, drop an image on the brand). It prints in the header of that brand's invoices, proposals, quotes, price sheets, and the year-end tax pack, in place of the Anvil mark. Big images are fine: we shrink whatever you drop to a small crisp mark. Run several brands? Each gets its own logo, and the right one prints per document, same as the rest of the identity.
Answering an Etsy size review now sticks
When an Etsy order carried a size Anvil could not read, the review card asked you to pick the right size, saved your answer, and then asked again on the next sync, forever. Your saved answer now covers unreadable sizes too, so the card clears once you have answered it. Orders where the buyer picked a readable size still follow the buyer's choice, never the saved answer.
Search History by order number
The History search now matches the order number printed on the card, not just product names and job labels. That includes local order numbers (RCJ-1019 and the like), which live on the order itself rather than on any job, so they were unfindable before. Typing just the digits works too.
Download your sales history as a CSV
History has a Download CSV button now: every recorded sale with its order number (the real Etsy number where there is one), product, channel, price, the frozen listed price and fees from record time, shipping paid, and refund details. Made for lining your books up against a marketplace statement, or just for your own spreadsheet.
No more empty order numbers left behind
Deleting a job, marking a done job as failed, or re-recording an order could leave the old order number sitting empty in History. Every path that removes or re-records a sale now cleans up an order it left empty, so History only shows orders with something in them.
Sales shipped from your shelf cost what the shelf said
An order filled from your made-to-stock shelf used to book its cost from a fresh re-price at sale time, while the shelf released the units' real weighted-average making cost. Those are now the same dollars: the sale's frozen cost basis is rewritten to exactly what came off the shelf, so your inventory asset and your cost of goods always reconcile. Applies to website and connector orders, and to flipping a stocked item to sold by hand.
Find an order in History by its order number
Searching History for an Etsy order number (or any order reference) used to come up empty: the search only matched product names. It now also matches a product's collection and size, and the order label on the job that made it, so typing "Etsy #123456" pulls up exactly that order's work.
Refunded returns go back on your shelf
When you refund an order, there's now a third choice for what happened to the goods: you still have the item (returned, or never shipped). Pick that and the item goes back on your made-to-stock shelf at the cost it was made for, ready to sell again, right next to "never made it" (nothing lost) and "it's gone" (count the cost as a loss). Undoing the refund takes it back off the shelf. Restocks now act like restocks.
Etsy orders can no longer record twice
In a rare lineup (an auto-queued Etsy order for a product you also had finished for stock), the same order could be recorded once against your stock unit by the sync and again when the queued job finished, counting the revenue twice and consuming a shelf unit the order never took. The sync now leaves anything the queue owns to the finish step, so each order records exactly once.
Organize your parts and components by craft
Parts (purchased components like screws, clasps, wicks, or hardware) now belong to a craft, so a 3D printing part no longer shows up on a soap or candle product's edit form. Pick the craft when you add a part in Settings, or choose "All crafts" for something universal like a shipping box, and each product only offers the parts that actually fit it. Your existing parts stay with 3D printing, where they were.
Tag a product as a custom order
Some products are different every time, so guessing what an incoming order means would get them wrong. On a product's Edit details there's now a Custom order checkbox. Tick it and Anvil leaves that product out of automatic order matching from every channel (your website, Etsy, and connected shops), so a custom order never auto-records or auto-queues. You walk each one through by hand, and a small badge marks which products are tagged.
Set make-to-order or from-stock per product
A product can now override its shop's fulfillment setting. On a 3D product's Edit details, pick Make to order, From stock, or Auto, or leave it on the shop's default. So a mostly-make shop can keep a few hot sellers on the shelf (or the reverse), and each incoming order fills that product the way you set it.
Website refunds and cancellations reverse themselves
When an order on your own site is refunded or cancelled, your site can tell Anvil and it reverses cleanly: an order you haven't made yet drops off your jobs board (and any consumed stock comes back), and an order you already finished and sold gets refunded, with its cost booked as a loss. It's retry-safe, so a duplicate notice does nothing. One note: an order shipped straight from stock isn't auto-reversed yet (that's a follow-on).
Sell from stock: orders pull off your shelf
Each shop can now say how it fills orders. In Settings → Shops & Fees, set a channel to Make to order (make each one fresh), From stock (ship off your made-to-stock shelf), or Auto (ship from stock when you have it, else make it). When a from-stock order comes in (from your website feed or any connected shop), Anvil pulls those units off your Made-to-stock shelf and counts their held cost as the sale's cost, so the shelf stays accurate and your margins stay honest. Make-to-order shops are unchanged. Putting new orders straight on your jobs board to make is the next step.
Bring your own website orders into Anvil
If you sell on your own site with Stripe checkout, your orders can flow into Anvil now, the same way Etsy does. In Settings → Shops & Fees, open Your websites, add a brand site, and you get a secret plus an endpoint to drop into your checkout. From then on each paid order records as a sale (matched to your catalog by name, deduped so a retry never double-counts), feeding your dashboards and P&L. Add one per brand and map each to its own shop so the right fees apply. Record-only to start. Sending new orders straight to your jobs board comes next.
Sale mode: see what to post to run a sale and keep your margin
Flip Sale mode on the catalog, set the discount you'll advertise, and every product card shows the sticker to POST so that, after the marketplace takes its cut, you still land where you want. Two goals: 'Hold my prices' marks up so the sale nets your normal price (a cosmetic sale, your take-home unchanged), and 'Target margin' lets you run a real discount down to a floor margin you pick, so you give a genuine markdown without ever selling at a loss. It works across your own price and every marketplace column, and it rounds the stickers to something you can actually post (your own price step, or .99). Nothing is saved (it's a preview). There's also a Sale mode tool under Tools for the quick per-item numbers: take-home, margin, and how deep you can go before anything sells below cost.
Refunds ask the one question that matters: did you make it?
When you refund a sale, that little 'returned to stock / never made' checkbox was easy to skip past, and skipping it quietly counted a never-made item as a material loss. It's now a required choice: 'I made it, count my cost as a loss' or 'Never made it (or returned to stock), no cost lost.' You can't refund without picking one, so your dashboard only ever counts the materials you actually spent. Handy when an order for several items gets refunded but you'd only made some of them.
Connect WooCommerce too
Sell through a WooCommerce store? You can now connect it the same way as Square and Shopify: in Settings under Shops and Fees, paste your store address and an API key pair, and Anvil pulls your orders in as sales, matched to your catalog and priced with each sale's real cost and the channel's fees. It syncs itself a few times a day alongside your other shops, and a re-sync never double-counts. Pro.
See what each shop sync actually did
Your connected shops now show the result of the last sync right in Settings: how many orders were recorded, how many were already in, and which ones couldn't be matched to a product, by name, so you know exactly what to add or rename. It survives a reload and reflects the automatic background syncs too. And if a store's access token stops working, the section tells you and offers a one-click reconnect instead of quietly failing. Pro.
Connect Square and Shopify, and your sales flow in by themselves
Sell on Square or Shopify too? Connect it once in Settings under Shops and Fees (paste an access token from your Square or Shopify account, the same idea as the Etsy connect) and Anvil pulls your orders in as sales, matched to your catalog by product name, with each sale's real cost and the channel's fees figured. It syncs itself a few times a day, so your Seller dashboard and Insights stay current without you clicking anything, and a re-sync never double-counts. There's a Sync now button too if you want to pull immediately. Pro.
Bring your past sales in from another tool
Moving to Anvil from somewhere else and don't want to start with an empty dashboard? On the new Import past sales page you can drop a CSV of your order history (any spreadsheet with a product, a date, and a price), line up the columns once, and Anvil records each order as a sale. Your Seller dashboard, Insights, and profit-and-loss light up from your real history. Each row is matched to a catalog product by name, anything it can't match is shown rather than guessed, and re-running the same file is safe. Pro.
Log a whole market day in one pass
Home from a craft fair with a pocket of cash and no idea what it actually netted you? On your catalog there's a new 'Log a market day': enter the products you sold and how many, once, sharing one date and channel, and Anvil records each unit as a sale at your listed price (or set a price per line). The whole day lands on your Seller dashboard and Insights, fees and costs figured, so you can see what the booth really made instead of guessing. Leave a price blank to use the list price. Pro.
Price for wholesale, with the right math
Selling into a boutique isn't the same as selling on Etsy, and now Anvil knows it. Set a shop's channel to Wholesale and your catalog prices that shop with the marketplace fee tail dropped and a wholesale margin (50% by default, the classic cost-times-two), so you're not accidentally quoting a retail-plus-fees number to a store buyer. Each wholesale price also carries a suggested MSRP for the shop to resell at (2x by default), so you can hand over a price list with a shelf price built in. Tune the margin and keystone per shop in Settings.
Log a sale and see what you actually took home, free
New on your catalog: 'Log a sale'. Tell us what you sold a product for and where, and Anvil does the math you can't do in your head, your real cost plus the channel's fees plus shipping, to show what you actually kept. It lands on your Seller dashboard and lights up Insights, so you can finally see which products make money and which quietly lose it. Free makers can log their first sales to see it on their own numbers; Pro tracks every product and watches for leaks for you.
Etsy fills in your shipping cost for you
Bought a shipping label through Etsy? The next sync now drops what you paid for it straight into that sale's 'Shipping paid', so your take-home reflects real postage without you typing it. It fills single-item orders where you haven't set a shipping cost yet, and it never overwrites a number you entered. Multi-item boxes still get a quick manual split, and if a label wasn't bought through Etsy the field stays yours to fill as before.
Every craft's job cards show your take-home
The 'Took home' line on the jobs board, with your margin and a cost breakdown, used to appear only on 3D prints. Now it shows on a finished sale for every craft: laser, resin, candles, soap, vinyl, embroidery, sewing, crochet, pottery, woodworking, and jewelry. Mark something sold and the card tells you what you actually kept and how it was priced, right there, without a trip to the dashboard. The breakdown rolls each craft's own materials into one 'Material' line, and every total (cost, fees, take-home, margin) is exact.
Partial Etsy refunds adjust the sale on sync
When a buyer keeps an item but gets some money back, the next Etsy sync now reduces that recorded sale by the refunded amount, so your revenue and take-home reflect what they actually paid. Full refunds already reversed themselves; this catches the partials too. To stay safe it only applies on its own when the order maps to a single recorded sale (a multi-item order's partial still gets a quick manual touch on the sale card), and it's capped so a sale never goes negative.
See which printer is your workhorse
Your seller dashboard has a new 'By printer' breakdown: hours, prints, filament burned, and the wear (power plus depreciation) each machine racked up, busiest first. Now that every job records the printer that actually ran it, you can see at a glance which machine is pulling the weight and what each one costs to run. It appears once you've run jobs across two or more printers.
Track damaged remakes, and see refunds at a glance
Two money-truth additions. When a sold item arrives damaged and you reship a replacement (no refund), you can now log a remake on that sale: it books another unit's cost (and the extra postage) against it, so your take-home tells the truth about making it twice. And the seller dashboard now has a Refunds and remakes card: how many orders came back, the money returned, and how many remakes you've eaten.
Fix a stubborn order to the exact size
When a sync matches an order to a product but can't read the size off it, the review screen now lets you pick the exact size in one click, instead of getting stuck. We remember that listing as that size, so it stops coming back as unmatched. Listings that sell several sizes still resolve each order's size on their own.
Refunds reverse themselves, and count the material you lost
Two upgrades to refunds. First, when an Etsy order is canceled or returned, the next sync reverses the recorded sale for you, no clicking required. Second, a full refund of something you already printed and shipped now books that item's cost as a real loss on your seller dashboard, since you're out the filament and the postage. Returned to stock, or canceled before you printed it? Check the new 'returned to stock / never made' box to keep it a clean wash.
Refund a sale when an order comes back
When a buyer cancels or returns an order, you can now refund the sale right from its card on the jobs board. A full refund backs the sale out of your dashboards and P&L entirely, so it stops counting as revenue (and the sales tax you collected reverses with it). Refunded only part of it? Enter the amount and the sale counts at what the buyer actually kept paying. The record stays, badged Refunded, so it is always one click to undo.
Sync Etsy and fix matches right from Jobs
A Sync Etsy orders button now sits at the top of the jobs board, so you can pull new paid orders without opening Settings. And when an order doesn't match a product on its own, the review screen lets you map it to any product in your catalog, not just the close guesses, so nothing stays stuck as unmatched. The size still resolves from each order.
Your Etsy shop syncs itself
Connect your Etsy shop and Anvil keeps up with it on its own. It pulls your paid orders, matches each to the right product (down to the size and color), and records the sale at the price the buyer really paid, coupons and all. Made to order? It queues the job for you in the matched color, and when that print finishes the sale records itself. And it now runs on a schedule, so orders flow in without you ever clicking Sync now. Set it up under Settings, Etsy.
Sale dates that hold still
Editing a recorded sale no longer moves it to today: the original sale date survives price fixes, so your revenue pulse keeps its shape. And every capture (singles and bundles) gained a "Sold on" date, so backfilled sales land in the week they really happened.
Edit a bundle as one sale
A bundled sale's items still live on their own job cards (that's the production view), but the sale now edits as a unit: any member's card shows the bundle ("bundle of 2 · $43.19 total") and opens one editor that changes the channel, fulfillment, total, tax, and shipping for every item at once, re-splitting the total to the cent. Marking a single item to stock still pulls just that one out.
Editing a sale shows its fields
Expanding Edit sale on a recorded sale now opens the whole editor immediately (price, channel, fulfillment, tax, shipping) instead of hiding the fields behind the green Sold chip, which read as a status rather than a button.
Revenue pulse on the seller dashboard
The seller dashboard now charts your money week by week: revenue and take-home for the last twelve weeks, dated by when each sale was recorded. Bar height is revenue, the solid core is what you kept, and the per-shop filter scopes it with the rest of the money lens. Live on every craft's seller view.
Sold bundles
Sold a few pieces to one buyer? Tick the finished jobs (or whole project runs), record one bundle sale with the real total, and the split lands on each item to the cent. The dashboards read it with no double counting.
Real postage, real take-home
A shipped sale can record what you actually paid the carrier. The gap between what the buyer covered and what you paid comes off take-home, so the seller dashboard tells the truth about shipping.
App
36July 20, 2026
Clicks show they landed, and a stuck one can be forced
After saving a big batch of drafts or running a bulk tool, clicking to the catalog could sit for many seconds with nothing on screen - the app was working, but the link read as dead. Navigation links now pulse a small dot the moment you click, for as long as the page is on its way, so you can tell 'working on it' from 'broken' at a glance. And if a click really does get stuck, the dot turns amber and reads 'tap again' after ten seconds: tapping a second time loads the page fresh, which clears a jam that would otherwise hold up every link on the page. This can happen when the app updates underneath a tab you left open, so it is worth reaching for before reloading by hand.
The installed app stops reloading itself on open
If you run Anvil as an installed app, it would quietly reload itself once every time you opened it (a quick flash). That's fixed. It now reloads only when you tap to apply a new version, never on a normal open.
The forge floor: every world on one canvas
Anvil has a new way to move between worlds: the forge floor. Every craft, trade, service, and digital line is laid out as one map, grouped by line. The worlds you actually work in are lit, the one you're in glows, and a tap on any tile drops you straight into its workbench. It has its own full page now (Browse all worlds in the sidebar switcher, or Open the full floor from home), where the whole floor lights up world by world as it loads. The sidebar switcher got leaner to match: your recent worlds plus a search, so a quick switch is one tap and finding a world is one keystroke, with the full floor a tap away when you want to browse. Many worlds, one forge. (You can still switch with the command palette too.)
Quick start comes to makers and digital
Quick start now reaches every form-driven maker craft and the digital line. On the digital estimator, pick a common product (an Etsy printable, a POD t-shirt design, a template bundle, a presets pack) and it fills in the design time, expected sales, and partner base. On the candle, soap, resin, jewelry, pottery, sewing, crochet, woodworking, vinyl, and embroidery estimators, pick a starter product (an 8 oz soy candle, a mug, a resin coaster, a beanie, a cutting board, a cap logo, and more) and the numbers fill in. You pick your own materials and tune, then save. It doubles as a worked example for a craft you haven't tried. (3D and laser stay file-driven: drop your G-code or SVG.)
Delete a whole project (or a queued job) in one click
A wrongly-queued order used to mean cancelling every part by hand. Now a project run has a Delete project button that clears the whole thing at once (and returns any material it used to stock), and a queued one-off has a direct Delete. Handy when an order comes in and you need to start it over.
Etsy orders queue the size the buyer actually picked
Fixed a case where an auto-synced Etsy order could queue in the wrong size if its listing had been pinned to one size earlier. Anvil now always reads the size the buyer chose on each order, matching on both the size word and the inches, and asks you to confirm rather than guessing when a size is unclear.
Combine orders that split apart
If an order ever shows up as separate cards (an older multi-item order whose items recorded one at a time, for example), History can now merge them. Hit Combine orders, tick the cards that belong to the same purchase, and combine them into one order under a single number. It keeps an Etsy number if one of them already has one. Single-item order cards also lost their thumbnail, so they read as clean as the rest of the list.
Imported Etsy orders get their number and combine
When Etsy sales come in through an import or the automatic sync, each one now gets its real Etsy order number, and the items from a single receipt collapse into one combined order on History, the same way orders recorded the moment a job finishes already did. Before this, imported orders could land without their number and as separate cards. (Already-imported orders pick this up the next time you run Number my past orders in Settings.)
Multi-item orders read as one order
When a single purchase has more than one item (two planters on one Etsy receipt, say), History now collapses them into one order card: the order number, the combined total, the channel, and a Needs shipping flag if it applies, with each product nested inside. And while a multi-item order is still being made, its finished items wait under a new Open orders section instead of asking 'Did it sell?' too early. The whole order records as one sale once every item is done.
Every order has a number now
Orders that come from a marketplace keep their own number (your Etsy order number, say). Orders without one get a clean, counting-up number built from a short shorthand you set in Settings -> Workbench, so yours might read RCJ-1001, RCJ-1002, and so on. History leads each order with its number, and a 'Number my past orders' button in Settings gives your existing orders one too.
See what's left to ship at a glance
History now flags sold orders you haven't shipped yet. A sold, set-to-ship order with no shipping cost entered gets a Needs shipping badge, a banner pops up the moment one lands so nothing slips past unsent, and a filter pulls up just those orders. Enter the shipping cost in Edit sale (or switch it to picked up) and the badge clears.
Run more than one business? Add them all
Business profiles are a list now, not a single identity. Keep one per brand (a parent company plus its shops, say), mark one as your default, and link a brand to a shop so that shop's quotes print it. When you build a quote you pick which brand it's from; invoices and proposals use your default. Everything stays optional, and a blank field still doesn't print.
Capacity planning works beyond 3D
The capacity planner used to be 3D-only. It now plans any craft that ties up a machine over time: 3D printers, laser cutters, embroidery machines, kilns, sewing machines, and woodworking tools. Run more than one and you get a section for each, with its own machines, queue, and 'can I promise it by?' check. Crafts that don't tie up a machine (candles, soap, jewelry, and the like) aren't scheduled, since there's nothing to wait on.
Settings only shows what you actually use
The settings hub now hides sections that don't apply to your shop: a soap maker won't see Printer sync, a contractor won't see Etsy, and a maker won't see trade bid rates. Work in more than one line (say 3D plus a trade) and everything relevant shows up. Nothing is locked away. A section just reappears the moment you start using that line.
Settings, reorganized into sections, plus a business profile
Settings used to be one long row of tabs that wrapped and hid the structure. It's a clean landing now: grouped tiles (Your bench, Your pricing, Selling & channels, Account) that open into each section, so it stays tidy as we add more. New too: a Business profile, under Your bench. Fill in your business name, address, phone, email, website, a default payment link, and a tax id, and they print on the documents you hand to clients (invoices, proposals, quotes), which used to show only your workbench name. All optional, and a blank field just doesn't print.
Choose which emails we send you
Email preferences in Settings -> Account split into separate switches: the weekly leak digest, low-stock alerts, and product news. Low-stock alerts used to ride along with the digest setting; now each has its own toggle, and each email's one-click unsubscribe turns off the right one. All default on, so nothing changes unless you opt out.
Every estimator now links to the math behind your price
The pricing engine has always been fully published at The math, but that link only showed on the public demo. Now every craft's estimator, and the digital one, carries a short note right under the price breakdown: see exactly how each line is figured, and tune the numbers to your own shop with the tuning guide. Same honest, auditable engine, now one click away from wherever you happen to be pricing.
Achievements got deeper, and digital makers have their own
More milestones to chase. A new Time track rewards the hours you put into finished work, with rungs all the way up to a 5,000 hour capstone, so even a heavy maker has a real long-haul goal. A Showcase pair rewards photographing your catalog. Contractors get a Business set (clients added, invoices sent and paid, bookkeeping) to match the maker money badges. And the digital and print-on-demand line now has its own track: build your product library, offer both downloads and print-on-demand, and group products into lines. One more thing: the filament Color badges only show if you actually print in 3D now, so a soap or pottery maker isn't staring at three badges they can never earn.
The jobs board speaks your craft, and tidier inventory
The 'now' tile at the top of the jobs board used to say 'Printing now' for everyone. It reads in your craft now: 'Curing now' for soap and resin, 'Cutting now' for laser and vinyl, 'Firing now' for pottery, and so on. The filament trend and total-used panels tuck into one 'Filament history' section you can collapse, so the part of the board you act on stays up top. Inventory got a cleanup to match the rest of the app, plus a 'Forecast soon' count for items trending toward a reorder before they're actually low.
Log a sale lives on History now, and the catalog is tidier
Recording a sale moved off the catalog and onto History (renamed from Completed), since that's where a logged sale lands, so the whole loop is in one place. History is open to everyone now: log a sale there for free and see your logged sales, with the print queue and dashboards as the Pro upgrade. The catalog itself got a cleanup too: once you have products it leads with your shop name instead of the setup blurb, the currency switcher moved up into the header, the shop filter became one multi-select dropdown instead of a long row of pills, and Import, Export, and Price sheet collapsed into a single Data menu.
A restock list that tells you what to buy, before you run out
The top of your inventory now leads with a Restock list: everything that needs buying, across every craft, in one prioritized place. It shows what you're out of, what's at or below its reorder point, and (the new part) what your recent usage says will run low soon, so you can order ahead instead of scrambling mid-project. Each line carries its pace forecast right next to it, and a Copy list button hands you the whole thing as plain text to paste into a supplier order or your notes. Pro.
Inventory now forecasts when you'll run out
Each tracked material shows how long it'll last at the pace you've actually been using it: 'Reorder in about 2 weeks' while you're stocked, or 'about 4 days of stock left' once you're getting close. It learns from your real job consumption over the last couple of months, so it's your pace, not a guess, and it stays quiet until there's enough history to be honest about it. It pairs with the new low-stock emails: you see it coming on the page, and get the nudge when it lands. Pro.
Get an email when a material runs low
Set a reorder point on a material and Anvil now emails you the moment a finished job drops it to (or below) that line, so you can reorder before you run out mid-project. It names exactly what's low, how much is left, and how long it'll last at your recent pace (so you know whether to order today or this week). It's a one-time nudge when stock dips low (not a repeat on every job after), and a job that crosses several materials at once sends one tidy email. The reorder point is the opt-in: no reorder point, no email, and there's an unsubscribe link in every one. Pro.
Every way to import, in one place
There's a new Import page that gathers every way to bring your data into Anvil: your product list, past sales, filament, expenses, clients, and stock levels from a spreadsheet, plus the Square, Shopify, WooCommerce, and Etsy connectors. One screen to find the right importer instead of hunting through Settings and the catalog. Connected shops show a 'Connected' badge so you can see what's already hooked up.
Import expenses, clients, and stock levels from a spreadsheet
Three more importers join the catalog and past-sales ones. Bring your expenses in from a CSV (it round-trips with the expense export), your client list with a name-and-email match so you don't create duplicates, and your inventory stock levels matched to the materials you already track. Each one lines up the columns for you, shows a preview before anything changes, and is safe to run twice. Expenses and Clients are Business; stock levels are Pro.
Import your whole product list from a spreadsheet
Got a catalog already built in another program? On the Catalog there's a new Import a CSV. Upload your product list, line up the columns (Anvil guesses them for you and you can fix any), see a preview of exactly what will be added or updated, then bring the whole thing in at once. Re-importing a corrected sheet updates your existing products instead of duplicating them. Each imported product is priced through the same engine as one you'd enter by hand. 3D printing for now.
A clearer Jobs board: an In progress section
A fix to the Jobs board. Finish one plate of a multi-plate project and it no longer drops back to the bottom of your print queue. It gets its own In progress section near the top, so a half-done project is easy to find and pick back up. Awaiting sale now reads as the 'done, just record the sale' step it actually is.
See when your printers free up, and what you can promise
There's a new Capacity planner, linked from Jobs whenever you have a 3D queue. It reads your live queue and each job's expected time and projects when every printer is next free and when each queued print will finish. Unassigned prints land on whichever printer opens up first. It also answers the question you actually get asked: enter a new print's hours and a date, and it tells you the soonest it would be done and whether that beats the deadline, before you say yes to the customer. Planning estimates, 3D printing for now. Pro.
Inventory tells you what you OWE, not just what's low
When a spool runs past empty, your inventory used to show a red 'Low' just like an item merely approaching its reorder point. Now a negative balance reads 'Short 2,300 g' in red, the actual amount you owe and need to buy back, while a still-positive item near its reorder point gets a calmer amber 'Low'. Two different situations, two different signals.
See what's new without leaving the workbench
The workbench ships almost every day, but you had to visit this page to find out. Now there's a small sparkle button up in the top bar that lights up whenever something new has landed since you last looked. Click it for a quick list of the latest changes, with a link to the full story here. It clears itself once you've peeked, so it only nudges you when there's genuinely something new.
See what each project netted you on Completed
The Completed page now groups a multi-part product (say a planter's top and bottom) back into one project card, the same way the active jobs board does, with the combined took-home, margin, cost, and a Breakdown link. Single finished jobs still show their own line, and search now matches a project by its name or any of its parts.
Home tiles jump you to the right spot, and a kinder save limit
The stat tiles on your home screen now deep-link to the matching section of the jobs page (In queue, Making now, Awaiting sale) instead of dropping you at the top, and the strip hides itself when every number is zero. And on the free plan, hitting the catalog limit while pricing a dropped file no longer bounces you to billing and loses the estimate: it shows an inline upgrade prompt and keeps your work right where it is.
An account menu, and a friendlier first run
Sign out moved off the lone top-right button into an avatar menu with Settings, Billing, and Sign out, so it is harder to mis-tap. On a phone the header now shows your workbench name and craft instead of an empty bar. The onboarding craft picker is grouped by maker crafts, trades, services, and digital instead of one long list, and buttons now show a spinner the moment you tap them so nothing looks frozen.
Finished jobs move to Completed
The jobs page is your production line now: what needs you, what's queued, what's printing, and what's awaiting a Sold? call. Finished and canceled jobs moved to their own Completed page (it was always there, just buried in a link at the bottom) and it now sits in the sidebar under Jobs. When your queue is clear, the board says so and points you to Completed.
A guided first look
New accounts get a short spotlight tour of the bench: the workbench switcher, the quick actions, the business shelf, your home base, and the Cmd-K palette. Five steps, skippable, never nags twice. Replay it any time from "Show me around" on the get-started card.
Jump anywhere with one keystroke
Press Cmd-K (or Ctrl-K) anywhere in the app for the new command palette: jump to any page, fire a quick action, switch workbenches, or open a calculator, all from one searchable box. The home cockpit also gained a production pulse (your finished work per week over the last twelve weeks), and new accounts get a short numbered path to their first honest price.
Trades
5July 19, 2026
Trades: real visits, a crew roster, and day-before reminders
A won job used to carry one fuzzy window. Now it carries visits: real time slots (or all-day blocks spanning several days) added right on the job, so a two-visit fence build blocks Tuesday morning and Friday, not one vague stretch. Save your crew as a roster in Settings and pick people per visit; anyone booked onto two overlapping visits gets flagged as double-booked. Every evening you get one email listing tomorrow's visits, and a linked client with an email on file can get a one-click heads-up about the next visit (always your click, never automatic). The month calendar and agenda stay in step: the job's overall window re-syncs from its visits as they come and go.
A month calendar for your schedule
Schedule now has a Calendar view alongside the agenda. Flip to it for a month grid of your won work: each job sits on its start day and spans its estimated days, tinted by status (scheduled, on site, done). Page through the months or jump back to today, and click any job to open its bid and edit the schedule. The agenda is still the default for what's next; the calendar answers where it all lands.
Save a bid as your own Quick start template
Finished a bid you'll do again? Save it as a template. The Save as template button on any bid captures your exact line items, scopes, and tuned rates, and it shows up under Your templates on the bid page, above the built-in common jobs. Start one and it drops in a fresh bid built from your numbers (no region or union question, since the figures are already yours), fully editable. Delete one any time. A contractor who does the same remodel over and over now starts from their version, not a national baseline. Saving a template is a Shop / Business feature; reusing one is free.
Quick start: build a bid from a common job
Trades have a new Quick start on the bid page. Pick a common job (a full bathroom remodel, a cedar privacy fence, an asphalt re-roof, a 3-bedroom repaint, and more), answer two quick questions (where the job is, and union or not), and Anvil drops in the usual scopes and line items already priced at 2026 national starting rates. You get a mostly-done bid instead of a blank page, and every line stays yours to tune. Starter prices are researched and cited on the Sources page. More trades to come.
Schedule the work you've won
Trades have a new Schedule page. Every won bid shows up to slot onto a calendar: pick a start day, rough number of days, who's on it, and any site notes. Your work then reads as a plain agenda (on site now, behind, today, this week, upcoming, and won jobs still to schedule), and you move a job from scheduled to on site to done in one tap. A done job leads straight into an invoice, so the whole loop is bid, win, schedule, do, bill. The Pipeline also gains a This week strip. Scheduling is a Shop / Business feature.
Soap making
1July 12, 2026
A soap batch shelves every bar now
Soap is priced and sold by the bar, but the made-to-stock shelf counted a finished batch as one unit at roughly one bar's cost, so a 12-bar loaf read "1 on hand", an order for two bars could wipe the line, and the shelf's value undercounted your oils. Fixed everywhere the shelf moves: finishing a batch to stock (or adding one on the inventory page) now puts every bar in the mold on the shelf, each at its per-bar cash cost; orders pull bars; deleting a batch or undoing a refund removes the same bars it added. The Make list thinks in batches too: a 20-bar deficit on a 12-bar mold queues 2 batches, with the hands-on estimate paid per batch. If you truly sell whole loaves, set the mold's bars per batch to 1 and nothing changes.
Business
4July 11, 2026
Reconcile your own site's Stripe payouts against Anvil
The Etsy statement importer proved Anvil matches Etsy to the cent; now your own websites get the same checkup. Upload a Stripe Balance history export (Balance, All activity, Export) and Anvil matches each charge to its recorded order (exactly by the order id in your Stripe metadata, or carefully by amount and date), then compares the fee Stripe actually took against the fee Anvil booked at sale time and shows any difference, charge by charge. Refunds on the statement are cross-checked against recorded refunds, and disputes are surfaced with their roughly $15 fee, which no per-sale fee model sees, offered as an expense along with any standalone Stripe fees. It's a report, not an import: your sales are never edited, the only thing it can record is those expenses, and re-uploading is always safe.
The tax pack answers "how much sales tax did I collect?"
On Etsy the answer doesn't matter much because Etsy collects and remits for you. On your own site, YOU owe the remittance, and until now Anvil couldn't say how much. The year-end tax pack gained a "Sales tax collected" section: your own sites' collected tax rolled up by ship-to state and quarter (the shape a state filing asks for), with Etsy's collected-and-remitted total shown as one separate line so you never remit those dollars twice. It counts orders that reported their tax, and where you actually owe depends on nexus rules, so it's the cross-check to bring your accountant, not the filing itself.
Your P&L now shows true profit, after fees and cost of goods
The Expenses page is a real profit and loss now, not just revenue minus overhead. It starts from what you actually brought in (paid invoices plus the price you logged on each sale), then subtracts the marketplace's cut, any shipping you absorbed, the cost of goods (materials and machine wear priced through the engine, never your own labor), and your overhead. What's left is real net profit, with a margin percent. Cost of goods and revenue both count the same set of sales (the ones with a price logged), so the two always line up. If you have sold sales with no price entered, the page now tells you how many aren't counted, so nothing goes missing quietly.
Recurring expenses got honest
A recurring bill counts every period it ran, not once. Start and end dates, per-year totals that match the P&L, and a monthly overhead run-rate so you know what staying open costs.
Machine embroidery
1July 9, 2026
Embroidery: amortize digitizing, and per-blank shipping weight
Two touch-ups for machine embroidery. Digitizing is a one-time cost to turn art into a stitch file, so the estimator now lets you enter what you paid once and how many pieces you'll make from that file. It carries only the per-item share into the price, no mental math. And each blank can now hold its own shipped weight (a cap and a hoodie are worlds apart), so the shipping estimate is accurate per product. Leave a blank's weight at 0 and it estimates by type as before. Neither change moves the item's price, only the shipping line.
Money
11July 2, 2026
Import an Etsy statement as expenses
Upload a monthly Etsy payment-account CSV and the overhead your P&L was missing lands in Expenses, categorized: Etsy Ads daily spend under Marketing, the Plus subscription under Software, listing fees and the per-order Offsite Ads fee under Fees. The importer knows which rows NOT to bring in: your per-sale transaction and processing fees are already counted on each recorded sale, so it leaves them out (and shows you exactly what it left out and why). Re-uploading a month is safe; anything already imported is skipped.
The year-end tax pack
Expenses now leads to a printable year-end tax pack: your whole year organized like Schedule C (Form 1040). Gross receipts and refunds as their own lines, cost of goods with your made-to-stock shelf as the ending inventory hint, every expense on its closest Schedule C line, and a 1099-K reconciliation number to check against the marketplace's form. Every line says where its number comes from, and the page prints clean. Below the printout sits the accountant bundle: four CSVs (the Schedule C worksheet, every sale with fees and refunds, the expense ledger, and the P&L summary) scoped to the year. A starting point for you or your preparer, not tax advice.
A sale's numbers are frozen the day it sells
Your assumptions (overhead, a labor rate, a material price) and your fee profiles are meant to price what you're making now and what you'll make next, not to silently rewrite history. So now, when you record a sale, Anvil snapshots its full economics that day: the cost it took to make (your real grams/hours, on the machine that ran it), the price it sold for, and the channel's fees. Change an assumption next month and your catalog prices and new sales update, but that sale's margin and take-home stay exactly what they were. Got orders from before this update? In Settings under Assumptions there's a 'Freeze past sales' button: click it once to lock all your existing orders at today's numbers before you change a rate. And each recorded sale has a 'Recost' button if you ever fix a genuinely wrong setting and want that one to catch up.
Tax time: a Schedule C worksheet from your real numbers
On Expenses there's a new 'Schedule C' download next to your P&L. It organizes the year you already tracked, gross receipts, cost of goods, fees, shipping, and your expenses, into the Schedule C (Form 1040) line structure, so you (or your accountant) aren't rebuilding it from marketplace CSVs every April. It even lines up your recorded marketplace sales against your 1099-K Box 1a. It's a starting point, not tax advice, with notes on the lines that need a human call. Business tier.
Download your P&L summary for tax season
Next to the expense export, the expenses page now has a P&L download: one CSV with your revenue, channel fees, shipping, cost of goods, and expenses for the year, ending in net profit and margin. Costs are written as negatives, so summing the amount column in any spreadsheet lands right on your net. The hand-it-to-your-accountant button.
Your P&L now counts what it cost to make the goods
Net profit on the expenses page finally subtracts your cost of goods: the materials, electricity, and machine wear that went into everything you sold this year, priced through the engine. It leaves out your own time (that's your profit, not a cost), so the number reads as real take-home, with your profit margin shown beside it. One note, so you don't double-count: log raw materials through your products, and keep expenses for overhead like rent, subscriptions, and tools.
Your P&L counts the shipping you eat
If you offer free shipping and pay the carrier yourself, that cost now comes off your net profit on the expenses page, shown as its own Shipping line beside channel fees. Record the shipping you paid on a sale and the P&L reflects it. Gross revenue is unchanged, so only your true take-home moves.
No more phantom sales
A finished job used to count as sold at list price until you said otherwise, which quietly inflated revenue (and fees, and absorbed shipping) for every card you hadn't answered yet. Now money only counts once you lock it in: a job finished since the Sold? capture shipped credits nothing until you record the sale or send it to stock. History from before the capture existed still works the old way, so nothing vanishes.
The cockpit shows the money
The home HUD gained a money pulse beside the production pulse: the money you recorded coming in each week (sale prices you logged plus paid invoices), across every craft and line. And the P&L got more honest: net profit now subtracts the channel fees on your recorded sales, shown as their own line, so profit reads as money actually kept.
Know what you owe the state
The sale capture now remembers the tax rate it strips, so the expenses page reports the sales tax you collected, by quarter, for remittance season. Paid invoices with a tax line count too, and tax on marketplace orders is shown apart: platforms like Etsy remit what they collect for you, so the quarters track only what you remit yourself. It sits beside the P&L (never inside it: collected tax is not income), and when you send the state its money, log the payment under Taxes & estimated payments to close the loop.
Sales tax, where it actually belongs
Engine prices stay pre-tax on purpose (marketplaces like Etsy collect and remit for you), but the documents you issue can now carry it: set a sales tax rate on a bid and the proposal itemizes it below the total, a won bid's invoice inherits it, and any invoice can set its own rate. Recording a sale from a tax-inclusive register total? Tell the capture the rate and it strips the tax before saving, so revenue and margin never count the state's money. The P&L also gained a Taxes expense category and an editable set-aside estimate, and the FAQ explains the whole stance.
Dashboards
9July 2, 2026
Dashboards open on this month
The seller and hobbyist dashboards now open scoped to the current month instead of all time, which is almost always the question you came to ask. All time is still one chip away, and every other period works like before. A brand-new workbench still opens on the getting-started view.
Refunds & remakes follow the time period
The seller dashboard's refunds and remakes tiles now respect the period filter, scoped the same way as the money tiles beside them: by the sale's date. Pick "This month" and you see refunds and remakes on sales dated this month, not your all-time count. The caption on the strip says exactly what scope you're looking at.
Deleting a product no longer hides its sales
Dashboard money used to need a sale's product row to price it, so deleting a product silently dropped its recorded sales from your revenue and take-home (History kept them, which made the dashboards look short). Now a sale settles from the numbers frozen when it was recorded, so the totals, the trend, the profit line on its History card, and the P&L cost of goods all survive the product's deletion. Only sales recorded before cost freezing existed (June 19) still need their product around.
The hobbyist dashboard got a lot more to look at
The hobbyist view now has the same time period filter as the seller (this month, last month, any range), a making pulse (hours at the bench per week with a by-month table of prints, hours, filament, and cash cost), a filament-by-type breakdown of what your printing actually burns (failed prints included), and the per-printer workhorse breakdown. All of it reads the volume lens: work counts in the month it was finished.
Which size earns its keep, and average shipping everywhere
The seller dashboard has a new by product and size table: for each collection, every sold size's average price, take-home, shipping, and margin, so a Small vs Large comparison is one glance. It follows the shop and period filters. The per-sale averages strip also gained its average shipping tile on every craft (it was 3D-only before).
See your seller dashboard by month, or any date range
The seller dashboard now has a time period filter next to the shop filter: this month, last month, 30 or 90 days, this year, or any custom range. Every number on the page scopes to it, and a new by-month table under the revenue pulse shows what each month made. Money counts by when a sale happened; volume (prints, hours, failures) counts by when the work was finished, so a May print sold in June lands in June's money and May's work. Works across all twelve crafts.
See your typical sale at a glance
Your Seller dashboard now shows your per-sale averages right under the headline: average sale price, average cost to make, and average take-home (plus average shipping on 3D). They're figured across your priced sales, so they line up with your totals. A quick read on what a normal order looks like for you.
The Hobbyist dashboard now shows what you've made, and what it cost
The Hobbyist view used to echo the Seller (it even led with an income number that belongs on the business side). It's its own lens now: a 'What you've made' headline (the sellable value of everything you've finished, sold or not, at your own list price) next to what it cost you to make in materials, power, and wear, plus the hours you put in. Per craft it shows cost to make and cost per piece, and keeps your output, time, material used, failure rate, and most-made list. The Seller view stays the money-and-margin lens, so the two answer different questions instead of repeating each other. Across all twelve crafts. Pro.
Findings and dashboard leaders show the full product name
An Insights card that read 'Top fails often', or a dashboard leaderboard showing a bare 'Top', didn't tell you which product when 'Top' is one part of a planter. Those now show the full name, like 'Sagres Planter · Large · Top', the same way the jobs board and history already do, so you can actually act on them. The 'Review in catalog' link still lands on the right product.
Pricing
8July 2, 2026
Anvil recommends your failure buffer from real data
Products with 5 or more logged jobs already price on their own learned failure rate. The failure buffer in your assumptions is what NEW products launch on, and now Anvil keeps it honest: the Assumptions form shows what your bench actually failed over the last 90 days, with a one-click button to use that number (you still hit Save, nothing changes silently). When the gap is big enough to matter, Insights surfaces a card too.
Refunds hand your fees back, the way Etsy actually does
We checked Anvil's fee math against a real month of an Etsy payment statement, line by line. The good news: transaction and processing fees (including the once-per-order 25 cents on multi-item orders and the fee on collected tax) match Etsy's own books almost to the cent. The correction: Etsy credits ALL your fees back on a full refund, including payment processing, so the refund math now hands fees back instead of counting a kept slice. A goods-lost refund still counts what a refund cannot undo: the cost of making the item and the shipping label you already paid for.
See the filament pool your 3D listing price rides on
A 3D listing is priced before you know which color will print, so it uses the average cost across every active spool of that material type. That average is now visible: the breakdown on the catalog and the estimator shows the pool right under the Material line (how many spools, the average per kg, and the cheapest to priciest range). And when you have recent printing history, the average is now weighted by what you actually print, so one pricey spool you never use stops moving every listing. No history means nothing changes.
Refunds keep the payment processing fee, like the marketplace does
When Etsy refunds an order it credits the transaction fee back but keeps its payment processing fee (the 3% and the $0.25). Anvil's refund math used to hand all of it back. New sales freeze the processing slice at record time, so a refund now shows the fee the marketplace actually kept, in your take-home and your profit and loss alike. A full refund with the goods lost counts it as part of the loss, and the carrier cost you already paid now counts there too. Sales recorded before this keep the math they were recorded with.
Etsy fees now count the shipping and tax fee bases
Etsy charges its payment processing fee on the sales tax it collects (and both its transaction and processing fees on buyer-paid shipping), not just on your item price. Anvil now captures each order's buyer-paid shipping and collected tax and counts those fee dollars in your take-home and profit and loss, frozen at the sale like the rest of its economics. Older orders keep the item-only math they were recorded with.
Fees on multi-item orders are counted more precisely
A marketplace order with several items was charging the per-order payment processing flat fee (like Etsy's $0.25) once per item instead of once per order, quietly understating your take-home on every multi-item order. It now counts once per order, on your dashboards and your profit and loss alike. Per-item listing fees still count per item, as they should. Recurring expenses also stopped counting a bill before its day of the month arrives, so mid-month profit reads true.
See your take-home on every estimate
Every craft's estimator now shows your take-home and margin right under the cost build-up, in green when you're making money and red if a price would sell at a loss. The number was always in the math; now it's front and center on the estimate, so you can see what you actually keep before you settle on a price.
Your prices learn how long things actually take you
Anvil already learns your real failure rate from logged jobs. Now it does the same for labor. Finished jobs have a 'hands-on minutes' field, and once a product has five real times logged, Anvil prices it at the median of those instead of your original estimate (median, so one marathon custom order doesn't skew it). Your saved estimate stays put; only the price uses the learned number. It matters most on the hands-on crafts (resin, woodworking, jewelry, and the rest) where labor is most of the cost.
Insights
2July 2, 2026
Insights flags a spool priced far off its pool
If one spool costs way more (or less) than the rest of its material type, every listing of that type quietly misprices: a $35 silk PLA averaged with your $15 basics underprices the silk work and overprices the rest. Insights now flags any spool more than 40% off its pool average, tells you the exact price variation to add (computed through your own margin on a real listing), or you can rename it to its own type so it prices alone.
Insights now flags materials running low
Your Insights page groups its findings into what's costing you money versus what's just worth a look, and adds a Running low section: the materials your recent usage says to reorder soon, before a job stalls waiting on an empty spool. It's the same forecast as your inventory page, surfaced next to the money findings.
Jobs
15July 1, 2026
Deleting or failing a finished job cleans up all of it
Deleting a job used to return its raw material but could leave traces behind: a made-to-stock item stayed counted on your shelf, and its recorded sale could linger in totals. Both now reverse with the job. Marking a done job as failed also backs out the sale its completion recorded, and a made-to-order line goes back in line to record again when the reprint finishes. No phantom numbers left floating around.
The jobs page leads with the live board
The top of the jobs page was carrying a lot before you reached your actual queue. Now it leads straight with the work: what needs attention, what's printing (with its live progress, no longer shown in two places), what's in progress, then the queue. The filament check moved onto the queue itself as a one-line "queue needs N colors" you can expand, and the occasional tools (log a past job, filament history) tuck below the board. Less scrolling to get to what you came for.
A cleaner, easier-to-scan jobs board
The jobs board got a tidy-up. Each part of a project now reads as one calm line (its status, color, printer, and the button to act) instead of a tall stack, and the actuals for the part you're actively printing open up right where you need them. The printer and color are still yours to change, just from the cleaner spot. A run you're not working collapses to a single line with its colors and order number, and a small set of bars shows how far along it is at a glance. There's also a gentle "printer busy" heads-up on a queued part whose printer is already mid-print, so you don't start two jobs on one machine by accident.
Multi-part website orders queue each plate in its own color
When a make-to-order website order picks a color per part (a black head, a blue body), Anvil now queues each plate in its own matching spool, picked by the exact color your site sends, so the run is ready to start in the right colors. It also reads which body or option the buyer chose and queues that exact plate. Anything it can't match cleanly falls back to your default so nothing is blocked.
Make-to-order orders queue in the right color
When a make-to-order website order includes a color, Anvil now queues the print in the matching filament spool automatically, so the job is ready to start instead of waiting for you to pick the color by hand. If the color doesn't clearly match one of your spools, it queues your default so nothing is blocked. It's the same color matching your Etsy orders already use.
Website orders land on your jobs board
Make-to-order website orders now flow straight onto your jobs board, the way Etsy orders do. When a paid order comes in for a make-to-order shop, Anvil queues the work to make (run-aware, so a multi-part product queues all its parts), labeled with the order. Finish the job and the sale records itself from the order's price and channel. A multi-item order waits until every piece is made, then records as one bundle so shipping counts once. From-stock shops still ship off the shelf instead. The order goes in, the work shows up, the sale records on finish. No re-keying.
The Jobs board is just your production line now
The Jobs board used to repeat a slice of your finished work at the bottom, which doubled up with the Completed page. We've removed that peek, so the board stays focused on what needs you: the queue, what's printing, and what's awaiting a sale. Everything finished still lives on Completed, fully editable there (correct it, backdate it, log or edit a sale), reachable from the board whenever you need it.
One print queue you can actually reorder
The print queue used to stack project runs above single prints as two separate lists, so a new order seemed to pop in wherever and you could only drag within each group. Now it's one unified queue: singles and projects sit together in the order they came in (newest at the bottom), and you can drag any card, a whole project moving as one block, to wherever you want it.
Reprinted at a different size? Just rescale the record
Printed a model a little bigger or smaller than the saved version? On a finished 3D print's 'Edit record', a new 'Rescaled to %' box fills in the actual grams and hours for you, scaled by volume (a 110% print uses about a third more material, not 10% more). No need to delete the job and start over. Both numbers stay editable, so you can fine-tune to your slicer's exact figures.
Spot orders aging in your queue
An order that's been waiting to start for a few days now flags itself: a 'Waiting Nd' tag turns amber at three days and red at a week, right on the card. So a made-to-order job catches your eye before it drifts past its ship-by. It only shows on orders still waiting, not ones already printing or done.
Assign the printer that actually ran each plate
Printing a planter's Top on one machine and its Bottom on another, because each color is already loaded? You can now pick the printer for each plate right on the jobs board, the same way you pick the color. Your seller dashboard then costs each plate's electricity and machine wear on the machine that really ran it, so your take-home stays honest even when a job hops printers. Your listed price doesn't move. Shows up once you have two or more printers saved.
See when each order landed in your queue
Every job on the board now shows when it was added, with the date and time, right on the card. The quick 'queued 2h ago' is still there for a glance, but now you can also read the exact day an order came in without counting back. It shows on jobs waiting in the queue, jobs that are printing, and whole projects, in your own time zone.
See what's printing right now
The jobs board now leads with a Printing now tile: every active print with a live progress bar and a rough time left, so you can see what's on the bed and when it should finish at a glance. It's an estimate off your expected time, not a sensor reading, so tune your expected times for a closer count.
Let your printer close out the job
When a print finishes on the bed, Anvil can mark the job done for you. A small helper that runs on your own network watches your printer (Bambu, or any Klipper printer with Moonraker) and tells Anvil the moment a print completes, so the job finishes, your filament stock decrements, and any made-to-order Etsy sale records itself, with no clicks from you. Generate a token and grab the setup steps under Settings, Printer sync.
The jobs page learned your lifecycle
Jobs now read top to bottom the way work actually flows: needs attention, print queue, printing, awaiting sale, finished. Drag to reorder the queue (whole project runs too), tag jobs with an order name, watch a live progress bar while printing, and log a failed print at the layer it died for an honest waste estimate.
Catalog
1June 30, 2026
Large catalogs open much faster
If you have a big catalog, opening it used to build every product card up front, even the ones inside collapsed collections. Now a collection's cards load only when you open it, so the page comes up with your collection headers right away and fills each one in on demand. Search still works across everything. For a catalog with a few hundred listings, the first load is dramatically quicker.
Site
4June 29, 2026
A features page that shows the whole workbench
Anvil has grown well past a price calculator, so there's now a Features page that lays out everything in one place: the free pricing engine, your catalog and per-shop pricing, jobs and the learned failure rate, dashboards and Insights, orders with marketplace sync, inventory with low-stock forecasting, and the run-a-business tools (invoices, clients, expenses and profit and loss). Each piece is tagged with what it needs (free, Maker Pro, or Shop and Business), so you can see exactly where everything lives before you sign up.
See how a price is built, right on the home page
The home page got a refresh that shows the work, not just talks about it. Up top, a live sample breakdown lays out exactly how a price is built (material, machine and labor, overhead, channel fees, your take-home, and the suggested price); tap or hover any line to see what feeds it. The main button now drops you straight into a no-sign-up demo so you can try the engine on your own craft first. We also tidied the layout and made the wording honest: Anvil runs three purpose-built engines (one for makers, one for trade and service bids, one for digital), all in one forge.
Eight free calculators
A new public calculators hub: marketplace fees (what Etsy, Amazon, eBay, and the processors really take), wholesale and keystone pricing, the hourly rate you must charge, bulk price breaks, plus paint, flooring, concrete, and roofing take-off calculators. Free, no account needed, and each hands off into the full engine when you want the whole picture.
Try it without an account
Live demo estimators at /try for every maker craft and digital products: the real pricing engine on researched presets, no sign-in, nothing stored. Plus a general FAQ, this very changelog, and two new pricing guides (handmade candles, and crochet priced so the hours get paid).
Onboarding
2June 29, 2026
A first run that fits your line of work
Setting up in a trade, service, or digital line now gives you a short, line-specific heads-up on how your pricing works (a bid built bottom-up, or design time amortized over a run) instead of maker-flavored steps about machines and materials. Every kind of seller gets a first run that matches what they actually do.
Moving in from another shop is part of setup now
Joining Anvil when you already sell somewhere just got smooth. Setup has a new step: tell us if you already sell on Etsy, Shopify, Square, WooCommerce, or from a spreadsheet, and we walk you straight into bringing your products and order history in, in a sensible order, instead of starting from a blank catalog. Pick how you ship and we set up a matching shipping estimate so your prices include postage from the start. The shops and fees we set up match where you actually sell. Your home page then keeps a short 'bring your shop in' checklist (catalog in, past sales in, a shop connected) until you're fully moved over. Just starting fresh? The from-scratch path is untouched.
Account
6June 26, 2026
A failed payment is impossible to miss
The heads-up about a failed subscription payment now rides at the top of every page, not just billing, so a paused account sees it right away with a one-click path to update the card. Active subscriptions are never affected, and founders keep their lifetime access.
The free catalog limit now holds on downgrade
The free plan covers 10 products. Until now that only blocked adding an 11th, so a catalog built on a paid plan stayed fully usable after reverting to free. Now a free account over the limit keeps its newest 10 active and pauses the rest (not editable, queueable, or sellable) behind an upgrade, with a clear list of what's paused. Nothing is deleted, search can't pull a paused product to the top, and upgrading restores everything instantly.
A failed payment pauses paid features, and shows you how to fix it
If a subscription payment doesn't go through (a card expires, a charge fails), your paid features now pause cleanly until it's sorted out, instead of staying on. Your billing page shows a clear note with a one-click way to update your card and turn everything back on. Nothing is lost, and an active subscription is never affected. Founders keep their lifetime access regardless.
Download a complete backup of your account
The account export under Settings now includes everything you keep in Anvil, not just your 3D data: every craft's cost library, your whole catalog and jobs, and your sales, expenses, clients, bids, invoices, and inventory, all in one JSON file. Your saved credentials (the shop and printer connection tokens) are deliberately left out. It's your data, portable and yours to keep.
Sign in with a 6-digit code
Email sign-in now sends a short code you type into the same window. No more magic link opening in the wrong browser on your phone. The magic link stays as a fallback.
Achievements got a memory
Badges now record the date you earned them, stay earned even if a count later dips, and celebrate on whichever device you open next.
Inventory
1June 25, 2026
See what you've made for stock, valued at cost
Your inventory page has a new Made-to-stock shelf. When you finish a job and mark it as stock (not sold), the unit lands on the shelf carrying its cash cost of goods, so you can see at a glance what you've built ahead and what it's worth at cost. The cost rides with the unit and stays out of your profit until it actually sells, then it books as that sale's cost. So a big batch-build month no longer reads as a loss, and selling from stock later counts the right cost just once. It's also the groundwork for letting orders ship from stock without re-charging you for materials you already used.
Services
3June 24, 2026
Six creative services join Anvil, with Quick start
Anvil now prices six more service lines: graphic & brand design, photography, SEO & digital marketing, copywriting & content, social media management, and videography & video editing. Each bids a job the same honest way (line items, your project costs, a buffer, then your overhead and profit), each has its own Quick start packages (a logo + brand basics, a wedding day, a monthly SEO retainer, a launch email sequence, a reels package, and more), and each has a rate-tier picker (solo, studio, agency) instead of the trades' region question. Starter rates are 2026 mid-ranges, researched and cited on the Sources page. Ad spend, tools, and licensing are tracked as pass-through costs, not marked up as your work.
Quick start comes to services, with a rate tier
Web design (and the new service lines) get the Quick start gallery too. Because region and union don't fit a desk service, the wizard asks your rate tier instead (solo freelancer, small studio, or agency), which nudges the labor rates. Care-plan templates can also set a monthly retainer alongside the one-time quote.
Services join the bench
A fourth product line: services. Web design and development quotes a project by section on the same engine the trades bid with, including an optional monthly care-plan retainer quoted alongside the one-time build.
Polish
3June 11, 2026
A site-wide consistency pass
A sweep across every page for stale copy and counts. The about page now knows all twelve crafts and eighteen trades exist, the contribute page stopped claiming shipped crafts were on the roadmap, and a pile of small voice fixes landed across forms and toasts.
A faster way around
The craft switcher became a single searchable menu (Ctrl or Cmd-K) with per-browser recents. The home HUD gained an in-queue stat, printing cards can be canceled without polluting the learned failure rate, and the failed-print form auto-fills the layer count from the slice.
The catalog got fast
Product search is instant and client-side, and the edit forms behind each card load only when opened. Big catalogs stopped freezing on load.
Digital
2June 11, 2026
Bundle pricing for digital sellers
The digital workbench gained its first tool: a bundle and license calculator. Set your single-file price, pick the shop you sell through, and tune the tier ladder (3-pack, 5-pack, 20-pack). Each tier shows the discount buyers see and what you actually keep after fees, plus a commercial-license price at a multiple of personal.
Digital products and print-on-demand
A third product line. A digital file has no per-unit material, so the engine amortizes design time over expected sales and leads with break-even units and projected profit. POD mode adds the partner's per-unit base.
Documents
1June 11, 2026
PDFs that name themselves
Saving a quote, proposal, invoice, or price list as a PDF now suggests the right filename (the quote or invoice number and the client, not a generic page title). Long documents paginate cleanly too: table headers repeat on every page and rows no longer split across the fold.
New craft
1June 1, 2026
Woodworking completes the dozen
Board-feet lumber math, machine run-time metered separately from shop hours, hardware and finish as real lines. With jewelry alongside it, all twelve maker crafts are live on the one engine, and the two weeks before this brought the eighteen trades, inventory, invoicing, clients, and expenses they share.
Want the longer story?
Everything above runs on one auditable cost engine. The blog walks through the pricing method craft by craft, and the engine itself is free to use.