Online Tool Store Online Tool Store

CSV to Markdown Frontmatter

Convert CSV rows into typed YAML frontmatter for Astro, Jekyll, Hugo, or Obsidian — custom delimiter and quote character, inline or block-style arrays.

🔒 This tool runs entirely in your browser. Your files are never uploaded to a server.

Browser tool

CSV to Markdown Frontmatter

Nothing is uploaded - parsing and generation run entirely in your browser.

How it works

  1. Paste CSV data with a header row of frontmatter field names - comma, semicolon, or tab delimited, with a double or single quote character.
  2. Each data row becomes its own --- frontmatter block, with columns mapped to typed YAML keys and values.
  3. Choose whether array values render inline ([a, b]) or as an indented block list, with 2- or 4-space indentation.
  4. Copy a single block, press Copy all for every block at once, or Download all (.md) to save them to a file.

The method

Each CSV column becomes a YAML key. Values are typed rather than always quoted: comma-separated cells become arrays, "true"/"false" become booleans, and plain numbers become numbers - everything else, including dates, is quoted as a string:

"astro,blog" → key: ["astro", "blog"] true → key: true 42 → key: 42 2026-01-14 → key: "2026-01-14"

With Array style set to block, that same cell instead renders as an indented list under the key instead of the inline form - "key:" on its own line, then "- \"astro\"" and "- \"blog\"" indented beneath it. Both styles parse to the identical array value; it's a formatting preference, not a behavior change.

FAQ

What CSV structure does this expect?

A header row of field names followed by one row per document. Each data row becomes its own --- frontmatter block, with the column headers as the YAML keys, in the order your columns appear.

How are comma-separated values in a cell handled?

A cell containing a comma-separated list (like tags) is converted into a real YAML array, so "astro,blog" becomes ["astro", "blog"] rather than a single string. A value with a single trailing comma, like "astro,", is left as the plain string it looks like rather than guessed at.

How are numbers, booleans, and dates formatted?

A cell that is exactly "true" or "false" becomes a real YAML boolean, and a plain integer or decimal becomes a real number - both unquoted, so downstream tools read them as their actual type rather than text. Dates are quoted like any other string: whether a bare date becomes a native timestamp is parser-specific (Jekyll's Ruby parser does that; many JavaScript YAML libraries do not), so quoting keeps the value predictable everywhere instead of shipping a guess. A number with a leading zero, like a "0755" zip code, is also kept quoted, because some YAML parsers read a leading zero as octal notation and would silently change its value.

What if my CSV uses semicolons or tabs instead of commas?

Pick the matching delimiter from the dropdown. Everything else - quoted fields, embedded commas inside quotes, list-splitting - works the same regardless of which delimiter separates your columns.

What if my CSV quotes fields with a single quote instead of a double quote?

Switch the Quote character dropdown to single quote (') before generating. The parser then treats ' the way it normally treats " - for quoting a field, escaping an embedded quote by doubling it, and allowing commas or line breaks inside a quoted value.

Can I get array values as a YAML list instead of [a, b, c]?

Yes - set Array style to "Block: indented list" and comma-separated cells render as an indented "- item" list under their key instead of one inline [a, b, c] line, with a choice of 2- or 4-space indent. Both styles parse to the identical array value; it's a formatting preference, not a behavior change.

What happens if a row has too many or too few values?

The tool still generates a block for it: extra values past the last column are dropped, and missing values are treated as empty, with a note above the results telling you which row numbers were affected so you can go back and fix the source CSV if that was a mistake.

Does this write the Markdown body too?

No - it only generates the --- frontmatter block from your CSV columns. The body content still needs to be written or pasted in separately.

Does "Download all" give me one file per row, or one combined file?

One combined frontmatter.md file containing every row's block in order, separated by their own --- delimiters. If you need each row as its own file, copy blocks individually and save them under separate filenames.

Does this work for Jekyll, Hugo, or Astro frontmatter?

Yes - the output is standard YAML between --- delimiters, the same format all three (and most other static site generators) expect at the top of a content file. Nothing here is framework-specific. The "Load sample" dropdown includes a ready-made CSV for each of Astro, Jekyll, Hugo, and Obsidian, using that platform's own documented frontmatter field names, so you can see real column names before wiring up your own CSV.

Is my CSV data uploaded anywhere?

No - parsing and conversion happen entirely in your browser. Your CSV rows are never sent to a server, which also means there is no file-size or row-count limit beyond what your browser can handle.

How we compare

FeatureOnline Tool Storeonlineyamltools.commarkdownconverters.com
One frontmatter block generated per CSV row YesProduces one combined YAML document, not per-row blocksOne entry at a time - no CSV batch input
Comma-separated cell values become real YAML arrays YesNot documentedN/A - single-entry form
Custom delimiter (comma, semicolon, or tab) YesYesN/A
Custom CSV quote character (double or single quote) YesYesN/A
Choice of inline or indented block-style YAML arrays YesConfigurable indent, but no per-row batch output to apply it toN/A - single-entry form
Ready-made samples for Astro, Jekyll, Hugo, and Obsidian YesNo - generic CSV/YAML onlyNames these platforms but is a single-entry form, not a CSV batch tool
Free, runs in your browser, nothing uploaded YesYesYes

Good for turning a spreadsheet export into a batch of ready-to-paste frontmatter blocks - one per row - without hand-writing YAML for each entry.

Explore related tools

Embed this tool

Paste this on your own site — it stays free, and every file still stays in your visitor's browser, not yours or ours.