{"id":13449312,"url":"https://github.com/twintproject/twint","last_synced_at":"2025-10-05T17:31:17.805Z","repository":{"id":38678890,"uuid":"93947448","full_name":"twintproject/twint","owner":"twintproject","description":"An advanced Twitter scraping \u0026 OSINT tool written in Python that doesn't use Twitter's API, allowing you to scrape a user's followers, following, Tweets and more while evading most API limitations.","archived":true,"fork":false,"pushed_at":"2023-02-23T13:58:09.000Z","size":4578,"stargazers_count":16205,"open_issues_count":589,"forks_count":2781,"subscribers_count":331,"default_branch":"master","last_synced_at":"2025-08-28T07:51:02.921Z","etag":null,"topics":["elasticsearch","kibana","osint","python","scrape","scrape-followers","scrape-following","scrape-likes","tweep","tweets","twint","twitter"],"latest_commit_sha":null,"homepage":"","language":"Python","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/twintproject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"patreon":"twintproject","custom":"paypal.me/noneprivacy"}},"created_at":"2017-06-10T15:16:49.000Z","updated_at":"2025-08-28T07:06:46.000Z","dependencies_parsed_at":"2023-02-09T11:31:43.698Z","dependency_job_id":"4ced7280-67cb-4da9-a007-6d8ece462e01","html_url":"https://github.com/twintproject/twint","commit_stats":{"total_commits":795,"total_committers":69,"mean_commits":"11.521739130434783","dds":0.6037735849056604,"last_synced_commit":"e7c8a0c764f6879188e5c21e25fb6f1f856a7221"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/twintproject/twint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twintproject%2Ftwint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twintproject%2Ftwint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twintproject%2Ftwint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twintproject%2Ftwint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twintproject","download_url":"https://codeload.github.com/twintproject/twint/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twintproject%2Ftwint/sbom","scorecard":{"id":903980,"data":{"date":"2025-08-18","repo":{"name":"github.com/twintproject/twint","commit":"e7c8a0c764f6879188e5c21e25fb6f1f856a7221"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":2.6,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":8,"reason":"Found 25/30 approved changesets -- score normalized to 8","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3.6-buster to python:3.6-buster@sha256:56ba32a1c5aa030914cc957f1c9fe58d9d462bdf89a1e5f2b4dbdda68085327e","Warn: pipCommand not pinned by hash: Dockerfile:6-8","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"13 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-120 / GHSA-45c4-8wx5-qw6w","Warn: Project is vulnerable to: GHSA-5m98-qgg9-wh84","Warn: Project is vulnerable to: GHSA-7gpw-8wmc-pm8g","Warn: Project is vulnerable to: GHSA-8495-4g3g-x7pr","Warn: Project is vulnerable to: PYSEC-2024-26 / GHSA-8qpw-xqxj-h4r2","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: PYSEC-2023-246 / GHSA-gfw2-4jvh-wgfg","Warn: Project is vulnerable to: GHSA-pjjw-qhg8-p2p9","Warn: Project is vulnerable to: PYSEC-2023-250 / GHSA-q3qx-c6g2-7pw2","Warn: Project is vulnerable to: PYSEC-2023-251 / GHSA-qvrw-v9rv-5rjx","Warn: Project is vulnerable to: PYSEC-2021-76 / GHSA-v6wp-4m6f-gcjg","Warn: Project is vulnerable to: PYSEC-2023-247 / GHSA-xx9p-xxvh-7g8j","Warn: Project is vulnerable to: PYSEC-2020-73"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T16:41:26.553Z","repository_id":38678890,"created_at":"2025-08-24T16:41:26.553Z","updated_at":"2025-08-24T16:41:26.553Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278487153,"owners_count":25995123,"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","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["elasticsearch","kibana","osint","python","scrape","scrape-followers","scrape-following","scrape-likes","tweep","tweets","twint","twitter"],"created_at":"2024-07-31T06:00:35.448Z","updated_at":"2025-10-05T17:31:17.531Z","avatar_url":"https://github.com/twintproject.png","language":"Python","readme":"# TWINT - Twitter Intelligence Tool\n![2](https://i.imgur.com/iaH3s7z.png)\n![3](https://i.imgur.com/hVeCrqL.png)\n\n[![PyPI](https://img.shields.io/pypi/v/twint.svg)](https://pypi.org/project/twint/) [![Build Status](https://travis-ci.org/twintproject/twint.svg?branch=master)](https://travis-ci.org/twintproject/twint) [![Python 3.6|3.7|3.8](https://img.shields.io/badge/Python-3.6%2F3.7%2F3.8-blue.svg)](https://www.python.org/download/releases/3.0/) [![GitHub license](https://img.shields.io/github/license/haccer/tweep.svg)](https://github.com/haccer/tweep/blob/master/LICENSE) [![Downloads](https://pepy.tech/badge/twint)](https://pepy.tech/project/twint) [![Downloads](https://pepy.tech/badge/twint/week)](https://pepy.tech/project/twint/week) [![Patreon](https://img.shields.io/endpoint.svg?url=https:%2F%2Fshieldsio-patreon.herokuapp.com%2Ftwintproject)](https://www.patreon.com/twintproject) ![](https://img.shields.io/twitter/follow/noneprivacy.svg?label=Follow\u0026style=social) \n\n\u003eNo authentication. No API. No limits.\n\nTwint is an advanced Twitter scraping tool written in Python that allows for scraping Tweets from Twitter profiles **without** using Twitter's API.\n\nTwint utilizes Twitter's search operators to let you scrape Tweets from specific users, scrape Tweets relating to certain topics, hashtags \u0026 trends, or sort out *sensitive* information from Tweets like e-mail and phone numbers. I find this very useful, and you can get really creative with it too.\n\nTwint also makes special queries to Twitter allowing you to also scrape a Twitter user's followers, Tweets a user has liked, and who they follow **without** any authentication, API, Selenium, or browser emulation.\n\n## tl;dr Benefits\nSome of the benefits of using Twint vs Twitter API:\n- Can fetch almost __all__ Tweets (Twitter API limits to last 3200 Tweets only);\n- Fast initial setup;\n- Can be used anonymously and without Twitter sign up;\n- **No rate limitations**.\n\n## Limits imposed by Twitter\nTwitter limits scrolls while browsing the user timeline. This means that with `.Profile` or with `.Favorites` you will be able to get ~3200 tweets.\n\n## Requirements\n- Python 3.6;\n- aiohttp;\n- aiodns;\n- beautifulsoup4;\n- cchardet;\n- dataclasses\n- elasticsearch;\n- pysocks;\n- pandas (\u003e=0.23.0);\n- aiohttp_socks;\n- schedule;\n- geopy;\n- fake-useragent;\n- py-googletransx.\n\n## Installing\n\n**Git:**\n```bash\ngit clone --depth=1 https://github.com/twintproject/twint.git\ncd twint\npip3 install . -r requirements.txt\n```\n\n**Pip:**\n```bash\npip3 install twint\n```\n\nor\n\n```bash\npip3 install --user --upgrade git+https://github.com/twintproject/twint.git@origin/master#egg=twint\n```\n\n**Pipenv**:\n```bash\npipenv install git+https://github.com/twintproject/twint.git#egg=twint\n```\n\n### March 2, 2021 Update\n\n**Added**: Dockerfile\n\nNoticed a lot of people are having issues installing (including me). Please use the Dockerfile temporarily while I look into them. \n\n## CLI Basic Examples and Combos\nA few simple examples to help you understand the basics:\n\n- `twint -u username` - Scrape all the Tweets of a *user* (doesn't include **retweets** but includes **replies**).\n- `twint -u username -s pineapple` - Scrape all Tweets from the *user*'s timeline containing _pineapple_.\n- `twint -s pineapple` - Collect every Tweet containing *pineapple* from everyone's Tweets.\n- `twint -u username --year 2014` - Collect Tweets that were tweeted **before** 2014.\n- `twint -u username --since \"2015-12-20 20:30:15\"` - Collect Tweets that were tweeted since 2015-12-20 20:30:15.\n- `twint -u username --since 2015-12-20` - Collect Tweets that were tweeted since 2015-12-20 00:00:00.\n- `twint -u username -o file.txt` - Scrape Tweets and save to file.txt.\n- `twint -u username -o file.csv --csv` - Scrape Tweets and save as a csv file.\n- `twint -u username --email --phone` - Show Tweets that might have phone numbers or email addresses.\n- `twint -s \"Donald Trump\" --verified` - Display Tweets by verified users that Tweeted about Donald Trump.\n- `twint -g=\"48.880048,2.385939,1km\" -o file.csv --csv` - Scrape Tweets from a radius of 1km around a place in Paris and export them to a csv file.\n- `twint -u username -es localhost:9200` - Output Tweets to Elasticsearch\n- `twint -u username -o file.json --json` - Scrape Tweets and save as a json file.\n- `twint -u username --database tweets.db` - Save Tweets to a SQLite database.\n- `twint -u username --followers` - Scrape a Twitter user's followers.\n- `twint -u username --following` - Scrape who a Twitter user follows.\n- `twint -u username --favorites` - Collect all the Tweets a user has favorited (gathers ~3200 tweet).\n- `twint -u username --following --user-full` - Collect full user information a person follows\n- `twint -u username --timeline` - Use an effective method to gather Tweets from a user's profile (Gathers ~3200 Tweets, including **retweets** \u0026 **replies**).\n- `twint -u username --retweets` - Use a quick method to gather the last 900 Tweets (that includes retweets) from a user's profile.\n- `twint -u username --resume resume_file.txt` - Resume a search starting from the last saved scroll-id.\n\nMore detail about the commands and options are located in the [wiki](https://github.com/twintproject/twint/wiki/Commands)\n\n## Module Example\n\nTwint can now be used as a module and supports custom formatting. **More details are located in the [wiki](https://github.com/twintproject/twint/wiki/Module)**\n\n```python\nimport twint\n\n# Configure\nc = twint.Config()\nc.Username = \"realDonaldTrump\"\nc.Search = \"great\"\n\n# Run\ntwint.run.Search(c)\n```\n\u003e Output\n\n`955511208597184512 2018-01-22 18:43:19 GMT \u003cnow\u003e pineapples are the best fruit`\n\n```python\nimport twint\n\nc = twint.Config()\n\nc.Username = \"noneprivacy\"\nc.Custom[\"tweet\"] = [\"id\"]\nc.Custom[\"user\"] = [\"bio\"]\nc.Limit = 10\nc.Store_csv = True\nc.Output = \"none\"\n\ntwint.run.Search(c)\n```\n\n## Storing Options\n- Write to file;\n- CSV;\n- JSON;\n- SQLite;\n- Elasticsearch.\n\n## Elasticsearch Setup\n\nDetails on setting up Elasticsearch with Twint is located in the [wiki](https://github.com/twintproject/twint/wiki/Elasticsearch).\n\n## Graph Visualization\n![graph](https://i.imgur.com/EEJqB8n.png)\n\n[Graph](https://github.com/twintproject/twint/wiki/Graph) details are also located in the [wiki](https://github.com/twintproject/twint/wiki/Graph).\n\nWe are developing a Twint Desktop App.\n\n![4](https://i.imgur.com/DzcfIgL.png)\n\n## FAQ\n\u003e I tried scraping tweets from a user, I know that they exist but I'm not getting them\n\nTwitter can shadow-ban accounts, which means that their tweets will not be available via search. To solve this, pass `--profile-full` if you are using Twint via CLI or, if are using Twint as module, add `config.Profile_full = True`. Please note that this process will be quite slow.\n## More Examples\n\n#### Followers/Following\n\n\u003e To get only follower usernames/following usernames\n\n`twint -u username --followers`\n\n`twint -u username --following`\n\n\u003e To get user info of followers/following users\n\n`twint -u username --followers --user-full`\n\n`twint -u username --following --user-full`\n\n#### userlist\n\n\u003e To get only user info of user\n\n`twint -u username --user-full`\n\n\u003e To get user info of users from a userlist\n\n`twint --userlist inputlist --user-full`\n\n\n#### tweet translation (experimental)\n\n\u003e To get 100 english tweets and translate them to italian\n\n`twint -u noneprivacy --csv --output none.csv --lang en --translate --translate-dest it --limit 100`\n\nor\n\n```python\nimport twint\n\nc = twint.Config()\nc.Username = \"noneprivacy\"\nc.Limit = 100\nc.Store_csv = True\nc.Output = \"none.csv\"\nc.Lang = \"en\"\nc.Translate = True\nc.TranslateDest = \"it\"\ntwint.run.Search(c)\n```\n\nNotes:\n- [Google translate has some quotas](https://cloud.google.com/translate/quotas)\n\n## Featured Blog Posts:\n- [How to use Twint as an OSINT tool](https://pielco11.ovh/posts/twint-osint/)\n- [Basic tutorial made by Null Byte](https://null-byte.wonderhowto.com/how-to/mine-twitter-for-targeted-information-with-twint-0193853/)\n- [Analyzing Tweets with NLP in minutes with Spark, Optimus and Twint](https://towardsdatascience.com/analyzing-tweets-with-nlp-in-minutes-with-spark-optimus-and-twint-a0c96084995f)\n- [Loading tweets into Kafka and Neo4j](https://markhneedham.com/blog/2019/05/29/loading-tweets-twint-kafka-neo4j/)\n\n## Contact\n\nIf you have any question, want to join in discussions, or need extra help, you are welcome to join our Twint focused channel at [OSINT team](https://osint.team)\n","funding_links":["https://patreon.com/twintproject","paypal.me/noneprivacy","https://www.patreon.com/twintproject"],"categories":["Python","\u003ca id=\"a76463feb91d09b3d024fae798b92be6\"\u003e\u003c/a\u003e侦察\u0026\u0026信息收集\u0026\u0026子域名发现与枚举\u0026\u0026OSINT","常用 Python 工具","Welcome to Learn101","osint","\u003ca id=\"170048b7d8668c50681c0ab1e92c679a\"\u003e\u003c/a\u003e工具","twitter","OSINT","شبکه های اجتماعی","Pentesting","SCOMINT","Tools by Category","Tools"],"sub_categories":["\u003ca id=\"dc74ad2dd53aa8c8bf3a3097ad1f12b7\"\u003e\u003c/a\u003e社交网络","Awesome Repositories","Social Media Analyse","کار با زمان و تقویم","OSINT - Open Source INTelligence","👤 Username \u0026 Identity Research"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwintproject%2Ftwint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwintproject%2Ftwint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwintproject%2Ftwint/lists"}