tabakman/google-keep-to-evernote
Google Keep to Evernote converter with image, tag, and checklist support
Google Keep to Evernote Converter πβ‘οΈπ
This script converts your Google Keep archive into Evernote-compatible .enex files β with support for:
- π Chronological sorting (oldest notes first, based on JSON timestamps)
- πΌ Embedded images (inline in note content)
- βοΈ Checklists (converted to Evernote-style todos)
- π Pinned notes (tagged as
pinned) - π Archived notes (tagged as
archived) - π· Labels β Tags
- π Created/modified timestamps
- π§Ύ UTF-8/emoji compatibility
- π Output split into multiple
.enexfiles (configurable chunk size) - π― Command-line interface with flexible options
Tested with:
- 5,000+ notes
-
500MB of HTML, JSON, and images from Google Takeout
π€ How to Export Your Google Keep Data
- Go to Google Takeout
- Deselect everything, then enable only Keep
- Export and download the
.zipfile - Unzip it β inside
Takeout/Keep/youβll find:.htmlfiles (one per note).jsonfiles (metadata)- any attached images (
.jpg,.png,.gif, etc.)
π Copy all of those files (flat) into the keep_source/ folder in this repo.
Requires
beautifulsoup4.
See Troubleshooting if you hit an import error.
π Quick Start
-
Put your extracted Keep files (HTML, JSON, and images) into
keep_source/ -
Run the converter:
# Basic usage (uses default directories)
python google-keep-to-evernote.py
# Or with custom options
python google-keep-to-evernote.py -s my_keep_export -o my_output --size 200It will:
- Ask if you'd like to clear the output folder (or use
--clear-outputto skip the prompt) - Convert your notes to Evernote
.enexformat - Sort notes chronologically (oldest first in
output_001.enex) - Embed images and todos
- Split the result into multiple
output_###.enexfiles inevernote_output/ - Log skipped notes or failed images to
migration_log.txt
Command-Line Options
python google-keep-to-evernote.py [OPTIONS]
Options:
-s, --source DIR Source directory (default: keep_source)
-o, --output DIR Output directory (default: evernote_output)
--size N Notes per file (default: 100)
--no-sort Don't sort chronologically
--clear-output Clear output folder without prompting
-h, --help Show help messageExamples:
# Use default settings
python google-keep-to-evernote.py
# Custom directories and 200 notes per file
python google-keep-to-evernote.py -s my_keep -o my_enex --size 200
# Keep original order (don't sort by date)
python google-keep-to-evernote.py --no-sort
# Auto-clear output folder
python google-keep-to-evernote.py --clear-outputπ Folder Structure
.
βββ google-keep-to-evernote.py # β the main script
βββ keep_source/ # β your Keep HTML/JSON/image files go here
βββ evernote_output/ # β final ENEX files + log
β Features
| Feature | Supported |
|---|---|
| Note content | β |
| JSON-first timestamps | β |
| Chronological sorting | β |
| Tags / labels | β |
| Checklists | β |
| Embedded images | β |
| Pinned notes | β (tagged) |
| Archived notes | β (tagged) |
| Migration log | β |
Evernote-ready .enex |
β |
| Configurable chunking | β |
| Command-line interface | β |
π οΈ Troubleshooting
ModuleNotFoundError: No module named 'bs4'
This means the script is missing the BeautifulSoup library.
Fix it by running:
pip install beautifulsoup4Then run the script again:
python google-keep-to-evernote.pyIf you're using a virtual environment, make sure itβs activated before installing.
π₯ Credits
- Tal Tabakman (@tabakman) - Original creator
- StrayGuru (@StrayGuru) - Chronological sorting & JSON-first date extraction
π License
This project is licensed under the MIT License.
Contributions are welcome β feel free to fork, open issues, or submit pull requests to make this better for others migrating their notes.