Tracking Trending Topics & Viral Tweets
Why Trending Topics Matter
In crypto, narratives drive price action. Trends like "AI tokens," "Solana summer," and "RWA" emerge on X/Twitter days before they hit mainstream crypto media. The traders who spot them early capture the most alpha.
XCROP's Trending endpoint gives you real-time access to what's trending across 62 countries, while the Search endpoint lets you drill into any topic with powerful filters.
Using the Trending Endpoint
Fetch Trending Topics
import requests import os response = requests.get( "https://xcrop.io/api/v2/trending", headers={"Authorization": "Bearer " + os.environ["XCROP_API_KEY"]}, params={"country": "United States"} ) trends = response.json()["data"] for trend in trends: print(trend["name"]) print(" Tweet volume: " + str(trend.get("tweet_count", "N/A"))) print()
Filter by Country
The endpoint supports 62 countries. Some popular ones for crypto:
const countries = [ "United States", "United Kingdom", "Japan", "South Korea", "Singapore", "United Arab Emirates" ]; for (const country of countries) { const response = await fetch( "https://xcrop.io/api/v2/trending?" + new URLSearchParams({ country }), { headers: { "Authorization": "Bearer " + apiKey } } ); const { data: trends } = await response.json(); console.log("\n" + country + " (" + trends.length + " trends):"); trends.slice(0, 5).forEach(t => console.log(" - " + t.name)); }
Each call returns up to 50 trending topics for the specified country.
Deep-Diving with Search
When you spot an interesting trend, use the Search endpoint to find the most relevant tweets about it:
import requests import os API_KEY = os.environ["XCROP_API_KEY"] HEADERS = {"Authorization": "Bearer " + API_KEY} BASE_URL = "https://xcrop.io/api/v2" # Search for tweets about a trending topic response = requests.post( BASE_URL + "/search", headers={**HEADERS, "Content-Type": "application/json"}, json={ "query": "Solana ETF", "count": 50, "sort": "popular", "min_likes": 100 } ) tweets = response.json()["data"] for tweet in tweets[:10]: author = tweet["author"]["username"] likes = str(tweet["metrics"]["likes"]) print("@" + author + " (" + likes + " likes)") print(" " + tweet["text"][:150]) print()
Search Filters
The Search endpoint supports powerful filters:
Using sort: "popular" leverages Twitter's Top search results, which is ideal for finding the most impactful tweets on a topic.
Building a Narrative Monitor
Here's a complete script that monitors trending topics, detects crypto-related trends, and searches for detailed tweets:
import requests import time import os API_KEY = os.environ["XCROP_API_KEY"] HEADERS = { "Authorization": "Bearer " + API_KEY, "Content-Type": "application/json" } BASE_URL = "https://xcrop.io/api/v2" # Crypto keywords to watch for in trending topics CRYPTO_KEYWORDS = [ "bitcoin", "btc", "ethereum", "eth", "solana", "sol", "defi", "nft", "airdrop", "etf", "sec", "binance", "coinbase", "memecoin", "altcoin", "crypto", "web3" ] def is_crypto_trend(trend_name): """Check if a trending topic is crypto-related.""" name_lower = trend_name.lower() return any(kw in name_lower for kw in CRYPTO_KEYWORDS) def check_trends(country="United States"): """Fetch trends and filter for crypto topics.""" response = requests.get( BASE_URL + "/trending", headers=HEADERS, params={"country": country} ) if response.status_code != 200: return [] trends = response.json()["data"] return [t for t in trends if is_crypto_trend(t["name"])] def search_trend(topic, count=20): """Search for top tweets about a trending topic.""" response = requests.post( BASE_URL + "/search", headers=HEADERS, json={ "query": topic, "count": count, "sort": "popular", "min_likes": 50, "exclude_retweets": True } ) if response.status_code != 200: return [] return response.json()["data"] # Monitor loop print("Monitoring trending topics for crypto narratives...") seen_trends = set() while True: crypto_trends = check_trends() for trend in crypto_trends: name = trend["name"] if name in seen_trends: continue seen_trends.add(name) print("\n[NEW TREND] " + name) volume = trend.get("tweet_count") if volume: print(" Tweet volume: " + str(volume)) # Deep-dive into the trend tweets = search_trend(name, count=5) for tweet in tweets: author = tweet["author"]["username"] likes = tweet["metrics"]["likes"] print(" @" + author + " (" + str(likes) + " likes)") print(" " + tweet["text"][:120]) time.sleep(300) # Check every 5 minutes
Combining Trending with KOL Tracking
The most powerful signal is when a trending topic is also being discussed by top KOLs:
def cross_reference_with_kols(trend_name, kol_usernames): """Check if KOLs are tweeting about a trending topic.""" # Pull each KOL's recent tweets tweets = [] for kol in kol_usernames.split(","): response = requests.get( f"{BASE_URL}/users/{kol}/tweets", headers=HEADERS, params={"count": 20} ) if response.status_code == 200: tweets += response.json().get("data", []) if not tweets: return [] trend_lower = trend_name.lower() # Find KOL tweets mentioning the trend matching = [] for tweet in tweets: if trend_lower in tweet["text"].lower(): matching.append(tweet) return matching # Example usage kols = "VitalikButerin,CryptoHayes,DefiIgnas" matches = cross_reference_with_kols("Solana ETF", kols) if matches: print("[STRONG SIGNAL] KOLs discussing trending topic!") for tweet in matches: print(" @" + tweet["author"]["username"] + ": " + tweet["text"][:100])
Best Practices
min_likes to filter out noiseCredit Usage
One API for X/Twitter data: profiles, tweets, followers, search and real-time streams. Start free with 5,000 credits/month, no card required.