JSON Schema Inferer - Draft-07 Schema from JSON or API URL avatar

JSON Schema Inferer - Draft-07 Schema from JSON or API URL

Pricing

from $1.60 / 1,000 inferred schemas

Go to Apify Store
JSON Schema Inferer - Draft-07 Schema from JSON or API URL

JSON Schema Inferer - Draft-07 Schema from JSON or API URL

Infer a draft-07 JSON Schema from any JSON URL or raw sample: types, required fields, email/date-time/uuid/uri formats, small enums, merged array-item schemas. $0.002 per schema, no start fee, non-JSON never charged — vs $0.011+ measured incumbents. Validate APIs and LLM output fast.

Pricing

from $1.60 / 1,000 inferred schemas

Rating

0.0

(0)

Developer

Broke to Built

Broke to Built

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

JSON Schema Inferer — Draft-07 Schema from Any JSON or API URL

Point it at a JSON URL or paste raw JSON — get back a clean draft-07 JSON Schema with types, required fields, string formats (email, date-time, uuid, uri), and small enums detected automatically. Up to 50 samples per run, online, by API, or as an agent tool via Apify MCP.

Writing schemas by hand for an API response you don't control is busywork; validating LLM output needs a schema you often don't have yet. This actor infers one from real data: objects get properties + required lists, arrays get merged item schemas across every element (union types where items disagree, required = keys present in all items), repeated small value sets become enums.

What you get

  • schema — a complete draft-07 JSON Schema for the sample
  • stats — property count, required-field count, formats and enums detected
  • rootType and source (URL + final URL + HTTP status, or raw-json marker)
  • Fail-soft: a URL that returns non-JSON never fails the run — it returns {ok: false, error} and is never charged.

Input

{ "url": "https://api.example.com/users/1" }

Or raw JSON: { "json": "{\"id\": 1, \"email\": \"ada@example.com\"}" }. Bulk via urls array. Toggles: detectFormats, detectRequired.

Output (real run, trimmed)

For https://jsonplaceholder.typicode.com/users/1:

{
"ok": true,
"rootType": "object",
"schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"address": { "type": "object", "properties": { "...": "..." } }
},
"required": ["id", "name", "username", "email", "..."]
},
"stats": { "properties": 18, "requiredFields": 18, "formatsDetected": 1, "enumsDetected": 0 }
}

Pricing

$0.002 per schema inferred. No start fee. Non-JSON responses and parse failures are never charged.

Measured against store incumbents (2026-08-07): gochujang/json-schema-generator charges $0.001 start + $0.01 per schema, perryay/json-schema-validator-generator $0.05 start + $0.025 per inference, perryay/json-studio $0.01 start + $0.005 per inference. One schema here costs $0.002 vs $0.011–$0.075 there.

Honest limits

  • Inference is sample-based: the schema describes the data you showed it. A field that happens to be absent from your sample won't appear; a field that is always present in a 3-item sample gets marked required even if it is optional in the wild. More samples = better schema.
  • Formats are detected by pattern (RFC-3339 date/date-time, email, uuid, uri) — a string that merely looks like an email is marked format: email.
  • Enums are only attached for arrays of ≤12 distinct scalar values with repeats — deliberate, to avoid freezing IDs into enums.
  • Draft-07 output; no $ref factoring (nested objects are inlined).

FAQ

Can I use the output to validate LLM responses? Yes — that is a primary use: infer once from a good sample, then validate every generation against it with ajv or any draft-07 validator.

How does it handle arrays with mixed item shapes? Item schemas are merged: shared keys keep their types (union if they disagree), required keeps only keys present in every item.

What about huge responses? The whole document is analyzed — stats tell you how big the schema got. For multi-megabyte payloads, prefer passing one representative record.

Does it fetch with authentication? No auth headers currently — public URLs only, or paste the JSON directly (which also works for anything private, since raw samples never leave the run).

Why did some rows come back ok: false? The URL returned non-JSON (HTML, error page) or unparseable text. Recorded with the HTTP status, never charged.

Use from code or AI agents

curl -s "https://api.apify.com/v2/acts/EliAI~json-schema-inferer/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-X POST -H 'Content-Type: application/json' \
-d '{"url": "https://api.example.com/endpoint.json"}'

Agents: connect Apify MCP and call the EliAI/json-schema-inferer tool.

  • Capability: infer a draft-07 JSON Schema from a URL's response or a raw JSON sample
  • Required input: url/urls or json
  • Returns: one record per sample; schema is the full JSON Schema, stats summarizes it
  • Bounded: max 50 samples per run; failures isolate per sample
  • Side effects: none

Who uses it

  • API integrators generating a draft-07 schema from a third-party response they do not control
  • LLM app developers creating a schema to validate model JSON output against
  • Data engineers documenting the shape of a JSON feed before loading it into a warehouse
  • QA engineers writing contract tests from a sample of real API responses
  • Technical writers producing field-level docs from an endpoint's JSON