Essentials - What Makes a Good Feed?

Let's take a brief look at the main characteristics at a good feed, from personalization to spam.


What Makes a Good Feed

There is no one-size-fits-all answer to this question, as it depends on what service or app you are building, and what your target audience might be. But that's also exactly why Embed is here—to provide you with all the tools and options to easily make good feeds for your specific app and users.

Here we will describe some essential elements that help make a good feed.


Personalization

This is probably the most obvious element. A good feed is likely personalized to the viewing user. It is personalized to show content that is relevant to the user—things that the user would find interesting, surrounding topics the user likes, created by people they follow or have an interest in.

If the same generic feed is shown to all users, it is almost certain that a lot of users would be turned off seeing a lot of generic content that they don't find interesting.

Predicting User Interactions

Recommendation systems are trained to predict user interactions or engagement. Given that the current user has liked, commented, shared, and viewed (but not liked) different pieces of content, an AI model can be trained to predict what the user would likely interact with again in the future.

Interaction is a proxy to user interest in the content, and showing a high concentration of content that the user is likely to interact with will likely increase the perceived quality of the feed, and increase user engagement as a result.

Cross-Chain Holistic User Profile

With web3 services, user interactions live on-chain. With Farcaster already, anyone can build a new client and leverage all the user profile and interaction data already existing on the Farcaster chain. But this is just the tip of the iceberg for what's possible.

There are tons of different chains serving different purposes and applications. Imagine you can aggregate user interest based on a much wider range of topics, including NFT mints, token trades, or any other interactions that are recorded on-chain. This opens up to a potentially much more powerful system for personalization!

Giving Control to End Users

As engaging as the current major web2 social media platforms might be, there has always been the sentiment that the big corporations have full control over what the users see in their feed, and that is often based on screen-time maximization as a way of increasing ad-revenue opportunities.

With all the configurable options we offer at Embed, we can start putting some of the control back to the end users, letting them control the behavior of the recommendation system. You can already achieve some of this with all the different API parameters available, but we are working towards a future where users have a lot more control in how the recommendation system should behave.

Learn more: See [Feed Builder Complete Guide](../Feed Building/feed-builder-201) for all available personalization options.


Feed Freshness

As much as personalization is key for feed quality, having a "fresh" feed is probably as important. If every time a user comes back to the app, the user sees the same feed, he or she will likely perceive the feed quality as lower, and disengage with the app.

The recommendations served through our public APIs are built on on-chain, publicly available data. With this, we currently work behind the scenes to make the feed fresh with the following mechanisms.

Near-Real-Time Recommendation Updates

Whenever a user interacts with an item, the interaction gets written on-chain, passed to our system, and gets injected into our AI models for inference. Based on this new information, our model updates itself and changes the recommendations for the particular user.

Impression Count

Since the information of whether or not a user has actually "seen" an item is not stored on-chain (we refer to these as potential "private data"—data that only lives in your app), there is no way to only use on-chain data to obtain this information.

We use impression_count as a way to compensate for this. When an API is called with an impression_count, the top n items (specified by the impression_count) are considered seen by the user, and the same API will not include those items in subsequent API calls. This mechanism helps make the user see a different feed every time, and improve the perceived freshness of the feed.

Best Practice: Always pass impression_count in your API calls to ensure users see fresh content on each visit.


Relevance to Your Audience

Content relevance to your audience is another factor for making a good feed. Say you're building a music-focused social app. You probably don't want to be showing content that gives financial advice.

Filter Parameters

Our APIs come with a wealth of filter parameters to tailor the content feed to different needs. Take the music-focused app as an example. You can specify music in AI labels, music in publication types, and perhaps specify some author IDs and channels that you feel are relevant.

Example Configuration:

  • AI Labels: music, entertainment
  • Publication Types: audio, video (for music videos)
  • Channels: Music-related Farcaster channels
  • Keywords: "music", "song", "album", "artist"

Learn more: See Feed Builder Complete Guide for all available filter options.


Diversity Controls

Prevent feed monotony and ensure content variety with built-in diversity controls. A feed that shows only content from the same few creators can feel repetitive and reduce engagement.

Author Diversity

Set limits on how many posts can appear from a single author and enforce minimum spacing between posts from the same creator. This ensures your users see a diverse range of voices and perspectives, not just the same few creators dominating their feed.

Example:

  • Max posts per author: 2 posts per feed
  • Min distance between same author: 5 posts apart

This guarantees that even if one creator is highly engaging, they won't dominate the entire feed.


Cold Start

If a user is new to the system and has no interaction history, or if the user has not been actively interacting with content for a long period of time, there is not enough signal to recommend a "good" personalized feed to the user.

In these cases, you want to have a carefully thought-out type of feed to be shown to the users, so that they still see a feed that is high quality as perceived.

Cold Start Configuration

Our APIs provide the option to specify a different feed behavior when the system detects that the user is considered "cold start." You can configure:

  • Cold Start Feed: A separate feed_id to serve to new or inactive users
  • Cold Start Threshold: Number of days since last interaction (e.g., 30 days)
  • Minimum Interaction Count: Minimum interactions required to exit cold start

Best Practices for Cold Start Feeds:

  • Curate content from high-quality creators relevant to your audience
  • Include a mix of popular and trending content
  • Use broader filters to ensure content availability
  • Consider adding a promotion feed to introduce new content types

Learn more: See Feed Builder Complete Guide for cold start configuration details.


Custom Model & Private App Data

As mentioned above, there are data that are not stored on-chain that can help make recommendations and overall feed quality better. We do work with enterprise customers to inject "private data" and deploy a custom enhanced model based on that.

Private data examples:

  • User view/impression data from your app
  • In-app engagement metrics (time spent, scroll depth)
  • User preferences and settings
  • A/B test group assignments

Contact us: Please contact us at [email protected] to discuss custom model deployment for your use case.


Discovery

A good feed balances personalization with discovery—helping users find new content, creators, and topics they might enjoy.

Go Broad

While personalization is important, don't make your filters too restrictive. Allow some room for discovery by:

  • Using balanced scoring algorithms that mix interest with trending content
  • Including fallback feeds that broaden content scope
  • Setting diversity controls to ensure variety
  • Periodically showing content outside the user's typical interests

Example: A user who typically engages with tech content might discover they also enjoy creative design content if given the opportunity.

Dealing with Spam

Spam and low-quality content can degrade feed quality. Embed provides several tools to combat this:

AI Moderation Labels:

  • Filter out content labeled as spam, llm_generated, or other moderation categories
  • Use remove_ai_labels to exclude unwanted content types

Engagement Filters:

  • Set minimum engagement thresholds (likes, comments) to surface quality content
  • Filter by character length to avoid very short, low-effort posts

Author Controls:

  • Use remove_author_ids to block specific creators
  • Leverage organization-wide moderation to ban problematic users

Best Practice: Start with moderate filters and adjust based on your feed quality metrics. Too restrictive filters can reduce content availability, while too loose filters may allow spam through.


Summary

A good feed combines several key elements:

  • Personalization - Content relevant to each user's interests and interactions
  • Freshness - New content on every visit using impression_count and real-time updates
  • Relevance - Content aligned with your app's audience and purpose
  • Diversity - Variety in creators and content types
  • Cold Start Strategy - Quality feeds for new or inactive users
  • Discovery - Balance between personalization and exploration
  • Quality Control - Spam filtering and content moderation

Next Steps: