Notion Inventory Tracker with Google Sheets Formulas (2026 Guide)

Notion is a great place to keep an inventory list. The page-per-product layout is naturally readable, you can attach photos and supplier docs, and the team can comment on each row. What Notion can't do is the math: reorder thresholds, weighted average cost, forecasted stockout dates, supplier lead time averages, anything that needs more than one-cell formulas.
Most inventory templates work around this with either (a) static numbers the team has to update by hand, or (b) by punting the entire inventory to a spreadsheet, which loses the Notion advantages. Neither is great.
The cleaner setup: keep inventory in Notion, run the math in Google Sheets, and use Sync2Sheets' real-time 2-way sync to push the computed values back into Notion. The team scrolls the Notion database and sees "Reorder needed: Yes" as if it were a native Notion property. Under the hood, Sheets calculated it.
This guide walks through the setup, with concrete formulas.
The setup
You'll build:
- A Notion inventory database with hand-curated fields (SKU, Name, Supplier, Photo) plus calculated fields (Reorder Needed, Days of Stock Left, Restock Date).
- A Google Sheet synced with the database, where Sheets formulas compute the calculated fields.
- Sync2Sheets keeping the two aligned, with calculated columns flowing Sheets → Notion.
Step 1: The Notion inventory database
Create a database with these properties:
- SKU (Title): the product's stock keeping unit
- Name (Rich text)
- Supplier (Select): the supplier name
- Photo (Files & media)
- Stock On Hand (Number): current inventory count
- Reorder Threshold (Number): when to reorder
- Avg Daily Sales (Number): recent sales velocity
- Lead Time (days) (Number): supplier lead time
- Reorder Needed (Checkbox): Sheets computes this
- Days of Stock Left (Number): Sheets computes this
- Restock Date (Date): Sheets computes this
The first 6 properties are owned by the team in Notion. The last 3 are the ones we'll compute in Sheets.
Step 2: Sync to Google Sheets
Install Sync2Sheets, open the sidebar in any Google Sheet, connect Notion, pick the inventory database.
In the first-sync column picker:
- SKU, Name, Supplier, Photo, Stock On Hand, Reorder Threshold, Avg Daily Sales, Lead Time → Notion to Sheets (the team manages these in Notion)
- Reorder Needed, Days of Stock Left, Restock Date → Sheets to Notion (we'll compute these)
Start the sync.
Step 3: The formulas
In the synced Sheets tab, replace the empty calculated columns with these formulas (adjust column letters to match your sheet):
Days of Stock Left
=IF([Avg Daily Sales] > 0, [Stock On Hand] / [Avg Daily Sales], "infinite")
If you sell 10 units a day and have 50 in stock, you get 5 days. If sales are zero, Sheets returns "infinite" (or you can substitute a large number).
Reorder Needed
=IF([Days of Stock Left] <= [Lead Time], TRUE, FALSE)
You need to reorder when you have less stock than supplier lead time. Sync2Sheets converts TRUE/FALSE to Notion checkbox values automatically.
Restock Date
=IF([Reorder Needed], TODAY() + [Lead Time], TODAY() + [Days of Stock Left] - [Lead Time])
If you need to reorder now, the next restock arrives Today + Lead Time. Otherwise, it shows when you should next order to avoid stockout.
Within seconds (Sheets-to-Notion sync latency), the values appear in Notion. Open the inventory database in Notion: every row shows whether it needs reordering, how many days of stock remain, and when the next restock should land.
Step 4: Build a reorder dashboard in Notion
The point of all this is to make stockouts impossible to miss. In your Notion inventory page, add a filtered view:
- View name: Reorder Now
- Filter: Reorder Needed = checked
- Sort: Days of Stock Left ascending
Anyone opening this view sees exactly which SKUs are at risk, in order of urgency. Behind the scenes, Sheets keeps the Reorder Needed flags fresh as the team updates Stock On Hand in Notion.
Step 5: Add headline KPIs via block updates
For a dashboard page summarizing the whole inventory:
- Total SKUs at risk (Sheets:
=COUNTIF(ReorderNeeded_column, TRUE)) → push into a Notion callout via block updates - Total inventory value at risk (Sheets:
=SUMPRODUCT((ReorderNeeded_column=TRUE)*StockOnHand_column*UnitCost_column)) → another block update - Avg lead time across suppliers (Sheets:
=AVERAGE(LeadTime_column)) → block update
The Notion dashboard page now headlines the most important metrics, computed in Sheets but rendered in Notion.
Step 6: Connect actual sales data (optional, advanced)
The Avg Daily Sales column above is hand-entered. If your sales data lives in another system (Shopify, Square, accounting software), you can automate that input.
- Pull sales data into a separate Sheets tab via the appropriate connector
- Build a SUMIFS in your synced tab that calculates rolling 30-day sales per SKU
- That value becomes the new Avg Daily Sales
You'd switch Avg Daily Sales from Notion to Sheets direction to Sheets to Notion direction, since Sheets is now the source. Notion still displays it; it just stops being editable from Notion. Everything else stays the same.
The whole loop: sales data in (from external system) → computed in Sheets → reorder flags in Notion → human acts on them.
What you avoid by doing it this way
Three things, mostly. You avoid maintaining a separate reorder spreadsheet that the team never opens (putting it in Notion is what makes them see it). You avoid paying $50+ a month for a dedicated inventory tool with its own UI to learn. And you avoid the slow drift of "I'll just update the spreadsheet weekly" which, in every team I've watched try it, falls behind within two weeks.
Pitfalls to watch for
- Number formatting. Notion's number property formats (currency, percent) come through to Sheets as raw numbers. Your formulas should treat them as numbers, not strings.
- Empty rows. New rows added in Notion show up in Sheets without your formulas in the calculated columns. Either pre-fill the formulas down the column with ARRAYFORMULA, or copy them down periodically.
- ARRAYFORMULA for scale. Once your inventory has 200+ SKUs, wrap each calculated column in ARRAYFORMULA so it auto-extends:
=ARRAYFORMULA(IF(B2:B="", "", IF(AvgDailySales > 0, StockOnHand / AvgDailySales, "infinite")))
That keeps the math working for every new row without manual copy-down.
- Photos sync, uploads don't. Notion file attachments come through as links in Sheets. You can view them in Sheets but can't push new uploads from Sheets back to Notion. Files is a read-only type in 2-way sync.
One more thing
If you only take one idea from this post, take this: the calculated columns don't need to be inside Notion's formula property. Most "Notion can't do this" complaints disappear when you stop trying to make Notion do the math and let Sheets do it instead, with the result piped back in.
The CRM dashboard variant of this pattern lives at Notion CRM with Sheets dashboards. The pricing page is here if you're sizing the plan. Install Sync2Sheets when you're ready, 7-day free trial.
Sync Notion to Google Sheets in real time
Use Sheets formulas in Notion, build dashboards, back up your databases, and compare tools. Free 7-day trial.