Draft, pending test: written from current vendor docs. We have not run this workflow end to end yet, so nothing below is a measured result. Not indexed.

AI for data analysis: a step-by-step workflow on a real CSV

Start with a schema-and-quality prompt that forces the model to describe columns, types, missing values and odd rows before any analysis. Then ask for a short analysis plan, approve it, and move the actual calculations into Google Sheets (or Python) so every number is checkable. Treat the AI's first totals and charts as draft until you've re-run the formulas yourself.

Who it's for & level

Operators, founders and marketers who live in spreadsheets, already use ChatGPT, and need a trustworthy read of a CSV (exports from Stripe, HubSpot, GA, your own app) without becoming a data scientist.

Level
intermediate
Tools
ChatGPTGoogle Sheets
Roles
Operators Founders & small biz
Goals
Automate busywork
Tasks
Workflow automation
Time to set up
20–40 min for a checked first analysis (est.)
Cost
Included in a paid ChatGPT or Claude plan. Large files use more of the plan's message/file quota. Google Sheets is free for this size of work.
Time saved
1–2 h of manual pivot tables and formula hunting on a new export (est.) (est.)
Test status
Pending test
Last verified
pending test
Model versions
n/a
Written by
Usecased editorial (pending test) (agent)
Published
2026-10-15

Prerequisites

The problem

Dumped CSVs sit for weeks because opening them means figuring out column meanings, cleaning blanks and building pivots. Asking ChatGPT 'analyze this' produces confident charts that invent columns, misread dates or average percentages. You need a workflow that uses AI for the messy exploration and keeps the numbers somewhere you can audit.

Steps

  1. Scrub the export. Drop columns you don't need and anything personally identifiable you don't want in a chat. Keep a copy of the original. Note the date of the export and the filter used (e.g. 'paid customers, last 90 days').
  2. Profile the file first. Upload the CSV and run the profile prompt below. Do not ask for insights yet. The goal is a shared map of the columns, types and quality issues.
  3. Fix or document quality issues. If the profile finds blank IDs, mixed date formats or duplicate rows, either clean them in Sheets first or tell the model how to treat them. Wrong cleaning = wrong answers later.
  4. Ask for a plan, then approve it. Give your business question and ask for a short analysis plan (which columns, which aggregations, which filters). Approve or edit the plan before any charts.
  5. Run the analysis. Ask for the results as tables, not just prose, with the exact formula or SQL-style expression used for each number. Prefer 'here's the Sheets formula' over 'the average is 12.4%'.
  6. Re-run the key numbers in Sheets. Paste the CSV into Google Sheets, apply the formulas the model gave you, and compare. Any mismatch means the chat answer is wrong until you reconcile it.

Exact prompt & config

1. Profile prompt
I've uploaded a CSV. Do not analyze it yet.
Return:
1. Column list: name, inferred type, example values, % missing.
2. Row count and any duplicate-key candidates (suggest which column looks like an ID).
3. Oddities: mixed formats, outliers in numeric columns, columns that look like free text.
4. Three clarifying questions before any analysis.
If a column is unclear, say "unclear" rather than guessing its meaning.
2. Plan prompt
Business question: which subscription plan had the highest churn rate in the last 90 days, and what share of churned users cancelled within the first 30 days?
Columns you can use: plan, status, signup_date, cancel_date, mrr.
Propose an analysis plan: filters, definitions (what counts as churned), aggregations, and the output tables. Wait for my OK. No numbers yet.
3. Analysis + Sheets formulas
Plan approved. Compute the tables.
For every number, give me: the result, the filter used, and a Google Sheets formula that would compute the same thing if the CSV is on Sheet1 with headers in row 1.
Flag any number you're less than confident about.
4. Sanity-check follow-up
Recompute churn rate for plan "Pro" only, showing numerator and denominator separately.
If your earlier Pro churn figure doesn't match, explain which definition differs.

Sample output

Example output, written to show the expected shape. Not captured from a real run yet.

(Example of the expected shape, not a captured run)

Profile: 12 columns, 4,812 rows. plan (enum: Free/Pro/Team), status, signup_date (ISO), cancel_date (blank if active), mrr (number). 3% of rows missing plan. signup_date has 14 values like "09/01/2026" mixed with ISO.
Plan approved → Tables:
  Churn by plan (90d): Free 18.2% (n=…), Pro 9.1% (n=…), Team 4.4% (n=…)
  Of churned, cancelled ≤30d: Free 61%, Pro 44%, Team 29%
Sheets formula example:
  =COUNTIFS(B:B,"Pro",D:D,">="&TODAY()-90,C:C,"cancelled") / COUNTIFS(B:B,"Pro",D:D,">="&TODAY()-90)
Flagged: Free-plan "churn" may include users who never activated; confirm definition.

Why profile first

Jumping straight to ‘find insights’ is how you get confident nonsense. A forced profile step makes the model show its homework: which columns it thinks it has, which rows it will drop, how it will treat blanks. Most mistakes surface there, before any chart exists.

Moving the final numbers into Sheets (or Python) is the other half. The chat becomes a planning and drafting tool; the spreadsheet becomes the source of truth.

The loop that keeps you in control

  1. Scrub secrets and note the export filters.
  2. Profile columns, types, missingness, oddities.
  3. Plan the analysis against a single business question.
  4. Compute with formulas or code you can see.
  5. Re-run the key figures outside the chat.

If a number can’t be reproduced, it isn’t a finding.

Going further

Save the profile and plan prompts as a custom GPT / Claude Project instruction so every new export starts the same way. For recurring reports, have the model write the Sheets formulas once, then refresh the sheet from a new CSV without going back to chat.

How it went

Pending test. What we expect, based on the vendor docs and public reports below. This becomes a measured result after our run.

Expected result, pending our test: the profile step should surface real quality issues, and the Sheets re-run should catch at least one wrong number from the chat on a messy CSV. We'll record how often the first totals matched Sheets, which error types showed up (date parsing, % of %, wrong filters) and how long a checked analysis took.

Worth knowing

FAQ

Can ChatGPT analyze a CSV?

Yes, on plans that support file uploads. Upload the file, ask for a schema and quality profile first, then for the analysis. Always re-check key numbers in Sheets or code.

Is AI accurate for data analysis?

It's good at exploring and suggesting approaches, and unreliable at exact aggregations. Use it to plan and draft, then compute the numbers yourself.

ChatGPT or Claude for CSV analysis?

Both work. Pick the one whose file limits fit your export, and run the same profile → plan → Sheets-check loop on either.

What about Code Interpreter / Advanced Data Analysis?

When available, prefer it for the calculations (it runs real Python). Still ask it to print the code it ran and spot-check a couple of results.

Related use cases