GitPedia

TweetFeed

TweetFeed collects Indicators of Compromise (IOCs) shared by the infosec community at Twitter. Here you will find malicious URLs, domains, IPs, and SHA256/MD5 hashes.

From 0xDanielLopez·Updated June 27, 2026·View on GitHub·

**TweetFeed** is a TweetFeed collects Indicators of Compromise (IOCs) shared by the infosec community at Twitter. Here you will find malicious URLs, domains, IPs, and SHA256/MD5 hashes. The project is first published in 2021. Key topics include: blueteam, malware, malware-detection, malware-research, osint.

<div align="center"> <h1 align="center">TweetFeed</h1> <h3 align="center">Feeds of IOCs posted by the community on Twitter/X</h3> <p align="center"> <b> <a href="https://tweetfeed.live">TweetFeed.live</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; <a href="https://tweetfeed.live/docs/">Docs</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; <a href="https://tweetfeed.featurebase.app/">Feedback</a> </b> </p>

TweetFeed.live


</div>

☰ Content

Everything in the dynamic blocks below (date, type counters, top tags, top reporters, output example) is regenerated by the pipeline every 15 minutes. Hand-written sections are stable.

:heart: Support the project

If you like the project, please consider:

  • Giving it a star :star:
  • Invite to a coffee :coffee:

:page_facing_up: Data collected

