JSON / XMLComing soon

Load structured documents as datasets — from an upload, a URL, or a bucket.

The JSON / XML connector parses structured documents into typed rows. Use it for exports, API snapshots, and system feeds that arrive as files rather than as a database.

Not available yet

The JSON / XML connector is in development. For file-based data today, use CSV / Excel — most systems that export JSON can also export a flat file.

Where the documents come from

Origin Setup
Upload Drag a file onto Add data
HTTPS URL A stable URL Chartizer fetches on a schedule
S3 / GCS Bucket, prefix, and read-only credentials; newest matching object wins
Email drop A team address; matching attachments are ingested

Finding the rows

A document is a tree; a dataset is rows. Records path tells Chartizer which node to repeat.

JSON
{
  "meta": { "generated": "2026-08-12T09:00:00Z" },
  "data": {
    "items": [
      { "id": 1, "customer": { "email": "ana@example.com" }, "tags": ["vip", "eu"] },
      { "id": 2, "customer": { "email": "bo@example.com" }, "tags": [] }
    ]
  }
}

Records path data.items produces two rows.

XML
<export generated="2026-08-12T09:00:00Z">
  <orders>
    <order id="1">
      <customer email="ana@example.com"/>
      <total currency="EUR">149.00</total>
    </order>
  </orders>
</export>

Records path export.orders.order produces one row per <order>.

Zero rows almost always means the wrong records path

data when the array is really at data.items is the single most common mistake. The preview shows the parsed row count before you create the dataset — check it is not zero.

Flattening

Nested objects flatten with dot notation. XML attributes become fields prefixed with @, and element text becomes #text when the element also carries attributes.

Source Field Value
{"customer":{"email":"ana@…"}} customer.email ana@example.com
{"tags":["vip","eu"]} tags ["vip","eu"]
<order id="1"> @id 1
<total currency="EUR">149.00</total> total.@currency EUR
total.#text 149.00

Arrays stay arrays

Array fields are preserved rather than exploded into rows. If you need one row per tag, set the records path deeper or split the file upstream.

Types

Types are inferred from a sample of up to 500 records.

Setting Default Notes
Date format ISO-8601 Override with a format string, e.g. DD.MM.YYYY
Decimal separator . Set to , for European exports
Empty string null Can be kept as an empty value instead
Encoding UTF-8 Windows-1257 and ISO-8859-1 supported

XML has no types at all — everything arrives as text unless you set the field type explicitly.

Leading zeros and long IDs

An identifier like 0041 or a 19-digit number will be read as a number and mangled. Set those fields to text before creating the dataset.

Scheduled fetches

Watch a bucket prefix
{
  "type": "json",
  "source": {
    "kind": "s3",
    "bucket": "acme-exports",
    "prefix": "orders/",
    "pattern": "orders-*.json"
  },
  "records_path": "data.items",
  "refresh": { "policy": "scheduled", "interval": "24h" }
}
Fetch a URL
{
  "type": "xml",
  "source": {
    "kind": "url",
    "url": "https://partner.example.com/feed/inventory.xml",
    "headers": { "Authorization": "Bearer {{secrets.PARTNER_TOKEN}}" }
  },
  "records_path": "feed.inventory.item",
  "refresh": { "policy": "scheduled", "interval": "1h" }
}

Never put a secret in the URL

Query strings are logged by proxies and appear in sync history. Put credentials in headers, using team secrets.

Replacing documents

A new file replaces the data while keeping the dataset identity — its ID, mappings, and every chart built on it survive. Schema differences behave as they do for CSV / Excel: a new field triggers Schema drift, a missing one shows a broken-field marker on charts using it.

Limits

Limit Value
Max file size 100 MB (Pro), 25 MB (Free)
Max nesting depth 32 levels
Max fields after flattening 512

Deeply nested documents belong in a database

If flattening produces hundreds of fields, load the documents into PostgreSQL or Elasticsearch and connect that instead. Syncs get faster and the schema stops shifting under you.

Troubleshooting

Fields appear and disappear between syncs

The producer omits null fields. Chartizer keeps the schema from the first sync, so absent fields arrive as null rather than being dropped.

XML namespaces break the records path

Use the local name without the prefix, or set Strip namespaces on the dataset.

Everything landed in one row

The records path points at the root instead of the repeating node. Set it to the repeating element.

Parse error at line N

Malformed document — usually a truncated download or an unescaped & in XML. The error names the offending line.