How to validate an Amazon inventory file before Seller Central upload
- Step 1Export the right template from Seller Central — Seller Central → Catalog → 'Add products via upload' → 'Download an inventory file' tab. Inventory Loader if you're adding/updating listings to ASINs already in Amazon's catalog (multi-category, ~12 columns). Listing Loader / Category-specific template if you're creating new listings (Clothing has ~80 columns, Electronics ~60, Books ~30). Or download the Active Listings Report if you're auditing what's already live. The downloaded file is an
.xlsmworkbook with three sheets — only the template sheet matters here; fill it in, then *Save As → Text (Tab delimited) (.txt)* with Unicode encoding from the dropdown (UTF-16 LE on Excel-for-Windows; UTF-8 on Excel-for-Mac via the 'Web Page' option or LibreOffice). - Step 2Drop the saved `.txt` (or `.tsv` / `.csv`) onto the validator above — Free tier: 2 MB / 500 rows per file. Pro: 100 MB / 100,000 rows. The dropzone explicitly accepts
.csv,.tsv, and.txt— no rename needed for Amazon's tab-delimited save. PapaParse auto-detects whether your file uses tab, comma, or semicolon, so a copy-pasted comma-CSV from a feed manager works the same way. - Step 3Read the four health-tile summary first — Health score (≥ 90 % is the cutoff for the green badge), Rows (total rows incl. header), Columns (header column count — the 'expected width' the row-width check uses), Issues (errors + warnings, capped at 250 reported per validation to keep the UI responsive). If
errors > 0, the file will fail Seller Central pre-processing; ifwarnings > 0buterrors == 0, the file may upload but produce processing-report errors after the row reaches Amazon's business-rule layer. - Step 4Walk the 'Top issues' panel for row-shape and encoding blockers first — Errors (red badge) are blockers:
row_width(row has wrong number of tabs) andencoding(replacement char\uFFFDor control char in a cell, almost always from Excel-saved-as-ANSI). Warnings (orange) are quality flags:type_mismatch,duplicate_header,duplicate_row,duplicate_key,empty_cell,suspicious_value. Click any issue's row/col reference to locate it in your source file. The(duplicate row)and(row width)placeholders are intentional — those checks compare against the whole row, not a single column. - Step 5Read the 'Column profile' panel — Amazon-specific column names get unique-key treatment automatically — Each column shows inferred type (
number/boolean/date/string/mixed/empty), filled count, and empty count. Columns the validator recognises as identifiers — names matchingsku,email,asin,upc,ean,barcode,id,reference, plus compound forms likeseller-sku,merchant-sku,order-id,product-id— automatically get duplicate-key checking on top of the standard duplicate-row check. Astringprofile onprice/quantityis a smoking gun: it means most of the column is text, not the other way around. - Step 6Download the JSON health report and fix in source — Click 'Download report' —
<filename>.health-report.jsoncontains the full stats, column profile, every issue with row/col references, and a 10-row preview. Fix in your source workbook (Excel/LibreOffice), not the saved.txt— the.txtis regenerated each time. Common fixes: re-save with the right encoding (csv-cleaner can also normalise UTF-8); strip stray currency symbols from price columns (csv-find-replace with regex[£$€¥]); remove duplicate SKU rows (csv-deduplicator on theskucolumn); rename mis-cased headers to match Amazon's exact column names (csv-header-rename). - Step 7Re-validate, then upload to Seller Central — Re-save the workbook → re-drop the new
.txt→ confirm health score moves up anderrorsdrops to zero. Then go to Seller Central → Catalog → 'Add products via upload' → 'Upload your inventory file' tab. Amazon's processing report arrives in the Monitor uploads view within minutes for files under ~5K rows; larger files can take 30+ minutes. Errors at that stage are business-rule errors (8541, 8016, etc.) — different layer to the structural checks here, but this report eliminates 80 %+ of the noise before it gets there.
What this validator actually checks
Eight issue types, mapped to Amazon-specific failure modes. Error severity = blocker (Seller Central rejects the file or row). Warning severity = quality flag (file uploads, but the row may fail a business rule at the processing stage).
| Issue type | Severity | What triggers it | Why Amazon files hit it |
|---|---|---|---|
| `row_width` | Error | Row's column count ≠ header's column count | An embedded tab inside product_description / bullet_point* splits the row; or you accidentally pasted a multi-line value into one cell |
| `encoding` | Error | Cell contains \uFFFD (replacement char) or control char < 0x20 (except \t \n \r) | Workbook saved as ANSI/CP1252 then re-opened as UTF-8 — é / ü / ß / ñ / 日本語 come back as ? or garbage. Most common with Excel-for-Windows saves |
| `duplicate_header` | Warning | Same header name appears twice in row 1 (case-insensitive) | Copy-pasting columns from a different template — e.g. two price columns, or sku and SKU |
| `duplicate_row` | Warning | Whole row identical to a previous one (case + whitespace normalised) | Re-pasting the same SKU twice; or merging an Inventory Loader file with the Active Listings Report without deduping |
| `duplicate_key` | Warning | Same value in a column whose name looks like a unique identifier (matches sku / seller-sku / merchant-sku / asin / upc / ean / barcode / id / etc.) | Two rows with the same seller-sku — Amazon's error 8005-class 'attempted identity change' usually traces back to this |
| `type_mismatch` | Warning | Column profile is number / boolean / date but a cell doesn't match (with 85 % dominance threshold) | £12.99 or 12,99 in price (Amazon expects 12.99 unquoted); Out of stock in quantity; 12/25/2025 in release-date (Amazon expects ISO-8601 2025-12-25) |
| `empty_cell` | Warning | Cell empty in a column that's > 85 % populated (≤ 15 % empty) | Skipped a price or quantity cell mid-file by mistake; intentionally-empty optional cols (bullet_point5) don't trigger — they're > 15 % empty |
| `suspicious_value` | Warning | Rare value (appears once) that's substring-similar to a common value (appears ≥ 2×) in a 2–12 distinct-value categorical column | new! next to new, Used - Like New vs UsedLikeNew, EUR vs Euro in currency — values that look like typos in Amazon enum fields (item-condition, fulfillment-center-id, currency) |
Amazon template columns the validator flags
Column names below are taken verbatim from Amazon's documented Inventory Loader / Listing Loader / category-template headers. The validator's unique-key detector matches these names case-insensitively and with separator-insensitivity (seller-sku, seller_sku, Seller SKU all match).
| Amazon column | Expected type | Detected as unique key? | Common failure flagged |
|---|---|---|---|
| `sku` / `seller-sku` / `merchant-sku` / `item-sku` | string | Yes | Duplicate SKU rows (duplicate_key); inconsistent casing (SKU-001 vs sku-001 resolves as duplicates) |
| `product-id` / `external_product_id` | string (numeric-looking) | Partial — id substring match | Excel dropped a leading zero on a 12-digit UPC (012345678905 → 12345678905 → flagged as too-short or duplicate) |
| `product-id-type` / `external_product_id_type` | number / string (enum: 1 ASIN, 2 ISBN, 3 UPC, 4 EAN, or literal ASIN/UPC/EAN/GTIN) | No | Mixed-type column (type_mismatch) — some rows say 3, others say UPC. Pick one convention |
| `asin` | string (10 alphanumeric, typically B0…) | Yes | ASIN has no checksum, so validation only checks 'looks like 10 alphanumeric chars' — pasted B07ABC123 (9 chars) flagged by row-shape, not content |
| `price` / `standard_price` / `list_price` / `sale_price` | number | No | £12.99 / $12.99 / 12,99 / 12.99 GBP → type_mismatch (Amazon expects bare decimals: 12.99) |
| `quantity` | number | No | Text values (Out of stock, TBD, 0 (held)) → type_mismatch. Blank quantity is valid for FBA rows (fulfillment-center-id = AMAZON_NA) — empty-cell warning only fires if most rows are populated |
| `item-condition` / `condition_type` | string (enum) or number (1–11) | No | suspicious_value on near-duplicates like New / new / New / new!. Amazon's valid enums: New, UsedLikeNew, UsedVeryGood, UsedGood, UsedAcceptable, Collectible*, Refurbished. The numeric form runs 1 (Used Acceptable) to 11 (New) — mixing strings + numbers in same file → type_mismatch |
| `add-delete` | string (enum a, d, x; blank = default a) | No | suspicious_value on stray values like A, add, ADD — Amazon's parser is case-sensitive in some templates |
| `fulfillment-center-id` | string (enum: AMAZON_NA for FBA, DEFAULT for FBM, or specific warehouse code) | No | suspicious_value on amazon_na vs AMAZON_NA vs Amazon NA — case matters at Amazon's parser |
| `upc` / `ean` / `barcode` / `isbn` | string (numeric digits, but stored as string to preserve leading zeros) | Yes | duplicate_key flags barcode collisions across SKUs (rare but breaks inventory); Excel-dropped leading zero shows as a too-short barcode (12 → 11 digits) |
| `brand_name` | string | No | suspicious_value on near-duplicate brand spellings (Sony vs SONY vs sony vs Sony Inc) — Amazon brand-gating treats these as different brands |
What the tool does and doesn't cover
This validator catches structural issues before upload. Amazon's own processing report catches business-rule issues after upload. The two layers are complementary — fixing structural issues here doesn't guarantee a successful upload, but skipping this step means burning a Seller Central upload-attempt to surface them.
| Check | JAD CSV Validator | Amazon Seller Central |
|---|---|---|
| Row-width drift, embedded tabs, malformed rows | Yes — row_width error before upload | Yes — but only after upload, in the processing report |
Encoding mojibake (\uFFFD / control chars) | Yes — encoding error before upload | Sometimes silent — listing creates with garbled text |
Duplicate sku / asin / barcode within file | Yes — duplicate_key warning before upload | Yes — error 8005-class identity mismatch |
Type drift in price / quantity / dates | Yes — type_mismatch warning | Yes — generic 'invalid value' error |
Near-duplicate category values (New vs new!) | Yes — suspicious_value warning | No — silently fails enum validation |
| ASIN exists in Amazon's catalog | No — structural-only validator | Yes — error 8541 / 8546 if ASIN matches with attribute mismatch |
| Brand restricted / gated category | No — out of scope | Yes — error 5665-class brand approval required |
| Price within Amazon's pricing rule (Fair Pricing, Buy Box) | No — pricing logic out of scope | Yes — listing suppressed, error 5461-class |
| Variation parent/child theme consistency | No — relational logic out of scope | Yes — error 8016 'Not Enough Data to Create Variation Relationship' |
| Compliance flags (HazMat, restricted products) | No — content-policy layer | Yes — error 5665 / dangerous-goods review |
| File size cap | Free 2 MB / Pro 100 MB | Amazon doesn't publish a hard MB cap, but practical max is ~20 K SKUs per upload (industry consensus, not Amazon-documented) |
Cookbook
Real Seller Central scenarios with the corresponding validator output. Every code block is a representative excerpt — column names match Amazon's documented template headers verbatim.
Row-width drift from an embedded tab in `product_description`
ExampleInventory Loader files are tab-delimited. If a product_description cell contains a literal tab character (common when product descriptions are pasted from PDFs or formatted documentation), the row gets split into too many cells. Validator catches this as row_width error before upload.
Header (10 cols, tab-separated):
sku\titem-name\texternal-product-id\texternal-product-id-type\titem-condition\tprice\tquantity\tproduct-description\tbullet_point1\tbullet_point2
Row 42 (12 cols — two extra tabs inside the description):
SKU-042\tWidget\t012345678905\tUPC\tNew\t12.99\t100\tBlue widget,\t100mm\tx\t200mm\tDurable\tCompact
^^^^^^^^^^^^^^^^^^^^
These two tabs were
inside the description cell
Validator output:
{
"row": 43, "column": 1, "columnName": "(row width)",
"type": "row_width", "severity": "error",
"detail": "Row has 12 columns; header has 10."
}
Fix: in source, replace tabs inside descriptions with single spaces
(csv-find-replace with regex `\t` → ` `), or wrap the
description cell in double quotes if the template supports it.Price column has currency symbols
ExampleAmazon's standard_price / list_price columns expect bare numerics — no £, $, €, no comma decimal separator, no inline currency code. Validator infers the column as number and flags symbol-prefixed cells.
Header:
sku,standard_price,quantity
Rows:
SKU-001,12.99,100 ← OK
SKU-002,£14.99,50 ← type_mismatch
SKU-003,15,50 ← OK (whole numbers fine)
SKU-004,16,50 ← OK
SKU-005,18.50 GBP,50 ← type_mismatch
SKU-006,19,99,50 ← type_mismatch (comma decimal — EU locale Excel save)
Validator output (2 issues):
Row 3: Expected number based on the column profile, but found "£14.99".
Row 6: Expected number based on the column profile, but found "18.50 GBP".
Row 7: Expected number based on the column profile, but found "19,99".
Fix: csv-find-replace with regex `[£$€¥]` → `` (empty), then
csv-find-replace with `(\d+),(\d+)$` → `$1.$2` to swap
EU comma-decimal to US/UK point-decimal.Duplicate `seller-sku` across rows
ExampleRe-pasting the same SKU on two rows is one of the most frequent flat-file mistakes — Amazon's processing report surfaces it as error 8005 ('attempted to change identity attributes'). The validator catches it because seller-sku matches the unique-key heuristic.
Header:
seller-sku\tproduct-id\tproduct-id-type\tprice\tquantity
Rows:
WIDGET-BLUE-100\t012345678905\tUPC\t12.99\t50
WIDGET-RED-100\t012345678912\tUPC\t12.99\t30
WIDGET-BLUE-100\t012345678905\tUPC\t14.99\t20 ← duplicate seller-sku
but different price/qty
Validator output:
{
"row": 4, "column": 1, "columnName": "seller-sku",
"type": "duplicate_key", "severity": "warning",
"detail": "Value \"WIDGET-BLUE-100\" also appears on row 2.
This column looks like a unique key."
}
Fix: decide which row wins — keep the first (csv-deduplicator,
strategy: first) or the last (strategy: last, treats the second
row as the price/qty update).UTF-16 BOM from an Excel-for-Windows 'Unicode Text' save
ExampleSaving the .xlsm template as 'Unicode Text' from Excel-for-Windows produces UTF-16 LE with a FF FE byte-order mark — not the UTF-8 Amazon's docs recommend. PapaParse handles the BOM, but you'll often see a leading \uFEFF on the first header cell that breaks exact column-name matching at Amazon's parser.
Raw hex (first 20 bytes of the file):
FF FE 73 00 6B 00 75 00 09 00 70 00 72 00 69 00 63 00 65 00
^^^^^
UTF-16 LE BOM
^^^^^ ^^^^^ ^^^^^
s k u (interleaved with 00 = UTF-16 LE)
Validator output (header parsed as):
Column 1 name: "\uFEFFsku" ← BOM stuck to the column name
Column 2 name: "price"
...
Result: the unique-key detector doesn't recognise "\uFEFFsku" as `sku`,
so duplicate-key checking on SKU silently disables.
Fix in Excel: Save As → File Format dropdown → 'Text (Tab delimited) (.txt)'
instead of 'Unicode Text (.txt)' — produces UTF-8 + tab,
not UTF-16 LE + tab.
Fix on existing file: csv-cleaner with the BOM-strip option, or open
in a UTF-8-aware editor and re-save without BOM.Mojibake from Excel-for-Windows 'CSV (Comma delimited)' save on accented product names
ExampleIf you save the template as 'CSV (Comma delimited)' instead of 'Text (Tab delimited)', Excel-for-Windows defaults to CP1252 / ANSI encoding, not UTF-8. Product names with German / French / Spanish / Polish accented characters re-open as garbage. The validator catches the \uFFFD replacement character pattern.
Header:
seller-sku,item-name,brand_name
Rows (CP1252-saved, opened as UTF-8):
SKU-DE-001,Café Crème (250g),Tchibo ← OK in CP1252
SKU-DE-002,Bayrische Wei�wurst,Metzgerei Müller ← \uFFFD (replacement char)
^ where ß was in CP1252
SKU-PL-003,�ledzie marynowane,Polmlek ← \uFFFD where Ś was
Validator output:
Row 3, Col 2 (item-name): encoding error — replacement character.
Row 4, Col 2 (item-name): encoding error — replacement character.
Fix path A (re-save in Excel):
File → Save As → File Format → 'CSV UTF-8 (Comma delimited)' on
Excel-for-Mac, or 'Text (Tab delimited)' on Excel-for-Windows
(which now defaults to UTF-8 from Excel 2019+ when extension is .txt).
Fix path B (already-saved file):
Open in VS Code → 'Reopen with Encoding → Windows 1252' → 'Save with
Encoding → UTF-8'. Re-run the validator to confirm 0 encoding errors.Suspicious `item-condition` near-duplicates
ExampleAmazon's item-condition field is an enum (New, UsedLikeNew, UsedVeryGood, ...). The validator's suspicious-value detector catches typos and casing/punctuation drift that silently fails Amazon's enum check at the processing stage.
Header:
seller-sku\titem-condition\tprice
Rows (15 rows total — condition column has 3 common values + 1 rare):
SKU-001\tNew\t12.99
SKU-002\tNew\t12.99
... (10 more rows with "New")
SKU-012\tUsedLikeNew\t9.99
SKU-013\tUsedLikeNew\t9.99
SKU-014\tUsedVeryGood\t8.99
SKU-015\tnew!\t12.99 ← rare value (appears once),
substring-similar to "New"
Validator output:
{
"row": 16, "column": 2, "columnName": "item-condition",
"type": "suspicious_value", "severity": "warning",
"detail": "Rare value \"new!\" looks close to common category \"New\"."
}
Fix: csv-find-replace exact match "new!" → "New".
Also check for: "new " (trailing space), "NEW" (uppercase),
"Used - Like New" (Amazon expects "UsedLikeNew", no spaces, no dash).Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Excel dropped leading zeros from `upc` / `ean` / `gtin` (Amazon error 8541)
Excel autoconversionWhen you paste or import a 12-digit UPC into Excel, it autoconverts the cell to a number — 012345678905 becomes the number 12345678905 and loses the leading zero. The validator catches this two ways: (1) type_mismatch if other rows kept the leading zero (column profile becomes string, the numeric one stands out); (2) duplicate_key if two different UPCs lose their leading zeros and collide. Amazon error 8541 ('Product ID corresponds to ASIN but attributes don't match') frequently traces back to a stripped leading zero. Fix: in Excel, format the column as Text *before* pasting data; or re-import as a CSV with the column wrapped in ="012345678905" to force text.
ANSI/CP1252 save corrupts accented product names (German, French, Spanish, Polish, Italian)
Encoding mismatchExcel-for-Windows older than 2019 defaults to ANSI / CP1252 when saving as .csv. Accented characters (é, ü, ß, ñ, Ś, ł) become ? or \uFFFD when Seller Central reads them as UTF-8. The validator catches this as encoding error wherever the replacement char appears. Fix path A: save as .txt (Tab delimited) which defaults to UTF-8 in Excel 2019+. Fix path B: save as 'CSV UTF-8 (Comma delimited)' in Excel-for-Mac. Fix path C: convert the existing file with csv-cleaner — open the cleaner's encoding option, force UTF-8. Per Amazon's docs, legacy MWS endpoints expected ISO-8859-1; the current Selling Partner API expects UTF-8 — match what your upload path needs.
Embedded tabs inside `product_description` / `bullet_point*` split rows (no error code — just silent rejection)
row_width errorTab-delimited templates don't tolerate literal tabs inside cells unless the cell is wrapped in double quotes, and most Amazon templates don't quote any cells. A description pasted from a PDF or formatted source document often carries hidden tabs that split a 30-column row into 32 columns. Seller Central's processing report says something like 'Row has unexpected structure' without giving the column count. The validator reports the row immediately with row_width error and the exact column-count delta. Fix: run csv-find-replace on the description column with regex \t → (literal tab to single space) before re-saving as .txt.
Wrong template chosen — Listing Loader columns submitted to Inventory Loader endpoint
Wrong templateInventory Loader has ~12 columns; Clothing Listing Loader has ~80; Books Listing Loader has ~30. If you submit a Clothing-template file to the Inventory Loader endpoint (or vice-versa), Seller Central rejects every row with 'Column header doesn't match any defined attribute'. The validator can't tell you you've picked the wrong template (it doesn't know which endpoint you're targeting), but it will show every column the file has — compare the column-profile panel against Amazon's Data Definitions sheet for your target endpoint. Rule of thumb: Inventory Loader is *only* for adding listings to ASINs Amazon already has; for new listings, use the category-specific Listing Loader.
Numeric `item-condition` (1–11) mixed with string `item-condition` (`New`, `UsedLikeNew`) in same file
type_mismatch warningAmazon's older Inventory Loader templates accepted numeric item-condition (1 = Used Acceptable, 11 = New). Current templates accept enum strings. Some teams have legacy spreadsheets where half the rows say 11 and the other half say New — the column profile becomes mixed and every cell of the non-dominant type gets a type_mismatch warning. Fix: pick one convention (string is current-preferred) and find-replace the numeric values with their string equivalent. Don't submit a mixed file — Amazon's processing report will accept some rows and reject others depending on the parser's tolerance, leaving you with a partial-upload state.
FBA rows have blank `quantity` — empty-cell warning is correct here, but doesn't mean broken
Expected emptiness — verify, don't bulk-fixFor FBA listings (fulfillment-center-id = AMAZON_NA), quantity is left blank because Amazon manages stock from your FBA inventory, not from your file. If your file is mostly FBM (you fulfill yourself) with a few FBA rows, the column will be > 85 % populated and the FBA blanks will trigger empty_cell warnings. This is the validator behaving correctly — don't auto-fill the blanks; verify the warnings correspond to rows with fulfillment-center-id = AMAZON_NA, then ignore those specific warnings. If your file is mostly FBA, the column will be > 15 % empty and the warning won't fire — also correct.
Practical row cap on the Amazon side (~20 K SKUs per file)
Industry consensus, not Amazon-documentedAmazon doesn't publish a hard MB or row cap for inventory file uploads. Sellers and third-party tooling vendors consistently report ~20,000 SKUs per file as the practical ceiling before uploads start failing silently or sitting in the queue indefinitely. The validator on JAD's free tier caps at 500 rows; Pro at 100,000 — so a 19 K-SKU Amazon file fits comfortably under Pro. Mitigation for the Amazon-side cap: split with csv-row-splitter into 10K-row chunks before upload, and submit each as a separate Seller Central job. Each job gets its own processing report — easier to triage than a single 20 K-row failure.
Active Listings Report has different headers from Inventory Loader — don't validate cross-template
Different schemaThe Active Listings Report (Seller Central → Inventory → Inventory Reports → 'Active Listings') uses different column names from the Inventory Loader (item-name vs product-name, listing-id extra column, no add-delete). If you're using the Active Listings export as a source for an Inventory Loader update, you need to rename columns first — csv-header-rename handles the mapping, then this validator confirms the new headers match the target template's expected names.
Frequently asked questions
Does the validator work on Amazon's tab-delimited `.txt` files, or do I need to convert to `.csv` first?
It works on the tab-delimited .txt directly — no conversion needed. The validator's dropzone accepts .csv, .tsv, and .txt extensions, and PapaParse auto-detects whether your file uses tab, comma, or semicolon as the field delimiter. Drop the file Amazon told you to upload exactly as you saved it from Excel's 'Text (Tab delimited)' option. If your file has a .xlsm extension, you still need to do the Save As step first — the validator doesn't read Excel binaries, only text-format flat files.
What's the difference between Inventory Loader, Listing Loader, and category-specific templates — does this validator handle all three?
Yes — all three are tab-delimited text files with a header row, so the validator handles them identically. The differences are column count and use case: Inventory Loader has ~12 columns and is for *updating listings on ASINs Amazon already has* (cheap, fast, no new-product creation). Listing Loader / Category-specific templates have 30–80+ columns and are for *creating new listings*. Each Amazon category (Clothing, Electronics, Books, Beauty, ...) has its own template with category-specific attribute columns. The validator doesn't enforce which template you should use — that's a Seller Central business-rule decision — but it'll happily validate the shape of whichever one you've got.
Can the validator catch Amazon error 8541 (Product ID matches ASIN but attributes don't match)?
Partially — it catches the most common structural cause (Excel dropping a leading zero from a 12-digit UPC, making the product-id match a different ASIN than you intended). It can't catch the business-rule cause (your title/brand/colour doesn't match Amazon's catalogue entry for that ASIN) — that only surfaces in Seller Central's processing report. If the validator shows type_mismatch warnings on a product-id column whose profile is string, that's a strong leading-zero signal. Fix in source (csv-find-replace with regex ^(\d{11})$ → 0$1 to re-prepend stripped zeros), then re-validate.
What's the difference between an error (red) and a warning (orange) in the health report?
Errors are blockers Amazon will reject the file or row over: row_width (wrong tab count → Seller Central reads the row as malformed) and encoding (replacement char or control char → 'Invalid character in input' processing-report error). Warnings are quality flags that may pass the file's structural check but fail business-rule validation downstream: type_mismatch (£12.99 in price), duplicate_header, duplicate_row, duplicate_key, empty_cell, suspicious_value. Health-score colour codes use 90 % as the cutoff — green ≥ 90, orange < 90 — but a 95 % score with one row_width error is still a blocker; read the errors panel, not just the score.
Why is the validator capped at 250 reported issues?
Performance — rendering 10,000 issue rows in the browser is slow and not actionable (if you have 10,000 issues, fixing one at a time isn't the workflow; you want a bulk transform). The stats panel still shows the *total* count (Issues: 12,847), but only the first 250 are listed in detail. If you hit the cap, the file probably has a single systemic problem (delimiter mis-detection, whole-column type drift, encoding mismatch) — fix that one root cause, re-validate, and the issue count usually drops to single digits. If 250 isn't enough granularity, the downloaded JSON health report also contains only the first 250 issues, so re-run validation on a smaller slice (split with csv-row-splitter).
How does the suspicious-value detector work for Amazon enum columns like `item-condition`?
A column qualifies for the suspicious-value scan if: (1) inferred type is string or mixed; (2) it has between 2 and 12 distinct values; (3) at most 60 % of cells are unique (i.e., it looks categorical, not a free-text or unique-id column). For each rare value (appears exactly once), the detector checks whether it's substring-similar (startsWith, endsWith, or includes) to a common value (appears ≥ 2×). On item-condition, this catches new!, new , NEW, Used - Like New as substring-similar to New/UsedLikeNew. It won't catch a wholly different typo like Brand-new (no substring overlap with New), so it's a high-precision low-recall heuristic — use it as a tip-off, not exhaustive validation.
Will this validator catch missing required Amazon columns (like a missing `price` column entirely)?
No — the validator profiles whatever columns are *in the file*. If you've dropped the price column entirely, the validator just won't report on it. You're responsible for matching Amazon's template column set. Open Amazon's template, copy the header row, paste into a comparison tool (or just diff in VS Code), and confirm before saving. Common omissions: forgetting add-delete (defaults to a so usually fine), forgetting fulfillment-center-id (required for FBA/FBM distinction), or having extra columns left from a previous template that Seller Central will reject.
What encoding should I save my Amazon inventory file as — UTF-8 or ISO-8859-1?
UTF-8 for the current Selling Partner API (SP-API) endpoints — Amazon's SP-API reports are now UTF-8 across all marketplaces. ISO-8859-1 (Latin-1) for the legacy Marketplace Web Service (MWS) endpoints, which Amazon's docs explicitly call out for North America and Europe submissions. Shift_JIS for Japan, UTF-16 historically for China. The validator catches encoding *failures* (replacement chars, control chars) but doesn't tell you which encoding your upload path expects — check the endpoint docs for the marketplace and API you're submitting to. As a rule of thumb: tab-delimited .txt saved as 'Unicode Text' in modern Excel-for-Windows produces UTF-16 LE (with BOM); 'Text (Tab delimited)' produces UTF-8. Pick the one that matches your endpoint.
Can I run the validator against the Amazon-emailed processing report to check what fixes are needed?
Yes, but it's tangential — Amazon's processing report is itself a tab-delimited .txt with columns like original-record-number, sku, error-code, error-type, error-message. Dropping it into the validator confirms the report file's structure (helpful if you're parsing it programmatically) but won't decode the business-rule errors themselves. For decoding, cross-reference error-code against Amazon's published error-code list (codes like 8005, 8541, 8016, 5665, 5461 — see Amazon's Listings Troubleshooting docs).
Does the validator preserve my Amazon file's pricing strategy, supplier SKUs, and ASIN data privately?
Yes — PapaParse runs entirely client-side in your browser. Cell contents never reach a JAD server. The only thing saved server-side is a single counter (file validated, no content) for signed-in dashboard stats; you can opt out in account settings. This matters for inventory files specifically — they often contain supplier SKUs (your wholesale partners' identifiers), cost-of-goods inferences from pricing strategy, and complete ASIN lists that competitors would value. Browser-local processing keeps that data on-device. For automation, the JAD runner can run the same validator on 127.0.0.1:9789 — still no JAD-server contact.
How does this compare to Seller Central's built-in 'pre-upload' Excel check?
Amazon's templates include macro-based cell validation *inside* the .xlsm workbook — colour-coded required fields, dropdown enums on item-condition / product-id-type, etc. Those checks fire only if (a) you have macros enabled in Excel and (b) you're editing inside the workbook. The moment you Save As → .txt, those validations are stripped. The JAD validator runs on the *saved* file you're about to upload — it catches the issues that creep in *during* the Save As step (encoding loss, leading-zero stripping, embedded-tab splits) that Amazon's in-workbook validation can't see. Run both: Amazon's macros to catch enum violations on the data sheet, then JAD to catch shape/encoding issues on the saved .txt.
Is the validator suitable for automated pipelines (CI/CD, scheduled feed updates)?
Yes — pair the @jadapps/runner once, then POST your inventory .txt to 127.0.0.1:9789/v1/tools/csv-validator/run. Returns the same ValidationReport JSON the browser UI produces (stats, columns, issues, preview, healthScore). Common pipeline: nightly product-feed export → JAD validator (fail the build if stats.errors > 0) → upload to Seller Central → poll processing report. Catches structural regressions before they burn a Seller Central upload-attempt — and the runner is on-device so inventory data never leaves your machine.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.