Tag: Spreadsheet Management

  • How to Track Inventory in Google Sheets

    To track inventory in Google Sheets, use three tabs instead of one list of quantities. An Items tab describes what you stock and when to reorder it. A Movements tab records every receipt, sale, loss, and count correction as a new row. A Stock tab calculates what’s on hand from those movements, and flags anything at or below its reorder point. Nobody types a quantity into the Stock tab, so as long as people add rows and corrections instead of changing old ones, the history stays intact.

    Why One “Quantity on Hand” Column Fails

    The common first attempt is a list of products with a quantity column that people update by hand. It works for a few weeks, then breaks in predictable ways:

    • You can’t tell what happened. If a count drops from 12 to 8, the sheet doesn’t say who took the four, when, or whether they were sold, spoiled, or lost.
    • Formulas and formatting get overwritten. Anyone typing in the wrong cell can wipe out a calculation without noticing.
    • You can’t see usage. Without dated movements, you can’t work out how fast something sells or when you’ll run out.

    The fix is to keep two kinds of records apart. Master records describe things that change rarely, such as the item list and supplier lead times. Transaction records log events as they happen. The balance is always calculated from the transactions, never typed.

    The Three Tabs at a Glance

    TabWhat it holdsWho types in it
    ItemsOne row per product: cost, supplier, usage, lead time, reorder pointYou, when products change
    MovementsOne row per stock eventWhoever receives, sells, or counts stock
    StockCalculated balances and reorder flagsNobody (formulas only)

    If you’d rather start from a working version, copy the inventory template. It has the three tabs, the formulas, the dropdowns, and the reorder flag already built, with made-up example data and room for 199 items. Before you use it, follow “Clear the Example Data Before You Start” below. The rest of this article explains how each part works so you can build it or adapt it.

    Tab 1: Items

    Make a tab named Items with these columns in row 1:

    ColumnHeaderWhat goes in it
    ASKUA short unique code, such as PKG-001. Never reuse one.
    BItemThe plain-English name
    CCategoryPackaging, supplies, finished goods
    DUnitThe one base unit you count, buy, and use this item in: each, roll, kilogram
    EUnit costWhat you last paid per base unit
    FSupplierWho you buy it from
    GAverage daily useHow many base units you use or sell per day, as an estimate to start
    HLead time (days)Days from placing an order to having it in hand
    ISafety stock (days)Extra days of use to cover late deliveries and busy spells
    JReorder pointCalculated, see below

    The reorder point

    A reorder point is the stock level at which you should place an order. A common way to set it is to cover the use during the supplier’s lead time, plus a safety buffer:

    Reorder point = average daily use × (lead time + safety days)

    In the sheet, with row 2 as the first item, cell J2 holds:

    =IF(A2="","",G2*(H2+I2))

    Copy it down the column, as far as you expect to have items (the template does this to row 200). The IF leaves the cell blank for empty rows.

    Pick one base unit per SKU and use it everywhere: in every movement, in daily use, and in unit cost. If you buy mailer boxes by the case of 12 but use them one at a time, log a delivery of one case as 12 each and divide the case price by 12 for the unit cost. Mixing cases and pieces in the same item quietly corrupts the balance, the value, and the reorder point.

    Here is a made-up example. A business uses 10 mailer boxes a day. The supplier takes 7 days to deliver, and the owner wants 5 days of cushion. The reorder point is 10 × (7 + 5) = 120 boxes. When stock reaches 120 or fewer, it’s time to order.

    Daily use is the weakest number in this formula, because at first it’s a guess. The Stock tab below shows the real use from your own movements, so you can correct the estimate after a month or two.

    Tab 2: Movements

    Make a tab named Movements with these columns:

    ColumnHeaderWhat goes in it
    ADateWhen the movement physically happened
    BSKUChosen from a dropdown that reads the Items tab
    CMovement typeChosen from a fixed list
    DQuantityA positive number, decimals allowed
    EReferenceOrder number, PO number, or count date
    FLogged byInitials

    Quantity is always positive. The movement type decides whether stock goes up or down. Use this list of seven types. Each starts with IN or OUT:

    • IN – Opening count
    • IN – Purchase received
    • IN – Return to stock
    • IN – Count correction up
    • OUT – Sale or use
    • OUT – Waste or damage
    • OUT – Count correction down

    Start with opening counts. On the day you start, count everything and log one “IN – Opening count” row per SKU, dated that day. That’s the only time you enter a starting balance. After that, the balance is always the sum of movements. If an item has zero stock, skip its opening row; the quantity rule below requires a number above zero. Dates are for things that have physically happened, so log a purchase when it arrives, not when you order it.

    Add the dropdowns

    Dropdowns stop typos like “Tomato” and “Tomatoes” from becoming two items. Select the cells in column B (B2 down to row 1,000), then choose Data, then Data validation. In the Data validation rules panel, click Add rule. Under Criteria, choose Dropdown (from a range) and enter Items!A2:A200. Under Advanced options, leave “If the data is invalid” on Reject the input, then click Done.

    Repeat for column C, using the seven movement types. If you’re building from scratch, first make a fourth tab named Lists, type “Movement types” in A1, and type the seven types in A2 to A8. The template already has this tab. Then use Dropdown (from a range) with Lists!A2:A8. For column D, choose Greater than and enter 0, so nobody enters a negative quantity.

    Select the cells before you click Add rule, and don’t change the “Apply to range” box afterward. When you finish, the rules panel should list three rules, one for each column. If a rule you added earlier disappears, you changed the range of a rule that already existed; add it again. Then test it: type a made-up SKU in column B. Google Sheets should reject it with a message that the entry violates the data validation rules.

    Tab 3: Stock

    Make a tab named Stock. Row 2 holds the formulas for the first item, and you copy that row down.

    ColumnHeaderFormula in row 2
    ASKU=IF(Items!A2="","",Items!A2)
    BItem=IF(A2="","",Items!B2)
    CReceived=IF(A2="","",SUMIFS(Movements!$D:$D,Movements!$B:$B,$A2,Movements!$C:$C,"IN - *"))
    DRemoved=IF(A2="","",SUMIFS(Movements!$D:$D,Movements!$B:$B,$A2,Movements!$C:$C,"OUT - *"))
    EOn hand=IF(A2="","",C2-D2)
    FReorder point=IF(A2="","",Items!J2)
    GStatus=IF(A2="","",IF(E2<0,"CHECK COUNT",IF(E2<=F2,"REORDER","OK")))
    HUnit cost=IF(A2="","",Items!E2)
    IStock value=IF(A2="","",E2*H2)

    The * in "IN - *" is a wildcard, so the formula adds up every movement whose type starts with “IN – “. That’s why the type names matter and why the dropdown is locked to the list.

    Two safeguards sit in the status formula. If on-hand comes out negative, which should be impossible, the status says CHECK COUNT instead of looking fine, because that points to a missed receipt or a typo. The reorder test uses “at or below,” so a count exactly on the reorder point triggers it.

    Make the flag visible

    Select column G, then choose Format, then Conditional formatting. Use Text is exactly REORDER and a soft red fill. Add a second rule for CHECK COUNT with a yellow fill. The Stock tab then shows what needs ordering at a glance.

    What the example shows

    With the template’s made-up data, the Stock tab calculates:

    SKUReceivedRemovedOn handReorder pointStatusStock value
    PKG-001600293307120OK$260.95
    PKG-00230171313.5REORDER$31.20
    LBL-001133105OK$60.00
    INK-0014131.8OK$66.00
    PRD-001400159241126OK$747.10
    PRD-002150678363OK$481.40

    The packing tape has 13 rolls on hand against a reorder point of 13.5, so it’s flagged. Stock value is on-hand quantity times the last unit cost you entered. It’s a working figure for the shop floor, not an accounting valuation, because your accountant may use a different costing method.

    Check your usage estimate

    Two more columns help you test the daily-use guess against reality. They only mean something for an item once you have 28 full days of history for that item, so the template leaves them blank until then. Use these estimates only when every movement for that item has been recorded throughout the last 28 completed days; an older first entry alone does not establish complete logging. In column J, =IF(A2="","",IF(COUNTIF(Movements!$B:$B,$A2)=0,"",IF(MINIFS(Movements!$A:$A,Movements!$B:$B,$A2)>TODAY()-28,"",SUMIFS(Movements!$D:$D,Movements!$B:$B,$A2,Movements!$C:$C,"OUT - Sale or use",Movements!$A:$A,">="&(TODAY()-28),Movements!$A:$A,"<"&TODAY())/28))) gives average daily use over the last 28 completed days, not counting today or any future-dated rows. Column K, =IF(A2="","",IF(N(J2)>0,E2/J2,"")), divides on-hand stock by it to estimate days of stock left.

    The blanks are deliberate, and they are per item. If an item’s first logged movement is only ten days old, dividing by 28 would treat the missing eighteen days as days when nothing sold, so that item stays blank even if other items have a long history. An item with no movements at all also stays blank rather than showing zero. If the real use differs a lot from the number in the Items tab, update the Items tab and the reorder point follows. Because these columns depend on today’s date, the template’s example data (October 1 to 15, 2026) is a finished illustrative period, and the columns will show nothing until you’ve logged 28 days of your own.

    Clear the Example Data Before You Start

    The template comes with made-up transactions. If you leave them in, your real items inherit fictional stock. To start clean:

    1. On the Movements tab, select the data rows from row 2 down to the last example row and press Delete. This clears the contents but keeps the header row and the dropdown rules. Don’t delete the rows themselves.
    2. On the Items tab, type over the example rows in columns A to I with your own items. Leave column J alone; it holds the formula. Clear any leftover example rows below your last item.
    3. Back on Movements, log one “IN – Opening count” row for each item with your real count.
    4. Check the Stock tab. On hand should match what you counted on the shelf for every item before you log anything else.

    How People Use It Day to Day

    Receiving a delivery, selling or using stock, and discarding spoiled goods each add one row to Movements. Here are three made-up rows:

    DateSKUMovement typeQuantityReferenceLogged by
    2026-10-07PKG-001IN – Purchase received200PO-0101JS
    2026-10-08PKG-001OUT – Sale or use90Week 2 shipmentsJS
    2026-10-13PRD-001OUT – Waste or damage4Damaged in storageMK

    If the work is steady, log in batches, such as once a day for sales and at receiving time for deliveries. The point is that every change has a row, a date, and a reason. For high-volume sales, you can total a day’s sales into one row per SKU instead of one per sale.

    Protect the Items and Stock tabs so only you can edit them. Choose Data, then Protect sheets and ranges, and limit editing on the formula cells. Staff then only need access to Movements, where mistakes are visible and correctable. Protection limits who can edit a range; it isn’t a security control, and editors of Movements can still change or delete old rows. Keeping the history intact is a habit: add rows, never rewrite them.

    Count a Few Items Regularly and Fix Differences with a Row

    No sheet matches the shelf perfectly. Items get miscounted, damaged without being logged, or taken. A cycle count catches this without closing the business: count a handful of SKUs on a rotating schedule, and cover everything over a few weeks. How many you count at a time depends on how many items you have and how long a count takes.

    When a count disagrees with the sheet, don’t edit the Stock tab or delete old rows. Add a correction row. If the sheet says 20 and the shelf has 17, log “OUT – Count correction down”, quantity 3, with a reference like “Cycle count 2026-10-15”. If the shelf has more, log “IN – Count correction up” for the difference. The balance fixes itself, and the history keeps the evidence. If corrections for the same item keep going down, that is the clue to look for waste, theft, or an unlogged use.

    What a Spreadsheet Doesn’t Do

    • It doesn’t know about open orders. An item stays flagged REORDER until you log the receipt, even if you ordered it yesterday. Put the PO number in a note column on the Items tab, or mark the row, so two people don’t order the same thing twice.
    • It doesn’t change costs by lot. Unit cost is a single number, so it can’t show first-in, first-out valuation.
    • It tracks one place. Several locations, transfers between them, and lot or expiry tracking need a different design.
    • It doesn’t scan. Entry is by hand unless you add other tools.

    Stay in Google Sheets until it stops being enough for a specific reason like these, not just because the item count grows. If you outgrow it, look for tools that solve the exact problem: barcode scanning, multi-location transfers, or lot tracking. How much a small business should spend on data tools can help you weigh the cost.

    Connect It to Alerts and Cash

    The REORDER flag appears when someone opens the Stock tab. If you want an email when an item crosses its reorder point, How to set up automatic alerts in Google Sheets covers the options, including a script that emails you once when a number crosses a line. That script checks a number against a minimum, so watching a text status for each item would need an adapted script rather than just new cell references. Orders also have to be paid for, so it helps to put planned inventory purchases into your cash forecast. The 13-week cash flow tracker has a row for vendor and inventory payments.

    Frequently Asked Questions

    How many items can this handle?

    The template has formulas for 199 items (rows 2 to 200), and its dropdowns accept entries down to row 1,000 of Movements. To go past either limit, extend everything together: copy the Items column J formula and the Stock row 2 formulas further down, extend the Stock conditional formatting range, widen the SKU dropdown source (Items!A2:A200), and extend the validation rules on Movements. Performance depends on your file, and Google recommends closed ranges instead of open ones in formulas, so if a large Movements tab gets slow, change the whole-column references to bounded ranges. You can also archive older years to another file after carrying forward a closing count as new opening rows.

    Can several people use it at once?

    Yes. Google Sheets lets several people edit the same file. What matters is the discipline: everyone logs movements in the same way, and only a few people can change the Items and Stock tabs.

    What about returns from customers?

    If the returned item goes back on the shelf, log “IN – Return to stock”. If it can’t be resold, don’t log anything else against stock: the original sale already took that unit out, so logging it as waste would remove it a second time. Say you start with 10, sell 1, and get a damaged return. The balance should stay at 9. Record what happened to the damaged unit in a note or the Reference column of a separate log. Use “OUT – Waste or damage” only for units that are actually counted in stock.

    Does this replace my accounting records?

    No. It tracks quantities for operations. Your accounting records have their own rules for how inventory is valued and reported.

  • How to Get Alerted When Your Numbers Change

    To get alerted when your business numbers change without drowning in noise, follow four rules. Alert only on events that force a decision. Set each line according to the kind of number it watches. Make every alert say what happened, who owns it, what to do, and by when. Then review the whole list regularly, and for any alert nobody acted on, find out why before you remove it.

    Monitoring Is Not Alerting

    Monitoring is a number you can look at when you choose to: a dashboard, a scorecard, a monthly report. Alerting is a number that interrupts you. They do different jobs, and most alert problems start when one is used as the other.

    Anything that can wait until the next review belongs on the scorecard. How many KPIs a small business should track explains why four to seven numbers is enough to watch. An alert list should be much shorter than that. If you're not sure where a number belongs, put it on the scorecard first. You can promote it later.

    Why Alert Systems Decay

    An alert system usually starts with enthusiasm. You set up alerts for everything you'd hate to miss. Within a few weeks the messages arrive daily, people skim them, and somebody builds an inbox rule that files them away. When a real problem finally triggers one, it sits in a folder nobody opens.

    Software makes sending a notification free. Attention is the part that costs something. The fix is not a better tool. It's a smaller list, with a clear reason for each item to be there.

    Industrial plants have dealt with this for a long time. ISA's own explanation of alarm management, built around the ANSI/ISA-18.2 standard, describes rationalization: each alarm is justified, and its consequence, the expected response, and the response time are documented. ISA's overview of alarm rationalization is worth a read. A small business doesn't need that formality, and this article isn't claiming to follow the standard, but the discipline carries over.

    What Deserves an Alert

    Two tests keep the list short. First, does the number help the business make more revenue, run more efficiently, or cost less to operate? If not, leave it off. Second, if it moves, is there a decision someone must make soon, and can they make it? If the answer is "we'll look at it at the monthly review," it's a report.

    Alert Report
    When action is needed Before the consequence arrives, at a deadline set for that risk: minutes for an outage, about a day for a financial check At the next scheduled review
    What it watches A limit you can't cross, or a sharp break from normal Trends and gradual changes
    Who receives it One person who owns the response Leadership and the team
    How often it fires Rarely, by exception On a schedule

    Typical alert material: cash projected to fall below payroll, a product about to run out, a payment system that has stopped working, a key customer's orders stopping. Typical report material: utilization, retention, average ticket, anything you review monthly to see which way it's heading.

    Two Kinds of Line

    A threshold is the line a number crosses to trigger an alert. There are two ways to set one, and they suit different numbers.

    A hard limit comes from what the business must be able to do, not from history. Cash is the clearest case. Your minimum cash level should come from what's due in the coming weeks and how quickly you could collect or borrow, not from last year's balances. Two $15,000 payrolls come to $30,000, but that covers only those two payments. A real floor also has to cover rent, vendors, taxes, and a margin for the forecast being wrong. The 13-week cash flow tracker shows one way to lay that out. Keep in mind that a check on week-end balances can miss a dip in the middle of a week. Inventory works the same way: set the reorder point from lead time and how fast you sell. A dangerously low balance can be common, so history isn't a safe guide here.

    A variation band comes from how much a number normally moves. It suits performance numbers, such as inquiries, conversion rate, gross margin, or on-time delivery. I set these from the business's own history. I look at how much each metric actually moved over the last six to twelve months. Movement inside that normal range I treat as noise. Movement outside it means something changed. And I set the band metric by metric, because metrics differ.

    The numbers below are made up to show why. Take two metrics from the same business.

    Weekly website inquiries Gross margin
    Normal range over 12 months 38 to 58 a week 41% to 43%
    Midpoint 48 42%
    A flat 10% rule fires when it falls below 43.2 37.8%
    Reading that should get attention Well outside the range, such as 20 38%

    A 10% rule would alert on a perfectly normal week of 40 inquiries, which sits 17% under the midpoint but inside the usual range. It would stay silent when gross margin falls to 38%, because that is only 9.5% below 42%. Yet at $80,000 of monthly revenue each margin point is worth $800, so four points is $3,200 a month, or $38,400 a year if it lasted. Same rule, two wrong answers.

    Two cautions apply. First, a steady drift that stays inside the band is still a trend, so keep watching it on the scorecard. Second, if you have no history yet, start with a rough band from your judgment and revise it after a quarter of real data. A first guess is fine as long as you replace it.

    What a Good Alert Says

    An alert that only states a number leaves the work to whoever reads it. Make every alert carry four things:

    1. The condition, in plain words.
    2. The context: how far off, and compared with what.
    3. The owner: one named person or role.
    4. The action and the deadline.

    This is the same conversation a good reporting meeting has: what the numbers mean, who will act on them, and by when. Compare two versions of the same alert.

    Weak: Cash is low.

    Strong: Projected ending cash for the week of Nov 2 is $24,000, which is $6,000 under the $30,000 minimum. Owner: office manager. Next step: confirm which customer payments are due before Nov 2 and follow up on any overdue ones. Report back by Friday noon.

    The strong version needs no meeting to decide who does what. The weak one starts a discussion about whether anyone should worry. The example is made up. In your own alerts, the owner should be a person or a role someone actually holds, not a shared inbox.

    When Silence Is the Problem

    A quiet inbox is weak evidence. It can mean everything is fine, but it can also mean the data stopped arriving, the monitor stopped running, or an alert is already active and is staying quiet on purpose. Keep three questions separate.

    1. Is the data fresh? Did the source refresh recently, with valid values? Use a timestamp for the last successful refresh, not the date of the latest transaction, which can be old for a good reason when nothing happened. A formula like TODAY() or a header with a forecast date doesn't prove anything about freshness.
    2. Is the monitor working? Did the check run recently, and did the message get out? A check inside the job that stopped can't announce that the job stopped. Use a separate backup check, such as a heartbeat message that should arrive and gets noticed when it doesn't. Set its cadence to the risk. Platform failure notifications help with runs that fail, but a missed-run check is needed for a job that never starts.
    3. Is the condition still active? A good alert system sends one message when a number crosses a line, then stays quiet while it remains crossed. No new message can therefore mean a problem that's already been reported, not a healthy number. Know which alerts are active and who has acknowledged them.

    In a spreadsheet, a cell that records when the last successful refresh happened, with a rule that complains when it's too old, is a reasonable design idea. Treat it as a suggestion to try, not a tested recipe.

    Plan for Known Noise

    Some movement is expected and planned: a promotion that lifts inquiries for two weeks, a seasonal slowdown, a price change, a holiday closure. If an alert keeps firing for a reason everyone already knows, people start ignoring it for that reason and then for the next one.

    Handle planned events deliberately, and be careful about which alerts you loosen. For performance numbers, write down the event, the dates, and the temporary band, and name the person who restores the original line. Don't switch off protections for cash, stock, outages, or safety just because the condition is expected. If you have to pause a critical alert, name another way someone will keep watching it and put the restore date on the calendar. A temporary exception with no end date quietly becomes a permanent blind spot.

    Repeated alerts have remedies besides moving the line. For performance alerts where a short delay is safe, require the number to stay across the line for a few checks before it fires. Keep urgent hard-limit warnings prompt. Send one message per problem, not one per check. Let the owner acknowledge it, and escalate to a backup if nobody does. The Google SRE book's chapters on monitoring and practical alerting describe persistence, deduplication, and routing for engineering teams. The owner-and-backup response rule here is a proposed small-business routine.

    Choose the Channel by Urgency

    Match the channel to how fast the response has to be.

    • Email suits checks you want a record of and can act on within the day, such as a morning cash check. It's easy to file and to find later.
    • Team chat suits events a group handles together, such as a new qualified lead that someone needs to pick up.
    • Text message or phone push suits emergencies where you'd want to be interrupted, such as a payment system going offline. If texts fire often, find out why. Either the lines are wrong, or a real problem keeps happening and needs fixing.

    Decide what happens when no one responds. A simple rule is enough: if the owner hasn't acknowledged it by a stated time, the message goes to a named backup. This is also how you tell a missed alert from an unnecessary one.

    Review the List Regularly

    Alert lists need pruning, but pruning is not the same as deleting whatever gets ignored. A quarterly review is a reasonable routine for a small business, not a rule from any standard. Go through each alert and ask three questions.

    1. Did it fire? If not for a long time, is the condition still a real risk? A quiet alert may be doing its job, or it may be watching something that no longer matters.
    2. When it fired, did the owner act before the alert's own deadline? Compare the response with the deadline you set for that risk, not with a universal one. If they didn't act, find out why. The owner may not have seen it, the message may not have been delivered, nobody may have been named, there may be no backup, or the action may not have been possible. Fix that cause. Retire the alert only if the condition no longer needs a timely response, another alert already covers it, or it was only ever information.
    3. Did anyone say it was noisy? Find out what kind of noise it was before you change anything. It could be a real problem that keeps recurring, bad data, the same message sent twice, a number crossing the line and back again within minutes, a message that doesn't say what to do, or the wrong recipient. Move the line outward only when the number's own history supports it, and only for performance numbers. If the breach is real and repeats, that's an operational problem to solve, not a threshold to loosen.

    Keep the list in one place with one row per alert, so the review takes minutes instead of an afternoon.

    Number Line Owner Action Channel
    Projected cash Below the cash floor (payroll plus other dated payments) Office manager Chase receivables Email
    Gross margin Below its 12-month range Operations lead Review job costs Email
    Payment system Offline Owner Switch to backup Text

    The rows are examples. Yours should be short enough that the owner can name every alert from memory.

    Frequently Asked Questions

    How many alerts should a small business have?

    As few as you can defend. A handful is plenty for most small businesses. If you can't say who acts on an alert and what they do, it doesn't belong on the list yet. Either name the owner and action, or move the number to the scorecard.

    Should I alert on a percent change or on a level?

    It depends on the number. Use a level, a hard limit, for cash, stock, and anything with a real floor. Use a variation band for performance numbers that move up and down on their own. A flat percentage for everything is the version most likely to be wrong.

    What if I don't have 6 to 12 months of history?

    Start with a rough band, mark it as provisional, and replace it once you have a quarter of data. Don't wait for perfect history before setting up the few alerts that guard a hard limit.

    How do I set one up in a spreadsheet?

    How to set up automatic alerts in Google Sheets covers the mechanics. This article is about deciding which alerts deserve to exist.

  • How to Set Up Automatic Alerts in Google Sheets

    Google Sheets can email you when something changes, and there are three ways to set it up. Notification settings email you when someone else edits the sheet or submits a form. Conditional notifications email you when a cell changes to a value you choose, but only on certain work or school accounts. A short Apps Script can watch a calculated number, such as the lowest projected cash balance, and it runs on personal and Google Workspace accounts, subject to your permissions and any administrator settings. Start with the simplest method that does the job.

    Decide What the Alert Is For First

    An alert is a message that asks someone to do something. If nobody knows what to do when it arrives, it becomes noise, and people learn to ignore it. Before you set one up, write down the number it watches, the level that counts as a problem, who gets the email, and what that person does next. This article covers the mechanics, not which numbers deserve an alert.

    Also try the free option first: a color that shows up when you open the sheet (Method 3). An email makes sense when nobody opens the sheet often enough to notice the color.

    Method 1: Turn On Notification Settings for Edits and Form Submissions

    This is the built-in option for knowing that something happened in a shared sheet. It needs no code and no special account. The setting applies to you only, and it doesn’t notify you about your own edits.

    1. Open the sheet.
    2. Click Tools, then Notification settings, then Edit notifications.
    3. Under “Notify me when,” choose Any changes are made or A user submits a form.
    4. Under “Notify me with,” choose Email – daily digest or Email – right away.
    5. Click Save.

    Use “right away” when someone is waiting on the update, such as a lead form that a salesperson should answer the same day. Use the daily digest for a sheet your team edits constantly.

    The limit is that these notifications tell you a change happened. They don’t read what the change was, so they can’t tell you that cash dropped below $10,000 or that a stock count hit zero.

    Method 2: Conditional Notifications on Certain Work or School Accounts

    Conditional notifications email you when a cell’s value changes to something you specify. Google says the feature is available only to certain work or school accounts, so a personal Gmail account won’t see it. If your menu has it, setup takes a minute:

    1. Click Tools, then Conditional notifications. You can also right-click a cell.
    2. Click Add rule.
    3. Under “In this column,” pick a column or a custom range.
    4. Click Add condition and set the test, for example, Text is exactly “Completed.”
    5. Under “Then take the following action,” type the email addresses or choose a column that contains them.

    This works well for a status column. A rule on the “Status” column can email the account manager when a row changes to “Overdue.”

    Know the limits before you rely on it:

    • You can add individual Gmail or Google Workspace addresses. Group addresses and non-Google addresses such as Outlook or Yahoo aren’t supported.
    • Emails may not be immediate, and several changes can be combined into one email.
    • Volatile functions recalculate with any change to the sheet, so you may miss changes they produce, especially while the file is closed. Changes that come from outside sources such as Connected Sheets or other documents don’t trigger rules.
    • A change in how a value is formatted (decimal places, for example) doesn’t count.

    If your account doesn’t have the feature, or you need to check a number that’s calculated across a row, use Method 4.

    Method 3: Color the Cell So the Problem Shows Up When You Open the Sheet

    Conditional formatting is not an email, but it takes two minutes and works on every account. For many sheets, it’s enough.

    For the 13-week cash flow tracker, where ending cash is in B14:N14 and the minimum is in A17:

    1. Select B14:N14.
    2. Click Format, then Conditional formatting.
    3. Under “Format rules,” choose Custom formula is and enter =B14<$A$17.
    4. Set a soft red fill with dark red text. Skip the neon colors; people stop seeing them.

    The same approach works for inventory below a reorder point, or a receivable past due: pick the cells, choose Less than or a custom formula, and point it at the cell that holds your limit. The color catches the problem when someone opens the sheet. If you need to be told when no one has opened it, go to Method 4.

    Method 4: Email an Alert With a Short Apps Script

    Apps Script is Google’s built-in scripting tool for Sheets. It’s included with personal and Google Workspace accounts, subject to your account’s permissions and any restrictions your administrator sets on a work account. The script below checks the projected ending cash for all 13 weeks and sends one email when the lowest value falls under your minimum. It’s written for the layout in the cash flow tracker template: a tab named “Cash Flow,” week start dates in B1:N1, projected ending cash in B14:N14, and the minimum cash level in A17. If your sheet is laid out differently, change those references.

    The script is strict on purpose. It needs a real date in every cell of B1:N1, a number in every cell of B14:N14, and a number in A17. If anything else is there, such as an error like #REF!, a blank cell, or text, the script stops with an error message and does nothing else. A broken forecast shouldn’t be mistaken for a healthy one, and it can’t clear a standing alert.

    function checkCashAlert() {
      var lock = LockService.getScriptLock();
      lock.waitLock(30000);
      try {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName("Cash Flow");
        if (!sheet) {
          throw new Error('No tab named "Cash Flow".');
        }
        var weeks = sheet.getRange("B1:N1").getValues()[0];
        var ending = sheet.getRange("B14:N14").getValues()[0];
        var minimum = sheet.getRange("A17").getValue();
    
        if (typeof minimum !== "number") {
          throw new Error("A17 must hold a number: the minimum cash level.");
        }
    
        var lowest = null;
        var lowestWeek = null;
        for (var i = 0; i < ending.length; i++) {
          var column = String.fromCharCode(66 + i);
          if (!(weeks[i] instanceof Date) || isNaN(weeks[i].getTime())) {
            throw new Error(column + "1 must be a date.");
          }
          if (typeof ending[i] !== "number") {
            throw new Error(column + "14 must be a number, but it holds: " + ending[i]);
          }
          if (lowest === null || ending[i] < lowest) {
            lowest = ending[i];
            lowestWeek = weeks[i];
          }
        }
    
        var props = PropertiesService.getScriptProperties();
        var alreadyAlerted = props.getProperty("CASH_ALERT_ACTIVE") === "true";
    
        if (lowest < minimum) {
          if (!alreadyAlerted) {
            var weekText = Utilities.formatDate(lowestWeek, ss.getSpreadsheetTimeZone(), "MMM d, yyyy");
            MailApp.sendEmail(
              "you@yourcompany.com",
              "Cash alert: projected balance falls below your minimum",
              "The lowest projected ending cash is $" + lowest.toLocaleString() +
              " in the week starting " + weekText + ". Your minimum is $" +
              minimum.toLocaleString() + ".\n\n" + ss.getUrl()
            );
            props.setProperty("CASH_ALERT_ACTIVE", "true");
          }
        } else if (alreadyAlerted) {
          props.deleteProperty("CASH_ALERT_ACTIVE");
        }
      } finally {
        lock.releaseLock();
      }
    }
    

    To install it:

    1. In your sheet, click Extensions, then Apps Script.
    2. Delete the sample code and paste the script.
    3. Change the tab name ("Cash Flow"), the ranges, and the email address to match your sheet.
    4. Click Save project.
    5. Select checkCashAlert in the function dropdown and click Run.
    6. A box titled “Authorization required” appears, with Cancel and Review permissions buttons. Click Review permissions. Google then opens a separate window where you choose your account and approve access. The script reads your spreadsheet and sends email as you, so expect those two permissions to be listed. Read them before you approve. For a script you wrote or pasted yourself, Google may also warn that the app isn’t verified. After you approve, the run finishes and the execution log at the bottom shows “Execution completed”.

    What the Script Does

    The script first locks the sheet so two runs can’t overlap, then checks the sheet. It finds the lowest ending cash and the week it falls in, and compares that number with your minimum.

    If the lowest number is under the minimum, it sends one email that names the amount, the week, and the sheet link. The week is shown in the spreadsheet’s time zone. It also saves a flag called CASH_ALERT_ACTIVE. While the flag is set, the script stays quiet, so you don’t get the same email every morning while cash stays low. When the lowest number is back at or above the minimum, the script clears the flag, and the next breach sends a new email. If the email can’t be sent, the flag isn’t set, so the next run tries again.

    A quiet script is not proof that cash is fine. The script watches weekend balances only, so a balance that dips below your minimum in the middle of a week and recovers by the weekend won’t trigger it. Use it with the dated payment list described in the cash flow tracker article.

    Test it before you trust it, and don’t schedule anything until the test passes. The test changes your minimum on purpose, so either do it in a copy of your sheet (File, then Make a copy, and check that the script came along under Extensions, then Apps Script; if it didn’t, paste it in again) or write down your real minimum first and put it back at the end.

    1. Write down the number in A17. In any empty cell, enter =MIN(B14:N14) to see your lowest projected ending cash. Call that number L, then delete the cell.
    2. Healthy state. Set A17 to L. Run the script. Nothing should arrive, because a balance equal to the minimum is not a breach. This also clears any alert the script remembered from before.
    3. Breach. Set A17 to a number above L, such as L plus 1,000. Run the script. The email should arrive and name the lowest amount and its week.
    4. Suppression. Run the script again. No second email should arrive.
    5. Recovery and re-breach. Set A17 back to L and run the script, which clears the alert. Set A17 above L again and run it. A new email should arrive.
    6. Bad data. Click one ending cash cell and copy its formula from the formula bar to a safe place. Replace the formula with a word and run the script. It should stop with a red error in the execution log, such as “J14 must be a number, but it holds: oops”, and send nothing. A real error value such as #REF! is reported the same way. Then paste the original formula back, confirm the numbers return, and run the script again to confirm it works.
    7. Put it back. Set A17 to the real minimum you wrote down in step 1 and run the script once more. If your real forecast is below that minimum, the alert stays active; an email is sent only if the flag is not already set.

    Schedule the Script So It Runs Without You

    A script that you have to run by hand isn’t an alert. Set a trigger so Google runs it on a schedule:

    1. In the Apps Script editor, click the Triggers icon (the clock) on the left.
    2. Click Add Trigger (bottom right).
    3. Under “Choose which function to run,” pick checkCashAlert. Leave the deployment on Head.
    4. Change “Select event source” from its default, From spreadsheet, to Time-driven. Set the type of time-based trigger to Day timer and the time of day to 6 am to 7 am. The time zone appears under that choice, for example (GMT-04:00).
    5. Under “Failure notification settings,” change Notify me daily to Notify me immediately, so a run that stops with an error reaches you.
    6. Click Save.

    Google runs the script at some point inside the window you pick and keeps that time consistent from day to day. The window follows the script project’s time zone, which you can see in the trigger dialog and change under Project Settings, in the Time zone box. Your spreadsheet has its own time zone, and the two can differ. The alert email shows the week’s date in the spreadsheet’s time zone.

    A trigger runs as the account of the person who created it. Create it from the account that should own the alert, and recreate it if that person leaves.

    A once-daily check has a blind spot. If a breach starts and ends between two checks, you won’t hear about it. You can add an On Edit trigger to run the check whenever someone changes a cell by hand. It responds to edits made by people, not to changes made by scripts or other programs, and the lock keeps the two triggers from sending duplicate emails. This script checks the cash minimum only; it isn’t a general tool for alerting on text statuses.

    Keep Alerts from Becoming Noise

    Three habits keep an alert useful.

    Latch the alert. The script above sends an email only when the number crosses into a problem, and stays quiet until it recovers. A script that emails every morning while the number stays low trains you to ignore it. The limit of the latch is that cash can keep falling after the first email without a second one, until it recovers above the minimum and falls again. Name one person who owns the follow-up, and what they do when the email arrives.

    Choose the line for the right reason. A cash minimum isn’t a statistical band. Set it from what’s coming: the payroll and fixed payments due in the next few weeks, and how quickly you could collect or borrow if you needed to. For performance numbers such as inquiries or conversion rate, a different rule works. Look at how much the number has moved over the last six to twelve months, treat movement inside that range as ordinary, and set the line outside it. Do this for each number separately, because each moves differently.

    Mind your limits. Google caps how many email recipients an account can send to in a day: 100 on a personal Gmail account and 1,500 on a Google Workspace account, according to Google’s Apps Script quotas, which can change. A morning check that emails one person uses one recipient. These limits are shared across everything the account does with Apps Script, and trial accounts can have lower limits.

    When the Alert Doesn’t Arrive

    A missing email doesn’t prove the numbers are fine. Check these in order:

    • The trigger exists. Open the Triggers page in Apps Script and confirm the entry is there.
    • The script ran. Open the Executions page and look for a run at the expected time. Each row shows whether it was started from the editor or by a time-driven trigger, and whether it completed or failed. A run that stopped on bad data shows as Failed, with the error message the script threw, such as which cell isn’t a number.
    • The names still match. If you renamed the tab or moved the rows, the script stops with an error. Update the references.
    • The sheet has errors, blanks, or text where numbers or dates belong. The script stops and doesn’t email. Fix the cells it names.
    • The email went to spam. Check the spam folder, then mark the message as not spam.
    • The flag is stuck. If the script thinks it already alerted, it stays quiet until the forecast recovers. You can see the flag under Project Settings, in the Script Properties list: CASH_ALERT_ACTIVE with the value true. To reset it, set A17 to your lowest ending cash or below, run the script once, then restore A17 (steps 2 and 7 of the test above).

    When Paid Automation Tools Are Worth It

    Native tools cost nothing, so use them until they stop being enough. Paid automation services make sense when one event has to update several apps at once, such as texting a manager, creating a CRM record, and posting to a team channel. They also make sense when non-technical people have to build and change rules themselves, or when your volume goes past the daily email limits. Prices change, so check current plans before you commit. How much a small business should spend on data tools covers the spending decision.

    Frequently Asked Questions

    Can I set up Google Sheets alerts on a personal Gmail account?

    Yes, with notification settings (Method 1) and Apps Script (Method 4). Conditional notifications are limited to certain work or school accounts. On a work account, your administrator may restrict scripts.

    Do the alerts work when the sheet is closed?

    A time-driven script trigger runs on Google’s servers whether or not you have the sheet open. Notification settings email you about changes other people make while you’re away.

    Does this cost anything?

    No. Notification settings, conditional formatting, and Apps Script are included with your Google account. They do have limits: you have to authorize the script, Apps Script has daily quotas and runtime limits, and a work account can be restricted by an administrator.

    Do I need to know how to code?

    Not to use this script. You change four things (tab name, ranges, email, trigger) and test it. If you change the layout of your sheet later, update the references too.

  • How to Build a Cash Flow Tracker in Google Sheets

    Build a cash flow tracker as a 13-week grid with one column per week, Monday through Sunday. Each column holds beginning cash, cash coming in, cash going out, net cash flow, and ending cash, and each week’s ending cash becomes the next week’s beginning cash. Start from a real bank balance, enter when you expect money to arrive and leave, and the sheet estimates your balance week by week for the next quarter. It shows which week looks tight while you still have time to act.

    Why a Profitable Month Can Still Leave You Short of Cash

    If your books use accrual accounting, your profit and loss statement records revenue when you earn it, and your bank account changes only when money moves. (Cash-basis books record revenue when it arrives, but cash timing still drives the balance.) The gap between profit and cash is where most cash problems start:

    • A customer invoice counts as revenue when you earn it and may not be paid for 30, 45, or 60 days.
    • Inventory and materials can leave your account before the cost shows up in your books, depending on how your books treat inventory.
    • Loan principal payments and owner draws reduce your cash, and neither is an operating expense on the P&L.
    • Payroll, payroll taxes, and other business tax payments go out on fixed dates that have nothing to do with when customers pay. They need dated entries in the tracker; however, your books record them.

    Accounting software tells you what already happened. A cash flow tracker looks forward and estimates your balance from the timing you enter.

    It also makes collections visible. The most reliable fix for slow payers is contact before an invoice is late: set up receivables so reminders go out, or someone talks to the customer, so you know what will lag and aim to keep invoices from drifting past 60 days. The tracker shows what’s left after you’ve done that.

    Why 13 Weeks

    Thirteen weeks is roughly one quarter, and it’s a common horizon in professional cash forecasting. It’s far enough out to see a problem while you can still act on it. The nearer weeks are easier to estimate and easier to correct each week; the further ones are rougher, which is why you refresh the sheet every week. Weekly columns match how cash moves: payroll, rent, and vendor payments land on specific days within specific weeks.

    Set Up the Sheet

    If you’d rather start from a finished version, copy the template, which has the layout, formulas, and color rules already built with made-up example numbers. To build it yourself, open a blank Google Sheet. Put labels in column A and the 13 weeks in columns B through N. Each column covers one week from Monday through Sunday. Enter every amount as a positive number; the formulas do the subtracting. Use these rows:

    RowColumn A labelWhat goes in each week
    1Week startingThe Monday date
    2Beginning cashLast week’s ending cash
    3Customer paymentsInvoices you expect to be paid that week
    4Card and online salesDeposits you expect from your processor
    5Other cash inAnything else that lands in the bank
    6Total cash inSum of rows 3 to 5
    7Payroll and payroll taxesWages, taxes, and benefits
    8Rent and utilities
    9Vendors and inventoryBills you plan to pay that week
    10Loan and tax paymentsPrincipal, interest, and business tax payments due
    11Owner draws and discretionary purchasesMoney you can choose to move
    12Total cash outSum of rows 7 to 11
    13Net cash flowCash in minus cash out
    14Ending cashBeginning cash plus net cash flow

    Then enter these formulas:

    1. B1: type the date of this week’s Monday. In C1 enter =B1+7 and copy it across to N1.
    2. B2: type your bank balance as of the start of that Monday, meaning the balance after Sunday’s transactions have cleared. In C2 enter =B14 and copy it across to N2. That link carries each week’s ending cash into the next week.
    3. B6: =SUM(B3:B5)
    4. B12: =SUM(B7:B11)
    5. B13: =B6-B12
    6. B14: =B2+B13
    7. Copy B6 and B12 through B14 across to column N.

    Type your minimum cash level in cell A17, with the label “Minimum cash” in A16. The next section explains it.

    If you start in the middle of a week, use your current bank balance in B2 and enter only the money that moves after that moment in the first column. Counting a transaction that has already cleared would count it twice.

    Fill In Cash In by When the Money Lands

    Enter each receipt in the week the money reaches your bank, not the week you send the invoice. If a customer on 30-day terms usually pays on day 45, put the payment in the week that contains day 45. Use how each customer actually pays; their terms only show when they’re supposed to.

    For card and online sales, look at the last eight to thirteen weeks of deposits in your bank export and use a typical week, adjusted for anything you know is coming. The business data you already have includes those exports. For retainers and recurring billing, use the billing date plus however long the money takes to settle.

    When you’re unsure about a payment, put it a week later. An early payment costs you nothing, while an assumed one that doesn’t show up can hide a shortfall.

    Fill In Cash Out by When It Leaves

    List each payment in the week it will leave the account. Include the items that don’t appear as operating expenses on the P&L: loan principal and owner draws. Those are the ones that make a profitable business feel short. Business tax payments and payroll taxes belong in the grid on their due dates, however your books record them.

    Rows 10 and 11 keep two kinds of payments apart. Row 10 holds payments you owe on a schedule: loan payments and tax payments. Payroll and payroll taxes in row 7 and rent in row 8 are also fixed. You generally can’t move any of these on your own. A vendor bill in row 9 moves only if the vendor agrees. Row 11 holds the money you can choose to delay, such as an owner draw or a purchase you can postpone. When a week turns red, row 11 is the first place to look.

    Set a Minimum Cash Level and Let Color Warn You

    Pick a floor: the lowest balance you’re comfortable seeing. One starting point is enough to cover two payroll runs. Set yours by how quickly you could collect or borrow if you needed to. Enter the number in A17.

    Then add two color rules to the Ending cash row:

    1. Select B14:N14 and open Format > Conditional formatting.
    2. Choose “Custom formula is” and enter =B14<$A$17. Set the fill to red.
    3. Add another rule with =AND(B14>=$A$17, B14<1.5*$A$17). Set the fill to yellow.

    Red means projected cash at the end of the week is below your floor. Yellow means it’s within 50% above it.

    What the Colors Can’t See

    These rules check each week’s ending balance only. A week can end above your floor and still dip below it in between. Say a week starts at $34,000 and your floor is $30,000. Payroll takes $15,000 out on Tuesday, and an $18,000 customer payment arrives on Friday. The Tuesday balance is $19,000, which is $11,000 under the floor, but the week ends at $37,000 and shows yellow rather than red. The weekly color does not reveal how low cash fell on Tuesday.

    For any yellow week, and any week with a large payment before a large receipt, list the dated payments and receipts for that week on a separate tab, or build a day-by-day view, before you schedule payments. The weekly grid shows you where to look.

    A Worked Example

    The numbers below are made up. A business starts week 1 with $42,000 in the bank and sets its minimum at $30,000. It pays $15,000 in payroll and taxes every other week, and rent of $8,000 comes out in weeks 1 and 5.

    Wk 1Wk 2Wk 3Wk 4Wk 5Wk 6
    Beginning cash$42,000$34,000$43,000$34,000$39,000$24,000
    Total cash in$18,000$15,000$13,000$14,000$12,000$11,000
    Total cash out$26,000$6,000$22,000$9,000$27,000$5,000
    Net cash flow-$8,000$9,000-$9,000$5,000-$15,000$6,000
    Ending cash$34,000$43,000$34,000$39,000$24,000$30,000

    Week 5 turns red. Payroll and rent land in the same week while cash in is the lowest it’s been, and the balance ends $6,000 under the minimum. Standing in week 1, that’s four weeks of notice. Weeks 1 through 4 and week 6 are yellow, and week 6 sits exactly on the floor.

    Four weeks is enough to do something, and the sheet shows what each change does. Asking a vendor to move a $4,000 bill from week 5 to week 6 lifts week 5 to $28,000, which is still $2,000 short. Week 6 falls to the same $30,000 as before, because the bill was delayed, not removed. Pairing the delay with a $2,000 customer payment that you pull in from week 6 to week 5 brings week 5 to exactly $30,000. Nothing in the P&L would have flagged this.

    Update It Every Week

    Pick Monday morning. It takes about 15 minutes, and Monday is when last week is over, and your opening balance is clear.

    1. Duplicate the tab and rename the copy with the date. You’ll use the copies later to compare what you forecast with what happened.
    2. In the live tab, delete the column for the week that just ended (right-click column B, then Delete column). The dates, beginning cash, and ending cash rows will show #REF! across the sheet until you finish the next step.
    3. Type this week’s Monday date in B1 and the bank balance at the start of that Monday in B2. The errors clear, and every week recalculates.
    4. Copy the last column into the next one to add a new week 13. The color rules come along with the pasted column. Then update its amounts.
    5. Revise the next four to eight weeks with whatever you’ve learned: paid invoices, new bills, changed plans.
    6. Look at the colors. If a week is red or yellow, pick one action and a date to take it.

    If you update midweek, don’t delete the current week. Change the amounts you now know and leave the structure alone.

    Mistakes That Make a Cash Flow Tracker Useless

    • Using invoice dates instead of payment dates. This is the most common one. It makes the forecast look healthier than your bank account will.
    • Leaving out cash that never touches the P&L. Loan principal and owner draws are the usual ones.
    • Counting a transaction twice. If you start from today’s bank balance, leave out the money that has already moved.
    • Not updating it. A tracker you refresh every week is worth more than a detailed one you rebuilt once.
    • Treating the forecast as exact. Round to the nearest hundred. The goal is to see which week gets tight, not to predict the penny.

    How Long to Stay in a Spreadsheet

    Stay in Google Sheets until it stops being enough. A sheet like this handles a small business well, and Google Sheets supports several people editing the same file, so shared access alone is no reason to leave. Look at other tools when you hit a specific problem the sheet doesn’t solve, such as pulling bank and accounting transactions in automatically across many accounts or entities, or meeting review and control requirements that a shared spreadsheet can’t. Until then, a disciplined sheet you update every week will do more than software you don’t use.

    Color alone won’t email you. If you want a message when a week goes red, that’s a separate setup. It needs Google’s conditional notifications, which are available only on certain work or school accounts, or a short Apps Script, and both have limits.

    Frequently Asked Questions

    Does a cash flow tracker replace my accounting software?

    No. Accounting software records what happened and produces your P&L and balance sheet. The tracker looks forward at cash timing. You use your accounting records to fill it in.

    How accurate does the forecast need to be?

    Accurate enough to tell you which weeks are tight. Round amounts, put uncertain receipts later, and update weekly. The weeks closest to today will be the most reliable.

    Do I need a template?

    No. The layout above takes about 45 minutes to build, and building it yourself means you know what every row does. If you’d rather not, copy the template and replace the example numbers with yours.

  • How to Build a Monthly KPI Scorecard

    Build it in the spreadsheet you already use. Put four to seven metrics on a Scorecard tab that shows, for the current month, the target, the actual, the variance, and a green, yellow, or red status. Keep the twelve-month history on a Trend tab, calculations on a Data tab, and each raw export on its own import tab. Start targets from your own recent history, and update the sheet the same way every month after the books close.

    That is the whole design. Most of the work is in the decisions behind each cell: which metrics earn a row, what counts as on target, and how the numbers get in without someone retyping them.


    What a Monthly Scorecard Is For

    A scorecard answers one question each month: is the business on track, and if not, where? It is not your accounting system and it is not a report. It is a single view that someone can read in a minute and act on.

    That purpose sets the rules:

    • Four to seven metrics. My rule of thumb, depending on the business, is four to seven, and no vanity metrics. Each one has to move the needle: when it changes, someone makes a decision. How Many KPIs Should a Small Business Track? covers how to choose them.
    • One screen. The Scorecard tab fits on a laptop screen without scrolling sideways. If it doesn’t, you have too many metrics or too many columns. The full history lives on another tab.
    • Metrics in rows, in the same order on every tab. Row 6 is the same metric on the Scorecard and the Trend tab, which keeps formulas simple to copy.
    • Every number has a comparison. A figure with no target beside it doesn’t tell anyone whether to act.

    Use Google Sheets if your business runs on Google Workspace, and Excel if it runs on Microsoft 365. My view is that a small business should stay with the tools it already pays for as long as they do the job, and a monthly scorecard is well within what either can do.


    Step 1: Choose the Rows

    Group the metrics so the sheet reads in a consistent order. A practical split for most small businesses:

    • Money (two or three rows): revenue, gross margin, operating cash flow.
    • Operations or capacity (one to three rows): billable utilization for a service firm, first-pass yield for a shop, jobs completed for a trade business.
    • Customers and pipeline (one or two rows): qualified pipeline value, on-time delivery, customer retention.

    Pick from these, don’t take all of them. If you already track seven metrics and want an eighth, one of the seven should go. For service-business examples with formulas, see KPIs for a Small Professional Services Firm.

    For each metric, write down four things before you build anything:

    • Definition, including where the number comes from.
    • Unit: dollars, percent, days, or count.
    • Direction: whether higher or lower is better. Revenue is better high. Days sales outstanding is better low. The sheet needs to know the difference, or it will color a collections problem green.
    • Type: a flow, a ratio, or a point-in-time figure. This decides how year-to-date is calculated in Step 3.

    Step 2: Lay Out the Tabs

    Build the workbook in layers, so the tab people read never touches raw data.

    Scorecard tab. This is what people read. A header block at the top holds the company name, the reporting month, the date last updated, and who updated it. Put the reporting month in its own cell (say, B2), because the formulas will use it. Below that, each metric gets one row:

    ColumnContents
    AMetric name
    BOwner
    CUnit ($, %, days, count)
    DDirection (higher or lower is better)
    EThis month’s target
    FThis month’s actual
    GVariance
    HStatus (green, yellow, red)
    IYear-to-date actual
    JYear-to-date target

    Ten columns fit on one screen. If a comparison with the same month last year matters in your business, add it after F, as long as the tab still fits.

    Trend tab. The same metric rows, with January through December in columns C through N and the month names in row 5. This is where people look when they want to know whether this month is a blip or a trend. Below the metric rows, keep the components that ratios need, such as monthly gross profit and revenue, or billable and available hours.

    Data tab. Calculations only. Each metric’s monthly value is calculated here from the import tabs, in a labeled block. Nobody pastes anything onto this tab.

    Import tabs. One tab per source: accounting, CRM, time tracking. Each month, the owner clears the tab and pastes that source’s standard export into cell A1. Nothing is typed or calculated on an import tab, so a longer or shorter export can’t overwrite a formula. On the Data tab, refer to whole columns or use lookups by label, so the calculations still work when the export has more rows than last month.


    Step 3: Add the Formulas

    These formulas behave the same way in Google Sheets and Excel. The examples use row 6.

    Pull this month’s actual. Rather than retyping, have column F on the Scorecard look up the month named in B2 from the Trend tab. The month in B2 has to be spelled exactly as it is in the Trend headers. With the month names in C5:N5:

    =INDEX(Trend!C6:N6, 1, MATCH($B$2, Trend!$C$5:$N$5, 0))

    The 1 tells INDEX to stay in the first (and only) row of the range, and MATCH supplies the column. Change B2 next month and every row updates.

    Calculate the variance. For dollars and counts, use the percentage difference from target:

    =(F6-E6)/E6

    For metrics that are already percentages, such as gross margin or utilization, use the difference in points instead:

    =F6-E6

    The two give different impressions. A margin target of 42% against an actual of 38.5% is 3.5 points below target, which is also 8.3% below it. “3.5 points” is the figure most people understand when they read a margin. Pick one convention per metric, label it, and keep it.

    Flip the sign for lower-is-better metrics. If D6 says “lower,” multiply the variance by −1 so that a negative number always means worse:

    =IF(D6="lower", -1, 1) * (F6-E6)/E6

    Handle zero targets. A percentage variance divides by the target, so a target of zero, such as zero overdue invoices or zero safety incidents, returns an error. Track those metrics in units instead: the variance is simply the count. Give that row its own status rule, for example =IF(F6="", "No data", IF(F6>0, "Red", "Green")), in place of the band formula in Step 5. Give “No data” a neutral style so a missing actual is never shown as Green.

    Calculate year-to-date by metric type. Averaging twelve monthly figures is right for almost nothing. Use the type you wrote down in Step 1:

    • For flows such as revenue, jobs completed, or operating cash flow, sum the months.
    • For ratios such as gross margin, utilization, or on-time delivery, recompute them from the summed components. Year-to-date margin is total gross profit divided by total revenue; year-to-date utilization is total billable hours divided by total available hours.
    • Point-in-time figures such as pipeline value, days sales outstanding, or cash balance: use the latest month-end value, or another method you define and write down.

    Retention depends on how you define it, so write the year-to-date rule into its definition. The year-to-date target follows the same rule as the actual.

    The ratio difference is real. Suppose January brings in $50,000 at a 40% margin ($20,000 gross profit) and February brings in $100,000 at 30% ($30,000). The average of the two percentages is 35%. The actual year-to-date margin is $50,000 ÷ $150,000, or 33.3%, because February’s larger month counts for more.


    Step 4: Set Targets, Starting From Your Own History

    A target picked because it sounds good gets ignored after the first miss. Start from what the business has actually done, then decide what it should do.

    1. Find a baseline. The trailing three-month average is a reasonable starting point, because recent months reflect your current staff, prices, and customers. If your business is seasonal, look at the same month last year as well.
    2. Turn the baseline into a target. Check it against your budget, your capacity, commitments you’ve already made, the season, and any improvement you’re planning. A baseline built from weak months will simply repeat them if you adopt it unchanged.
    3. Write down the reason for any difference between baseline and target, so the target can be explained later.
    4. Round to a number people can remember.

    Here is an example, not a client case. A business had revenue of $78,400 in June, $81,200 in July, and $76,900 in August. The three-month baseline is about $78,800. September is usually similar to the summer months; nothing unusual is planned, and the budget agrees, so the target is set at $79,000. September comes in at $72,600, which is $6,400 short, or 8.1% below target.

    Whether 8.1% is a problem depends on the band you set.


    Step 5: Set Tolerance Bands

    A tolerance band says how far a metric can move before anyone needs to act. Without one, every small dip gets discussed, and the meetings lose their point.

    I set bands from the business’s own history. I look at how much each metric actually moved over the last six to twelve months. Movement inside that normal range I treat as noise. Movement outside it means something changed. One caution: several months drifting the same way inside the band is still a trend, which is why the Trend tab matters.

    I also set them metric by metric, because metrics don’t behave the same way. A 5% miss on gross margin can be serious, while a 5% dip in inquiries may be an ordinary month.

    If you don’t have enough history yet, you still need a placeholder. There is no standard band. As a rough starting point, not a hard rule, some businesses could begin with something like:

    • Green: within 5% of target, or better.
    • Yellow: 5% to 15% worse than target.
    • Red: more than 15% worse than target.

    Replace it with bands from your own data once you have a few months. On that sample starting point, the September revenue example above (8.1% below) is yellow. A days sales outstanding target of 45 days against an actual of 52 is 15.6% worse, so it’s red.

    To fill the Status column, add a formula that returns a word:

    =IF(G6>=-0.05, "Green", IF(G6>=-0.15, "Yellow", "Red"))

    Then add three conditional formatting rules to column H: text is exactly “Green,” “Yellow,” or “Red.” Use the word as well as the color so the status still reads correctly in a printout or for anyone who has trouble telling the colors apart. Keep the rest of the sheet in neutral tones so the color means something when it appears.

    For percentage metrics tracked in points, the formula compares against point thresholds instead, for example −1 and −3 points. Record the band for each metric in a note on the Data tab so nobody has to guess later why margin turned red at a smaller miss than revenue did.

    A red status should trigger a short note from the metric’s owner: what happened, what it means, what we’ll do, and who does it by when. How to Get Your Team to Actually Use Your Reports covers that note and the meeting around it.


    Step 6: Update It the Same Way Every Month

    A scorecard that takes an afternoon to update gets skipped within a few months. If the update drags, the problem is usually how the data gets in, not the scorecard.

    Here is an example routine for a business that finishes its month-end bookkeeping within the first few business days. Adjust the days to your own close.

    1. Books closed. Wait until the month’s transactions are reconciled. Numbers pulled earlier will change, and the scorecard will disagree with your accounting.
    2. Exports in. Each metric owner clears their import tab and pastes the same standard export into cell A1. Save each export with the same filters and date range every month, and write those settings down.
    3. Record the month. Copy the Data tab’s results into that month’s column on the Trend tab using paste values, so next month’s imports don’t change them.
    4. Review. Change the reporting month in B2. Check the status column, then check that two or three headline figures match your accounting system before anyone else reads the sheet.
    5. Lock the month. Protect the finished month’s column on the Trend tab so nobody edits it by accident. In Google Sheets, use Protect sheets and ranges. In Excel, lock the cells and turn on Protect Sheet.

    When numbers do disagree, don’t adjust the scorecard to make them match. Find the cause. Revenue that differs between your payment processor, your bank, and your books usually has an ordinary explanation: payout timing, processor fees, or a different cutoff date. The Business Data You Already Have explains why those sources rarely line up.


    Monthly Scorecard Checklist

    • Four to seven metrics, each with a written definition, unit, direction, and type.
    • One owner per metric.
    • A Scorecard tab that fits on one screen, with a Trend tab, a Data tab, and one import tab per source behind it.
    • This month’s target, actual, variance, and status in adjacent columns.
    • Year-to-date figures calculated by type: flows summed, ratios recomputed from components, point-in-time figures taken at month end.
    • Targets that start from a baseline and account for budget, capacity, and season, with adjustments written down.
    • A tolerance band for each metric, and a separate rule for any metric with a zero target.
    • A written monthly routine, with each finished month recorded as values and locked.

    Frequently Asked Questions

    Should the scorecard be weekly or monthly?
    Both can exist. Weekly suits operating numbers people can act on quickly. Monthly suits numbers that only settle after the books close, such as margin and cash flow. Build the monthly scorecard first if your accounting only closes monthly.

    Can I download a template instead?
    Yes, if it’s close to what you need. Check that it lets you set your own four to seven metrics, keeps raw data away from the results, and uses formulas you can follow. If you’d have to delete most of it, building the tabs yourself may be simpler. Either way, make sure you understand every formula before something breaks.

    When should the scorecard move out of a spreadsheet?
    When the spreadsheet becomes the hard part: refreshing the data takes more time than acting on it, different people need different access, you need a record of who changed what, the data volume slows the file down, or keeping it working has become a job of its own. Until then, a spreadsheet is easier to change as you learn which metrics matter.

  • The Business Data You Already Have (No New Tools)

    Your business probably already generates records in five places: accounting software, payment or POS systems, banking, scheduling tools, and Google Business Profile. Depending on the platform and permissions, those records may reveal unpaid invoices, customer concentration, transaction patterns, cash timing, booked capacity, and local-search demand. You can test many in a spreadsheet without buying analytics software, although not every system provides a clean spreadsheet file or every field required for every metric.

    If you run a small business, you have probably been told that getting value from data starts with new software: a dashboard subscription, a data warehouse, or an integration service. For most businesses with two to 25 employees, that is the wrong starting point.

    The records already exist. Each time you send an invoice, run a card, clear a deposit, book an appointment, or get a call from your Google listing, a system you already use stores a date, an amount, and often a customer or status. The first job is not buying a tool. It is learning what those records contain, how to get them out, and which questions they can honestly answer.


    What Business Data Do I Already Have Without Buying New Tools?

    Your business already generates or controls access to financial, sales, scheduling, and customer-demand records. What you can learn from them depends on the fields, history, permissions, and export options each source provides.

    Business data usually shows up in one of three forms:

    1. Dashboard summaries: The charts and totals on your software's home screen. They are useful for a quick check, but the numbers are already added up, so you cannot see which invoices, days, or customers drove them.
    2. Record-level reports and exports: Files where each row is one transaction, invoice, appointment, or interaction. This is usually the best starting point, because you can sort, filter, and total the rows yourself. They are often downloaded as a CSV (a plain-text file of rows and columns that any spreadsheet opens) or an Excel file.
    3. Portable archives: Backup or transfer formats such as Google Calendar's .ics files. They preserve the records, but they open as raw text in a spreadsheet and need conversion before analysis.

    The table below covers the five sources most small businesses already use.

    The Existing Data Inventory Matrix

    Source Category Example Records Three Questions It May Answer Example Export Path & Format Important Limitation
    Accounting and invoicing Invoices, payments received, customer balances, vendor bills, expenses 1. Who owes us money, and how overdue is it?
    2. How much of our sales come from our largest customers?
    3. Which vendor costs have changed over the past year?
    QuickBooks Online: Reports → Standard reports → open a report (e.g., A/R Aging Summary or Sales by Customer Detail) → Export/Print → Export as CSV or Excel Report availability and customization vary by subscription and interface version.
    Payment processor or POS Transactions, items sold, refunds, fees, timestamps 1. What is our average transaction value by day of the week?
    2. Which hours bring in the most sales?
    3. How much do refunds and processing fees take each month?
    Stripe: Reporting → Financial reports → Balance summary → Download (CSV)
    Square: Reports → select report → export icon (CSV)
    Some Square reports cannot be exported. Repeat-customer analysis requires a stable customer identifier (an ID that stays the same across visits).
    Online banking Deposits, withdrawals, descriptions, balances 1. When does cash actually arrive?
    2. Which charges recur every month?
    3. Do deposits line up with processor payouts?
    Chase Connect (example only): Account Activity → Download Options → CSV, PDF, or Excel Paths, formats, and history limits vary by bank and account. Bank activity shows cash movement, not revenue or profit.
    Scheduling or booking Appointment start and end, creation time, invitee status, service type 1. How far ahead do customers book?
    2. How many hours are booked each week?
    3. Where do cancellations cluster?
    Google Calendar: Settings → Import & export → Export (ZIP file of .ics files) Not spreadsheet-ready, and permissions or an administrator may restrict export. No-show, capacity, and channel analysis require consistently recorded statuses, defined available hours, and a lead-source field.
    Google Business Profile Searches, views, calls, website clicks, direction requests 1. How are people finding us?
    2. Which interactions are rising or falling?
    3. Which periods show stronger local demand?
    Business Profile Manager: select profile(s) → Actions → Insights → select timeframe → Download Report (spreadsheet) Interactions are not confirmed leads, sales, or revenue. Available metrics vary by business.

    Each source describes a different step in the same cycle: people find you, book time, pay, get recorded in your books, and turn into cash in the bank. Because each system measures a different step, evaluate each one on its own terms before expecting them to agree.


    What Can Accounting, Payment, and Bank Records Tell Me?

    Accounting, payment, and bank records show what was invoiced, what was collected, what moved through your accounts, and when those events occurred. They all deal in dollars, but they answer different questions and should not be treated as interchangeable versions of revenue.

    Accounting and Invoicing Records

    Your accounting software is the system of record for what you billed and what you owe. Beyond the profit-and-loss statement, it supports three useful analyses:

    1. Customer concentration: Export Sales by Customer Detail for the last twelve months, total sales by customer, and calculate each customer's share. There is no universal danger threshold. The real question is whether losing your largest one or two accounts would affect payroll or debt payments.
    2. Unpaid invoices and payment timing: The A/R Aging Summary groups open balances by how overdue they are. If invoice dates and payment dates are both recorded reliably, you can also calculate average days to pay. When that number moves from 24 days to 41, cash tightens even while sales look healthy.
    3. Vendor cost changes: Compare the same vendor and expense category across matching periods, such as the first quarter of this year against the first quarter of last year. Before calling it a price increase, check quantity: higher spending on materials or tooling may reflect more jobs or more scrap, not higher prices.

    Limitation: Report availability and customization vary by subscription and interface version. Confirm the report you need exists on your plan before building a routine around it.

    Payment Processor and POS Records

    Payment processors and point-of-sale systems such as Stripe and Square may record each sale with an amount and a timestamp. When those fields are available, these records are a useful source for patterns by day and hour:

    1. Average transaction value by day and hour: This requires record-level amounts and timestamps. In restaurants and other hourly businesses, it shows whether your busiest hours are also your highest-value hours, or only your busiest.
    2. Refund and fee burden: Define the calculation before running it. Fee rate is total processing fees divided by gross charges for the same month. Refund rate is total refunds divided by gross charges for the same month. A changing fee rate may reflect processor pricing, payment method, or transaction mix. A rising refund rate is a reason to investigate products, fulfillment, or service, not proof of a particular cause.
    3. Repeat purchase interval: If checkout captures a stable customer identifier, such as an email address, customer record, or member ID, you can calculate the median number of days between a customer's first and second purchase.

    Limitation: Anonymous cash and guest transactions cannot support repeat-customer analysis. If your checkout does not collect an identifier, do not try to infer return visits from card types or amounts.

    Online Banking Records

    Your bank records the cash that actually posted to your accounts:

    1. Deposit timing: Comparing deposits with processor payout dates shows the lag between a sale and usable cash, including weekend and holiday delays. That helps you time payroll and vendor payments.
    2. Recurring outflows: Sorting withdrawals by description surfaces subscriptions, leases, and recurring fees. Treat the result as a follow-up list: contracts, invoices, or software administration records are needed to confirm whether a charge is still necessary or duplicated.

    Limitation: Bank activity shows cash movement and nothing more. A deposit may be a loan disbursement, a customer deposit, or sales tax you collected. A withdrawal may be a loan payment or an owner draw rather than an expense. Download formats and history limits vary by bank.

    Why These Three Systems Rarely Match

    Your processor's monthly sales, your accounting revenue, and your bank deposits may not agree, and that does not necessarily mean your books are broken:

    • A processor report may show gross charges, refunds, fees, net activity, or payouts, depending on the report selected.
    • An accounting report may show invoiced or recognized revenue, depending on the report, configuration, and accounting method.
    • A bank export shows posted deposits, whose amounts and dates depend on payout settings, fees, refunds, batching, and settlement timing.

    Forcing these numbers to match in one spreadsheet without documented reconciliation rules creates more confusion than insight. For now, let each source answer its own question: accounting shows what was billed and owed, the processor shows how customers paid, and the bank shows when cash arrived.


    What Can Scheduling and Local-Search Records Tell Me?

    Scheduling records may show when work is booked and how far ahead customers reserve; Google Business Profile may show how people find and interact with your business. Both are demand signals, not proof of completed sales.

    Scheduling and Booking Records

    If you use a booking tool or shared calendar, your appointment records may support three analyses:

    • Booking lead time: The time between when a booking was created and when the appointment starts. This requires both fields. If lead time shrinks from three weeks to four days, it may be an early sign of softening demand before revenue reflects it.
    • Booked hours: The total duration of consistently categorized service appointments. This is booked time, not utilization. Utilization requires first defining your available hours, such as staffed hours minus breaks and administrative time.
    • Cancellations and no-shows: These are available only when cancellation and attendance statuses are recorded consistently. Once they are, group them by weekday, service type, or staff member. Analyzing cancellations by marketing channel also requires a lead-source field.

    Limitation: Statuses need to be recorded when they happen. If staff update appointments in a batch at the end of the day, timestamps cluster and distort the analysis. Google Calendar exports only .ics archives, so leave it out of your first spreadsheet test. Many booking tools offer appointment exports; check your tool's help documentation for the current path and format.

    Google Business Profile

    Google Business Profile shows how people find and interact with your listing, without installing any tracking code:

    1. Searches: How often your profile appeared in search results. The Performance view may also list the search terms that surfaced your profile; check whether your downloaded report includes them.
    2. Views: How many times people viewed your profile over the selected period.
    3. Interactions: Counts of calls, website clicks, direction requests, and other actions available for your business type.

    Limitation: A tap on the call button does not prove a conversation happened, and a direction request does not confirm a visit. Compare consistent periods, such as month over month or the same quarter last year, and treat the results as demand trends rather than revenue inputs.


    How Do I Test One Export in a Spreadsheet?

    Choose one business question and one source, download a detailed CSV or Excel report, preserve the untouched file, and test whether its rows, dates, identifiers, and amounts can support the question.

    The most common mistake is trying to build a master dashboard on day one: six months of bank records, four QuickBooks reports, and a Stripe file pasted into one workbook. The result is broken lookups, mismatched dates, and totals that disagree. Start with one source instead.

    This is a manual, periodic process. You download a fresh file weekly or monthly; nothing updates on its own.

    The 30-Minute Single-Source Test

    Use whichever spreadsheet program you already have: Google Sheets, Microsoft Excel, or LibreOffice.

    Step 1: Define One Question (5 Minutes)

    Write down one question with a practical business consequence before opening any software. For example:

    • Invoicing: "Which five customers accounted for the largest share of invoiced sales over the last twelve months?"
    • Payments: "What was our average transaction value on Saturdays compared with Tuesdays last month?"
    • Banking: "How much did we pay in recurring subscriptions over the last 90 days?"

    Name the period and define your terms. For example, does "sales" include refunds and sales tax?

    Step 2: Export and Preserve the Raw File (5 Minutes)

    Use the platform's documented report or export menu, and choose CSV or Excel over PDF when both are available. Then:

    1. Save the file in a dedicated folder, such as Data_Exports/2026-Q3/.
    2. Rename it with the export date, source, and report, such as 2026-09-12_QBO_SalesByCustomerDetail_RAW.csv.
    3. Record the source, report name, filters, date range, and export date in a short note saved beside the file.
    4. Open a copy and save it as a workbook, such as ..._WORKING.xlsx or a Google Sheet. A CSV file cannot store pivot tables or multiple tabs.

    Never edit the raw file. An untouched original lets you retrace your steps if a formula or deletion goes wrong.

    Step 3: Inspect Before Cleaning (10 Minutes)

    Check the working copy against basic tidy data principles, as described by statistician Hadley Wickham: each variable in its own column, each observation in its own row.

    • One kind of record per row: Each row should be one invoice, transaction, or appointment, not a group header or subtotal.
    • One variable per column: Date, customer or ID, amount, and status should each have their own column.
    • Presentation rows: Many exports, including QuickBooks reports, add title rows, blank separator rows, and totals.
    • Duplicates and gaps: Sort by date and look for repeated rows or missing weeks and months.
    • Dates: Confirm the spreadsheet recognizes dates as dates, not text, and note the format used.

    Here is what that difference looks like, using invented sample data.

    As exported:

    A B C D
    Sales by Customer Detail
    January–December 2025
    Customer Date Invoice Amount
    Acme Supply
    01/14/2025 1041 2,400.00
    03/02/2025 1057 1,150.00
    Total for Acme Supply 3,550.00

    Ready for analysis:

    customer invoice_date invoice_number amount
    Acme Supply 2025-01-14 1041 2400.00
    Acme Supply 2025-03-02 1057 1150.00

    Step 4: Clean and Answer the Question (10 Minutes)

    In the working copy:

    1. Delete title, blank, subtotal, and total rows so that row 1 holds only column headers.
    2. Fill down group values, such as the customer name, so every row carries its own customer.
    3. Give each column one unique header and unmerge any merged cells.
    4. Add a new date column in YYYY-MM-DD format and keep the original date column unchanged.
    5. Insert a pivot table with customer in Rows and amount in Values (set to SUM), then sort in descending order. To see each customer's share, show values as a percentage of the grand total.
    6. Check the pivot table's grand total against the report's total. If they differ, find out why before trusting the answer.

    Keep This Test Inside Your Spreadsheet
    Do not paste unredacted customer lists, payroll data, or financial exports into consumer AI chatbots to clean or summarize them. Whether any AI tool is appropriate depends on the account type, its data settings, and your obligations to customers and employees.

    Do Not Combine Sources Yet

    Resist merging this file with exports from other systems. Combining sources requires agreed definitions, matching keys, and documented reconciliation rules, and that work belongs after a source audit. A well-structured single-source spreadsheet can answer a surprising number of small-business questions. For how far that can take you before you need specialist help, see Do You Need a Data Analyst or Better Spreadsheets?

    If one export answers a real question in thirty minutes, you have confirmed that your existing systems hold usable records, with no new software purchase.


    When Are the Records or Existing Tools Not Enough?

    Existing tools are not enough when the required records are missing, inaccessible, too aggregated, inconsistently defined, or too difficult to maintain at the frequency and level of control the decision requires.

    Native exports are a sound, low-risk starting point, but they are not a permanent answer for every business. Watch for these signs:

    1. You cannot get record-level data. The system offers only summaries or PDFs, or an authorized person cannot get access. A common example is an account owned by a former employee or an outside bookkeeper that the company cannot recover.
    2. Required fields are missing. The export lacks the date, status, amount, or stable identifier your question depends on.
    3. History is missing or definitions conflict. The platform keeps only limited history, or "sales" means one thing to the office and another to operations.
    4. Differences between systems cannot be explained. Gaps between processor, accounting, and bank totals cannot be traced to documented timing, fee, refund, or accounting-method rules.
    5. The process depends on one person. The report is late, or it breaks whenever the person who builds it is out.
    6. Control needs outgrow the workflow. Multiple locations, entities, or users edit the same file, or sensitive customer data travels by email attachment.

    There is no universal row count or hours-per-week cutoff. Whether a spreadsheet is still the right tool depends on its formulas, how consistent the sources are, how many people use it, how often it must update, and what happens if it is wrong.

    The Next Step: Audit Your Sources

    If you recognize one or more of these signs, the answer is not to buy a business intelligence subscription right away. First, document what you have: which sources exist, who owns access, how much history each keeps, and which fields are complete. Take the inventory from this article and work through The Small Business Data Audit Checklist.

  • When Should a Small Business Hire a Data Analyst?

    When Should a Small Business Hire a Data Analyst?

    A small business should hire analytics help when recurring decisions depend on numbers that are slow to assemble, difficult to reconcile, or hard to trust. That does not automatically mean hiring a full-time employee. If the need is periodic or still unclear, freelance, fractional, or part-time help is usually a better first step.

    A full-time analyst makes sense only when the business has enough continuing reporting, analysis, data-quality work, and stakeholder requests to keep one person productively occupied. If the main problem is one fragile spreadsheet, inconsistent data entry, or metrics nobody has defined, fix that foundation first.

    Hire help when the reporting problem is recurring and decision-critical

    The clearest sign that you need analytics help is not that your spreadsheet feels annoying. It is that the same reporting problem keeps returning and affects decisions that matter.

    Use this three-part test:

    1. Meaningful time goes into assembling the numbers each month.
    2. Data from at least two systems must be reconciled by hand.
    3. An important decision depends on getting a reliable answer.

    The decision could involve hiring, inventory, pricing, advertising, staffing, or cash flow. The point is not the size of the spreadsheet. The point is whether unreliable reporting creates a real business constraint.

    All three conditions matter. A complicated report that nobody uses is not a reason to hire. A valuable decision based on clean information from one dependable system may not require an analyst either. Paid help becomes easier to justify when the work is recurring, the data is fragmented, and the answer changes what the business does.

    You may need better spreadsheets before you need an analyst

    Many small businesses do not have an analysis problem yet. They have a process problem.

    Common examples include inconsistent product names, duplicate customer records, changing definitions of revenue, formulas copied incorrectly, and employees maintaining separate versions of the same workbook. An analyst can spend time cleaning these issues, but hiring someone does not automatically prevent them from returning.

    Before paying for analysis, make sure the business has:

    • One owner for each recurring report.
    • Consistent definitions for the metrics people discuss.
    • A dependable process for entering and correcting data.
    • One agreed version of the final report.
    • A clear decision that the report is meant to support.

    If those basics are missing, start with a small data audit and spreadsheet cleanup. Document where the information comes from, who changes it, how often the report is produced, and where manual steps create errors or delays.

    This is the “not yet” answer—not “never.” Better structure may remove the need for outside help, or it may reveal a smaller and more useful project to hire for.

    Match the type of help to how often the work occurs

    The right question is not simply, “Do I need an analyst?” It is, “What level of help matches the work I actually have?”

    Support ModelWhen to Use ItThe Real CommitmentCost Structure
    Internal OwnerThe data lives in one or two simple tools and a documented process exists.The opportunity cost of diverted operational time; requires protected time and strict accountability.Opportunity cost of staff time.
    Fractional / Part-TimeYou have recurring monthly needs (reporting + system growth) but not enough work for a 40-hour week.A predictable monthly retainer; builds long-term context and steady improvement without full-time overhead.Monthly retainer or part-time compensation
    Freelance / ProjectYou need a specific, one-off outcome: a repaired workbook, metric definitions, or a new dashboard.Scoping time and defined handoff; bounded cost tied to a specific, final deliverable.Hourly rate or fixed project fee
    Full-Time AnalystRequests arrive daily, multiple teams depend on the data, and you need a permanent internal owner.The most significant commitment: recruiting, payroll, benefits, management, and long-term career development.Salary, benefits, and recruiting costs

    Make a full-time hire only when the workload needs a permanent owner

    One dashboard is not a full-time job. Neither is a monthly report that takes a few hours to update after the process is cleaned up.

    A sustainable analyst role usually includes a continuing backlog: recurring reports, investigation of changes in performance, requests from multiple teams, data-quality checks, metric governance, documentation, automation, and support for planning decisions.

    Before opening a full-time position, write down the work you expect the person to own during a normal month. Separate the one-time cleanup tasks from recurring responsibilities. If the list is mostly a single project, start with outside help. If the list is substantial, recurring, and important across the business, a permanent role may be appropriate.

    Also ask whether the company is ready to use the analyst’s work. Someone must set priorities, explain business context, grant access to systems, review results, and act on recommendations. Hiring an analyst into a business with no decision process simply creates a new person waiting for direction.

    Frequently asked questions

    What does a data analyst do for a small business?

    They turn data from sales, finance, marketing, and operations into reporting people can act on. In a small business, the early work is rarely modeling or forecasting — it is usually consolidating sources, agreeing on definitions, and replacing manual reporting with something repeatable. The advanced analysis becomes possible only after that foundation exists.

    Should I hire an analyst or a consultant first?

    If the need is project-based or still unclear, start with a scoped freelance or fractional engagement. A short engagement answers the question a job posting cannot: whether there is enough recurring work to justify a permanent role. It also produces something useful either way — cleaner data, defined metrics, a working report — rather than a hire you may need to unwind.

    Who should own reporting if I am not ready to hire?

    Assign one accountable person, usually a lead in operations, finance, or marketing. What matters is not their title but their authority to standardize definitions, set the reporting cadence, and declare which version of a report is final. Reporting that belongs to everyone belongs to no one, and that is the condition that makes reports untrustworthy in the first place.

    What should I prepare before bringing in analytics help?

    Write down four things: the decisions you need to make, the reports you currently rely on, the systems the data lives in, and the time spent each month reconciling it. Note specifically which numbers your team does not trust and why. That short audit turns a vague request into a scoped engagement, and it usually costs a few hours of your time.

    The practical next step is a simple data audit. Choose one important recurring decision, document where its numbers come from, and measure the work required to produce a trusted answer. That evidence will point toward the right next move: process cleanup, project help, recurring part-time support, or a full-time analyst.