{"id":17148769,"url":"https://github.com/trustmaster/gkeep2notion","last_synced_at":"2025-04-13T09:32:24.399Z","repository":{"id":44416525,"uuid":"417601429","full_name":"trustmaster/gkeep2notion","owner":"trustmaster","description":"Export contents from Google Keep and import it into Notion","archived":false,"fork":false,"pushed_at":"2024-02-14T10:42:17.000Z","size":42,"stargazers_count":96,"open_issues_count":5,"forks_count":18,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-27T01:35:41.539Z","etag":null,"topics":["google-keep","notion"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trustmaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-10-15T18:40:34.000Z","updated_at":"2025-03-05T23:16:38.000Z","dependencies_parsed_at":"2023-11-25T21:45:15.676Z","dependency_job_id":null,"html_url":"https://github.com/trustmaster/gkeep2notion","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trustmaster%2Fgkeep2notion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trustmaster%2Fgkeep2notion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trustmaster%2Fgkeep2notion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trustmaster%2Fgkeep2notion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trustmaster","download_url":"https://codeload.github.com/trustmaster/gkeep2notion/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248690891,"owners_count":21146227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["google-keep","notion"],"created_at":"2024-10-14T21:29:48.162Z","updated_at":"2025-04-13T09:32:24.111Z","avatar_url":"https://github.com/trustmaster.png","language":"Python","readme":"# Google Keep -\u003e Notion\n\nExports notes and lists from Google Keep and imports them into your Notion.\n\n## Features\n\nSupports exporting:\n\n- Notes\n- TODO lists\n- Images and audio (_unsupported in recent Notion API versions, stay tuned for updates_)\n- Categorization via labels\n\n## Installation\n\nThis script requires Python 3.9+, https://github.com/kiwiz/gkeepapi, https://github.com/ramnes/notion-sdk-py, and a couple more libraries to run. Install the pre-requisite libraries via [Pip3](https://pypi.org/project/pip/):\n\n```\npip3 install -r requirements.txt\n```\n\nOptional: make the script executable:\n\n```\nchmod +x gkeep2notion.py\n```\n\n### Preventing \"Authentication failed\" on some systems\n\n____\n#### Running inside of a Docker Container\nIn order to use the `gkeepapi` dependency, you'll need to run it inside of a docker container that is compatible with it. Otherwise you'll most likely run into an \"Authentication failed\" error.\n\n1. Build the Docker Image\n```\ndocker build -t gkeep2notion_image .\n```\n2. Run the Docker Container\n```\ndocker run -it --name gkeep2notion_container gkeep2notion_image /bin/bash\n```\n3. Now you should be inside the container and the rest of the guide should work\n____\n\nOn some systems the authentication fails even with valid credentials. This may happen because of three reasons:\n1. You have enabled 2FA on your account\n2. Google issues a CAPTCHA for your IP address\n3. SSL certificate validation fails.\n\n\n**To fix the 2FA problem:**\n\nYou need to create an app specific password for the script.\n\n1. Go to https://myaccount.google.com/apppasswords\n2. Login to your account\n3. Under the `Select the app and device you want to generate the app password for.` section:\n    1. Select `Other(Custom name)` from the `Select app` dropdown\n    2. Enter some name like `gkeep2notion` and click on `Generate` button\n    3. Copy password from the popup and click Done\n4. Use this copied password in your terminal when script prompts for password\n\n**To fix the CAPTCHA problem:**\n\nTry using the [Unlock CAPTCHA link](https://accounts.google.com/DisplayUnlockCaptcha) before retrying login.\n\n**To try fixing the SSL problem:***\n\nRevert to an older version of the following library:\n\n```\npip3 install requests==2.23.0\n```\n\n## Configuration\n\nBefore use, copy _config.example.ini_ to _config.ini_ and edit its contents. See configuration explanation below:\n\n```ini\n[gkeep]\nemail=your_name@gmail.com # Your Google account\nimport_notes=true # Set to false if you don't want to import notes\nimport_todos=true # Set to false if you don't want to import TODO lists\nimport_media=true # Set to false if you don't need to import images and audio\n\n[notion]\ntoken=Copy it from your Notion integratin # See documentation below\nroot_url=https://notion.so/PAGE-ID Create a root url in your Notion # See documentation below\n```\n\n### Obtaining Notion token\n\nThe importer needs to access your Notion account and it needs to know the root URL in which to import all the Google Keep contents.\n\nTo get a Notion authentication token:\n\n1. Go to your [Notion integrations](https://www.notion.so/my-integrations)\n2. Click _\"Create new integration\"_\n3. Enter any name, e.g. `gkeep2notion`. As per Integration type, choose _Internal integration_. In the _Capabilities_ make sure this integration can Read, Update, and Insert content.\n4. After creating the integration copy the _\"Internal Integration Token\"_ value to the `token` in your `config.ini`.\n\n### Configuring the root_url\n\nThis script imports all the content under a certain page in Notion that has to exist already. It is recommended to create a special page for the imported content, and then migrate it to your regular Notion structure from there.\n\n1. Create a new page in Notion e.g. _\"Google Keep import\"_\n2. Click on `•••` button on top right of the page and select _\"Add Connections\"_ (at the bottom) from the menu.\n3. Search for your integration name and select it. You should press _\"Confirm\"_ on the dialog that will appear. This will make the page accessible to your integration.\n4. Copy the URL of the page in the address bar or use _\"Copy link\"_ in the context menu of the navigation bar\n5. Paste that link to `root_url` in the _config.ini_.\n\n## Usage\n\n### Google authentication\n\nThe first time you run `gkeep2notion` it will ask for your Google Account's password to authenticate into your Google Keep account. After obtaining an authentication token, `gkeep2notion` saves it in your system's keyring. Next time you won't need to enter the password again.\n\n### Import everything\n\n_Note: export/import takes a considerable amount of time. Especially when working with notes containing media files. So you may want to try importing a subset of your records before importing everything._\n\nBy default gkeep2notion exports everything in your Google Keep account and imports it into Notion. It can be done as simple as:\n\n```bash\n./gkeep2notion.py\n```\n\n### Google Keep search query\n\nYou can use the search function built into Google Keep to import notes matching a search query:\n\n```bash\n./gkeep2notion.py -q 'Orange apple'\n```\n\n### Import specific labels\n\nYou can import notes and tasklists containing specific label(s) in Google Keep using the `-l` option.\n\nAn example with one label:\n\n```bash\n./gkeep2notion.py -l cooking\n```\n\nAn example with multiple labels, comma separated:\n\n```bash\n./gkeep2notion.py -l 'work, business, management'\n```\n\n## Credits\n\nThis tool uses the [unofficial Google Keep API for Python](https://github.com/kiwiz/gkeepapi) by [kiwiz](https://github.com/kiwiz). Google Keep is of course a registered trademark of Google and neither the API nor this script are affiliated with Google, Inc.\n\nThanks to [ramnes](https://github.com/ramnes) for the [unofficial Notion Python SDK](https://github.com/ramnes/notion-sdk-py). Neither that API nor this script are affiliated with Notion. Notion is a trademark of Notion Labs, Inc.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrustmaster%2Fgkeep2notion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrustmaster%2Fgkeep2notion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrustmaster%2Fgkeep2notion/lists"}