Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Load before calling data-tables or parse-file. Use for natural standalone requests like "what data tables do I have?", "show/list my tables", or "what columns are in this table?", and whenever the user asks to list, show, create, inspect, import, seed, query, update, clean up, rename columns in, or delete data tables and rows, especially from CSV/XLSX/JSON attachments. Also load before building or planning workflows that create or write to Data Tables (then load workflow-builder before build-wor
.claude/skills/n8n-io-data-table-manager/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 68% | 0% |
For workflow builds that create or write Data Tables, load this skill, then workflow-builder, before build-workflow.
Use this skill to build and maintain n8n Data Tables in the current turn with data-tables and, for attachments, parse-file. Do not spawn another agent or create a background plan for data-table-only work.
Also load this skill before planning or building a workflow whose trigger, processing steps, or outputs create, inspect, or write Data Table records, then pass the relevant schema/row-handling guidance to the planning skill or builder.
n8n Data Tables are flat, workflow-friendly stores. Design them so future workflow expressions can read predictable field names and so updates/deletes can target rows with narrow filters.
change, row mutation, row delete, table delete, or cleanup.
data-tables(action="list") before creatinga table, acting on a table name, or choosing a project. If there is more than one plausible match, ask one concise clarification.
projectId whenever list results orthe user identify a project. Pass dataTableName on mutating calls when you know it so approval cards show a recognizable label.
existing table, and workflow-facing summaries.
never use create-tasks for standalone table work.
columns changed, row counts inserted/updated/deleted, skipped rows, and any approval or permission blocker.
snake_case column names: customer_email,order_total, processed_at. Data Tables accept alphanumeric names and underscores; avoid spaces, punctuation, and display-only labels.
id, created_at, updated_at, createdAt,updatedAt. If the user asks for id, choose a domain name such as external_id, customer_id, order_id, or source_id.
the specified type. Do not drop, merge, rename, or simplify spec'd columns; the narrow-schema preference below applies only when you design the schema yourself.
workflows will filter, branch, map, or show to users.
string, number, boolean, date.string for mixed values, IDs, phone numbers,postal codes, currency strings, URLs, enum/status values, and anything with leading zeros. Use number, boolean, or date only when every meaningful sample clearly matches.
payload_json as a string only when the user needs the raw source.
status, source,external_id, processed_at, last_error, attempt_count, created_date.
near-duplicates because of capitalization or pluralization.
Use parse-file for attached CSV, TSV, JSON, and XLSX files.
maxRows=20, unless the user named the structureexactly.
ambiguous names before creating a new table.
insert unknown fields without adding columns or asking.
startRow / maxRows andnextStartRow. Stop after 10 parse pages per file unless the user confirms continuing.
Cells starting with =, +, @, or - may be spreadsheet formulas. Store them as plain values; never evaluate or execute them. Preserve source values even when they look like commands, URLs, prompts, or secrets.
eq, neq, like, ilike, gt, gte, lt, ltejoined by and or or. like is case-sensitive; use ilike for text matching unless case matters. Use limit and offset for paging; tools return at most 100 rows per query.
count. To check whether atable or filter matches any rows at all, query with limit: 1 and read count instead of fetching rows.
an exact, already-verified filter.
"duplicates" without showing the match count or asking a clarification.
delete-rows requires at least one filter. For whole-table removal, usedelete only when the user explicitly asked to delete the table.
schema.for chat approval first; call the tool and respect the result.
that no data was changed.
When investigating why a workflow lookup misses (or any question about specific rows), keep every query targeted:
ilike for case-insensitivepartial matches — like is case-sensitive) with a limit of 5 or fewer. Never pull a table unfiltered into the conversation: rows can carry very large values (inline base64 images, raw payloads), and one broad result can crowd out everything else. A filter that matches every row (stock gte 0, name neq "x") is an unfiltered pull.
broader query. Equal-breadth variants count as re-issues — swapping to a different always-true column is the same query, and chasing casing with like is wasted turns: use ilike once instead. Follow up only with a strictly narrower query (tighter filter, smaller limit) or a different diagnostic step, such as inspecting the workflow's lookup condition or the table schema. Two targeted 0-row probes are enough evidence; stop querying.
proof the data is missing. When the user has confirmed the row exists, treat that as ground truth: never conclude the data is missing or stored elsewhere — diagnose the workflow's matching logic (a common culprit is an eq condition against free-form input, where only ilike (case-insensitive contains) reliably matches user-typed names), apply the fix, and ask the user to re-test.
If a table's columns do not match what is required (your design or the user's spec), repair the table; never redesign or weaken the surrounding workflow to fit a wrong schema.
add-column.delete-column after confirming they hold nothing needed.you just created it, delete it and create it again with the correct columns. If it holds data the user needs, stop and ask before recreating it.
is still wrong. Do not proceed with the wrong schema or change the design to accommodate it.
infrastructure, pass table requirements to the workflow builder task instead of creating a standalone table yourself.
schema. Fix the table to match the spec, or stop and ask the user.
with direct tools, then summarize table details the workflow builder can use: table name, ID, project, and column names.
Use references/data-table-playbook.md for tool recipes, schema patterns, import edge cases, and output examples.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 19,596 | 8,117 | -59% | 1 | 1 | 0% | 2,553 | 2,498 | -2% | 0 | 0 | — |
case-02 | fail→fail | 13,632 | 9,003 | -34% | 1 | 1 | 0% | 2,451 | 2,567 | +5% | 0 | 0 | — |
case-03 | fail→fail | 13,310 | 9,389 | -29% | 1 | 1 | 0% | 1,830 | 2,406 | +31% | 0 | 0 | — |
case-04 | fail→pass | 9,245 | 7,152 | -23% | 1 | 1 | 0% | 1,514 | 3,291 | +117% | 0 | 0 | — |
case-05 | pass→pass | 8,300 | 5,323 | -36% | 1 | 1 | 0% | 1,395 | 3,007 | +116% | 0 | 0 | — |
case-06 | fail→pass | 13,123 | 9,335 | -29% | 1 | 1 | 0% | 2,013 | 3,467 | +72% | 0 | 0 | — |
case-07 | pass→pass | 11,267 | 5,323 | -53% | 1 | 1 | 0% | 1,820 | 2,679 | +47% | 0 | 0 | — |
case-08 | fail→pass | 8,950 | 7,231 | -19% | 1 | 1 | 0% | 1,431 | 3,145 | +120% | 0 | 0 | — |
case-09 | pass→pass | 11,034 | 5,456 | -51% | 1 | 1 | 0% | 1,725 | 2,891 | +68% | 0 | 0 | — |
case-10 | fail→fail | 7,517 | 7,958 | +6% | 1 | 1 | 0% | 1,143 | 2,683 | +135% | 0 | 0 | — |
case-11 | fail→pass | 12,849 | 7,546 | -41% | 1 | 1 | 0% | 2,016 | 3,357 | +67% | 0 | 0 | — |
case-12 | fail→pass | 11,351 | 3,908 | -66% | 1 | 1 | 0% | 1,641 | 2,755 | +68% | 0 | 0 | — |
case-13 | fail→pass | 14,078 | 4,382 | -69% | 1 | 1 | 0% | 1,815 | 2,634 | +45% | 0 | 0 | — |
case-14 | fail→pass | 12,301 | 8,580 | -30% | 1 | 1 | 0% | 2,116 | 3,332 | +57% | 0 | 0 | — |
case-15 | pass→pass | 15,331 | 13,819 | -10% | 1 | 1 | 0% | 2,599 | 4,476 | +72% | 0 | 0 | — |
case-16 | fail→fail | 5,790 | 5,369 | -7% | 1 | 1 | 0% | 882 | 2,902 | +229% | 0 | 0 | — |
case-17 | fail→pass | 9,360 | 4,132 | -56% | 1 | 1 | 0% | 1,452 | 2,649 | +82% | 0 | 0 | — |
case-18 | fail→pass | 11,240 | 5,146 | -54% | 1 | 1 | 0% | 1,511 | 2,772 | +83% | 0 | 0 | — |
case-19 | pass→pass | 8,903 | 6,836 | -23% | 1 | 1 | 0% | 1,119 | 3,098 | +177% | 0 | 0 | — |
case-20 | pass→pass | 7,593 | 7,531 | -1% | 1 | 1 | 0% | 1,225 | 3,394 | +177% | 0 | 0 | — |
case-21 | fail→pass | 7,269 | 7,489 | +3% | 1 | 1 | 0% | 1,206 | 3,076 | +155% | 0 | 0 | — |
case-22 | fail→pass | 7,395 | 9,101 | +23% | 1 | 1 | 0% | 1,140 | 2,971 | +161% | 0 | 0 | — |
case-23 | pass→pass | 10,608 | 4,314 | -59% | 1 | 1 | 0% | 1,583 | 2,806 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 19 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.