X Algorithm Playbook

Logo

The definitive guide to maximizing your reach on X (Twitter), based on reverse-engineering the open-source algorithm.

View the Project on GitHub tang-vu/x-algorithm-playbook

Filter System Reference

Complete guide to the 12 filters that can hide your content before scoring.


How Filtering Works

Before your post is even scored, it passes through filters:

Your Post → FILTERS → Scoring → Ranking → Feed
              │
              └── Removed posts never get scored

Key insight: A filtered post gets ZERO visibility, regardless of quality.


The 12 Filters

Filter 1: Drop Duplicates Filter

What it does: Removes duplicate tweet IDs from the candidate pool.

When it triggers:

How to avoid: N/A (system deduplication)

Source: drop_duplicates_filter.rs


Filter 2: Core Data Hydration Filter

What it does: Removes posts missing essential data (author_id, tweet_text).

When it triggers:

How to avoid: N/A (technical filter)

Source: core_data_hydration_filter.rs


Filter 3: Age Filter ⚠️

What it does: Removes posts older than maximum age threshold.

When it triggers:

How to avoid:

Source: age_filter.rs


Filter 4: Self Tweet Filter

What it does: Removes your own tweets from your For You feed.

When it triggers:

How to avoid: N/A (expected behavior)

Source: self_tweet_filter.rs


Filter 5: Retweet Deduplication Filter

What it does: Keeps only first occurrence when multiple people retweet same content.

When it triggers:

How to avoid: N/A (expected behavior)

Source: retweet_deduplication_filter.rs


Filter 6: Ineligible Subscription Filter

What it does: Removes subscription-only posts from non-subscribers.

When it triggers:

How to avoid: N/A (subscription feature)

Source: ineligible_subscription_filter.rs


Filter 7: Previously Seen Posts Filter

What it does: Removes posts the user has already seen.

When it triggers:

How to avoid: N/A (expected behavior)

Source: previously_seen_posts_filter.rs


Filter 8: Previously Served Posts Filter

What it does: Removes posts already served in current session.

When it triggers:

How to avoid: N/A (expected behavior)

Source: previously_served_posts_filter.rs


Filter 9: Muted Keyword Filter ⚠️ IMPORTANT

What it does: Removes posts containing keywords the user has muted.

When it triggers:

How to avoid:

Common muted keywords:

Promotional:
- "DM me"
- "Link in bio"
- "Follow for follow"
- "Giveaway"

Crypto/Scam:
- "100x"
- "Not financial advice"
- "Easy money"

Engagement Bait:
- "Like if you agree"
- "Retweet to win"

Political (varies by user):
- Various political terms

Source: muted_keyword_filter.rs


Filter 10: Author Socialgraph Filter ⚠️ CRITICAL

What it does: Removes posts from authors the user has blocked or muted.

When it triggers:

How to avoid:

Source: author_socialgraph_filter.rs


Filter 11: VF Filter (Visibility Filtering) ⚠️ CRITICAL

What it does: Removes posts flagged for safety issues.

Categories filtered:

When it triggers:

How to avoid:

Source: vf_filter.rs


Filter 12: Dedup Conversation Filter

What it does: Keeps only highest-scored post per conversation thread.

When it triggers:

How to avoid: N/A (expected behavior)

Source: dedup_conversation_filter.rs


Filter Priority

Filters that YOU can control:

Priority Filter Control Level
🔴 High Author Socialgraph (block/mute) Avoid being blocked
🔴 High VF Filter (safety) Stay within ToS
🟡 Medium Muted Keyword Avoid spam words
🟢 Low Age Filter Post at peak times

Pre-Scoring vs Post-Scoring Filters

Pre-Scoring (Before ML Model)

1. Drop Duplicates
2. Core Data Hydration
3. Age
4. Self Tweet
5. Retweet Deduplication
6. Ineligible Subscription
7. Previously Seen
8. Previously Served
9. Muted Keyword
10. Author Socialgraph

Post-Scoring (After Selection)

11. VF Filter (visibility/safety)
12. Dedup Conversation

Filter Avoidance Checklist

□ Not using spam keywords
□ Not engaging in ways that trigger blocks
□ Compliant with X Terms of Service
□ Not posting duplicate content
□ Posting at active times (avoid age filter)
□ Authentic engagement (avoid spam detection)

Next: Algorithm FAQ →