A Square Inventory Template for Your Coffee Shop
Mark, founder of Parly·September 2, 2026·6 min read
Start from the export, not from a blank sheet
The usual count sheet is born on a Sunday afternoon. Someone opens a blank spreadsheet, walks the stockroom, and types item names the way the team says them out loud. Oat. 16 hot. Peru. Six months later that sheet and the Square catalog are two different languages describing one shop, and reconciling them costs another Sunday.
There is a faster start. Square will hand you a spreadsheet of your own catalog: from the Dashboard, open your item library and export it, and you get an .xlsx or .csv of everything you sell, one row per item variation. Build your count sheet on top of that file and your two systems share a spine from day one.
The columns Square includes in that export, named verbatim in Square's own bulk import documentation (accessed September 2026), are the ones worth knowing:
| Column | What it holds | Why your count sheet wants it |
|---|---|---|
| Token | Square's unique id for each item variation | The join key. Never edit it, never delete it. |
| Item Name | The item as it appears in the catalog | Your row label, in Square's words rather than yours. |
| Variation Name | Size or option (12 oz, 16 oz) | Cafes lose more counts to size confusion than to anything else. |
| Description | Free text | Useful for pack size notes. |
| SKU | Your own code, if you use one | Handy if a supplier catalog uses the same code. |
| Category and Reporting Category | How Square groups the item | Free category structure you do not have to invent. |
| Price | Current sell price | Sits next to cost when you get to margins. |
| Modifier Set | Which modifier lists attach to the item | The column that tells you where your real usage hides. |
| Item Type | Physical item, service, and so on | Filter to physical before you count anything. |
| Unit and Unit Precision | Unit of sale and decimal places | Where per-ounce and per-each items part ways. |
| New Quantity | The stock number you are writing back | The only column you fill in when you import a count. |
Location-scoped columns appear once per location, with the location name in the header, such as Enabled [Location Name]. One shop, one set. Square's instruction on the file is blunt and worth repeating: do not reorder or delete any columns. Add yours to the right of what is already there.
⚠ The Token column is load-bearing
The columns Square does not give you
The export describes what you sell. A count sheet has to describe what you buy, and those are different lists. Square knows about a 16 oz oat latte. It does not know that oat milk arrives in cases of twelve 32 ounce cartons from a supplier with a 10:50 AM cutoff.
So the template is the Square export plus six columns of your own, added to the right:
- Count unit. The thing you actually count on the shelf: carton, sleeve, bag, case. If two people would count the same shelf differently, the unit is wrong.
- Pack size. How many count units come in one purchase unit. Twelve cartons to a case, one thousand cups to a case.
- Cost per purchase unit. What the case costs on the invoice, not what one carton costs. Divide later.
- Par. The number you want on hand at the moment of counting, given how fast it moves and how long the supplier takes. How to set that number is its own job.
- Supplier. Who it comes from, because your order is grouped by supplier and by cutoff, never by shelf.
- Counted. The empty column your team fills in. One column, one number, no formulas.
That is the whole template. Square's columns on the left for identity, yours on the right for buying, and one blank column for the person walking the room.
Ingredients are not catalog items
Here is the wall you will hit, and it is better to hit it on purpose.
Your Square export lists sellable items. Your stockroom holds ingredients. A row that says "Iced Matcha Latte, 16 oz" is not something you can count, because what is on the shelf is matcha, oat milk, a cup, a lid, and a straw. Square's built-in inventory tracks finished goods, and Square says so plainly on its own product page (accessed September 2026). For a retail shelf of bean bags and canned cold brew, that is a perfect fit and the export needs almost no help. For a drink menu, most of your money is in rows that will never appear in the catalog at all.
So the sheet ends up with two blocks:
Block one, retail. Items that exist in Square exactly as they sit on the shelf. Bags of beans, bottled drinks, mugs. The export gives you these rows complete, and you can count them and write the number back through the New Quantity column, using the same file you exported.
Block two, ingredients. Milk, matcha, syrups, cups, lids, napkins, sanitizer. These get rows you type yourself, with your six columns filled in and Square's columns left blank except for a category you borrow so the sheet stays sorted the same way. About 60 items in that block is normal for a specialty cafe; ours is 58 on a full pass, and it counts in about 8.5 minutes from a phone because the rows are in shelf order, not alphabetical order.
💡 Sort by walk, not by name
The two blocks meet only in one place, and it is the interesting one: the recipe that says a 16 oz iced matcha latte uses 2 grams of matcha and 12 ounces of milk. That mapping is what turns a catalog row into shelf math, and it is the piece no spreadsheet does on its own. Why a latte breaks item-level tracking covers the mechanism.
Writing counts back into Square
If your retail block is worth keeping current in Square itself, the loop is short. Export the item library, put your counted numbers in the New Quantity column, save as .xlsx or .csv, and import the file back. Square matches on Token and updates the stock.
Two cautions from doing it wrong. First, the file you import must be the file you exported, columns intact; a rebuilt sheet with the columns rearranged will not match. Second, New Quantity sets stock, it does not add to it, so an import while a shift is ringing up sales will bury the sales that happened in between. Do it at close, or right at open before the doors.
For the ingredient block, there is nothing to write back. Square has no field for a case of oat milk, which is exactly why the ingredient rows live in your sheet and stay there until you outgrow the sheet entirely.
When the sheet stops being enough
A spreadsheet built on the Square export is a genuinely good system, and plenty of cafes should stop right here. The honest limits are worth naming so you recognize them when they arrive.
The sheet cannot deplete. Between Monday's count and Wednesday's, the numbers on it are Monday's numbers, no matter how many drinks sold in between. The sheet cannot read modifiers, so an oat swap that changes what left your fridge is invisible to it, even though Square recorded the sale. And the sheet cannot age: when the catalog changes, someone has to re-export and re-merge by hand, and that someone eventually stops.
Those three limits are the same ones that show up in every cafe inventory spreadsheet, and none of them is a reason to abandon a sheet that is working. They are the signals to watch for. When your count and your fridge start disagreeing every week, that mismatch is the sheet telling you what it cannot do.
Until then: export the file, add your six columns, sort by walk order, and count. The best thing about starting from Square's export is that the first version of your sheet takes ten minutes and already speaks your catalog's language.