Your point of sale, booking system or accounting software holds a year of sales. Its reports screen answers the questions it was built to answer. The ones you'd ask, like which five things pay the rent, what's quietly shrinking and whether the regulars are worth more than the walk-ins, sit in the export, and nobody has asked the file.
1. Flat white
2. Sourdough loaf
3. Breakfast bap
4. Almond croissant
5. Cinnamon bun
Rows used: 400
Your spreadsheet has 9,000 rows
1. Sourdough loaf
2. Flat white
3. Almond croissant
4. Breakfast bap
5. Cinnamon bun
Rows used: 9,000
Matches your spreadsheet. Still check two numbers
ChatGPT and Claude can both read a CSV and run real code on it. The work is in what you give them and what you check afterwards.
Export a year of sales as a CSV
You want the most detailed sales file your software gives you: one row per sale or per item sold, with a date, the item or service, the quantity and the amount. A cost column is a bonus. Without one you get revenue answers, not margin.
- Square: export the report from Square Dashboard. You can pick the columns, and Square downloads a CSV.
- Shopify: export the report from your admin. For line-level detail, export from the Orders page: an export of orders by date arrives by email.
- Anything else: look for the export on its sales or item-sales report, and pick CSV.
Take twelve full months if you have them, so every month is whole. Keep the downloaded file as it is and do all your edits on a copy: the last step checks numbers against the original.
Checkpoint
One CSV covering a year of sales, and the original kept untouched.
Strip the people out before you upload
Open the copy in a spreadsheet and delete every column that names or reaches a person. Shopify's order export, for one, carries Email, Phone, Billing Name, Shipping Name, Billing Company, Shipping Company, both addresses, order Notes, Note Attributes, Tags, Employee and payment reference IDs. Then read every remaining column header and check a few rows of each, because notes and tags often hold a name.
Keep the date, the item, the quantity, prices, discounts, refunds, the total and the location. To count repeat buyers, the model needs a column that tells customers apart. Shopify's order export has no customer ID: its Id is the order ID and its Name is the order number. So before you delete the Email column, sort by it and add a column that gives each new email a number, then delete the emails.
A customer number can still be traced back to a person by anyone who has your original file. Treat the stripped copy as customer data, not as anonymous, and read the data settings of whichever tool you use before the first upload. Save it as a new file.
Checkpoint
A copy of the export where you've checked every column, with no names, emails, phone numbers, addresses or payment details left in it.
Check what the model read
the step that pays off
In Claude, check that Code execution and file creation is switched on; on a Team or Enterprise plan the organisation owner controls it. Claude's limit for this feature is 30MB a file. ChatGPT writes and runs Python for data tasks like this one. Attach the stripped CSV to a new chat and run the first prompt.
Then compare the row count it reports with the row count your spreadsheet shows. OpenAI's own help page says a file can upload and still not be analysed in full. If the numbers differ, stop there.
Read point 4 carefully. Shopify notes that some of its exports put one row per product in an order, so counting rows overcounts orders. Answer every
[ASK: ...]in a few plain lines: count refunds as negative, drop test orders, treat these two names as one product, cost is per unit so multiply it by quantity.Step 1: Check what the model read before it counts anything
Checkpoint
A row count that matches your spreadsheet, and a written answer to every question it asked.
Ask the five questions
Paste your answers from the last step into the block at the bottom of the second prompt, and run it in the same chat so the file is still loaded.
The rule doing the most work is the one that makes it show, under every answer, which columns and how many rows went into the number. A top-10 list built from 400 rows of a 9,000-row file looks exactly like one built from all of them until you read that line. OpenAI's help page says the same thing in its own words: review the code, outputs and assumptions before relying on the result. Claude's help page says you can review what it did in its sandbox.
Question 4 compares one season with the one before it. A café's summer against its spring is a different animal from a slump.
Step 2: Answer five owner questions, with the working shown
Pro tip
Ask for the monthly table as a line chart too. Both tools can draw one from the same file, and a dip is easier to see than to read.
Checkpoint
An answer or a marked gap for each of the five questions, each answer with the columns, filters and row count behind it.
Check two numbers against your software's own report
Take the two numbers the model listed under "Check these by hand", for example one month's revenue and the top seller's total. Open the same report in Square, Shopify or your accounting software, set the same date range, and compare.
Small gaps usually have a plain cause. Shopify's sales reports include pending, unpaid and cancelled orders, leave gift card sales out, and can list a renamed product on two lines. If the numbers don't match, paste both into the chat and ask which rows explain the difference. Don't act on the answers until they match or you know why they don't.
Checkpoint
Two numbers that match the source report, or a known reason they don't.
The takeaway
You end up with an answer or a marked gap for each of the five questions: what sells, what earns (only if your export has cost), how the months moved, what's slipping and how much the repeat buyers are worth (only if the file tells customers apart). Each answer comes with the working behind it, and two of the numbers are checked against your own software.
The limit: this tells you what happened, not why. A service that fell off could be a price change, a staff gap or a quiet season, and the export can't tell those apart. It's also only as good as the file. An export missing half the year's refunds gives you confident, wrong answers, which is why the last step exists.
Variations
Run it every quarter. Keep your step 1 answers in a note. Same export, same two prompts, same cleaning rules, so this quarter's numbers compare with last quarter's.
Get the tables back as a spreadsheet. Claude can create Excel files from the analysis. Ask for the five answers as one .xlsx with a tab each, and keep it next to the export it came from.
Add a question for locations. If you sell from more than one place and the export has a location column, add a sixth question: revenue by location by month.
Don't ask it to forecast next year. One year of data holds one of each season. The model will still give you a number if you ask, and it's built on almost nothing.