CSV Quality Validator - Batch Schema Report
Pricing
from $4.00 / 1,000 validated tables
CSV Quality Validator - Batch Schema Report
Validate pasted CSV tables with Frictionless. Row, field and error codes only; no raw CSV or cell values in reports. Completed checks are billable even when CSV has errors; input and technical failures are free.
Pricing
from $4.00 / 1,000 validated tables
Rating
0.0
(0)
Developer
Yukai Lin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
CSV Quality Validator
What it does
Validate 1–20 pasted CSV tables with Frictionless. This Actor accepts CSV text only: no URLs, uploads, paths, remote schemas, profiles, references, or plugins. Each CSV is limited to 256 KiB and the entire input to 1 MiB. A table can have an optional schema with field name, type (string, integer, number, date), required and unique.
How to use
Paste one or more CSV strings into tables, give each table a short name, and optionally supply a field schema. Run the Actor and read one Dataset report per table plus the SUMMARY key-value record. valid:false means the quality check completed and found data errors; success:false means the input or check failed.
Input example
{"tables":[{"name":"orders.csv","csvText":"id,total\n1,12.50\n","schema":{"fields":[{"name":"id","type":"integer","required":true,"unique":true},{"name":"total","type":"number"}]}}]}
Output example
The Dataset has one report per table: inputIndex, name, valid, errorCount, errors (at most 100 {rowNumber,fieldName,code} entries), truncatedErrors, success, charged, and errorType. SUMMARY gives checked, invalidData, invalidInput, technicalFailures, charged, table-validated, status, and interruptedClaims.
For the input above, a successful check can return {"inputIndex":1,"name":"orders.csv","valid":true,"errorCount":0,"errors":[],"truncatedErrors":0,"success":true,"charged":true,"errorType":null} and SUMMARY with "table-validated":1 when one event is charged.
Pricing
A completed, saved check emits one candidate table-validated event, including CSVs with duplicate headers, missing cells, type errors, or failed constraints (valid:false, success:true, charged:true). Blank/oversized/invalid input, a failed runner, or a report that cannot be saved is free. The candidate event and its price require owner approval before publication. The pricing file uses a provisional $0.005/table for margin modelling, not an approved public price.
Limitations
Raw CSV and cell values are not written to logs or reports. Only the table name and error locations/codes are kept in Dataset; the raw CSV is read only from the run input and is not copied to another store. A small progress record holds hashes and aggregate counts. It claims a table before the billed Dataset write, so a restart cannot bill it twice. A restart during the write leaves an INTERRUPTED summary with interruptedClaims; that table is not retried automatically.
Source and security: Frictionless validation guide and security guide, checked 2026-10-27. Frictionless is pinned to 5.21.0 (MIT). The runner uses in-memory rows, trusted=False, no caller-provided descriptor/path, disabled sockets, a temporary working directory and an environment without secrets.
FAQ
Is invalid CSV data billed? Yes, when validation completes and its report is saved. Blank or oversized input and technical failures are free. Can I submit a file URL or remote schema? No; paste CSV text and use the restricted local field schema.
Local tests
npm testpython -m pip install -r requirements.txtpython -m unittest discover -s test -p 'test_*.py'
Q1 plan
The invalid and valid capital CSVs and the single-column header sample are from the Frictionless validation guide, checked 2026-10-27. The mixed case adds an over-limit label to exercise free input rejection.
{"actor":"csv-quality-validator","cases":[{"name":"Official invalid capitals","input":{"tables":[{"name":"capital-invalid.csv","csvText":"id,name,name\n1,London,Britain\n2,Berlin,Germany\n8,Warsaw\nx,Tokio,Japan,review\n"}]},"expect":"1 row valid=false/success=true/charged=true and duplicate-label; table-validated=1."},{"name":"Single-column values from Frictionless guide","input":{"tables":[{"name":"header.csv","csvText":"header\n1\n2\n3\n","schema":{"fields":[{"name":"header","type":"integer"}]}}]},"expect":"1 row valid=true/success=true/charged=true/errorCount=0; table-validated=1."},{"name":"Official valid capitals with schema","input":{"tables":[{"name":"capital-valid.csv","csvText":"id,name\n1,London\n2,Berlin\n3,Paris\n4,Madrid\n5,Rome\n","schema":{"fields":[{"name":"id","type":"integer","required":true,"unique":true},{"name":"name","type":"string"}]}}]},"expect":"1 row valid=true/success=true/charged=true/errorCount=0; table-validated=1."},{"name":"Mixed valid and over-limit label","input":{"tables":[{"name":"capital-valid.csv","csvText":"id,name\n1,London\n2,Berlin\n"},{"name":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","csvText":"id,name\n1,London\n"}]},"expect":"First row valid=true/success=true/charged=true; second success=false/charged=false/errorType=invalid_input; table-validated=1."}]}