Turn receipts, bills and letters into clean JSON

    Fill a JSON template from a photo, a scan or plain text, with a calibrated confidence on every field. Built for African documents and currencies, in English and African languages.

    Fintech & lendingExpense & accountingRetail & FMCGBack office
    91.8%
    ENGLISH DOCUMENTS FULLY RIGHT
    0.728
    NAMED ENTITIES, 21 AFRICAN LANGUAGES
    0.008
    CONFIDENCE CALIBRATION ERROR
    / The problem

    Why this breaks today

    Receipts from a market stall, a prepaid electricity token, a tenancy letter, a screenshot of a bank alert: the documents African businesses run on rarely look like the Western invoices that extraction tools are trained on. Amounts in naira or cedis get misread, dates get flipped and local names get mangled.

    Even when an extractor is mostly right, it rarely says which fields it is unsure of, so every document still needs a person to check it end to end.

    / How it works

    The pipeline, step by step

    01

    Write the template once

    Describe the answer you want as JSON: field names, and a type for each one (verbatim text, number, date, a choice of options, or a list of objects). The format is the same as NuExtract’s, so existing templates move across unchanged.

    02

    Send the document as it arrives

    Pass text, a photo or scan, or both. MIST-Extract-1.0 gets 91.8% of held-out English documents completely right, against 67.9% for NuExtract3 at the same 4B size, and every field on English receipt photos.

    MIST-Extract-1.0
    03

    Keep the sure fields, review the rest

    Every field comes back with a calibrated confidence: values rated 0.99 and above are right 99.9% of the time, with calibration error of 0.008. Pick a threshold and send only the doubtful fields to a person.

    MIST-Extract-1.0
    04

    Scale with Flash

    For high volume, MIST-Extract-Flash-1.0 takes the same templates at 2B and processes 9.7 documents per second on one RTX A6000, with 90.5% of English documents fully right.

    MIST-Extract-Flash-1.0
    / The code

    Running in about ten lines

    The Olaverse SDK wraps the models with sane defaults. If you would rather not add a dependency, the second tab is the same pipeline in plain transformers.

    $pip install "transformers>=5.17" torch pillow huggingface_hub
    receipts.py
    import sys
    from huggingface_hub import snapshot_download
    
    path = snapshot_download("olaverse/MIST-Extract-1.0")
    sys.path.insert(0, path)                      # the repo ships mist_extract.py
    from mist_extract import Extractor
    
    x = Extractor.from_pretrained(path, device="cuda")
    
    TEMPLATE = {
        "merchant": "verbatim-string",
        "date": "date",
        "total": "number",
        "currency": ["NGN", "GHS", "KES", "ZAR", "USD", "Other"],
        "items": [{"name": "verbatim-string", "quantity": "integer", "price": "number"}],
    }
    
    def read_receipt(photo, threshold=0.9):
        out = x.extract(TEMPLATE, image=photo)
        doubtful = [k for k, c in out["confidence"].items()
                    if isinstance(c, float) and c < threshold]
        return {"data": out["data"], "needs_review": doubtful}

    Language coverage

    / 9 LANGUAGES, FULL SUPPORT

    Documents of every kind in these languages. Template keys stay in English.

    English
    en · eng
    Nigerian Pidgin
    — · pcm
    isiZulu
    zu · zul
    Swahili
    sw · swh
    Hausa
    ha · hau
    Yorùbá
    yo · yor
    Igbo
    ig · ibo
    Somali
    so · som
    Amharic
    am · amh

    Names of people, places, organisations and dates are also extracted in 14 more African languages, including Twi, chiShona, Fon, Kinyarwanda, Wolof, Ewe, isiXhosa and Luganda.

    / This is you if
    • You key in receipts, bills, IDs or forms by hand, or pay someone to.
    • Your documents are in naira, cedis, shillings or rand, or arrive as phone photos and screenshots.
    • You need to know which extracted values to trust before they hit your ledger.
    • You want to run extraction on your own GPU instead of sending documents to a hosted API.

    Every figure on this page comes from the published model cards. Download the weights and check us.

    Want this on your data?

    The weights are open, so you can build it yourself this afternoon. If you would rather we tuned it to your domain, evaluated it properly, and handed it over, tell us what you are working on.