Upload · Chat · Preview · Export

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.

01

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.

02

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”.

03

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.

04

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 headerField
PRODUCT.NAMEname — required
PRODUCT.DESCRIPTIONdescription — HTML cleaned to plain
PRODUCT.SKUsku — unique, deduped
PRODUCT.CATEGORYcategory — required
PRODUCT.PRICE.SELLINGsellingPrice — numeric ops exact
PRODUCT.PRICE.COSTcostPrice
PRODUCT.PRICE.COMPAREpriceCompare — must be > selling
PRODUCT.MIN.MAX.QUANTITYminQty / maxQty
PRODUCT.TAX_PERCENTtaxPercent
PRODUCT.STATUSstatus — active / inactive
PRODUCT.INVENTORYinventory
PRODUCT.LABELSlabels
PRODUCT.TAGStags
PRODUCT.IMAGESimageUrl
PRODUCT.IDid — optional, for updates

Option-level columns

CSV headerField & allowed values
NAMEoption name — e.g. Size
TYPEsingle | multiple
ENABLE_RANGEenableRange — true / false
RANGErange — [min, max]
REQUIREDrequired — true / false
VIEWlist | card
VARIANTSvariants — 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.

YouRemove HTML <br> from descriptions and make all prices 15% cheaper
Before: Uploaded row
PRODUCT.NAMEChicken Tikka
PRODUCT.DESCRIPTIONSpicy<br>grilled<br>fresh
PRODUCT.PRICE.SELLING100
PRODUCT.CATEGORYChicken
PRODUCT.STATUSactive
PRODUCT.TAGSspicy
HTML still embedded; price is pre-discount. Exporting now would show raw <br> in Hyperzod.
After: Chat-edited row
PRODUCT.NAMEChicken Tikka
PRODUCT.DESCRIPTIONSpicy grilled fresh
PRODUCT.PRICE.SELLING85
PRODUCT.CATEGORYChicken
PRODUCT.STATUSactive
PRODUCT.TAGSspicy
HTML cleaned to plain text; price 100 → 85 (15% off via applyNumericOp). Variant deltas and unmentioned columns preserved.

What changed under the hood

  • description authorized, HTML <br> → plain via deterministic strip; commas re-quoted safely.
  • sellingPrice decrease_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.

Upload + describe

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.

Review the diff
  • 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.
Tip: Inferred or changed cells are highlighted — review them first.
Refine & 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 tool

Everything 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.

Ready 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