How it works
An import is one embedded element and four moments.
1. Drop in the element
Section titled “1. Drop in the element”A custom element that works in React, Vue, Svelte or plain HTML. Attributes in, DOM events out — no SDK lock-in, no iframe. See Install.
2. Your customer uploads anything
Section titled “2. Your customer uploads anything”CSV, TSV, XLSX, ODS, JSON, XML, PDFs with tables, scans and photos via OCR. Multiple files at once — joined on a key into one dataset.
For documents, photos, notes, and future voice captures, Mildport follows the same review-first principle through a broader capture-first import model: find useful facts, propose records, then let the user confirm what should be created.
3. Mildport matches, they confirm
Section titled “3. Mildport matches, they confirm”Deterministic header + value matching with visible confidence, validation on every cell, inline fixes in the review grid, and your own cleaning hooks — all client-side, before anything is delivered.
An optional, evidence-gated AI judge re-ranks only the low-confidence tail. It must cite evidence, pass the same validators, and log its rationale — and it is off by default.
New in the review step: AI data cleaning. Users describe a fix in plain language (or accept a suggested one), see the exact before/after diff, and apply with one click — accepted cleanups replay on the next similar file without another AI call.
4. You receive clean rows
Section titled “4. You receive clean rows”An HMAC-signed apply webhook with retries and a delivery audit — or an onResults callback in
the browser. Either way: rows shaped exactly like your schema, with the mapping that produced
them.
mountImportFlow(el, { id: 'my-import', targets: [ /* record types + fields */ ], delivery: { mode: 'browser' },});el.addEventListener('import-applied', sync);Next: Configure the widget or learn about capture-first imports.