Skip to content
Get started

How it works

An import is one embedded element and four moments.

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.

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.

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.

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.