Map Cryvis JSON Fields in Make.com
Map nested Cryvis JSON in Make.com—seller.name, line_items arrays, nullables, and ifempty—without flattening by hand.
Cryvis returns nested JSON: parties as objects, line items as arrays, missing values as null. Make’s mapper understands collections and arrays—if you click into them instead of pasting guessed paths.
This guide covers nested access, iterators, and nulls for invoice/custom-style payloads. Envelope first: Parse API JSON responses. Hub: Make.com + Cryvis.
Collections (objects)
Invoice seller is a collection:
"seller": {
"name": "Acme Cloud Services",
"tax_id": "US12-3456789"
}In Make map:
data.seller.name→ Vendor columndata.seller.tax_id→ Tax ID column
Same pattern for buyer, receipt merchant, passport mrz.line1, custom nested groups you defined in schema.
data
└─ seller (collection)
├─ name → Sheets Vendor
└─ tax_id → Sheets Tax IDIf you map data.seller into a text cell, you often get [Collection] or a useless string—map leaves.
Arrays
line_items is an array of collections:
"line_items": [
{
"description": "Cloud hosting - Pro plan",
"quantity": 2,
"unit_price": 499.99,
"amount": 999.98
}
]Option A — Iterator (one destination row per line)
HTTP
→ Iterator (data.line_items)
→ Sheets Add Row (description, quantity, amount)Also map parent fields (data.invoice_number) from the HTTP module while inside the iterator—Make allows mapping earlier modules.
Option B — Collapse into one cell
Use map() + join():
- Descriptions: join mapped descriptions with
; - Total check: prefer
data.total_amountover summing in Make unless you need a reconciliation column
Option C — Skip arrays
If the destination only needs header fields, do not iterate—map invoice_number, seller.name, total_amount only (specific fields).
Nullables
Cryvis nullable fields return JSON null. In Make:
| Approach | Formula idea |
|---|---|
| Blank cell | ifempty(data.due_date; ) |
| Fallback text | ifempty(data.seller.tax_id; "missing") |
| Skip row | Filter: data.invoice_number is not empty / not null |
Do not coerce amount null to 0 unless your ledger rules require it—zeros hide “not extracted.”
Custom extractor paths
Your schema keys hang under data:
data.account_numberdata.vendor.name(if nested)data.defects→ Iterator
Whatever you did not declare does not exist—do not map invoice paths onto custom responses. Custom extractors, Custom API.
Batch results paths
Inside an Iterator on results:
file_namedata.merchant.name(receipt)metafor that file
Top-level meta.request_id still refers to the whole HTTP call.
Type coercion
| Cryvis type | Make tip |
|---|---|
| number | Map to number columns; use formatNumber only for display |
| boolean | Map to checkbox / TRUE FALSE |
date strings (YYYY-MM-DD) | parseDate if the destination needs Date type |
Debugging empty mappings
- Run once; open the HTTP module output bubble.
- Expand
data→ confirm key names (snake_case). - Remap from the picker—typos like
seller.Namefail silently as empty. - Confirm you are not on a
results[]payload while mappingdata.
Errors vs empty data: Handle API errors. Invoice HTTP setup: Send PDF to OCR API.
Checklist
- Leaves mapped, not whole collections (unless JSON destination)
- Arrays iterated or intentionally collapsed
-
ifemptyfor soft nullables - Custom vs built-in key names verified against a live run
- Parent fields available inside iterators
Product references while mapping: Invoice, Receipt, Passport.