QUICK START / VERSION 0.1.0 · BUILD 2
Your first check.
A result you can explain.
ExportCheck is available. This guide explains how to use your download. The free sample pack contains invented inputs and generated reports, not the paid CLI. You can inspect its result now without running or buying anything.
1. Check the requirements
You need a terminal and Python 3.11 or later. There are no third-party Python packages to install, no server and no online activation. The current build has been tested on macOS/Python 3.14 and Ubuntu 24.04 x86_64/Python 3.12.3. Windows and other combinations remain unverified.
python3 --version
These commands use a macOS/Linux shell. If Python is missing or older than 3.11, the tool is not ready to run on that machine. Do not upload your data to an online converter to work around a local setup problem.
2. Run the included synthetic example
With the full product ZIP extracted, open a terminal in the folder containing exportcheck.py. Run this command once, with a new output directory:
python3 exportcheck.py examples/before.csv examples/after.csv \ --profile examples/profile.json --out demo-report --demo
The expected verdict is FAIL, with exit status 1. The invented example contains one added record and one changed record. Two records are unchanged under the chosen rules. Row reordering and an amount difference of 0.005 within the allowed 0.01 tolerance do not fail the check.
Open demo-report/report.html in your browser. The same folder contains report.json and differences.csv. An acceptance failure is a useful result; it does not mean the program crashed.
| Exit | Meaning | Next step |
|---|---|---|
| 0 | PASS: the comparison met the profile's rules. | Review whether those rules are appropriate. PASS does not certify the data. |
| 1 | FAIL: differences or ambiguity failed acceptance. | Inspect the report, including duplicate keys and schema differences. |
| 2 | The check could not finish because of input, configuration or file access. | Read the terminal error. Do not treat a previous report as the new result. |
3. Choose a stable key for your own exports
Use a column that identifies a record in both files, such as order_id. If one order has multiple lines, use a composite key such as ["order_id", "line"]. Physical row number is not a stable identifier when exports are reordered.
Copy examples/profile.json to a new file and edit it. For example:
{
"version": 1,
"keys": ["order_id", "line"],
"numeric_tolerance": {"amount": "0.01"},
"ignore_columns": [],
"max_added": 0,
"max_removed": 0,
"max_changed": 0
}
Column names must match your headers. The amount tolerance is an absolute difference, not a percentage. Keep decimal tolerances as quoted strings. Do not copy the example tolerance into a real workflow without deciding that it is acceptable.
Leading zeros and letter case in keys are preserved. Trimming keys, trimming values and ignoring case are off by default. Missing or duplicate keys fail acceptance; duplicates are not silently removed.
4. Keep each comparison separate
python3 exportcheck.py before.csv after.csv \ --profile profile.json --out review-001
Use a fresh output directory for each run. If review-001 already exists, choose another name. Existing results are protected from accidental overwrite. The tool does not modify either input file.
Keep both original inputs, the profile and all three reports together. Input SHA-256 fingerprints are recorded in the report. HTML limits some large detail sections for readability; consult JSON and CSV for the full comparison.
If something is wrong
- Cannot open the script or a file: check your current folder and paths. Put paths containing spaces in quotes.
- Output directory already exists: choose a new directory. Do not delete old evidence just to make the command pass.
- Invalid profile: use valid JSON and actual header names. No comments or trailing commas.
- Wrong separator: set
"delimiter": ";",",","|"or"\t"in the profile. Both files use that explicit separator. - Encoding or size error: inputs must be UTF-8 CSV (UTF-8 BOM is supported). Limits per file are 20 MiB, 100,000 records, 200 columns, 1,000,000 cells and 1 MiB per cell. XLSX and legacy encodings are not supported.
Protect the results, too
The program runs offline and makes no network or AI calls. Its reports can still contain your source data. Keep real inputs and reports private, and share them only with authorized recipients. Formula-like CSV output is protected with an apostrophe; removing that protection can make spreadsheet software interpret a value as a formula. JSON preserves raw strings.
For help, contact support with the error text after removing private values, or a few invented rows. Never send confidential customer files, payment details or credentials. For a separate service that formats a small non-sensitive product CSV, see CatalogOps.