← All guides

Guide 03 · Data → Insight

Turn transaction data into a cost report that shows where the money is going

Use this when your books are correct but the profit and loss still can’t tell you what it costs to win a customer, keep one, or simply keep the doors open. You will finish with a report that sorts every transaction by what the money is for, still adds up to your accounts to the cent, and updates when you import next month’s export.

TimeAbout 2–3 hours the first time, then about 15 minutes a month
CostFree route: no paid software. AI workspace route: Claude Pro or ChatGPT Plus
Finish withA mapped management-cost report
Last reviewed4 November 2026

Before you start

What “working” looks like

  • Your transaction export sits in one tab, exactly as your accounting system produced it.
  • A mapping table, which you control, says what each account and supplier is for.
  • Every transaction lands in exactly one management group, and the report total matches your profit and loss.
  • A checks panel tells you when something is wrong or unclassified before you trust the numbers.
  • You can see where the money went, which costs are growing, your biggest suppliers, and every contract that renews on its own.
  • Next month, you import the new export and everything updates. Nothing is rebuilt.

What you need

  • A transaction listing for your expense accounts for the last 12 complete months, as CSV or Excel (step 02 explains which report).
  • Your profit and loss for the same months, to check against.
  • A rough idea of how your team’s time splits between serving customers, selling, looking after existing customers and running the business.
  • A Google account the business controls (see guide 01 for why), or Excel for Microsoft 365.
  • For the free route: a free ChatGPT account at chatgpt.com, if you would like help with the mapping.
  • For the AI workspace route: Claude Pro or ChatGPT Plus, with that company’s desktop app on Mac or Windows.

No export to hand yet? Practise with our invented sample transaction listing (CSV): 12 months of costs for Koppie Lane IT, a fictional 12-person IT support firm. Every name and number in it is made up. The expected results in this guide are for that file.

01

Decide what the report must answer

This guide builds a report that answers four questions most owners can’t answer from the profit and loss:

  1. Where does the money actually go: serving customers, winning them, keeping them, or running the business?
  2. Which of those is growing faster than the business?
  3. Who are we paying the most?
  4. What renews automatically, and has its price crept up?

Keep these four questions in front of you. They decide every mapping choice in steps 04 and 05.

02

Export the transaction listing

Every accounting system names this report differently. Look for a report that lists one row per transaction, with the account it was posted to, often called “Account Transactions”, “General Ledger Detail”, “Transaction Detail by Account” or “Detailed General Ledger”. A profit-and-loss summary is not enough.

  1. Choose the last 12 complete months. Leave out the current, unfinished month.
  2. Include only expense accounts: cost of sales, operating expenses and interest. Leave out income, bank, debtors, creditors and VAT control accounts.
  3. Make sure the report includes: date, account name, supplier (or contact), description, reference and the amount excluding VAT.
  4. Include supplier credits. They reduce costs and belong in the total.
  5. Export as CSV if you can; Excel also works.
  6. From the profit and loss for the same months, add up cost of sales, expenses and interest, and write down the total. You will check against it in step 06.
Keep individual pay out: the report needs payroll as one journal per month, not pay per person. If your export shows employee names or individual salaries, ask your bookkeeper for a version where payroll is a single monthly line, or leave the description column out for the salaries account. Share the finished workbook only with people who may see the business’s costs.
No bookkeeping system? Export 12 months of your business bank account as CSV instead. There is no account column, so every line starts as “Not yet classified” and the keyword rules in step 05 do all the work. Delete money coming in, and remember bank amounts include VAT. Use step 05’s ChatGPT prompt to adapt the formulas to your bank’s columns.

Choose your route

Two ways to build the report

Free route: Google Sheets with ChatGPT as a helper

You build the workbook yourself with the formulas below. ChatGPT only sees your account names, never your transactions. Excel equivalents are noted where they differ.

Continue with the free route ↓

AI workspace route: Claude Cowork or ChatGPT Work

For readers with Claude Pro or ChatGPT Plus. The AI proposes the mapping, you decide it, and the AI builds the whole workbook to the same specification. Your job is to check its work. This route sends supplier-level spending to the AI company.

Continue with the AI workspace route ↓

03 · Free route

