dataeng.tools

Convert Avro to CSV — Free, Private, In-Browser

Avro is a row-oriented binary format that carries its schema in the file header — the format you meet at the ingest edge, where Kafka topics, Hadoop landing zones, and streaming pipelines want cheap appends and painless schema evolution. CSV is the opposite of all of that: flat, untyped text with no schema at all. Converting Avro to CSV is almost always about handing the data to something that can't read Avro — a spreadsheet, a legacy loader, or a colleague who just wants to open it and look. Because Avro is binary and strongly typed while CSV is neither, the headline fact is that you throw the schema away on the way out.

Once the schema is gone, every value becomes text. Avro's logical types render in their surface form: a decimal is written out verbatim (exact in the file, though whatever reads the CSV back may parse it as a float and lose digits), and date, timestamp-millis, and timestamp-micros become ISO-ish strings rather than the underlying integers Avro stored. Nested shapes are the real casualty — records, arrays, and maps have no CSV equivalent, so each one is flattened to a JSON string inside a single cell. A header row is written from the field names, NULLs come through as empty fields rather than the literal text "null", and long BIGINTs stay exact in the file even if a downstream double-based reader rounds them.

Two practical notes. First, reading Avro isn't bundled the way CSV and Parquet are — DuckDB fetches its avro extension once from extensions.duckdb.org, so this specific conversion needs a network connection the first time (a fully air-gapped browser can't do it). That call pulls only the extension binary; your Avro file itself is never part of it. Second, CSV has no compression, so expect the output to be several times larger than the Avro it came from, whose binary framing and block compression you're unwinding. Everything else runs locally: DuckDB-WASM reads the Avro and writes the CSV in your browser, so your data is never uploaded and never leaves your machine.

Drop a file or click to browse

Drop a Avro file — processed locally, never uploaded

Frequently asked questions

Does the Avro read work fully offline?
Not the first time. Avro isn't bundled the way CSV, JSON, and Parquet are — DuckDB fetches its avro extension once from extensions.duckdb.org and then caches it, so a truly air-gapped browser can't read Avro. That network call only pulls the extension binary; your data file is still read entirely in the browser and never leaves your machine.
What happens to nested records, arrays, and maps?
CSV has no nested type, so each one is serialized to a JSON string inside a single cell — an Avro record becomes a JSON object, an array or map becomes a JSON array/object, all packed into one field. If you need the structure preserved as real nested data, convert Avro to JSON or JSONL instead.
Do Avro's logical types survive the conversion?
Only as text. A decimal is written verbatim, and date/timestamp-millis/timestamp-micros come out as ISO-ish strings — but the fact that a column is a DECIMAL or a TIMESTAMP is lost, because CSV can't record types. Whatever reads the CSV back has to re-sniff those columns, and may parse decimals or big integers as floats and drop precision.
Is my file uploaded anywhere?
No. The Avro→CSV conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
How large a file can I convert?
It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
Do I need an account?
No — it's free and requires no sign-up.

Do more with your Avro file

Related conversions