The confluence-markdown-exporter exports Confluence pages in Markdown format. This exporter helps in migrating content from Confluence to platforms that support Markdown e.g. Obsidian, Gollum, Azure DevOps, Foam, Dendron and more.
- Converts Confluence pages to Markdown format.
- Uses the Atlassian API to export individual pages, pages including children, and whole spaces.
- Supports various Confluence elements such as headings, paragraphs, lists, tables, and more.
- Retains formatting such as bold, italic, and underline.
- Converts Confluence macros to equivalent Markdown syntax where possible.
- Handles images and attachments by linking them appropriately in the Markdown output.
- Supports extended Markdown features like tasks, alerts, and front matter.
- Headings: Converts Confluence headings to Markdown headings.
- Paragraphs: Converts Confluence paragraphs to Markdown paragraphs.
- Lists: Supports both ordered and unordered lists.
- Tables: Converts Confluence tables to Markdown tables.
- Formatting: Supports bold, italic, and underline text.
- Links: Converts Confluence links to Markdown links.
- Images: Converts Confluence images to Markdown images with appropriate links.
- Code Blocks: Converts Confluence code blocks to Markdown code blocks.
- Tasks: Converts Confluence tasks to Markdown task lists.
- Alerts: Converts Confluence info panels to Markdown alert blocks.
- Front Matter: Adds front matter to the Markdown files for metadata like page properties and page labels.
To use the confluence-markdown-exporter, follow these steps:
Install python package via pip.
pip install confluence-markdown-exporterYou must set environment variables for one of the following authentication options:
-
Username + API Token
ATLASSIAN_USERNAME: Your Atlassian account email addressATLASSIAN_API_TOKEN: An API token created at
https://id.atlassian.com/manage-profile/security/api-tokens
-
Personal Access Token (PAT)
ATLASSIAN_PAT: A Personal Access Token (used instead of username+token)
In all cases, you must also set:
ATLASSIAN_URL: Your Atlassian instance URL (e.g.https://company.atlassian.net)
Here an example setting the environment variables for the Username + API Token authentication for the current terminal session.
export ATLASSIAN_USERNAME="work mail address"
export ATLASSIAN_API_TOKEN="API token Test"
export ATLASSIAN_URL="https://company.atlassian.net"If you have separate Confluence and Jira instances or authentication, you can provide them via CONFLUENCE_ or JIRA_ prefixed environment variables.
Run the exporter with the desired Confluence page ID or space key.
Export a single Confluence page by ID or URL:
confluence-markdown-exporter page <page-id e.g. 645208921 or page-url e.g. https://company.atlassian.net/MySpace/My+Page+Title> <output path e.g. ./output_path/>Export a Confluence page and all it's descendants:
confluence-markdown-exporter page-with-descendants <page-id e.g. 645208921 or page-url e.g. https://company.atlassian.net/MySpace/My+Page+Title> <output path e.g. ./output_path/>Export all Confluence pages of a single Space:
confluence-markdown-exporter space <space-key e.g. MYSPACE> <output path e.g. ./output_path/>Export all Confluence pages across all spaces:
confluence-markdown-exporter all-spaces <output path e.g. ./output_path/>Tip
Instead of confluence-markdown-exporter you can also use the shorthand cf-export.
The exported Markdown file(s) will be saved in the specified output directory e.g.:
output_path/
└── MYSPACE/
├── MYSPACE.md
└── MYSPACE/
├── My Confluence Page.md
└── My Confluence Page/
├── My nested Confluence Page.md
└── Another one.mdBy default the converter uses a GitHub Flavored Markdown (GFM). You can also choose an Obsidian flavored markdown by setting:
export MARKDOWN_STYLE="Obsidian"Via PAGE_PATH and ATTACHMENT_PATH you can customize how pages and attachments are organized in the output directory.
By default, pages are stored at:
export PAGE_PATH="{space_name}/{homepage_title}/{ancestor_titles}/{page_title}.md"Available variables:
{space_key}: The key of the Confluence space.{space_name}: The name of the Confluence space.{homepage_id}: The ID of the homepage of the Confluence space.{homepage_title}: The title of the homepage of the Confluence space.{ancestor_ids}: A slash-separated list of ancestor page IDs.{ancestor_titles}: A slash-separated list of ancestor page titles.{page_id}: The unique ID of the Confluence page.{page_title}: The title of the Confluence page.
By default, attachments are stored at:
export ATTACHMENT_PATH="{space_name}/attachments/{attachment_file_id}{attachment_extension}"Available variables:
{space_key}: The key of the Confluence space.{space_name}: The name of the Confluence space.{homepage_id}: The ID of the homepage of the Confluence space.{homepage_title}: The title of the homepage of the Confluence space.{ancestor_ids}: A slash-separated list of ancestor page IDs.{ancestor_titles}: A slash-separated list of ancestor page titles.{attachment_id}: The unique ID of the attachment.{attachment_title}: The title of the attachment.{attachment_file_id}: The file ID of the attachment.{attachment_extension}: The file extension of the attachment, including the leading dot.
This package is not tested extensively. Please check all output and report any issue here. It generally was tested on:
- Confluence Cloud 1000.0.0-b5426ab8524f (2025-05-28)
- Confluence Server 8.5.20
If you would like to contribute, please read our contribution guideline.
This tool is an open source project released under the MIT License.
