Catch property listing data-quality errors before catalogue import: ambiguous currency labels, missing land-area units, duplicate property IDs, invalid review dates and unknown source metadata. An open-source, offline tool by NovAsia Estate for property-data workflows across Cambodia, Thailand and Indonesia, including Bali.
Download the release ZIP, unpack it and open index.html in a modern browser. The single HTML file includes the complete browser application. Paste/import your property JSON, validate it, filter errors versus warnings and export a JSON report or spreadsheet-safe issue CSV. No account, API, server, analytics or network connection is needed. Your records are not uploaded or stored.
sample.json is entirely fictional and deliberately includes bad fields. It is not a market dataset, developer price list or confirmed property inventory.
id, title and market KH, TH or ID.sqm, sqft, rai, ngan, sqwah, are or hectare.synthetic/unconfirmed records as warnings for review.There is no currency conversion, no inferred unit, no default price and no legal/investment eligibility output. A currency label's syntax is checked, not whether the code is issued. A structurally sound record can be completely false; sources are not fetched or authenticated.
Missing/null price and area are allowed and flagged as unknown. Zero is an explicit zero, never substituted for an unknown value. Extra fields are retained in your input and ignored by validation. Known objects with missing/invalid required fields are errors. ID is a country code, not a claim to cover only Bali.
{"schemaVersion":1,"records":[{
"id":"your-id","title":"Your property title","market":"TH",
"price":{"amount":"3500000","currency":"THB"},
"area":{"value":"45.5","unit":"sqm"},
"sourceUrl":null,"checkedOn":null,"evidenceType":"unconfirmed"
}]}
At most 1000 records; CLI/browser file limit 1 MiB. Decimal strings have at most 8 fractional digits and 32 characters. No thousands separators, exponent notation or negative values. Empty datasets report zero records, not a successful property check. Source/date may be null, omitted or empty (warnings). The editor is for small trusted inputs, not a repository for customer identities or confidential agreements.
property.schema.json is a JSON Schema 2020-12 core shape contract. The application implements additional semantic checks and warning policy, including duplicate identifiers, real dates and source URL protocols; it is not a general-purpose JSON Schema interpreter. JSON Schema validation alone is not equivalent to this complete report.
Node 22+, no runtime dependencies:
node cli.cjs sample.json json
node cli.cjs sample.json csv > issues.csv
node --test validator.test.cjs
node build.cjs
Exit codes: 0 no structural errors (warnings may remain), 1 structural errors, 2 file/root/JSON/usage errors. Reads the specified file and writes to stdout, without modifying it. CSV escapes quotes and prefixes formula-like text; raw JSON values are unchanged.
const {validate} = require('./engine.js');
const report = validate(require('./sample.json'));
console.log(report.invalid); // 1 deliberate invalid fixture
console.log(report.needsReview); // 2 fictional/unconfirmed fixtures
MIT licence. This software checks data consistency, not ownership, live availability, permits, contract enforceability or whether someone should buy a property.