keep-to-memos
Moves a Google Keep Takeout export into a Memos instance over HTTP. Stdlib only, Python 3.10+.
Usage
- Download a Takeout export from https://takeout.google.com.
- Create a personal access token in Memos under Settings -> Access Tokens.
Then run the importer:
uvx --from keep-to-memos keep-to-memos \
--url https://your-memos-instance \
--token memos_pat_... \
/path/to/takeout-*.zip
The source argument takes the zip or an unpacked Takeout/Keep folder. Set
MEMOS_URL and MEMOS_TOKEN instead of the flags to keep the token out of your
shell history. --url defaults to http://localhost:5230.
Run from a terminal and the importer prompts for whatever is missing, with the
token hidden. Non-interactive runs fail fast. To install permanently, use
uv tool install keep-to-memos or pipx install keep-to-memos.
Flags:
--dry-runprints what would be imported. Needs no token or server.--include-trashedalso imports trashed notes. Off by default.--no-throttleskips the 0.5s pause between writes. Only safe on Postgres or MySQL; SQLite returnsSQLITE_BUSYunder back-to-back writes.
What it imports
- Images as embedded attachments
- Original created and edited timestamps
- Labels as
#tags, title as a heading, pinned state, color as a#color/*tag - Archived notes stay archived
- Checklists as markdown task lists
Re-running is safe. Each note maps to a deterministic memo ID, so the second run skips what exists; empty memos from a failed run are deleted and retried.
Notes
- Zip input is extracted to a temp dir and deleted afterward.
- Writes are spaced 0.5s apart with 5xx retries; memos' SQLite path returns
SQLITE_BUSYunder back-to-back writes. - Attachments are created unbound, then attached via
SetMemoAttachments; binding at creation fails on some builds. - The gateway is protobuf-backed: bodies use camelCase (
createTime),update_masksnake_case (update_time).
Development
See CONTRIBUTING.md. After editing testdata/Takeout, rebuild
the fixture with python3 testdata/make_zip.py.
License
MIT, see LICENSE.
Metadata
Release files for keep-to-memos 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| keep_to_memos-1.0.0.tar.gz | 72.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keep_to_memos-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 87.9 kB
Release files / keep_to_memos-1.0.0.tar.gz
| Download URL | keep_to_memos-1.0.0.tar.gz |
|---|---|
| Size | 72.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bbf260de46671e58c16ff5e8159eb7fdf69f21b25fa66f8d34c5e52305795949
|
|
BLAKE2b-256 checksum How to use checksums |
11e846cfce3ac297400e122dcc9cd938ec6cec4f4d836dcd017b128a21f50a2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / keep_to_memos-1.0.0-py3-none-any.whl
| Download URL | keep_to_memos-1.0.0-py3-none-any.whl |
|---|---|
| Size | 15.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0564d290ff57b6a75459bf45620dc565e7d43de3783a64e5c1019647ba343735
|
|
BLAKE2b-256 checksum How to use checksums |
0189fb8c7c9332abb45f9a5b08e1beec400d857e1b1bacda1ad94947a22da42a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log