🇨🇭 OpenSteuerAuszug — in your browser

📖 Documentation

Generate a Swiss eCH-0196 tax statement (Steuerauszug) from broker data. Everything runs locally in this page — your financial data never leaves your computer.

    Welcome

    This wizard walks you through generating your Steuerauszug in five short steps.

    New here? Start with the documentation: the web app guide explains each step below, and the user guide covers the tax background, broker exports and how to verify the result.

    • Your details — name, canton, tax year and broker (remembered on this device).
    • Kursliste — the official ESTV securities list for your tax year.
    • Broker files — the statements you exported from your broker.
    • Generate — the processing pipeline runs right here in your browser.
    • Download — your PDF (and XML) Steuerauszug.
    Disclaimer. This tool is not formally audited. Tax values are computed on a best-effort, informational basis. You are responsible for verifying every figure before submitting your tax return, and for the contents of that return. This browser wizard is additionally mostly AI-coded and has seen much less real-world testing than the Python/CLI version — prefer the CLI if you can install it. See the user guide.
    Advanced: runtime options

    The Python runtime (Pyodide) and library dependencies are downloaded once from public CDNs (~40 MB, cached by your browser afterwards). Your personal data is never uploaded anywhere. To use a self-hosted copy instead, set the base URL below and reload.

    Your details

    These are stored only in this browser (local storage) and reused next time.

    Accounts

    Advanced: configuration file (config.toml)

    The settings above are translated into the configuration below. Tick the box to edit it directly (for broker/account overrides described in the configuration guide).

    Kursliste (official securities list)

    The pipeline needs the official ESTV Kursliste for your tax year to look up valor numbers, exchange rates and tax values. It is cached in your browser, so you normally only do this once per year.

    1. Download the ZIP marked “Initial” (latest version) for your tax year from ictax.admin.ch and unzip it.
    2. Add the resulting kursliste_YYYY.xml below.

    The XML is large (>100 MB), so the first run converts it to a compact database — that takes a few minutes, after which the database is cached and the XML is no longer needed. If you also use the command line tool, opensteuerauszug kursliste download --year YYYY produces the same kursliste_YYYY.sqlite, which you can add here directly.

    Drop the Kursliste file here or click to choose
    kursliste_YYYY.xml or kursliste_YYYY.sqlite

      Broker files

      Drop your broker file(s) here or click to choose
        Optional: attach supporting PDFs

        These pages are prepended/appended to the final PDF unchanged (e.g. an original broker statement or a 1042-S form).

        Generate

        Review the summary, then run the pipeline. Processing happens entirely in this page and can take from a few seconds up to several minutes (converting a Kursliste XML on the first run is the slow part).

        
            

        Your Steuerauszug is ready

        Before you file — verify the document:
        • No unresolved errors or warnings in the processing log.
        • All securities are present and mapped to the correct valor number.
        • All transactions and end-of-year positions are correct.
        • Cash balances and interest totals are correct.
        • After importing into your tax software, recalculate the tax values there.
        Processing log
        
              
        Waiting Python engine not started yet.