GitHunt
TA

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 .enex files (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

  1. Go to Google Takeout
  2. Deselect everything, then enable only Keep
  3. Export and download the .zip file
  4. Unzip it β€” inside Takeout/Keep/ you’ll find:
    • .html files (one per note)
    • .json files (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

  1. Put your extracted Keep files (HTML, JSON, and images) into keep_source/

  2. 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 200

It will:

  • Ask if you'd like to clear the output folder (or use --clear-output to skip the prompt)
  • Convert your notes to Evernote .enex format
  • Sort notes chronologically (oldest first in output_001.enex)
  • Embed images and todos
  • Split the result into multiple output_###.enex files in evernote_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 message

Examples:

# 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 beautifulsoup4

Then run the script again:

python google-keep-to-evernote.py

If 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.

tabakman/google-keep-to-evernote | GitHunt