Quick answer: Use k_ELeaderboardUploadScoreMethodKeepBest so a low score doesn’t overwrite a high one. Friends must call DownloadLeaderboardEntries to see updated scores; uploads alone don’t push to them.

A player sets a new personal best on the daily leaderboard. The success callback fires; the score is on Steam. Their friend opens the leaderboard later that hour and sees the old score. The new score made it to Steam but the friend’s client cached the previous query.

Two Common Causes

1. ForceUpdate overwrote a better score: subsequent lower-score uploads erased the high.

2. Friend client cached: DownloadLeaderboardEntries returns the cached entries from the last query until you call it again.

Fix 1: Use KeepBest

SteamUserStats()->UploadLeaderboardScore(
    leaderboardHandle,
    k_ELeaderboardUploadScoreMethodKeepBest,   // not ForceUpdate
    score,
    details, detailsCount);

KeepBest: Steam compares the upload against the user’s existing entry. If new score is better (per the leaderboard’s sort order), it replaces; otherwise nothing changes. Use unless you specifically want to forcibly downgrade.

Fix 2: Re-Download for Fresh Data

On the friend’s side, when they open the leaderboard UI:

SteamUserStats()->DownloadLeaderboardEntries(
    leaderboardHandle,
    k_ELeaderboardDataRequestFriends,
    0, 0);

Returns the current top friends. Always call when displaying, not just at game start — results stay fresh.

Verify in Steam Backend

Open Steamworks → your app → Stats & Achievements → Leaderboards. Find your leaderboard. The most recent uploads list shows whether Steam accepted them. If your score isn’t there, the upload didn’t actually succeed (check the callback’s m_bSuccess).

Sort Order and Display Type

Created leaderboards have a Sort (Ascending/Descending) and a Display (Numeric/Time MS/Time s). If your “higher is better” score uploads to an Ascending leaderboard, the previous lowest becomes the top entry — not what you wanted. Verify in Steamworks settings.

Verifying

Upload a score. Wait 10 seconds. From a different account’s test build, query friends leaderboard. Your score should appear. If not, check upload success in the callback and the Steamworks console.

“Steam leaderboards work but require KeepBest semantics and fresh downloads. Both sides have responsibility.”

Always log upload success and m_nGlobalRankNew vs m_nGlobalRankPrevious — players asking “did my score save?” have an answer.