Scrapers / Developer & File Tools

JSON Schema Validator
hipersoft/json-schema-validator
Validate JSON documents or every row of a dataset against a JSON Schema and get every failing path with a clear message. Enforce data contracts and QA scraped data.
Total users
2Monthly users
1Total runs
79Per record validated
$0.001Last rebuilt
Oct 26, 2026Overview
Validate JSON documents against a JSON Schema in bulk — a single object or an array where each item is checked as one record — and get every failing path with a clear message. Enforce data contracts and QA scraped or imported data at scale.

What it does
- Validates data against a standard JSON Schema (Draft 7 / 2020-12), with format checks (email, uri, date…).
- Handle a single object, an array of records, or a JSON/NDJSON file URL.
- Returns per-record valid/invalid plus every error path and message.
Use cases
- Data quality — QA scraped datasets against an expected schema.
- API contracts — verify payloads match a schema before ingest.
- ETL guards — catch malformed records before they hit your database.
Input
{
"schemaText": "{ \"type\": \"object\", \"properties\": { \"email\": { \"type\": \"string\", \"format\": \"email\" } }, \"required\": [\"email\"] }",
"dataText": "[{ \"email\": \"a@b.com\" }, { \"age\": 5 }]",
"allErrors": true
}
| Field | Type | Description |
|---|---|---|
schemaText |
string | The JSON Schema (as text). |
dataText |
string | JSON object or array to validate. |
dataUrl |
string | Optional JSON/NDJSON file URL instead of pasted data. |
allErrors |
boolean | Collect all errors per record (vs stop at first). |
Output

{ "index": 1, "valid": false, "errorCount": 1, "firstError": "/ must have required property 'email'", "errors": ["..."] }
Output schema
| Field | Type | Description |
|---|---|---|
index |
integer | Record index in the input array. |
valid |
boolean | Whether the record passed. |
errorCount |
integer | Number of validation errors. |
firstError |
string | First error path + message. |
errors |
array | All error messages. |
FAQ
Which JSON Schema drafts are supported? Modern drafts including Draft 7 and 2020-12, with common string formats.
Can I automate it? Yes — via integrations on the Apify platform and the Apify API.
Notes
Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
schemaTextJSON Schema | string | The JSON Schema to validate against, as text. |
dataTextJSON data | string | The JSON to validate — a single object, or an array of objects (each validated as one record). Leave empty to use a data URL. |
dataUrlData URL | string | Optional: a link to a JSON/NDJSON file to validate instead of pasting data. |
allErrorsReport all errors | boolean | Collect every validation error per record instead of stopping at the first. Default: true |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~json-schema-validator/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"schemaText": "{\n \"type\": \"object\",\n \"properties\": { \"email\": { \"type\": \"string\", \"format\": \"email\" }, \"age\": { \"type\": \"integer\", \"minimum\": 0 } },\n \"required\": [\"email\"]\n}",
"dataText": "[\n { \"email\": \"a@b.com\", \"age\": 30 },\n { \"age\": -1 }\n]"
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/json-schema-validator").call(run_input={
"schemaText": "{\n \"type\": \"object\",\n \"properties\": { \"email\": { \"type\": \"string\", \"format\": \"email\" }, \"age\": { \"type\": \"integer\", \"minimum\": 0 } },\n \"required\": [\"email\"]\n}",
"dataText": "[\n { \"email\": \"a@b.com\", \"age\": 30 },\n { \"age\": -1 }\n]"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/json-schema-validator').call({
"schemaText": "{\n \"type\": \"object\",\n \"properties\": { \"email\": { \"type\": \"string\", \"format\": \"email\" }, \"age\": { \"type\": \"integer\", \"minimum\": 0 } },\n \"required\": [\"email\"]\n}",
"dataText": "[\n { \"email\": \"a@b.com\", \"age\": 30 },\n { \"age\": -1 }\n]"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Record validated One JSON record validated against your schema | $0.001 | $0.0005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs · 103 users · $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs · 22 users · $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs · 8 users · $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs · 3 users · $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs · 13 users · $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy — reliable, no captcha, no setup.
121 runs · 8 users · $0.001 / result scrapedSend the site and the fields. We build it and you get it first.