Migrate Evernote HTML exports into a Notion database
Project description
evernote2notion
Migrate your Evernote notes into a Notion database — with full fidelity.
- Converts Evernote's HTML export (higher quality than ENEX) into native Notion blocks
- Uploads images, PDFs, and other file attachments using Notion's file upload API
- Resumes automatically if interrupted; skips already-imported notes
- Handles Notion API quirks: rate limits, payload size limits, WAF-blocked content
Installation
pipx install git+https://github.com/koichikawamura/evernote2notion.git
Setup
1. Export your notes from Evernote
In Evernote, select all notes → File → Export Notes → HTML. You'll get a folder of year-named subfolders:
my-export/
2018/
2019/
...
2025/
2. Create a Notion integration
- Go to https://www.notion.so/my-integrations and create a new Internal integration.
- Copy the Internal Integration Secret (starts with
secret_).
3. Share a Notion page with the integration
- In Notion, open (or create) the page that will contain your imported notes.
- Click "…" → "Add connections" and select your integration.
- Copy the page ID from the URL — it's the 32-character hex string at the end:
https://www.notion.so/My-Page-3a8f2b1c4d5e6f7a8b9c0d1e2f3a4b5c ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Usage
export NOTION_TOKEN=secret_xxx
# Test: parse notes and report block counts without uploading
evernote2notion --export-dir my-export --dry-run
# Import a small batch first
evernote2notion --export-dir my-export --parent-page-id <PAGE_ID> --limit 10
# Import a single year
evernote2notion --export-dir my-export --parent-page-id <PAGE_ID> --year 2022
# Import everything
evernote2notion --export-dir my-export --parent-page-id <PAGE_ID>
# Remove duplicate pages (if you re-imported notes)
evernote2notion --parent-page-id <PAGE_ID> --deduplicate
Progress is saved to import_progress.json in the current directory after every note. If the run is interrupted, re-run the same command and it picks up where it left off.
What gets imported
Each note becomes a page in an "Evernote Notes" Notion database:
| Property | Type | Description |
|---|---|---|
| Name | Title | Note title |
| Year | Select | Year the note was created |
| Created | Date | Original creation timestamp |
| Updated | Date | Last updated timestamp |
| Tags | Multi-select | Evernote tags |
| Source URL | URL | Original URL (for web clips) |
| Source | Select | Source app (web.clip, mobile, etc.) |
Note content is converted to native Notion blocks: paragraphs, headings, bullet/numbered lists, checkboxes, code blocks, tables, quotes, dividers, images, PDFs, and other file attachments.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evernote2notion-0.1.0.tar.gz.
File metadata
- Download URL: evernote2notion-0.1.0.tar.gz
- Upload date:
- Size: 31.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3e0f06335062ade2ce50772e11282e28fa2a4a5ca2440ef2d9bbbe0c7be92e6
|
|
| MD5 |
3e59f8d6a743926f07d269faa5609113
|
|
| BLAKE2b-256 |
85bd01ffb4d7b2ae776bc4dd9f9112bd87a0c65a9ef9bbfe6de3492ac06bfeec
|
File details
Details for the file evernote2notion-0.1.0-py3-none-any.whl.
File metadata
- Download URL: evernote2notion-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d42062d9a4584365168d77aa6235aab69fc932c38e34cf1ae5379e9b1f019a53
|
|
| MD5 |
118c436c44c64c066ef9f35dcf0aaa8f
|
|
| BLAKE2b-256 |
246f2e50327c564d21c2b24471c588aa3f3d87209b6e9525796321c3a9079bcd
|