Set up the spreadsheet and import the export

  1. In Google Drive, create a folder named Cost report – live and a new Google Sheet inside it named Cost report.
  2. Rename the first tab Data. Add four more tabs named Mapping, Classified, Checks and Report.
  3. With the Data tab open, select File → Import → Upload and choose your export.
  4. For Import location, choose Replace current sheet. Leave the separator on Detect automatically. Select Import data.
  5. Select View → Freeze → 1 row so the headings stay visible.

This guide assumes the sample file’s column order: A Date, B Account code, C Account name, D Supplier, E Description, F Reference, G Source, H Amount excl VAT, I VAT, J Amount incl VAT. If yours is different, step 05 shows how to adapt the formulas.

Never edit the Data tab by hand: it should always be an exact copy of what your system exported. Fix mistakes in the accounting system, then export again. That way next month’s import can safely replace it, and the books and the report always tell the same story.
In Excel: open the CSV, copy everything and paste it into the Data sheet of a new workbook with the same five sheets. Next month, paste over it the same way.

04 · Free route

Build the mapping table

This is the heart of the guide. Your accounts say what kind of cost something is. The mapping says what it is for. It uses six management groups:

Delivering the service
What it costs to serve paying customers: materials, stock resold, tools used on client work, site travel.
Winning new customers
What it costs to get a first sale: advertising, lead generation, sales commission, sales tools.
Keeping customers
What it costs to hold on to the customers you have: renewal discounts, review meetings, newsletters, client events.
Running the business
Central costs: rent, admin, accounting, insurance, office software.
Owner and non-operating
Spending that is not part of running the business: loan interest, personal purchases on the business card.
Not yet classified
Anything your mapping can’t place. This must be close to zero before you trust the report (step 08).
  1. In the Mapping tab, type these headings in row 1: A Account, B Group, C Renews automatically, E Keyword, F Group, G Renews automatically, I Group, J Share of salaries.
  2. In cell A2, list every account in your export: =SORT(UNIQUE(FILTER(Data!C2:C, Data!C2:C<>"")))
  3. Select column A, copy it, and paste it back with Edit → Paste special → Values only. The list now stays put when next month’s data arrives, so your groups stay next to the right accounts.
  4. For each account, type a group in column B, exactly as written above, and Yes or No in column C for whether it renews without anyone deciding. For salaries, type Split by role (step 05 explains). For an account that mixes purposes, pick its most common purpose for now; step 05 handles the exceptions.
Why correct totals can still hide the problem: your accountant sorts costs so the tax return is right. An “Advertising” account is correct whether the money finds new customers or entertains existing ones. When one account captures several purposes, its total can stay flat while the cost of winning customers doubles inside it. Think of a kitchen sorted by material: all the metal in one drawer is tidy, but it won’t tell you what baking costs. The mapping re-sorts the same items by what they are for. It changes nothing in your books.

The sample file’s accounts are mapped like this:

AccountGroupRenews automatically
Advertising and marketingWinning new customersNo
Bank chargesRunning the businessNo
Commission paidWinning new customersNo
Cost of sales - hardwareDelivering the serviceNo
Discounts allowedKeeping customersNo
EntertainmentRunning the businessNo
General expensesNot yet classifiedNo
InsuranceRunning the businessYes
Interest paidOwner and non-operatingNo
Motor vehicle expensesDelivering the serviceNo
Professional feesRunning the businessNo
RentRunning the businessYes
Salaries and wagesSplit by roleNo
Software subscriptionsRunning the businessYes
Telephone and internetRunning the businessYes

Want a second opinion? Ask ChatGPT. It only needs your account names, not your transactions:

Copy this prompt

I run a [type of business] with [number] people. I’m sorting my accounting accounts into six management groups: Delivering the service, Winning new customers, Keeping customers, Running the business, Owner and non-operating, and Split by role (salaries only). Here are my account names, one per line: [paste column A of the Mapping tab].

For each account, suggest the most likely group and say whether it usually renews automatically. Then list the accounts that commonly mix more than one purpose, and for each say what kinds of supplier or description would belong to a different group. Don’t guess where you’re unsure; say so.

05 · Free route

Add rules for mixed accounts and split salaries

Keyword rules

