Convert Jupyter Notebook (IPYNB) to Markdown
Turn a Jupyter notebook (.ipynb) into clean Markdown: markdown cells as you wrote them, code in fenced blocks labelled with the notebook's language, and each cell's saved output underneath, from printed text to DataFrame tables and error tracebacks. Ready to paste into Claude, ChatGPT or a RAG pipeline.
Open the converter to upload your .ipynb file
Free, no account required. Get clean Markdown in seconds.
Open converter →Why convert Jupyter Notebook (IPYNB) to Markdown?
- Hand a notebook to Claude or ChatGPT for review, outputs included
- Share analysis results as a readable document
- Index notebooks in a RAG pipeline without JSON noise
- Turn a tutorial notebook into a blog post draft
What you get from a notebook
A .ipynb file is JSON: every cell, its outputs and a lot of metadata. The converter keeps the cells in order. Markdown cells come through as written, except for images pasted into them (see below). Code cells become fenced code blocks labelled with the notebook's language (python, r, julia and so on, read from the notebook's kernel information). Raw cells become plain code blocks, and empty code cells are skipped.
Under each code cell, an "Output:" line is followed by what the cell produced the last time it ran: printed text, results, Markdown output and error tracebacks, with terminal colour codes removed. pandas DataFrames and other HTML tables become Markdown tables. Outputs are only there if they were saved in the file, so run the notebook and save it before converting.
What is left out
Plots and images are not included. If an image output has a text label (matplotlib saves one like <Figure size 640x480 with 1 Axes>) you get that label, otherwise a short "[image output omitted]" note, never the image data. Interactive widgets and JavaScript outputs are skipped. Images attached to markdown cells keep their attachment: link, but the picture itself is not included. Images pasted straight into a markdown cell are stored in the file as long base64 text: they are replaced by their alt text, or by "[embedded image omitted]" if they have none.
Long outputs are cut so one noisy cell cannot drown out the rest: any single output over 60 lines or 6,000 characters keeps its beginning and ends with a note saying how many lines were left out.
Example: what the Markdown output looks like
A notebook cell that prints a line and shows a DataFrame, then a plot and an error, converts to:
```python
import pandas as pd
df = pd.DataFrame({'name': ['Ana', 'Bo'], 'score': [91, 78]})
print('Accuracy: 0.95')
df.head()
```
Output:
```
Accuracy: 0.95
```
| | name | score |
| --- | --- | --- |
| 0 | Ana | 91 |
| 1 | Bo | 78 |
```python
df.plot()
```
Output:
_[image output omitted]_
```python
df['missing']
```
Output:
```
KeyError: 'missing'
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[3], line 1
----> 1 df['missing']
KeyError: 'missing'
```Frequently asked questions
Other formats you can convert
- Convert PDF to Markdown
- Convert Word (DOCX) to Markdown
- Convert PowerPoint (PPTX) to Markdown
- Convert Excel (XLSX) to Markdown
- Convert HTML to Markdown
- Convert EPUB to Markdown
- Convert CSV to Markdown
- Convert JSON to Markdown
- Convert XML to Markdown
- Convert Images (JPG/PNG) to Markdown
- Convert Outlook MSG to Markdown
- Convert EML to Markdown
Ready to convert your Jupyter Notebook (IPYNB)?
Upload your file and get Markdown in seconds. Free and private.
Start converting →