{"id":13607300,"url":"https://github.com/bellingcat/open-source-research-notebooks","last_synced_at":"2025-04-12T11:32:09.660Z","repository":{"id":225848786,"uuid":"679657830","full_name":"bellingcat/open-source-research-notebooks","owner":"bellingcat","description":"Jupyter notebooks helping open source researchers, journalists, and fact-checkers use command line tools and code projects for digital investigations.","archived":false,"fork":false,"pushed_at":"2025-03-06T12:19:15.000Z","size":848,"stargazers_count":235,"open_issues_count":2,"forks_count":20,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-03-06T13:27:05.388Z","etag":null,"topics":["notebook","open-source-research","python"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bellingcat.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-17T10:27:08.000Z","updated_at":"2025-03-06T12:19:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"898c5c53-3b87-4354-864e-66e72a5e5747","html_url":"https://github.com/bellingcat/open-source-research-notebooks","commit_stats":null,"previous_names":["bellingcat/open-source-research-notebooks"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Fopen-source-research-notebooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Fopen-source-research-notebooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Fopen-source-research-notebooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Fopen-source-research-notebooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bellingcat","download_url":"https://codeload.github.com/bellingcat/open-source-research-notebooks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248560192,"owners_count":21124610,"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":["notebook","open-source-research","python"],"created_at":"2024-08-01T19:01:17.431Z","updated_at":"2025-04-12T11:32:09.653Z","avatar_url":"https://github.com/bellingcat.png","language":"Jupyter Notebook","funding_links":[],"categories":["Jupyter Notebook"],"sub_categories":[],"readme":"# Open Source Research Notebooks\n\n\u003ca href=\"https://www.bellingcat.com\"\u003e\u003cimg alt=\"Bellingcat logo: Discover Bellingcat\" src=\"https://img.shields.io/badge/Discover%20Bellingcat-%20?style=for-the-badge\u0026logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TS0UqDnZQEcxQneyiIo6likWwUNoKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ%2FABxdnBSdJES%2F5cUWsR4cNyPd%2Fced%2B8AoVllqtkTA1TNMtKJuJjLr4rBVwQwhhBEDEvM1JOZxSw8x9c9fHy9i%2FIs73N%2Fjn6lYDLAJxLHmG5YxBvEs5uWznmfOMzKkkJ8Tjxp0AWJH7kuu%2FzGueSwwDPDRjY9TxwmFktdLHcxKxsq8QxxRFE1yhdyLiuctzir1Tpr35O%2FMFTQVjJcpzmKBJaQRIo6klFHBVVYiNKqkWIiTftxD%2F%2BI40%2BRSyZXBYwcC6hBheT4wf%2Fgd7dmcXrKTQrFgcCLbX%2BMA8FdoNWw7e9j226dAP5n4Err%2BGtNYO6T9EZHixwBA9vAxXVHk%2FeAyx1g6EmXDMmR%2FDSFYhF4P6NvygODt0Dfmttbex%2BnD0CWulq%2BAQ4OgYkSZa97vLu3u7d%2Fz7T7%2BwHEU3LHAa%2FQ6gAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAuIwAALiMBeKU%2FdgAAAAd0SU1FB%2BgFHwwiMH4odB4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAA50lEQVQ4y82SvWpCQRCFz25ERSJiCNqlUiS1b5AuEEiZIq1NOsGXCKms0wXSp9T6dskDiFikyiPc%2FrMZyf3FXSGQ0%2BzuzPl2ZoeVKgQ0gQ2wBVpVHlcDkjM5V%2FJ5nag6sJ%2FZX%2Bh%2FC7gEhqeAFKf7p1M9aB3b5oN1OomB7g1axUBPBr3GQHODHmOgqUF3MZAzKI2d4LWBV4H%2BMXDuJd1a7Cew1k7SwksaHC4LqNaw7aeX9GWHXkC1G1sTAS17Y3Kk2lnp4wNLiz0DrgLq8qt2MfmSSabAO%2FBBXp26dtrADPjOmN%2BAUdG7B3cE61l5hOZiAAAAAElFTkSuQmCC\u0026logoColor=%23fff\u0026color=%23000\"\u003e\u003c/a\u003e\u003c!--\n--\u003e\u003ca href=\"https://discord.gg/bellingcat\"\u003e\u003cimg alt=\"Discord logo: Join our community\" src=\"https://img.shields.io/badge/Join%20our%20community-%20?style=for-the-badge\u0026logo=discord\u0026logoColor=%23fff\u0026color=%235865F2\"\u003e\u003c/a\u003e\u003c!--\n--\u003e\u003ca href=\"https://www.bellingcat.com/donate/\"\u003e\u003cimg alt=\"Heart icon: Support our work\" src=\"https://img.shields.io/badge/Support%20Our%20Work-%20?style=for-the-badge\u0026logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BCjxzdmcKICAgd2lkdGg9IjExMCIKICAgaGVpZ2h0PSIxMTAiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI%2BCiAgPGRlZnMKICAgICBpZD0iZGVmczEiIC8%2BCiAgPHBhdGgKICAgICBkPSJtIDgxLjU3LDguMDA3MjY2OCBjIC0xMS42NiwwIC0yMS44MSw2Ljk3MDAwMDIgLTI2LjM1LDE3LjA2MDAwMDIgQyA1MC42OCwxNC45ODcyNjcgNDAuNTMsOC4wMDcyNjY4IDI4Ljg3LDguMDA3MjY2OCAxMi45NSw4LjAwNzI2NjggMCwyMC45NjcyNjcgMCwzNi44ODcyNjcgYyAwLDM1LjkgNTEuNzksNjUuNDYwMDAzIDU0LDY2LjcwMDAwMyAwLjM4LDAuMjEgMC43OSwwLjMyIDEuMjEsMC4zMiAwLjQyLDAgMC44NCwtMC4xMSAxLjIxLC0wLjMyIDIuMiwtMS4yNCA1NC4wMSwtMzAuODAwMDAzIDU0LjAxLC02Ni43MDAwMDMgMC4wMSwtMTUuOTIgLTEyLjk0LC0yOC44ODAwMDAyIC0yOC44NiwtMjguODgwMDAwMiB6IgogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjEiCiAgICAgaWQ9InBhdGgxIiAvPgo8L3N2Zz4K\u0026logoSize=auto\u0026color=%23A94ECA\"\u003e\u003c/a\u003e\n\nA collection of Jupyter Notebooks that can be to learn or run open source investigations. We cover command line tools, scripts, and methods. We aim to help open source researchers, journalists, and fact-checkers use command line tools and code projects for digital investigations.\n\n\u003cblockquote align=\"center\"\u003e\n  \n  📰 Read \u003ca href=\"https://www.bellingcat.com/resources/2024/03/06/how-code-notebooks-enable-open-source-research/\"\u003eour guide to code notebooks here.\u003c/a\u003e\n\n  📹 Watch our tutorial on Youtube:\n  \n[![YouTube](http://i.ytimg.com/vi/ymCMy8OffHM/mqdefault.jpg)](https://www.youtube.com/watch?v=ymCMy8OffHM)\n  \n  \u003c/blockquote\u003e\n\n### Is this for me?\nIf you've used Jupyter notebooks before you should be good to navigate this right away.\n\nIf Jupyter Notebooks/Google Colaboratory don't ring any bells, you should know they are one of the easiest ways to interact with code and the command line, in essence they look like an interactive website where you execute one cell at a time to run different pieces of code, you can also edit the code and adapt it to your needs. \n\nThere's plenty of good tutorials about Jupyter Notebooks and the environments you can run them in (like [Google Colab](https://www.youtube.com/watch?v=inN8seMm7UI) or Binder.org), we do advise you to spend 5min doing that. Additionally, we created a simple notebook that you can [view (static)](notebooks/methods/intro-to-notebooks.ipynb), [run on Google Colab](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/methods/intro-to-notebooks.ipynb), [run on Binder]([TODO](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fmethods%2Fintro-to-notebooks.ipynb)), or [run on Kaggle](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/methods/intro-to-notebooks.ipynb) that shows the core skills needed to understand what this is all about!\n\n### Why Notebooks?\nJupyter Notebooks\n- make it easier to install and run software (less \"this does not work on my machine\" errors)\n- make it safer to run unknown code, when you run it on a Notebook service like [Google Colaboratory](https://colab.google/), [Binder](https://mybinder.org/), or [Kaggle Notebooks](https://www.kaggle.com/docs/notebooks)\n- make it simpler to document specific code uses: they combine styled documentation with code\n- are quick to make and easy to use after you understand how to click through the code cells and edit any custom input\n- can run bash commands (command line) as well as code (Python and more)\n\n# Available Notebooks\nThe top part of the table consists of tools and methods developed at Bellingcat; the bottom part of community developed tools and methods.\n|           **Notebook**            | **Level**               | **Description**                                                                                           | **Notebook links**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | **Tags**                               |\n| :-------------------------------: | ----------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------- |\n| **Telegram Phone Number Checker** | ![easy][easy-badge]     | Check if phone numbers have associated Telegram accounts                                                  | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/telegram-phone-number-checker.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fbellingcat%2Ftelegram-phone-number-checker.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/telegram-phone-number-checker.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/bellingcat/telegram-phone-number-checker.ipynb) | `scraping`, `social-media`, `telegram` |\n|   **Wayback Google Analytics**    | ![easy][easy-badge]     | Uncover historical analytics ids via the Wayback Machine                                                  | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/wayback-google-analytics.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fbellingcat%2Fwayback-google-analytics.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/wayback-google-analytics.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/bellingcat/wayback-google-analytics.ipynb)                     | `wayback-machine`, `google-analytics`  |\n|         **Geoclustering**         | ![medium][medium-badge] | Find clusters of incidents from a CSV of incidents                                                        | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/geoclustering.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fbellingcat%2Fgeoclustering.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/geoclustering.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/bellingcat/geoclustering.ipynb)                                                                 | `ai`, `clustering`, `gis`              |\n|        **vk-url-scraper**         | ![medium][medium-badge] | Scrape data and download media from VKontakte URLs                                                        | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/vk-url-scraper.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fbellingcat%2Fvk-url-scraper.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/vk-url-scraper.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/bellingcat/vk-url-scraper.ipynb)                                                             | `scraping`, `social-media`             |\n|        **Search Grid Generator**         | ![medium][easy-badge] | Generate grid in KML file for systematic area searches.                                              | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/search-grid-generator.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fbellingcat%2Fsearch-grid-generator.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/bellingcat/search-grid-generator.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/bellingcat/search-grid-generator.ipynb)                                                             | `geolocation`, `maps`             |\n|                 -                 | -                       | -                                                                                                         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -                                      |\n|        **OpenAI Whisper**         | ![easy][easy-badge]     | AI audio/video transcription and translation                                                              | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/whisper.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fwhisper.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/whisper.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/whisper.ipynb)                                                                                             | `ai`, `speech-recognition`             |\n|            **Holehe**             | ![easy][easy-badge]     | Find accounts associated with an email                                                                    | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/holehe.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fholehe.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/holehe.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/holehe.ipynb)                                                                                                 | `digital-footprint-tracing`            |\n|            **Maigret**            | ![easy][easy-badge]     | Find accounts associated with a username                                                                  | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/maigret.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fmaigret.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/maigret.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/maigret.ipynb)                                                                                             | `digital-footprint-tracing`            |\n|  **Wayback Machine Downloader**   | ![easy][easy-badge]     | Download an entire website from the Wayback Machine.                                                      | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/wayback-machine-downloader.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fwayback-machine-downloader.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/wayback-machine-downloader.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/wayback-machine-downloader.ipynb)                 | `wayback-machine`                      |\n|            **YT-DLP**             | ![easy][easy-badge]     | Download and manipulate videos from hundreds of online platforms. Includes advanced commands with Python. | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/yt_dlp.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fyt_dlp.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/yt_dlp.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/yt_dlp.ipynb)                                                                                                 | `archiving`, `media-downloads`         |\n|           **ExifTool**            | ![medium][medium-badge] | Extract and analyse file metadata tags                                                                    | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/exiftool.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fexiftool.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/exiftool.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/exiftool.ipynb)                                                                                         | `digital-forensics`, `metadata`        |\n|           **Deepface**            | ![medium][medium-badge] | AI face comparison and analysis                                                                           | [![Colab][colab-badge]](https://colab.research.google.com/github/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/deepface.ipynb) [![Binder][binder-badge]](https://mybinder.org/v2/gh/bellingcat/open-source-research-notebooks/main?labpath=notebooks%2Fcommunity%2Fdeepface.ipynb) [![Kaggle Notebook][kaggle-badge]](https://kaggle.com/kernels/welcome?src=https://github.com/bellingcat/open-source-research-notebooks/blob/main/notebooks/community/deepface.ipynb) [![Jupyter Notebook][jupyter-badge]](notebooks/community/deepface.ipynb)                                                                                         | `ai`, `image-analysis`                 |\n\n\n- ![easy][easy-badge] Entry level notebooks, you need only know how to run cells and edit specific values\n- ![medium][medium-badge] Notebooks that require higher technical know-how, or previous setups\n- ![advanced][advanced-badge] Notebooks that require technical understanding or adapting code\n\n\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[colab-badge]: https://colab.research.google.com/assets/colab-badge.svg\n[binder-badge]: https://mybinder.org/badge_logo.svg\n[kaggle-badge]: https://kaggle.com/static/images/open-in-kaggle.svg\n[jupyter-badge]: https://img.shields.io/badge/jupyter-.ipynb%20file-orange\n[easy-badge]: https://img.shields.io/badge/easy-%234CAF50?style=for-the-badge\n[medium-badge]: https://img.shields.io/badge/medium-%23FF9800?style=for-the-badge\n[advanced-badge]: https://img.shields.io/badge/advanced-%23F44336?style=for-the-badge\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbellingcat%2Fopen-source-research-notebooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbellingcat%2Fopen-source-research-notebooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbellingcat%2Fopen-source-research-notebooks/lists"}