
Chapter 3 of 7
Smells fishy? The field stays blank.
Most AI readers give you their best guess plus a confidence score you have to interpret. MagicBucket gives you a confirmed value, or an empty field with the reason.
Three fish, two passes, six readings
Three AI models from three different vendors (currently Anthropic, Amazon and Mistral) read every document in parallel, each of them twice. The second pass lists the fields in reverse order and words the instruction differently. With the same prompt a model would simply repeat itself; this way, a reading that depends on where a field sits in the prompt shows up as a contradiction.
The rule: five conditions at once
A value goes into your CSV only when all five hold. If one fails, the field stays blank and the receipt records why.
- Same notation. Readings are normalized first: “1 234,50 €”, “€1,234.50” and “1234.5” are the same vote, dates share one format, and ID numbers lose their spaces and dashes.
- No self-contradiction. Only a model that read the same value in both passes gets a vote. A model that changes its mind is out for that field.
- Two vendors agree. At least two such models, from two different vendors, give the same value. A tie means disputed.
- Check digits pass. IBANs, VAT and tax IDs, company and national ID numbers often carry check digits. A failed check makes the field disputed, even when every model agrees.
- The sums add up. Net plus VAT must equal gross, the items must add up to the total, and more. That's the next chapter.
Why different vendors?
Models from one company tend to make the same mistakes, because they learned from similar data. Requiring two vendors means a wrong value would have to appear twice, independently, in models built by different teams. That is rare.
Even the archmage gets one vote
Disputed fields, and only those, are read again, twice, by a stronger model. Its votes join the pool, but the rule doesn't change: the arbiter can't confirm a value on its own.
An honest “no” is an answer too. When at least two models agree that a field is unreadable, or that it isn't in the document at all, you get exactly that: unreadable or not in document. It's a correct result, not a system error.