Start from one AI job, not from all your data. List the records that job needs, export them into one working copy, fix the fields the AI will read (dates, categories, names and free-text notes), strip out anything it shouldn't see, write a short description of each column, and test on 20 real examples before connecting anything live.
Most small businesses have enough data for useful AI work. The problem is usually that it's spread across four systems and described four different ways. The eight steps below pull it together for one job at a time, with a data dictionary template and a test that tells you whether the data is ready before you trust any answer built on it.
The running example is an illustrative photography studio with five people, doing family, newborn and business headshot sessions, with about 1,400 client records built up over six years.
Step 1: Name the job and the question it answers (20 minutes)
"Get our data ready for AI" has no finish line. "Find past family clients who are due a follow-up session" does. Write one sentence describing the job, then list the facts the AI needs to do it. Everything else is out of scope for now.
JOB: Find past family-session clients whose last shoot was 11-14 months
ago, so we can invite them back.
FACTS NEEDED: client ID, first name, email, marketing permission (Y/N),
session type, session date, number of sessions to date.
NOT NEEDED: addresses, payment details, gallery links, children's names.
The "not needed" line is as important as the rest. It shrinks the cleaning work and keeps sensitive data out of the job entirely. Other jobs would need different facts: "why don't enquiries turn into bookings?" needs enquiry source, date, service asked about and outcome, but no email addresses at all.
Step 2: Map where each fact lives (30 minutes)
For each fact on your list, find where it's actually recorded. For the studio:
| Source | Holds | Format | Problem found |
|---|---|---|---|
| Booking system | Session dates and types since 2023 | CSV export | Earlier years missing |
| Old client spreadsheet | Clients from before 2023 | Spreadsheet, one tab per year | Different columns on each tab |
| Email marketing tool | Marketing permission | CSV export | Matches clients by email only |
| Invoicing app | Payments, useful for session counts | CSV export | Some invoices under a partner's name |
| Paper consent forms | Permission to use images | Paper in a filing cabinet | Not needed for this job |
Two things usually come out of this step. You find a fact is recorded in two places that disagree (the booking system and the email tool held different marketing permissions for 40 clients). And you find a fact isn't recorded anywhere reliably, which tells you what to start capturing from today.
When two sources disagree, decide which one wins for each fact before you merge, and write the rule down. For marketing permission, the studio chose the email tool, because that's where clients actually unsubscribe: of the 40 conflicts, most were a "Y" in the booking system for someone who had clicked unsubscribe a year later. For the rest, where the email tool had no record at all, the rule was the cautious one: treat the permission as unknown. Picking the source per fact takes minutes and stops the merge quietly reinstating people who said no.
Step 3: Export everything into one working copy (1 hour)
Pull each source out as a CSV file, the plain comma-separated format every tool can read, and combine them in one spreadsheet. Four habits prevent most later problems:
- Keep the raw exports untouched in a dated folder. You'll want to go back to them when something looks odd.
- Add a "source" column to every row so you always know where a record came from.
- Give each record a stable ID. If your systems don't share one, create it (C0001, C0002…) and use it everywhere. It's also what lets you remove names later without losing track of who's who.
- Save as UTF-8 CSV when asked, so accented names don't turn into strings of odd symbols when another tool opens the file.
That last one shows up in a way that's easy to misread. The studio's first combined file had a first name that appeared as "Renée" in one source and "Renée" in another, so the duplicate check treated them as two different clients. Nothing looked broken; there were just 30 or so more "unique" clients than there should have been. Re-exporting the old spreadsheet as UTF-8 fixed all of them at once.
Step 4: Fix the structure the AI will read (2 to 4 hours)
This is where most of the work goes. AI tools read your data literally; a human can see that "Fam", "family" and "Family shoot" mean the same thing, but a model counting sessions may not. Work through these fixes in order:
- One fact per column. Split "Newborn - Sept - paid" into session type, month and payment status.
- One format for dates. Convert every date to year-month-day (2025-04-03). This matters more than it looks: "03/04/2025" means different days in different conventions, and a mix of the two in one column produces confident, wrong answers.
- A fixed list for categories. Decide the allowed values (Family, Newborn, Headshot, Event) and map every variant to one of them. A data-validation drop-down stops new variants creeping in.
- Numbers as numbers. Remove currency symbols and "approx" notes from number columns, and put the currency in the column heading instead.
- Blanks mean one thing. Decide whether blank means "unknown" or "none", and replace "N/A", "-", "0" and "tbc" with that single convention.
- No layout tricks. Remove merged cells, subtotal rows, notes typed below the data and colour-coding that carries meaning. An AI tool reading the file can't see that red rows were "didn't pay".
Here's one row from the old spreadsheet's 2021 tab before and after those fixes (illustrative):
| Field | Before | After |
|---|---|---|
| Session | Fam shoot - park | session_type: Family; location: Outdoor |
| Date | 3/4/21 | 2021-04-03 (checked against the invoice, which said 3 April) |
| Amount | $350 approx | amount_usd: 350 |
| Paid | Row shaded red | paid: N |
| Repeat client? | N/A | Blank (the convention chosen for "unknown") |
The date line is the one to copy. When a date could be read either way, don't guess the convention for the whole tab: check a few rows against another record, such as the invoice, and convert the tab once you know.
If you're working in a spreadsheet, cleaning messy data has the formulas for most of these fixes.
Step 5: Make free-text notes usable (1 to 2 hours)
Notes fields are often the most valuable data a small business holds ("wants outdoor shoot next spring", "second baby due in March") and the messiest. You have two options for existing notes. You can leave them as text and let the AI read them in context, which works for small volumes. Or you can have AI extract specific fields from them, which works better at scale:
For each note below, extract:
- future_interest: the session type mentioned for the future, or blank
- timing: when they said they'd want it (as written), or blank
Return a table with the client ID and those two fields only.
If a note doesn't mention either, leave both blank. Do not guess.
On four of the studio's notes, the first run came back like this (illustrative):
| Note | future_interest | timing |
|---|---|---|
| C0233: "Loved it. Want to come back when the baby arrives, due March." | Newborn | due March |
| C0418: "Asked about headshots for her business at some point" | Headshot | at some point |
| C0561: "Kids were tired, lovely blossom shots though" | Family | spring |
| C0702: "Maybe a Christmas mini session?" | Christmas mini | Christmas |
The first two are right. The third is invented: the client expressed no future interest, and the model turned "blossom" into a spring booking despite "do not guess". The fourth used a value outside the studio's category list. Two edits fixed both: listing the allowed session types in the prompt, and adding "only extract an interest the client said they have; a description of this session is not a future interest".
Run it on a company AI account, on notes stripped of anything the job doesn't need, and check 20 results by hand before trusting the rest. For new notes, a simple structure (what happened, what they want next, when) stops the problem recurring.
Step 6: Remove what the job doesn't need (30 minutes)
Go back to the "not needed" line from step 1 and delete those columns from the working copy. For jobs that don't need to know who a person is (spotting trends, analysing enquiry sources), replace names and emails with the client ID. If you haven't sorted your data by sensitivity yet, classifying business data before using AI tools gives you a four-tier scheme for deciding what goes where.
The awkward case is a job that genuinely needs a sensitive fact. The studio's second job was inviting newborn clients back for a first-birthday session, which needs to know roughly when each baby was born. The working copy kept a single column, baby_month, holding the year and month of the newborn shoot (2025-11), and nothing else: no baby's name, no exact birth date, no notes about the birth. The shoot month is close enough to time an invitation, and it's far less sensitive than the details sitting in the original booking notes. Ask of every sensitive field whether a coarser version would do the job; it usually will.
Step 7: Write a data dictionary (30 minutes)
A data dictionary is a short description of each column. It helps the next person, and it helps the AI: pasting it in alongside the data cuts misreadings sharply.
DATA DICTIONARY: family_followup_v1.csv Refreshed: monthly by [name]
client_id Unique ID, format C0001. One row per client.
first_name As the client gave it.
email Lower case. Blank = no email held.
marketing_ok Y = permission given, N = refused or withdrawn.
Blank = unknown; treat as N.
session_type One of: Family, Newborn, Headshot, Event.
last_session Date of most recent session, YYYY-MM-DD.
session_count Number of paid sessions to date (from invoices).
source booking_system / old_sheet / merged.
The line "Blank = unknown; treat as N" is the kind of instruction that prevents a real mistake: emailing people who never gave permission.
Step 8: Test on 20 cases where you already know the answer (1 hour)
Before you rely on the data, pick 20 records you know well and ask the AI questions whose answers you can check. For the studio: "Which of these clients qualify for the follow-up invitation, and why?" Then mark each answer right or wrong.
Their first test scored 16 out of 20. Three errors came from dates that hadn't been converted (one export wrote dates month first, everything else day first), and one from a client listed twice under a maiden name and a married name. Four rows of the test sheet show how each kind looked:
| Client | Known answer | AI said | Right? | Cause |
|---|---|---|---|---|
| C0107 | Qualifies: family shoot 2025-09-20, marketing_ok Y | Qualifies | Yes | |
| C0388 | Qualifies: last shoot 2 August 2025 | Doesn't qualify, "last session 19 months ago" | No | Stored as 08/02/2025 (month first), read as 8 February |
| C0519 | Doesn't qualify: booked again in March 2026 under her married name | Qualifies | No | Duplicate record |
| C0650 | Doesn't qualify: marketing_ok blank | Doesn't qualify | Yes | The dictionary's "treat as N" rule worked |
Asking the AI to give its reason, as in the C0388 row, is what makes the causes quick to find. After fixing both kinds of error, the retest scored 20 out of 20. For duplicates like that one, cleaning up customer records before you add AI covers matching and merging properly.
If the job involves analysing figures rather than picking records, add a second test: ask for a total you can check against your accounts. If the AI's number doesn't match, the data or the question needs fixing before anyone acts on it. When the studio asked for paid sessions in 2025, the AI said 212 and the invoicing app said 204. The gap was eight refunded sessions, still in the working copy as ordinary rows because the export listed refunds as separate lines with negative amounts. Adding a refunded column and one line to the dictionary ("exclude refunded = Y from all counts") brought the two figures together. What to upload and check when AI analyses a spreadsheet has more tests of this kind.
How long it took the studio, and what it cost
| Step | Time | Result |
|---|---|---|
| 1-2: job and sources | 50 minutes | One job, five sources mapped |
| 3: working copy | 1 hour | 1,400 rows combined |
| 4-5: structure and notes | About 4 hours | 1,150 unique clients after merging duplicates; 1 in 5 had no session type until notes were read |
| 6-7: trimming and dictionary | 1 hour | Seven columns kept out of 23 |
| 8: testing and fixes | 1.5 hours | 20 out of 20 on the retest |
About eight hours in total, with no new software: a spreadsheet and the studio's existing AI account. The first follow-up campaign built on it went to around 90 qualifying clients. The second job took half the time, because the IDs, date formats and category lists were already in place. That's the real return on this work: each job after the first is cheaper. To see where the studio took the campaign next, filling mini-session slots with AI marketing picks up the story.
Keeping it ready after the first job
A working copy starts ageing the day you make it. Three habits stop you redoing the whole exercise in six months:
- Fix problems at the source, not in the copy. If the booking system lets staff type any session type they like, add a drop-down there. Every fix you make only in the working copy has to be made again at the next export.
- Name one owner and one refresh date. The studio's office manager re-exports on the first Monday of each month and updates the "Refreshed" line in the dictionary. It takes about 40 minutes now that the steps are known.
- Version the file, don't overwrite it. Save each refresh with the date in the name (family_followup_2026-10-05.csv) and keep the previous two. When an answer looks wrong, you can check whether the data changed or the question did.
These habits matter even more once an AI tool is connected directly to a system rather than reading an export, because there's no longer a copy between your data and the answers.
Signs your data still isn't ready
- Answers change when you ask the same question twice. Often a sign the AI is guessing around ambiguous fields.
- Totals don't match your accounts. Duplicates, refunds counted as sales, or rows from the wrong period.
- New category values keep appearing. The drop-down lists aren't enforced at the point of entry.
- The AI fills blanks with plausible values. Tighten the instruction ("leave blank; do not guess") and check your dictionary says what blank means.
For a broader clean-up before a bigger project, the data readiness checklist covers every system at once rather than one job at a time.
Further reads
- Do You Need a Lot of Data to Use AI in Your Business? — Why most small businesses already have enough data to start.
- What Business Data Should You Start Collecting Now for AI? — What to start recording now so next year's data is better.
- Airtable vs Google Sheets for Business Data AI Can Use — Where to keep the working copy once it grows.
- How to Organise Shared Files So AI Tools Can Use Them — The same job for documents rather than records.
- Business Data Backup Checklist Before You Connect AI Tools — Back up before any tool gets write access.
- AI Vendor Lock-In: How to Keep Your Data and Prompts Portable — Keep your prepared data portable between tools.
- Go Paperless Before You Add AI: A Step-by-Step Plan — Which paper to kill, which to scan and which to leave in the cabinet, so AI tools have clean files to work from. Six steps, about eight weeks.
- Can ChatGPT Read PDFs, Spreadsheets and Photos? What Breaks — What ChatGPT reads well in PDFs, spreadsheets and photos, the features that make it misread or skip things, and a five-minute test before you trust a figure.
- What to Prepare Before You Set Up AI Marketing — An eight-part preparation checklist, filled in for a farm shop, with a fact-sheet prompt and a one-page brief you can copy.
- How to Clean Up a Messy CRM With AI — A four-day CRM clean-up: audit the mess, merge duplicates safely, let AI standardise fields and rescue facts from notes, and set rules so it stays clean.
- How to Build a KPI Dashboard With AI When You Have No Data Team — From 'we should track this' to a one-screen dashboard: KPI definitions, a clean data tab, AI-written formulas, the right tool and a weekly comment.
- How to Train ChatGPT on Your Business Information Safely — You don't retrain ChatGPT; you give it context. A grooming salon's project shows which files go in, which settings to change and how to test answers.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.