DEV Community

Joe Vezzani
Joe Vezzani

Posted on • Originally published at lunarcrush.com

The 50 X Creators Driving the Iran War Conversation (607.9M Engagements) -- With Code

The Iran-Israel conflict generated 607.9 million engagements on X in Q1 2026 from just the top 50 creators. We tracked 22 war-related topics to find who actually drives the conversation and how to pull this data yourself.

GitHub repo: JoeVezzani/iran-war-creators

The Scale of the Conversation

Across 22 topics -- from "Iran" and "Israel" to "Strait of Hormuz" and "Airstrikes" -- the top 50 creators alone generated 607.9M engagements. Engagement peaked on February 28, coinciding with Strait of Hormuz escalations and nuclear deal negotiations.

The Top 10 Creators

Rank Creator Engagements Topics Covered
1 @MarioNawfal 161.4M 19 of 22
2 @netanyahu 28.5M 2
3 @RyanRozbiani 22.3M 10
4 @A_K_Mandhan 20.5M 7
5 @BRICSinfo 20.3M 11
6 @jacksonhinklle 20.3M 15
7 @rebelliousdogra 19.8M 7
8 @KobeissiLetter 18.8M 7
9 @MOSSADil 18.7M 16
10 @Osint613 14.4M 17

@MarioNawfal's dominance is remarkable -- 161.4M engagements across 19 of 22 topics. More than the next five creators combined. His breadth of coverage is what separates him.

@Osint613 covers 17 topics with the broadest intelligence coverage. @MOSSADil covers 16. Citizen journalists and independent accounts consistently outperform legacy media on engagement.

Pull This Data Yourself

Track any geopolitical topic in real time with the LunarCrush API:

const API_KEY = process.env.LUNARCRUSH_API_KEY;

async function getTopicData(keyword) {
  const res = await fetch(
    `https://lunarcrush.com/api4/public/topic/${encodeURIComponent(keyword)}/v1`,
    { headers: { Authorization: `Bearer ${API_KEY}` } }
  );
  return res.json();
}

async function getTopicPosts(keyword) {
  const res = await fetch(
    `https://lunarcrush.com/api4/public/topic/${encodeURIComponent(keyword)}/posts/v1`,
    { headers: { Authorization: `Bearer ${API_KEY}` } }
  );
  return res.json();
}

// Track multiple war-related topics
async function scanConflict() {
  const topics = [
    "iran", "israel", "strait of hormuz", "airstrikes",
    "ceasefire", "nuclear deal", "oil prices", "sanctions"
  ];

  for (const topic of topics) {
    const data = await getTopicData(topic);
    console.log(
      `${topic.padEnd(20)} | ` +
      `${(data.data?.num_posts || 0).toLocaleString().padStart(8)} mentions | ` +
      `${(data.data?.interactions || 0).toLocaleString().padStart(12)} engagements | ` +
      `sentiment: ${data.data?.sentiment || 'N/A'}%`
    );
  }
}

scanConflict();
Enter fullscreen mode Exit fullscreen mode

Track Top Creators on Any Topic

async function getTopCreators(topic) {
  const res = await fetch(
    `https://lunarcrush.com/api4/public/topic/${encodeURIComponent(topic)}/creators/v1`,
    { headers: { Authorization: `Bearer ${API_KEY}` } }
  );
  return res.json();
}

async function main() {
  const creators = await getTopCreators("iran");

  console.log(`
Top Creators for "Iran":
`);
  for (const c of (creators.data || []).slice(0, 10)) {
    console.log(
      `  @${(c.screen_name || '').padEnd(20)} | ` +
      `${(c.interactions || 0).toLocaleString().padStart(12)} eng | ` +
      `${(c.followers_count || 0).toLocaleString().padStart(10)} followers`
    );
  }
}

main();
Enter fullscreen mode Exit fullscreen mode

Build a Sentiment Alert for Geopolitical Events

const fs = require("fs");
const STATE_FILE = "./conflict_state.json";

function loadState() {
  try { return JSON.parse(fs.readFileSync(STATE_FILE)); }
  catch { return {}; }
}

function saveState(state) {
  fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
}

async function checkConflictShifts() {
  const state = loadState();
  const topics = ["iran", "israel", "oil", "ceasefire", "strait of hormuz"];

  for (const topic of topics) {
    const data = await getTopicData(topic);
    const current = data.data?.sentiment || 0;
    const previous = state[topic]?.sentiment;

    if (previous && Math.abs(current - previous) > 10) {
      const dir = current > previous ? "UP" : "DOWN";
      console.log(
        `ALERT: "${topic}" sentiment shifted ${dir} ` +
        `(${previous}% -> ${current}%)`
      );
    }

    state[topic] = {
      sentiment: current,
      mentions: data.data?.num_posts || 0,
      timestamp: new Date().toISOString()
    };
  }

  saveState(state);
}

checkConflictShifts();
Enter fullscreen mode Exit fullscreen mode

Run on a cron during active conflict periods. When sentiment shifts 10+ points, you know something just happened.

Why Social Data Matters for Geopolitics

Oil hit $114/barrel during the Strait of Hormuz situation. X produced 92,066 mentions of oil in 24 hours -- more than Reddit (22K), YouTube (46K), TikTok (44K), and all news sources (1.3K) combined.

For traders, researchers, and prediction market participants, social data is the fastest signal for geopolitical events. The conversation happens on X before it hits Bloomberg.

Try It

I'm building a bunch of small projects like this. Follow along if you're into this kind of thing.

Top comments (0)