Skip to content
369 voices marching on FeedMarchCommunity notified about StubHub · 18d agoHaimmer Inc notified about Haimmer Inc · 27d agoCommunity notified about Louis Vuitton · 27d ago5 wishes nearing company attention369 voices marching on FeedMarchCommunity notified about StubHub · 18d agoHaimmer Inc notified about Haimmer Inc · 27d agoCommunity notified about Louis Vuitton · 27d ago5 wishes nearing company attention369 voices marching on FeedMarchCommunity notified about StubHub · 18d agoHaimmer Inc notified about Haimmer Inc · 27d agoCommunity notified about Louis Vuitton · 27d ago5 wishes nearing company attention

Transparency

How Ranking Works

The exact formula behind every wish's position on FeedMarch. No black boxes.

1The one rule

Every wish on FeedMarch has a single score called canonical_rank. This score is the same across every surface: the home feed, category feeds, and brand profile pages all read the same number, just composed differently per surface.

The formula is published below. The weights are stored in a database table called ranking_weights and we'll publish any change to that table on the Transparency page. We won't change the formula silently.

2The formula

This is the exact composition used by the ranking job that runs every 15 minutes:

canonical_rank = α · verified_demand_score
               + β · recent_momentum
               + γ · evidence_depth
               + δ · status_boost
               + ε · company_attention
               + η · unresolved_pain_age      ← positive bonus
               − ζ · spam_penalty
               − θ · age_freshness_decay

Default weights at launch: α=1.0, β=1.0, γ=0.5, δ=1.0, ε=1.0, η=1.0, ζ=1.0, θ=1.0. A wish's position is the deterministic result of this sum applied to verified voice counts, comment quality, lifecycle status, and brand engagement.

3What each component means

α

verified_demand_score

log₁₀(verified_votes_count + 1) × 10. Verified votes only: accounts that have proven they're human (phone, social, or email-verified) and at least 24 hours old.

Why: Bot armies and sock-puppets can inflate raw voice counts. Verified voices are the brand-promise of demand signal.

β

recent_momentum

(verified_votes_1h × 4) + (verified_votes_24h × 0.8). Counts only verified voices.

Why: Surfaces new and rising wishes faster than slow-burn aggregations.

γ

evidence_depth

(comments_with_attachment × 2) + (substantive_comments × 1), capped at 20. Substantive = comment ≥ 50 chars.

Why: A wish with screenshots and detailed accounts is more actionable than one with five-word complaints.

δ

status_boost

A small fixed boost based on lifecycle state: needs_response +10, dispatched +8, shipped +15, stale −50, archived −999.

Why: Keeps the most narratively important wishes visible (the one Spotify is currently working on, the one that just shipped).

ε

company_attention

min(company_views × 5, 20) + (has_response ? 20 : 0). Cap at 40.

Why: Brand engagement is a signal, but capped so a brand can't game ranking just by viewing aggressively.

η

unresolved_pain_age

max(0, days_since_dispatch − 14) × 0.5. Positive bonus for old unresolved dispatched wishes.

Why: Patience signal. The longer a wish goes unanswered after dispatch, the more weight it should carry.

ζ

spam_penalty

low_effort_flag × 10 + duplicate_cluster_size × 0.5. Subtracted.

Why: Removes ranking gain from spammy or duplicated posts.

θ

age_freshness_decay

min(days_since_created, 30) × 0.1. Subtracted. Maximum penalty of -3 over 30 days.

Why: Mild aging so the feed doesn't ossify around old top-ranked wishes, while keeping the floor high enough that quality work isn't punished.

4Per-surface composition

Different surfaces emphasize different parts of canonical_rank. The base scoring is the same; the weights per surface are tuned for the surface's job:

Surface
Weights emphasized
Note
Home feed
α, β, δ, η
Verified demand + momentum drive top of feed.
Category feed
α, β, γ, δ
Within-category density; status_boost surfaces lifecycle.
Brand profile
α, ε, η, δ
Surfaces brand-specific demand + wait time.
Newest
created_at DESC
Pure chronological. No canonical_rank gate.

5What we never do

To keep the ranking honest, we publish what FeedMarch will NOT do:

  • No paid ranking. Brands cannot pay to suppress, boost, or modify the position of any wish. There is no "promoted" tier and no paid placement at v1.
  • No user-tier voice weighting. A verified voice from a Mayor (top-tier contributor) counts exactly the same as a verified voice from a New Marcher. Tier privileges are recognition and access only.
  • No personalization that distorts ranking. Two logged-out users in different cities will see the same wishes in the same order on the same feed. Your tier badge, voices cast, and follow list affect what you see in your personal views (saved, following) but never the public ranking.
  • No silent algorithm changes. Material updates to ranking_weights are published with a changelog entry on the Transparency page.

6Verifying for yourself

You can audit any wish's ranking. Every wish page shows its canonical_rank breakdown in the developer footer (click "Why this rank?" on any wish detail page). The numbers shown match the formula above exactly. There's no hidden term.

If you spot a wish whose ranking doesn't add up, email transparency@feedmarch.com with the wish URL and what you computed. We'll publish a public response.