A rule says: when this word appears in the supplier or description, use this group instead of the account’s. To find the mixed accounts, select Data → Create a filter on the Data tab, filter one account at a time, and read down the suppliers. Anywhere you think “that one is really for something else”, add a rule in columns E to G of Mapping.

  • Keywords are not case sensitive, and part of a word is enough: Signal Leads or Signal.
  • The first matching rule wins, so put specific keywords above general ones.
  • Leave Renews automatically blank to keep the account’s setting.
  • Remove the filter when you are done (Data → Remove filter).

The sample needs these rules:

KeywordGroupRenews automatically
RiverbendKeeping customers(blank)
NetWatchDelivering the service(blank)
HelpLoopDelivering the service(blank)
SafeCopyDelivering the service(blank)
DeskPilotDelivering the service(blank)
LinkPointDelivering the service(blank)
PipeTrackWinning new customers(blank)
PostbirdKeeping customers(blank)
Client reviewKeeping customers(blank)
Signal LeadsWinning new customersYes
FleetlineDelivering the serviceYes
StationeryRunning the business(blank)
CoffeeRunning the business(blank)
personalOwner and non-operating(blank)

Salary split

Salaries are usually the biggest cost, and they arrive as one journal a month. Leaving them in one lump hides most of what it costs to win and keep customers. In Mapping columns I and J, enter the four operating groups and the share of payroll each one takes. The shares must add up to 100%.

GroupShare of salaries
Delivering the service66%
Winning new customers9%
Keeping customers8%
Running the business17%

Work the shares out on paper, not in the sheet. List each role, its monthly cost from your payroll report, and roughly how that person’s time divides. A technician is all delivery; a salesperson might be 80% winning and 20% keeping. Add the rand amounts per group and divide by total payroll. Only the four percentages go into the workbook, never names or individual pay.

If your columns are different

Using the sample file? Skip to step 06. Otherwise, give ChatGPT your column headings and two or three rows you invent by hand, never the export itself:

Copy this prompt

I’m building a cost report in Google Sheets. My accounting export is in a tab called Data. These are its column headings, in order, starting in column A: [paste header row]. Here are three example rows with invented suppliers and rounded amounts: [paste rows].

The guide I’m following expects: A date, C account name, D supplier, E description, F reference, H amount excluding VAT. 1. Tell me which of my columns holds each of these, and flag anything missing or ambiguous instead of guessing. 2. Rewrite each of these formulas for my columns, one per line: [paste the formulas from steps 04, 06 and 07].

06 · Free route

Classify every line and check the data

In the Classified tab, type these headings in row 1: A Date, B Month, C Account, D Supplier, E Description, F Amount, G Group, H Renews. Then enter three formulas. Each one fills its columns all the way down and grows with next month’s data, so there is nothing to drag.

CellFillsFormula
A2Date, month, account, supplier, description and amount=ARRAYFORMULA(IF(Data!A2:A="", "", {Data!A2:A, TEXT(Data!A2:A, "yyyy-mm"), Data!C2:C, Data!D2:D, Data!E2:E, Data!H2:H}))
G2Management group=MAP(Data!C2:C, Data!D2:D, Data!E2:E, LAMBDA(account, supplier, description, IF(account="", "", LET(rule, IFERROR(INDEX(FILTER(Mapping!F2:F, Mapping!E2:E<>"", ISNUMBER(SEARCH(Mapping!E2:E, supplier&" "&description))), 1), ""), IF(rule<>"", rule, IFERROR(VLOOKUP(account, Mapping!A2:B, 2, FALSE), "Not yet classified"))))))
H2Renews automatically=MAP(Data!C2:C, Data!D2:D, Data!E2:E, LAMBDA(account, supplier, description, IF(account="", "", LET(rule, IFERROR(INDEX(FILTER(Mapping!G2:G, Mapping!E2:E<>"", ISNUMBER(SEARCH(Mapping!E2:E, supplier&" "&description))), 1), ""), IF(rule<>"", rule, IFERROR(VLOOKUP(account, Mapping!A2:C, 3, FALSE), "No"))))))

Select column A and choose Format → Number → Date so dates don’t show as numbers.

