Chat to Edit Your CSV — Fix Columns in Plain English
Upload your existing Hyperzod CSV and fix columns with plain English. Clean HTML tags, adjust prices by percent, fix empty categories and inventory — then preview and export without retyping rows.
Works with any Hyperzod export · No signup required · Validates before export
15+
editable Hyperzod fields
0
accidental column shifts
Exact
percent math in code
Editing 200 rows by hand creates 200 chances to break the import
The hard part isn't changing one price — it's changing hundreds without drifting, without dragging HTML into the description, and without shifting columns. A spreadsheet find-and-replace on "100" hits product names that contain the same digits; a copied HTML description exports with <br> still inside; and one unquoted comma moves every field after it.
Leftover HTML
Descriptions copied from a CMS carry <br>, <p> and <div>. Hyperzod shows them as text, not line breaks. Fixing 200 rows manually always misses some.
Percent math drifts
15% off ₹100 is ₹85.00 — obvious for one row, but hand-typed discounts round inconsistently across a catalog. Variant deltas on top of the base multiply the error if you edit variant cells directly.
Shifted columns
A description "Spicy, grilled" without quotes shifts every column after it — PRODUCT.IMAGES lands in PRODUCT.TAGS and the import reports mismatched columns.
CSV Pilot keeps the file structure intact — you describe the rule once, the tool applies it exactly and shows every affected row before export.
How it works
Four steps from messy upload to import-ready export — no column hunting.
Upload your CSV
Drop your existing Hyperzod CSV (or any file with CSVMeta.HEADERS). It is parsed, validated and shown in the preview grid. Inferred or empty fields are highlighted.
Describe the fix
Type the rule as you would to a colleague: “Remove <br> tags from descriptions and make everything 15% cheaper” or “Set inventory to 0 for Sale category”.
AI applies with safety
authorizeEdit scopes allowed fields, extractNumericOps computes percent changes in code, and deepDiff + restoreEntries keeps unmentioned columns untouched. Targeted edits stay sliced.
Review & export
Check the grid — every changed cell is visible. Fix outliers by clicking. When validation is green, export a Hyperzod-compatible CSV ready for Admin → Catalogue → Import.
Supported data — only real Hyperzod fields
Every column below is a real field from lib/schema.ts (CSVMeta.HEADERS and CSVMeta.OPTION_HEADER_NAMES) and the editable surface guarded in lib/brain-edit.ts / lib/edit-intent.ts. No invented headers. Fields you don't mention are preserved via diff-restore — nothing is hallucinated as a new column.
Product-level columns (editable via chat)
| CSV header | Field |
|---|---|
| PRODUCT.NAME | name — required |
| PRODUCT.DESCRIPTION | description — HTML cleaned to plain |
| PRODUCT.SKU | sku — unique, deduped |
| PRODUCT.CATEGORY | category — required |
| PRODUCT.PRICE.SELLING | sellingPrice — numeric ops exact |
| PRODUCT.PRICE.COST | costPrice |
| PRODUCT.PRICE.COMPARE | priceCompare — must be > selling |
| PRODUCT.MIN.MAX.QUANTITY | minQty / maxQty |
| PRODUCT.TAX_PERCENT | taxPercent |
| PRODUCT.STATUS | status — active / inactive |
| PRODUCT.INVENTORY | inventory |
| PRODUCT.LABELS | labels |
| PRODUCT.TAGS | tags |
| PRODUCT.IMAGES | imageUrl |
| PRODUCT.ID | id — optional, for updates |
Option-level columns
| CSV header | Field & allowed values |
|---|---|
| NAME | option name — e.g. Size |
| TYPE | single | multiple |
| ENABLE_RANGE | enableRange — true / false |
| RANGE | range — [min, max] |
| REQUIRED | required — true / false |
| VIEW | list | card |
| VARIANTS | variants — name, price delta, cost, inventory, description, image |
VARIANTS encoding
Each variant is name, price, cost, inventory, description, image. Price is delta over base — e.g. XL,60.00,0.00,100,,. Edits that touch variants use the same deterministic quoting so commas inside descriptions never shift the image field. Nested options to two levels are confirmed; a third triggers a validation warning.
Edit authorization
Your sentence is mapped via authorizeEdit to an allowlist (e.g. description + sellingPrice). After the model replies, deepDiffProducts + restoreEntries reverts any change outside that allowlist, and applyNumericOp applies percent changes exactly in code.
Transformation example
One chat line fixes HTML and reprices — before and after, single row view.
| PRODUCT.NAME | Chicken Tikka |
|---|---|
| PRODUCT.DESCRIPTION | Spicy<br>grilled<br>fresh |
| PRODUCT.PRICE.SELLING | 100 |
| PRODUCT.CATEGORY | Chicken |
| PRODUCT.STATUS | active |
| PRODUCT.TAGS | spicy |
| PRODUCT.NAME | Chicken Tikka |
|---|---|
| PRODUCT.DESCRIPTION | Spicy grilled fresh |
| PRODUCT.PRICE.SELLING | 85 |
| PRODUCT.CATEGORY | Chicken |
| PRODUCT.STATUS | active |
| PRODUCT.TAGS | spicy |
applyNumericOp). Variant deltas and unmentioned columns preserved.What changed under the hood
descriptionauthorized, HTML<br>→ plain via deterministic strip; commas re-quoted safely.sellingPricedecrease_pct 15 applied in code; 100 × 0.85 = 85.00 for every matching row.- Other fields (category, status, tags, sku, inventory) untouched — diff protection reverted any stray model edit.
Example workflow
Copy this flow for your next bulk fix — it works for 10 rows or 1,000.
You upload
products_export.csv — 214 rows · categories: Chicken, Beverages
You
Remove HTML <br> from descriptions and make everything 15% cheaper.
CSV Pilot
✓ Scoping description + sellingPrice · ✓ Computing 214 prices
Be explicit about field and percent. The tool does not guess numbers.
- Descriptions now plain — no <br> remains?
- Every sellingPrice × 0.85? (100 → 85, 299 → 254.15)
- Category, SKU, inventory unchanged?
- Click any cell to fix outliers before export.
You
Keep Beverages out of the discount — revert them to original prices.
CSV Pilot
✓ Reverting Beverages slice · ✓ Preserving Chicken discounts
Then click Export CSV — the file matches the preview exactly and imports via Hyperzod Admin.
Open the toolEverything you need to fix a catalog
Plain-English edits
Say what to change — “set category to Beverages for coffees” — no header lookup. Synonyms and Hinglish are resolved via the trie index.
Exact numeric ops
Percent and set operations are extracted by extractNumericOps and applied by applyNumericOp in code. 100 → 85 is always 100 × 0.85, never guessed.
HTML & quoting cleanup
Remove <br> and other tags to plain text, and re-quote commas deterministically so PRODUCT.IMAGES never lands in PRODUCT.TAGS.
Targeted scope
“This product” or a name/SKU like “Peri Peri Chicken 1” edits only that slice via targetedEdit. “All products” is category-scoped by default to avoid cross-type leaks.
Change protection
deepDiffProducts + restoreEntries revert any unmentioned field the model tried to change. Vanishing options trigger a warning before you export.
Live validation
Missing category, negative price, compare ≤ selling, duplicate SKU, or 3-level nesting — flagged inline. dedupeSkus keeps SKUs unique.
Click-to-edit grid
Every cell is editable. Inferred or changed values are highlighted. What you see is what is exported — named export matches preview.
Limitations — honest scope
The editor drafts fixes for review. It does not replace your judgment, and it does not bypass Hyperzod's import rules.
No invented columns
Only headers from CSVMeta.HEADERS and CSVMeta.OPTION_HEADER_NAMES exist. A request that implies a new field is ignored or flagged — check the grid if a new column was expected.
No image hosting
Provide public HTTPS URLs you control in PRODUCT.IMAGES or variant image fields. The tool does not upload or host images.
No live inventory sync
PRODUCT.INVENTORY is a snapshot. Real stock is managed in Hyperzod after import.
Nesting depth is 2 levels confirmed
Variants → nested options (2 levels) is confirmed. A third level triggers a validation warning — verify against a real import before relying on it.
Ambiguous phrasing needs follow-up
“Make it cheaper” without a percent or target has no deterministic op — the tool asks a clarifying question. Say “15% cheaper” or “set price to 85” for an exact change.
Validation is not the import itself
The preview catches missing categories, price errors and SKU duplicates, but Hyperzod's importer has the final say. Fix errors in the grid and export again.
Frequently asked questions
Can I edit a CSV I exported from Hyperzod or another tool?
Yes. Upload any CSV that follows the Hyperzod structure — exports from Hyperzod Admin, vendor sheets mapped to CSVMeta.HEADERS, or CSVs created in CSV Pilot. The file is parsed against the 15 product headers and 7 option headers, shown in the preview grid, and then editable by chat. You review before export.
What fields can I change via chat?
All product-level fields from lib/schema.ts — name (PRODUCT.NAME), description (PRODUCT.DESCRIPTION), sku (PRODUCT.SKU), category (PRODUCT.CATEGORY), sellingPrice (PRODUCT.PRICE.SELLING), costPrice (PRODUCT.PRICE.COST), priceCompare (PRODUCT.PRICE.COMPARE), minQty/maxQty (PRODUCT.MIN.MAX.QUANTITY), taxPercent (PRODUCT.TAX_PERCENT), status (PRODUCT.STATUS), inventory (PRODUCT.INVENTORY), labels (PRODUCT.LABELS), tags (PRODUCT.TAGS), imageUrl (PRODUCT.IMAGES) — plus option-level NAME, TYPE, ENABLE_RANGE, RANGE, REQUIRED, VIEW and VARIANTS. Mention the field or a synonym; unmentioned fields are preserved.
How does “make everything 15% cheaper” stay exact?
The intent is parsed by extractNumericOps and computed by applyNumericOp in lib/edit-intent.ts — not by the LLM. “15% cheaper” is detected as decrease_pct 15 on sellingPrice, and each price is calculated in code: 100 → 85.00, 499 → 424.15. The model decides scope; code does the math, so rounding is consistent across 500 rows.
Will columns I didn't mention stay untouched?
Yes. authorizeEdit builds an allowlist from your instruction, and deepDiffProducts + restoreEntries revert any change to a non-authorized root field (unless you explicitly touched options). mergeProducts preserves rows you didn't target, and a post-merge check warns if options vanished unexpectedly. The summary lists what was preserved.
Can I edit only one product without affecting the rest?
Yes. Say “for this product” or include its name or SKU — e.g. “Fix description of Peri Peri Chicken 1 — remove <br> tags” — and the target resolver isolates that index and runs targetedEdit only on that slice. A 1-of-200 edit leaves the other 199 rows byte-identical. If the name matches many rows, it falls back to full-catalog logic to avoid accidental partial edits.
What about HTML tags, commas and broken quoting in my upload?
Descriptions that contain HTML like “Spicy<br>grilled” or commas like “Spicy, grilled” are handled deterministically: tell the tool “remove HTML tags” and it strips <br> to plain text, while export quoting (normalize.ts / generator) always quotes fields that contain commas so PRODUCT.IMAGES never shifts into PRODUCT.TAGS. Re-validate in the preview — the error count must be zero before export.
Related guides
How to Edit a CSV File
Safe ways to edit: single-cell fixes, bulk find-and-replace, and chat-based rule edits — plus the validation checklist that prevents corrupt imports.
Read guideCSV Validation Before Import
What the validator checks — required fields, SKU uniqueness, price sanity and variant encoding — and how to fix flagged rows before export.
Read guideBulk Price Updates With AI
Percentage discounts, category-scoped caps and cost-price rules — one sentence replaces an hour of spreadsheet formulas, with exact math.
Read guideReady to fix your CSV?
Upload your file, describe the fix in plain English, review the preview and export a Hyperzod-ready CSV. No signup, no column manual.
Takes < 60 seconds to clean HTML and reprice a 214-row catalog