A CSV.
It runs a small read-only script (Python 3 standard library) and reports rows, columns, each column's type, blanks, distinct values, ranges, duplicates, mixed formats, stray spaces, case variants and outliers, then lists questions to ask the data's owner. Without code execution it profiles a pasted sample and says so.
Before and after
Taken from the skill's README.
Before: Opening a 891-row export and scrolling for a few minutes to see if it looks fine.
After (skill output, from a real test run): Test run on a public 891-row passenger CSV. It reported 19% blank in Age (177 rows) and 77% blank in Cabin, 15 zero fares, 53 high fare outliers, a Ticket column that should be read as text, trailing spaces in names and 2 blank Embarked values, named the two rows, and asked the owner eight questions, such as whether Fare is per person or per ticket. It changed nothing in the file.
See it run

What it does
Give it a CSV. It runs a small read-only script (Python 3 standard library) and reports rows, columns, each column's type, blanks, distinct values, ranges, duplicates, mixed formats, stray spaces, case variants and outliers, then lists questions to ask the data's owner. Without code execution it profiles a pasted sample and says so.
How it was tested
1 run on a real public CSV (Claude Sonnet) with the script.
Tested on a real example before release. The example is shown in the Before and after section above.
How we test, what we do not do, and which assistants we ran it on.
Limits
- It reads only. It never edits, sorts or cleans the file.
- A profile cannot tell you whether values are true or whether rows are missing.
- Without code execution it works from the sample you paste and says so. Counts cover only that sample.
- It does not guess what unclear columns mean. It asks.
Works with
Works in ChatGPT or any chatbot: you paste in your details and it writes the result. The chargeback kit also has Word letters you can fill in by hand, with no AI. The profile script needs Python 3 (standard library only). Without code execution it profiles a pasted sample.
For people who use AI assistants
- Run
npx skills add proskillpacks/skillsin your project and pick this skill. Or copy thecsv-profile-and-sanity-checkfolder from GitHub (https://github.com/proskillpacks/skills/tree/main/skills/data/csv-profile-and-sanity-check). - Put the
csv-profile-and-sanity-checkfolder where your assistant looks for skills. The generic path is.agents/skills/(ornpx skills addfrom a folder). Tool-specific paths:- Claude Code:
~/.claude/skills/(or.claude/skills/inside one project) - OpenAI Codex, Gemini CLI, Cursor and others:
.agents/skills/or the skills folder their docs name - claude.ai: zip the skill folder yourself, then Customize, Skills, the plus button, Create skill, Upload a skill (code execution must be on in Settings, Capabilities)
- ChatGPT or any chatbot: open the skill's
prompt.md, paste it into the chat, then paste your own text or link - Steps for each tool, with links to its official docs: how to install Agent Skills
- Claude Code:
- Ask for the job in plain words, for example: "Profile this CSV before I use it: [file]. It should contain ...". The skill loads by itself.
Get it
MIT licence. Use it, change it, share it.
Related
- Free guide to do it by hand: How do I check a CSV file before I use it?
- Free text to paste into ChatGPT or any chatbot: CSV sanity check prompt for ChatGPT or Claude
- More for people who work in spreadsheets: Data and spreadsheets
Report a problem with this skill (GitHub, or write to kaiventura.founder@gmail.com).