Now, in the Checks tab, enter these labels in column A and formulas in column B. The last column shows what the sample listing should give. (The report-total check shows an error until step 07 is done.)

LabelFormulaSample result
Rows of data=COUNTA(Data!A2:A)514
Total excl VAT=SUM(Data!H2:H)R7 340 320
First date=MIN(Data!A2:A)1 Nov 2025
Last date=MAX(Data!A2:A)28 Oct 2026
Months in the data=COUNTA(UNIQUE(FILTER(Classified!B2:B, Classified!B2:B<>"")))12
Dates not recognised=COUNTA(Data!A2:A)-COUNT(Data!A2:A)0
Accounts missing from Mapping=SUMPRODUCT((Data!C2:C<>"")*(COUNTIF(Mapping!A2:A, Data!C2:C)=0))0
Lines not yet classified=COUNTIF(Classified!G2:G, "Not yet classified")12
Unclassified share of total=SUMIF(Classified!G2:G, "Not yet classified", Classified!F2:F)/SUM(Data!H2:H)0.25%
Salary split adds up to=SUM(Mapping!J2:J)100%
Report total minus data total=ROUND(SUM(Report!B2:B7)-SUM(Data!H2:H), 2)0
Lines that appear more than once=SUMPRODUCT((Data!A2:A<>"")*(COUNTIFS(Data!A2:A, Data!A2:A, Data!D2:D, Data!D2:D, Data!F2:F, Data!F2:F, Data!H2:H, Data!H2:H)>1))2

Then work through these before going further:

  • Total excl VAT must match the profit-and-loss total you wrote down in step 02. If it doesn’t, the export is missing an account, includes VAT, or covers the wrong months.
  • Months in the data must be 12. The comparison in step 07 relies on it.
  • Accounts missing from Mapping must be 0. If not, a new account has appeared: add it to the bottom of column A in Mapping and give it a group.
  • Salary split adds up to must be 100%.
  • Lines that appear more than once counts both copies. In the sample, one bookkeeping bill was captured twice, so the books themselves are overstated by R6 500. Ask your bookkeeper to reverse the duplicate, then export again.

To see the unclassified lines, enter this in cell D1 of the Checks tab: =FILTER(Classified!A2:F, Classified!G2:G="Not yet classified"). The sample shows 12 card purchases with descriptions like “Card purchase - online store”. Step 08 deals with them.

