How matching decides
Your customer’s file calls it Zahlungsziel. Your schema calls it Payment terms.
Nothing about those two strings looks alike — yet the import has to connect them,
hundreds of times per file, without corrupting anyone’s data. This page explains,
in plain language, how Mildport makes that call: what it tries first, when it
refuses to guess, and how it gets smarter after every confirmed import.
Two shapes, one principle
Section titled “Two shapes, one principle”Whatever arrives — CSV, Excel, JSON, a PDF with tables, a scan read by OCR — it becomes one of two things:
- A table: rows with column headers. Headers get matched to your fields; that ladder is this page.
- A document: an invoice, a business card, a contract. There are no columns — Mildport extracts facts (“invoice number: 2024-117”) with a visible pointer to where each one was found, and the user confirms them. That flow is described in capture-first imports.
One principle covers both: nothing lands in your system without a human having had the chance to see it.
The matching ladder
Section titled “The matching ladder”For every column header, Mildport climbs a ladder from cheapest and most certain to smartest — and stops as soon as a rung answers.
- Tidy up first. Case, punctuation, separators are normalized, so
E-Mail_Adresseandemail adresseare the same word to the matcher. - Exact names and your synonyms. Every field can declare alternative names
(
surname,family name, …). A hit here is a done deal. - What your users already taught it. Every mapping a person has confirmed
before is remembered — per tenant, as vocabulary. If someone once said
“
Zahlungszielmeans Payment terms”, that column matches instantly from then on. Whole layouts are remembered too: the same monthly export arrives again, and the entire mapping replays without questions. - Shared words and a built-in cross-language dictionary.
Invoice no.andInvoice numbershare enough to score well; the built-in dictionary knows pairs likePLZ↔zip. - The data itself gets a vote. If a cryptically named column contains things shaped like emails, IBANs or phone numbers, the fields expecting those shapes get a boost.
Every rung produces a visible score from 0 to 100, shown in the match step — confidence is never hidden.
When Mildport refuses to guess
Section titled “When Mildport refuses to guess”Two rules protect your data from confident nonsense:
- Below the confidence bar, there is no guess. A weak best-candidate is not silently applied; the column is presented as an open question with the closest candidates ready to pick.
- A near-tie is a question, not a coin flip. If two fields score almost the same, Mildport asks — one click resolves it, and the answer is remembered.
So the worst case is never “wrong data in your CRM”; it is “one more click for your user”.
The optional AI judge
Section titled “The optional AI judge”With AI assist enabled, a language model reviews only the low-confidence tail — the columns the ladder could not settle. It sees the candidates and sample values, must cite evidence for its pick, must pass the same validators as every other match, and its reasoning is logged. It re-ranks suggestions; it never bypasses the review step. It is off by default — see how it works for the delivery picture around it.
Ask once, auto-map forever
Section titled “Ask once, auto-map forever”Every confirmation feeds back three ways: the header becomes a learned synonym, the confidence math gets a new data point, and the file’s layout is remembered as a template. Practically: the first import from a new customer asks a handful of questions; the second one usually asks none.
Matching runs inside your deployment — headers and values are not sent to third parties to compute a match. Next: configure the widget or read how AI data cleaning fixes messy values after the mapping stands.