<div align="center"> <h3>CSV feeds</h3> <table> <thead> </thead> <tbody> <tr> <th colspan=4>2026-06-27 08:00:22 (UTC)</th> </tr> <tr> <th>Today</th> <th>Last 7 days</th> <th>Last 30 days</th> <th>Last 365 days</th> </tr> <tr> <td>:clipboard: <a href="https://github.com/0xDanielLopez/TweetFeed/blob/master/today.csv">Today</a> (<a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/today.csv">raw</a>)</td> <td>:clipboard: <a href="https://github.com/0xDanielLopez/TweetFeed/blob/master/week.csv">Week</a> (<a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/week.csv">raw</a>)</td> <td>:clipboard: <a href="https://github.com/0xDanielLopez/TweetFeed/blob/master/month.csv">Month</a> (<a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/month.csv">raw</a>)</td> <td>:clipboard: <a href="https://github.com/0xDanielLopez/TweetFeed/blob/master/year.csv">Year</a> (<a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/year.csv">raw</a>)</td> </tr> </tbody> </table> <h3>Other formats</h3> <table> <thead> <tr> <th>Format</th> <th>URL</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td><b>RSS 2.0</b></td> <td><a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/rss.xml">rss.xml</a></td> <td>Today's IOCs (regenerated every 15 min)</td> </tr> <tr> <td><b>MISP</b></td> <td><a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/misp/manifest.json">misp/manifest.json</a></td> <td>4 events (today / week / month / year). Add as a feed in MISP via <i>Sync Actions &rarr; Feeds &rarr; Add</i>.</td> </tr> <tr> <td><b>STIX 2.1</b></td> <td><a href="https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/stix/manifest.json">stix/manifest.json</a></td> <td>Bundles for today / week / month</td> </tr> </tbody> </table> </div> <div align="center"> <h3>Output example</h3> <p><b>CSV schema</b></p> <pre><code>date, user, type, value, tags, tweet_url</code></pre>

<sub>Live samples: <a href="https://github.com/0xDanielLopez/TweetFeed/blob/master/today.csv">today.csv</a></sub>

</div>

:gear: Programmatic access

<div align="center"> <table> <thead> <tr> <th>Surface</th> <th>URL</th> <th>Use case</th> </tr> </thead> <tbody> <tr> <td><b>REST API</b></td> <td><a href="https://api.tweetfeed.live/v1">api.tweetfeed.live</a></td> <td>JSON, no auth, CORS enabled. <code>/v1/{today,week,month,year}[/{type}[/{tag}]]</code></td> </tr> <tr> <td><b>MCP server</b></td> <td><a href="https://mcp.tweetfeed.live">mcp.tweetfeed.live</a></td> <td>JSON-RPC 2.0 endpoint exposing 8 tools (<code>query_iocs</code>, <code>check_url</code>, <code>check_ip</code>, <code>check_hash</code>, <code>list_recent_iocs</code>, <code>get_tag_info</code>, <code>get_trending</code>, <code>enrich_ioc</code>) for Claude / AI agents</td> </tr> </tbody> </table>

See <a href="https://tweetfeed.live/agents/">tweetfeed.live/agents/</a> for the copy-paste MCP config and full tool reference.

</div>

:bar_chart: Some statistics

<div align="center"> <h3>Types</h3>
TypeTodayWeekMonthYear
:link: URLs3463540454831
:globe_with_meridians: Domains3374473239305
:triangular_flag_on_post: IPs010668313124
:1234: SHA25631125891874
:1234: MD50401772612
</div>
<div align="center"> <h3>Top 10 tags <sub>(by year activity, refreshed every 15 min)</sub></h3> <!-- TAG_TABLE_START -->
TagTodayWeekMonthYear
#phishing6465296836526
#C203433618309
#Kimsuky04491812988
#DPRK00490011333
#scam0115266764
#CobaltStrike02134771
#malware0513102471
#Interactsh0001792
#APT0321981705
#Remcos01301423
<!-- TAG_TABLE_END -->

The full catalog of 120 tags with per-tag landing pages and CSV exports lives at tweetfeed.live/tags/.

</div>
<div align="center"> <h3>Top Reporters (today)</h3> <!-- TOP_REPORTERS_START -->
NumberUserIOCs
#1Q8CyberTi4
#2bomccss3
#3masaomi3462
#4-0
#5-0
#6-0
#7-0
#8-0
#9-0
#10-0
<!-- TOP_REPORTERS_END --> </div>

:question: How it works?

Search tweets that contain certain tags or that are posted by certain infosec people.

Tags being searched

(case-insensitive matching, top 10 by year activity, refreshed every 15 min)
<!-- TAGS_LIST_START -->
#phishing, #C2, #Kimsuky, #DPRK, #scam, #CobaltStrike, #malware,
#Interactsh, #APT, #Remcos
<!-- TAGS_LIST_END -->

The full list of 120 tags lives at tweetfeed.live/tags/.

Also search Tweets posted by

(these are trusted folks that sometimes don't use tags)

<big><pre>
TweetFeed list
</pre></big>

:mag: Use TweetFeed in your stack

TweetFeed publishes the same data in CSV / JSON / RSS / MISP / STIX so you can wire it into whichever SIEM, EDR, or TIP you already run. Examples below default to year.csv (1-year window); swap to month.csv / week.csv / today.csv to keep the dataset smaller.

<details> <summary><b>Microsoft Defender XDR / Sentinel</b> &nbsp;<sub>(KQL via <code>externaldata</code>)</sub></summary> <br>

1. Match SHA256 hashes against the yearly feed

kusto
let MaxAge = ago(30d); let SHA256_whitelist = pack_array( 'XXX' // Some SHA256 hash you want to whitelist. ); let TweetFeed = materialize ( (externaldata(report:string) [@"https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/year.csv"] with (format = "txt")) | extend report = parse_csv(report) | extend Type = tostring(report[2]) | where Type == 'sha256' | extend SHA256 = tostring(report[3]) | where SHA256 !in(SHA256_whitelist) | extend Tag = tostring(report[4]) | extend Tweet = tostring(report[5]) | project SHA256, Tag, Tweet ); union ( TweetFeed | join ( DeviceProcessEvents | where Timestamp > MaxAge ) on SHA256 ), ( TweetFeed | join ( DeviceFileEvents | where Timestamp > MaxAge ) on SHA256 ), ( TweetFeed | join ( DeviceImageLoadEvents | where Timestamp > MaxAge ) on SHA256 ) | project Timestamp, DeviceName, FileName, FolderPath, SHA256, Tag, Tweet

2. Match IP addresses against the monthly feed

kusto
let MaxAge = ago(30d); let IPaddress_whitelist = pack_array( 'XXX' // Some IP address you want to whitelist. ); let TweetFeed = materialize ( (externaldata(report:string) [@"https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/month.csv"] with (format = "txt")) | extend report = parse_csv(report) | extend Type = tostring(report[2]) | where Type == 'ip' | extend RemoteIP = tostring(report[3]) | where RemoteIP !in(IPaddress_whitelist) | where not(ipv4_is_private(RemoteIP)) | extend Tag = tostring(report[4]) | extend Tweet = tostring(report[5]) | project RemoteIP, Tag, Tweet ); union ( TweetFeed | join ( DeviceNetworkEvents | where Timestamp > MaxAge ) on RemoteIP ) | project Timestamp, DeviceName, RemoteIP, Tag, Tweet

3. Match URLs and domains against the weekly feed

kusto
let MaxAge = ago(30d); let domain_whitelist = pack_array( 'XXX' // Some URL/Domain you want to whitelist. ); let TweetFeed = materialize ( (externaldata(report:string) [@"https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/week.csv"] with (format = "txt")) | extend report = parse_csv(report) | extend Type = tostring(report[2]) | where Type in('url','domain') | extend RemoteUrl = tostring(report[3]) | where RemoteUrl !in(domain_whitelist) | extend Tag = tostring(report[4]) | extend Tweet = tostring(report[5]) | project RemoteUrl, Tag, Tweet ); union ( TweetFeed | join ( DeviceNetworkEvents | where Timestamp > MaxAge ) on RemoteUrl ) | project Timestamp, DeviceName, RemoteUrl, Tag, Tweet

The same KQL works in Microsoft Sentinel if you replace DeviceProcessEvents / DeviceNetworkEvents with the equivalent Sentinel tables (SecurityEvent, CommonSecurityLog, etc.).

</details> <details> <summary><b>Splunk</b> &nbsp;<sub>(SPL with <code>inputlookup</code> after CSV import, or <code>rest</code> for ad-hoc fetch)</sub></summary> <br>

Schedule a recurring CSV import via the Add-on Builder or the inputs.conf REST modular input. Then:

spl
index=firewall earliest=-30d | join dest_ip [ | inputlookup tweetfeed_iocs.csv | where Type="ip" | rename Value AS dest_ip | fields dest_ip, Tags, Tweet ] | stats count by src_ip, dest_ip, Tags

For proxy / DNS logs vs. URLs and domains:

spl
index=proxy sourcetype=zscaler earliest=-7d | join url [ | inputlookup tweetfeed_iocs.csv | where Type IN ("url","domain") | rename Value AS url | fields url, Tags, Tweet ] | table _time, src, dest, url, Tags, Tweet

For process-execution hashes:

spl
index=endpoint sourcetype=Sysmon EventCode=1 earliest=-30d | eval hash=lower(Hashes) | join hash [ | inputlookup tweetfeed_iocs.csv | where Type IN ("sha256","md5") | rename Value AS hash | fields hash, Tags, Tweet ] | table _time, host, Image, hash, Tags, Tweet
</details> <details> <summary><b>Elastic Security / OpenSearch</b> &nbsp;<sub>(Filebeat <code>threatintel</code> module + indicator-match rule)</sub></summary> <br>

Add the MISP feed to your filebeat.yml:

yaml
- module: threatintel misp: enabled: true var.url: "https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/misp/manifest.json" var.interval: 15m

Then create an indicator-match rule mapping your data to the threat fields:

Source fieldThreat field
destination.ipthreat.indicator.ip
url.fullthreat.indicator.url.full
dns.question.namethreat.indicator.url.domain
file.hash.sha256threat.indicator.file.hash.sha256
file.hash.md5threat.indicator.file.hash.md5

Tags + tweet URLs are preserved as enrichment fields on each match (threat.indicator.description, threat.indicator.reference).

For OpenSearch the same approach works via the Security Analytics threat intel framework using the STIX bundles at stix/manifest.json.

</details> <details> <summary><b>MISP / OpenCTI / TheHive</b> &nbsp;<sub>(threat intel platforms)</sub></summary> <br>
TIPHow to add TweetFeed
MISPSync Actions → Feeds → Add with URL https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/misp/manifest.json (4 events: today / week / month / year, regenerated every 15 min).
OpenCTIUse the official tweetfeed connector.
TheHive 5Import the STIX bundles at https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/stix/manifest.json via the MISP-Hive connector or directly through the API.
</details> <details> <summary><b>CLI / scripting</b> &nbsp;<sub>(curl + jq, Python)</sub></summary> <br>

Pull today's phishing URLs:

bash
curl -s 'https://api.tweetfeed.live/v1/today/phishing/url' | jq -r '.[].value'

Cross-check a hash against the year window:

bash
HASH=XXX # any SHA256 you want to look up curl -s 'https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/year.csv' \ | awk -F, -v h="$HASH" '$3=="sha256" && $4==h'

Pandas one-liner — top 20 IPs reported in the last year:

python
import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/0xDanielLopez/TweetFeed/master/year.csv', names=['date','user','type','value','tags','tweet']) print(df[df.type == 'ip'].groupby('value').size().sort_values(ascending=False).head(20))

For interactive querying via Claude / AI agents, see Programmatic access above (the MCP server exposes the same data with built-in query helpers).

</details>

:robot: Agent-ready surface

TweetFeed is built for consumption by AI agents and LLM-based tooling:

Plug the MCP endpoint above into Claude Desktop / Claude Code / any MCP-aware client to query feeds in natural language.

:balance_scale: License

The data feeds (CSV, JSON, RSS, MISP, STIX) and the public API responses are released under CC0 1.0 Universal - no rights reserved, reuse freely, no attribution required.

A primer on how to put this data to work in detection workflows lives at tweetfeed.live/docs/.

:bust_in_silhouette: Author

:pushpin: Disclaimer

Please note that all the data is collected from Twitter/X and sorted/served here as it is on best effort.

I have tried to tune as much as possible the searches trying to collect only valuable info. However please consider making your own analysis before taking any action related to these IOCs.

Anyway feel free to reach me out or to provide any kind of feedback regarding any contribution or suggestion.

<hr>

<b>By the community, for the community.</b>

This article is auto-generated from 0xDanielLopez/TweetFeed via the GitHub API.Last fetched: 6/27/2026