In Excel for Microsoft 365: the same formulas work with two changes. Delete ARRAYFORMULA( and its closing bracket, because Excel spills arrays on its own. Replace open-ended ranges such as Data!A2:A with a fixed range such as Data!A2:A5000, using the same end row everywhere. In Excel 2021, which has no MAP, put the group formula in G2 without MAP, refer to row 2 (Data!C2, Data!D2, Data!E2) and fill it down past your last row.

07 · Free route

Build the report

The Report tab has five parts. Build them in this order.

1. Where the money went (A1:C7)

  1. Type Group, Last 12 months and Share in A1:C1.
  2. Type the six management groups in A2:A7, in the order listed in step 04.
  3. In B2: =SUMIF(Classified!$G$2:$G, A2, Classified!$F$2:$F) + SUMIF(Classified!$G$2:$G, "Split by role", Classified!$F$2:$F) * IFERROR(VLOOKUP(A2, Mapping!$I$2:$J, 2, FALSE), 0)
  4. In C2: =B2/SUM($B$2:$B$7). Copy B2:C2 down to row 7.

2. Month by month (A11 onwards)

  1. Type Month in A11. In B11: =TRANSPOSE(A2:A7)
  2. In A12: =SORT(UNIQUE(FILTER(Classified!B2:B, Classified!B2:B<>"")))
  3. In B12, then copy it across to G12: =MAP($A12:$A, LAMBDA(m, IF(m="", "", SUMIFS(Classified!$F$2:$F, Classified!$B$2:$B, m, Classified!$G$2:$G, B$11) + SUMIFS(Classified!$F$2:$F, Classified!$B$2:$B, m, Classified!$G$2:$G, "Split by role") * IFERROR(VLOOKUP(B$11, Mapping!$I$2:$J, 2, FALSE), 0))))
  4. Select A11:G23, choose Insert → Chart, and set the chart type to Stacked column chart. Drag the chart below the table, to row 26 or lower.

3. First three months against the last three (E1:H7)

  1. Type Group, First 3 months, Last 3 months and Change in E1:H1.
  2. In E2: =A2
  3. In F2: =SUM(INDEX($B$12:$G$14, 0, MATCH(E2, $B$11:$G$11, 0)))
  4. In G2: =SUM(INDEX($B$21:$G$23, 0, MATCH(E2, $B$11:$G$11, 0)))
  5. In H2: =IF(F2=0, "", G2/F2-1). Copy E2:H2 down to row 7.

4. Top suppliers, excluding payroll (J11)

In J11: =QUERY(Data!A1:J, "select D, sum(H) where D is not null and D <> 'Payroll' group by D order by sum(H) desc limit 10 label sum(H) 'Last 12 months'", 1)

5. Contracts that renew on their own (M11 onwards)

  1. Type Supplier, First charge, Latest month and Change in M11:P11.
  2. In M12: =SORT(UNIQUE(FILTER(Classified!D2:D, Classified!H2:H="Yes")))
  3. In N12: =MAP(M12:M, LAMBDA(s, IF(s="", "", INDEX(FILTER(Classified!F2:F, Classified!D2:D=s), 1))))
  4. In O12: =MAP(M12:M, LAMBDA(s, IF(s="", "", SUMIFS(Classified!F2:F, Classified!D2:D, s, Classified!B2:B, $A$23))))
  5. In P12: =MAP(N12:N, O12:O, LAMBDA(first, latest, IF(first="", "", latest/first-1)))

Format the Share, Change and Last 12 months columns as percentages or currency with Format → Number. When you are done, Report total minus data total on the Checks tab must show 0.

In Excel for Microsoft 365: Excel has no QUERY. For the top suppliers, use =TAKE(GROUPBY(Data!D2:D5000, Data!H2:H5000, SUM, 0, 0, -2, (Data!D2:D5000<>"")*(Data!D2:D5000<>"Payroll")), 10). For the chart, choose Insert → Column → Stacked Column.

08 · Free route

Read the report and close the gaps

Close the gaps first

Unclassified lines are a bookkeeping gap, not a spreadsheet problem. Send the list from step 06 to whoever holds the card or does the books, and ask them to recode each one to the right account or add the supplier and a description in the accounting system. Then export again. Don’t fix them in the sheet: the books would stay vague and next month the gap comes back.

You can use the report while Unclassified share of total is under 1%. Above that, close the gaps before drawing conclusions. The sample is at 0.25%, so it is usable.

What the sample shows

GroupLast 12 monthsShare
Delivering the serviceR4 621 24663.0%
Winning new customersR695 0829.5%
Keeping customersR501 8606.8%
Running the businessR1 480 48220.2%
Owner and non-operatingR22 9700.3%
Not yet classifiedR18 6800.3%
GroupNov 2025 – Jan 2026Aug – Oct 2026Change
Delivering the serviceR1 142 500R1 195 478+4.6%
Winning new customersR140 744R202 112+43.6%
Keeping customersR134 770R117 200−13.0%
Running the businessR377 609R368 477−2.4%
Owner and non-operatingR6 350R5 850−7.9%
Not yet classifiedR3 530R3 870+9.6%
  • Total costs grew 4.8%, but the cost of winning customers grew 43.6%. On the profit and loss, Advertising looks flat: R14 950 in November, R14 611 in October. Inside it, Google Ads went from R5 850 to R14 061 a month while client events faded away. And a lead-generation retainer that started in February sits in Professional fees, where nobody would look for it.
  • The cost of keeping customers fell 13%. Fine if it was a choice. Worth asking about if nobody decided it, especially while more is being spent winning new ones.
  • Three of 20 renewing contracts changed price: NetWatch rose 18% and OfficeOne 12%, and the Signal Leads retainer more than doubled, from R5 000 to R11 000.
  • Three pairs of software tools do the same job (remote access, passwords, file sharing). The renewing list puts them side by side; ask which one in each pair you need.
The report raises questions; it doesn’t answer them. Rising spend on winning customers may be exactly right if new customers are arriving. Put this report next to your sales (guide 02) before deciding anything.

03 · AI workspace route

Make a safe upload copy and turn off training

  1. Open your export and delete every column the report doesn’t use. Keep only: date, account name, supplier, description, reference and amount excluding VAT.
  2. Check that payroll appears as one line a month, with no employee names or individual pay (see step 02). If it doesn’t, sort that out with your bookkeeper before uploading anything.
  3. Where a supplier is a private person, such as a freelancer or a landlord, replace their name with a fixed label such as Contractor 1. Use the same label every month so the mapping still recognises them.
  4. On your computer, create a folder named Cost report and save the copy there as cost-listing-upload.csv. Practising? Do the same to the sample file: delete its Account code, Source, VAT and Amount incl VAT columns.
  5. In Claude: select your name, then Settings → Privacy, and turn off Help improve our AI models.
  6. In ChatGPT: open your account menu, then Settings → Data controls, and turn off Improve the model for everyone.
What this does and doesn’t do: this route sends your cost data to the AI company: who you pay, what for, and how much. Turning off training means your conversations won’t be used to train future models. It does not stop the data being sent, so upload only what the report needs. If that is more than you are comfortable sharing, use the free route: it never uploads your transactions.

04 · AI workspace route

Open your AI workspace

Follow the instructions for the tool you pay for. Both lead to the same place.

Claude Cowork (Claude Pro)

  1. Install the Claude Desktop app for Mac or Windows from claude.ai/download and sign in.
  2. If your message box offers Chat and Cowork, select Cowork. Newer accounts have one combined experience and no separate option.
  3. Select Projects in the left navigation, create a project and choose Use an existing folder. Pick your Cost report folder.
  4. Leave the approval mode on Manual for the first build, so Claude asks before each action.

ChatGPT Work (ChatGPT Plus)

  1. Install the ChatGPT desktop app for Mac or Windows and sign in.
  2. In the message box, switch from Chat to Work.
  3. Keep Work locally selected, not Cloud. Only Work locally can use files on your computer.
  4. Give ChatGPT access to your Cost report folder when it asks. Approve each action it proposes during the first build.

Both apps change often. If a label here doesn’t match what you see, look for the option to give the app access to a folder on your computer.

05 · AI workspace route

Let the AI propose the mapping, then decide it yourself

Read the six management groups and the note on why correct totals can hide the problem in step 04. Then work out your salary split on paper, as described under “Salary split” in step 05. Paste this prompt into Claude or ChatGPT. It is the same for both.

Copy this prompt

I want to sort my business costs by what the money is for. cost-listing-upload.csv is my accounting transaction listing for the last 12 complete months, amounts excluding VAT. I run a [type of business] with [number] people.

Propose a mapping using exactly these groups: Delivering the service, Winning new customers, Keeping customers, Running the business, Owner and non-operating, Not yet classified. Salaries go to “Split by role”.

Create Mapping.xlsx in this folder with three tables. 1. Accounts: every account in the file, its most likely group, and Yes or No for whether it renews automatically. 2. Rules: a keyword found in the supplier or description, the group it should use instead of its account’s, and Yes, No or blank for renews. Add a rule only where one account clearly mixes purposes, and put specific keywords above general ones. 3. Salary split: [Delivering the service X%, Winning new customers X%, Keeping customers X%, Running the business X%].

Then list, in a short table, every account you think mixes purposes and every rule you added, with one line explaining each. List lines you can’t place as “Not yet classified”; don’t guess.

  1. Open Mapping.xlsx and go through every row. The AI knows accounting conventions, but only you know that the client lunch was about keeping a customer or that a tool is used on client work. Change anything that’s wrong, directly in the file.
  2. Check that the salary split adds up to 100%.
  3. Save the file. From now on, this mapping is yours: the AI uses it but doesn’t change it.

Practising with the sample? Use this prompt instead, so your results match the ones in this guide:

Sample practice prompt

Create Mapping.xlsx in this folder with three tables, exactly as given. Accounts (account, group, renews): Advertising and marketing, Winning new customers, No; Bank charges, Running the business, No; Commission paid, Winning new customers, No; Cost of sales - hardware, Delivering the service, No; Discounts allowed, Keeping customers, No; Entertainment, Running the business, No; General expenses, Not yet classified, No; Insurance, Running the business, Yes; Interest paid, Owner and non-operating, No; Motor vehicle expenses, Delivering the service, No; Professional fees, Running the business, No; Rent, Running the business, Yes; Salaries and wages, Split by role, No; Software subscriptions, Running the business, Yes; Telephone and internet, Running the business, Yes. Rules, in this order (keyword, group, renews): Riverbend, Keeping customers, blank; NetWatch, Delivering the service, blank; HelpLoop, Delivering the service, blank; SafeCopy, Delivering the service, blank; DeskPilot, Delivering the service, blank; LinkPoint, Delivering the service, blank; PipeTrack, Winning new customers, blank; Postbird, Keeping customers, blank; Client review, Keeping customers, blank; Signal Leads, Winning new customers, Yes; Fleetline, Delivering the service, Yes; Stationery, Running the business, blank; Coffee, Running the business, blank; personal, Owner and non-operating, blank. Salary split: Delivering the service 66%, Winning new customers 9%, Keeping customers 8%, Running the business 17%.

Why you decide the mapping, not the AI: the mapping is the judgement in this report. Everything else is arithmetic. If the AI decides what counts as winning a customer, the report tells you what the AI thinks your business is doing.

06 · AI workspace route

Ask for the whole workbook in one go

Start a new task in the same folder and paste this prompt. It is the same for both tools.

Copy this prompt

Build a cost report workbook from cost-listing-upload.csv, using the mapping in Mapping.xlsx. The CSV is my accounting transaction listing for the last 12 complete months, amounts excluding VAT.

Make five tabs. 1. Data: the CSV exactly as supplied. Do not change, sort, clean or remove anything. 2. Mapping: the three tables from Mapping.xlsx, unchanged. 3. Classified: one row per Data row, with its month and its group and renews setting. A rule applies when its keyword appears anywhere in the supplier or description, ignoring case; the first matching rule wins; otherwise use the account’s group; an account that isn’t in Mapping is Not yet classified. 4. Checks: the number of rows; total excluding VAT; first and last date; the number of months; dates that aren’t real dates; accounts missing from Mapping; the number of lines not yet classified and their share of the total; the salary split total; the Report total minus the Data total; lines that appear more than once (same date, supplier, reference and amount); and a list of the unclassified lines. 5. Report: the total and share for each group over the 12 months; each group’s first three months against its last three, with the change; each group by month with a stacked column chart; the top 10 suppliers excluding payroll; and every supplier that renews automatically, with its first charge, its latest month and the change.

Rules: “Split by role” lines are shared across the four operating groups using the salary split, so every rand lands in exactly one group and the Report total equals the Data total. Every number on Classified, Checks and Report must be a formula that reads the Data and Mapping tabs, so replacing the Data tab next month updates everything. Don’t invent or estimate anything. If a column you need is missing or unclear, stop and ask me.

Save it as Cost report.xlsx in this folder. Then give me a short table of every value on the Checks tab.

Why a workbook, not an interactive web dashboard: both tools can build a web dashboard with clickable charts, and it can look impressive. We chose a workbook because you can see and check every formula, it keeps working if you stop paying for the AI tool, anyone in the business can open it, and handing it over is simple.

07 · AI workspace route

Check its work

  1. Open the workbook. Select three numbers on the Report tab and confirm the formula bar shows a formula, not a typed number.
  2. Compare the total on the Checks tab with the profit-and-loss total you wrote down in step 02, and confirm Report total minus Data total is 0. Practising with the sample? Every Checks value should match the “Sample result” column in step 06.
  3. Open the Mapping tab and confirm it is exactly your Mapping.xlsx, with nothing added or changed.
  4. Pick five lines on the Classified tab, including one from a mixed account, and check each landed in the group you would choose.
  5. Compare the Report with step 08’s tables. With the sample, Winning new customers is R695 082 over the year and rises 43.6% from the first three months to the last three; NetWatch, OfficeOne and Signal Leads are the only renewing suppliers whose price changed.
  6. If anything differs, tell the AI exactly which number is wrong and what it should be, and ask it to show the formula it used. Check again after every fix.

Then read the report and close the gaps exactly as in step 08.

Why this matters: an AI tool can produce a convincing report that is quietly wrong. It won’t always say so. Fifteen minutes of checking is what lets you trust it.

08 · AI workspace route

Save the monthly refresh and know what you’re trusting

Keep this prompt. You will use it every month in step 09.

Monthly refresh prompt

This is my monthly cost report refresh. Use my current Cost report workbook and this month’s cost-listing-upload.csv. Replace the whole Data tab with the new file exactly as supplied. Don’t change the Mapping tab or any formula, tab, chart or layout.

Then give me: every value on the Checks tab; each group’s first three months against its last three; any renewing supplier whose price changed; and any new account or supplier, with the group you would suggest for it. Only suggest; I will change the Mapping tab myself. Save the result as a new workbook named Cost report followed by the month and year.

Claude Cowork

Open your project and paste the prompt into its Instructions, so Claude follows it in every task in that project. Each month you will start a new task there and say “Run the monthly refresh.”

Claude’s scheduled tasks can’t read folders on your computer and don’t offer a monthly option, so you run the refresh yourself after exporting.

ChatGPT Work

Save the prompt as a note in your Cost report folder. Each month, open the desktop app, switch to Work with Work locally selected, give it the same folder and paste the prompt.

Work can also save the prompt as a template, which saves pasting it each month.

  • The workbook is yours. It keeps working without the AI tool; only the refresh needs it.
  • Keep last month’s workbook. If a refresh goes wrong, you can compare the two or go back.
  • The AI’s summary is a convenience. The Checks tab is the evidence. Read the checks, not only the summary.
  • The mapping is a decision. Change it yourself, and only after thinking about it.

09

Refresh it next month

  1. Export the latest 12 complete months the same way as in step 02.
  2. Free route: open the Data tab, select File → Import → Upload, and choose Replace current sheet. AI workspace route: make the upload copy as in step 03, then run your saved refresh from step 08.
  3. Look at the Checks tab. Fix anything that isn’t as expected, especially new accounts, new unclassified lines and duplicates.
  4. Read the report against the four questions from step 01. Write down one action.
Why 12 months every time: the first-and-last comparison and the chart always cover a full year, so a slow drift shows up as a trend instead of hiding in one month.

10

Keep it useful

  • Monthly: refresh, check, and add rules for any new supplier that belongs somewhere other than its account’s group.
  • Every six months: redo the salary split. Roles change, and so does how people spend their time.
  • Before any renewal: look at the renewing list and decide, rather than let it happen.
  • Backups: before changing the mapping, select File → Make a copy (AI route: copy Cost report.xlsx in your folder).

Common fixes

The total doesn’t match the profit and loss
Look for a missing account (often cost of sales or interest), VAT-inclusive amounts, an extra month, or income accounts included by mistake.
Report total minus data total isn’t 0
A group in Mapping column B or F is spelt differently from the six in the report. Copy and paste the group names rather than retyping them.
A supplier lands in the wrong group
A rule higher up the list is matching first. A short keyword like Coffee can catch more than you meant. Make the keyword more specific or move the rule down.
Dates show as text (Dates not recognised is above 0)
Check File → Settings → Locale matches the date format in your export, then import again. Exporting dates as year-month-day avoids the problem altogether.
A formula shows #ERROR! or #VALUE!
If your spreadsheet uses semicolons, replace the commas between formula parts with semicolons. Otherwise paste the formula and error into ChatGPT and ask what is wrong, without any data.

Official instructions used in this guide

Tool interfaces change. If a menu or label here doesn’t match what you see, these official instructions are the place to check. The Claude and ChatGPT steps match guide 02, checked on 26 September 2026:

If you would rather not do this alone

Bring the export you have. We’ll help you see where the money is going.

This guide is enough on its own when your costs come from one accounting system, the checks match your profit and loss, and you know roughly how your team’s time is spent.

It’s worth getting help when:

  • unclassified spend never gets below 1%, because the bookkeeping itself needs fixing;
  • you run more than one branch or entity and central costs need sharing out;
  • you need the cost of serving each customer or product, not just each group;
  • the report shows something you can’t explain;
  • or you’ve built it and nobody acts on it.
Ask LightWork for help