Cointime

Download App
iOS & Android

How to Find and Analyze Trends on Farcaster

From Andrew Hong

What Open Social Data Enables

This is the first time in history that three datasets have come together in the open:

  • High quality user transaction data (blockchain data)
  • High quality social graph data (profiles, followers, and actions)
  • Verified linkage of addresses (user X owns wallets A,B,C)

And on top of that, these datasets have come together in a vertically integrated data stack (Neynar for Farcaster data, and Dune for onchain data) that is open for everyone to use.

Doing the equivalent with reddit, twitter, plaid, and stripe data would take hundreds of thousands of dollars to scrape and build data infra for. This leads to a concentration of data wealth and product in the hands of a select few companies (those overflowing with money and connections).

I’ve built a dashboard that combines the three datasets above and showcases some basic clustering and trends across words, users, and channels.

📊 Farcaster Trends Explorer Dashboard

Contribute to the methodology in the dashboard GitHub repo

🔔Use our Farcaster query templates and set some Slack/Discord alerts

Let’s walk through the kinds of trends and analysis you can kickoff from here.

Words and Topics

Most people have seen screenshots from google trends before. You get to put in any word and see the interest/performance over time:

Here’s a simple example of week over week “word” trends on Farcaster, week over week:

TF-IDF explained

Some column definitions:

  • Word: each word is isolated from every cast in the last 14 days
  • Casters: number of users who included a given word in their cast
  • TF: term frequency, or number of times this word appeared in casts.
  • IDF: inverse document frequency - basically the higher this is, the more unique the word is. I used each caster as a “document”, so in this context a higher IDF means it was cast by less people.
  • TF-IDF: the multiplication between frequency and uniqueness measures

You can immediately get a high quality view of what’s trending in the Farcaster ecosystem, with a single SQL query. This query is easily extensible to filter for trending words on a subset of users or channels, and for you to apply your own measurements on top.

Now, you’ll also notice that I filtered on casts only from “active badge” users. Let’s get into how I labeled users next.

User Labels and Trends

Okay, let’s take it to the next level now. I want to be able to identify the quality of a user and then rank users based on age, Farcaster activity, and onchain activity. For this dashboard, I came up with the following five tiers:

  • 🤖 npc: Less than 400 followers
  • 🥉 active: 400+ followers, 1+ casts, 100+ engagement score
  • 🥈 star: 1k+ followers, 5+ casts, 5k+ engagement score
  • 🥇 influencer: 10k+ followers, 10+ casts, 25k+ engagement score
  • 💎 vip: 50k+ followers, 10+ casts, 50k+ engagement score

Where engagement score is [likes + recasts*3 + replies*10] and only “received (R)” actions are counted to this score. It’s likely you could use actions “given” as part of user tiering too, but just measuring casts felt good enough to me for a basic model.

Out of 83k users who sent a cast in the last 14 days, about 3k of them are higher quality users. With this in mind, we can create a leaderboard of these users:

I can not only see that are Dan (dwr) and Vitalik the top followed users on the platform, but also that Vitalik is active in the “geopolitics” channel and mainly shares either his own blogs (vitalik.eth.limo) or github links, and that Dan has been very active in deploying contracts (198 contracts deployed).

Let me cover some of the more complex column definitions:

  • Channels: This is the number of channels that a user casted in (over the last 14 days)
  • Top Channels: These are the top three channel-ids that a user casted in, ranked by number of user casts in them.
  • Top Domains: These are the top three domains found in links that a user casted, ranked by number of times the domain appears
  • Txs, Volume, Contract Deploys: These are the all-time totals across all verified addresses, across all EVM chains that Dune currently covers.

Now, what if I want to add filters to see trending users based on some criteria? For example “show me the trending users based on engagement that @jessepollak has followed, who are less than 7 days old.” This will then give me a list of users that I might consider as the “potential new builders on Base”.

You’ll see there are also “user channel filter” and “held token address” filters there too. That means that I could filter for trending users in only a given channel, or trending users who have ever held the Nouns token. The possible combinations here are endless, I’ve only added six parameters that I thought were useful - but you can fork the query and add your own!

Channel Labels and Trends

Channels are like “subreddits”, where they have followers who cast inside them and hosts who manage the channel. I’ve created five tiers of channels:

  • 💤 quiet: less than 5 casts and less than 50 engagement score
  • 🍻 friends: 5+ casts, 50+ engagement score
  • 🔍 niche: 25+ casts, 5,000+ engagement score, 100+ casters
  • 🎭 subculture: 100+ casts, 25,000+ engagement score, 50+ rising stars and 2+ influencers/vips
  • 👑 stadium: 250+ casts, 100,000+ engagement score, 10+ influencers/vips

The idea here is that by combining user tiers and channel tiers, you can get a much better sense of which channels are high signal. Let’s start off with an all active channels ranking:

I’ve sorted by “engagement” here, and you’ll notice that not all high engagement channels are “stadiums”. This is because there are plenty of channels with a large concentration of “npc” or “active” users, but not many “star”, “influencer”, or “vip” users. I still consider these to be pretty niche.

Covering some column definitions again:

  • Top Influential Casters: These are the top three influencer/vip tier users, ordered by number of casts in channel in the last 14 days
  • 🤖,🥉,🥈 ,🥇 ,💎: The emojis in the table match up with the emojis I used for user tiers. This measures the number of users in a tier who sent a cast in the last week in that channel
  • Avg Txs, Volume, Contract Deploys: I took the average of these onchain metrics across all users with at least one transaction (columns are on the far right). I think there is still more work to be done here to make this a strong channel signal.

So for the trending view, I might want to see which channels are under 7 days old but have the highest number of “influencers” actively casting in them:

I quickly find that there are a bunch of niche channels like “superbowl”, “donothing”, and “consumercrypto” that seem to be popular with influencers but not have that much engagement or other users in there yet. I could use this information to try and join channels early, to grow my own account and relationships.

You can also filter by trending channels given a “username filter”, i.e. what are the trending channels Vitalik is a part of. Or filter based on “channel held token address”, which if you put in Nouns would show you channels trending amongst Nouns holders.

Comments

All Comments

Recommended for you