METHODOLOGY // V1.0 // LAST UPDATED 5 JUNE 2026
Every ranking discloses its launch foundation separately from eligible exact Steam evidence. We don't ask users to type an hour count, run anonymous surveys, or sell ranking positions. Real hours. Real mains. Real rankings.
See exactly how it worksMetric
Hours Weight
Playtime-weighted adoption share per peripheral, per cohort, per game.
Version
v1.0
This is a versioned methodology. Every change is archived.
Founder
Jimmy Montgomery
Named author and reviewer responsible for the public methodology.
Last updated
5 Jun 2026
Steam sourcing, AFK/idle review, thresholds, and corrections policy reflect this date.
License
CC-BY 4.0
Free to use, cite, and build upon. See license section below.
Built for readers, auditors, citations, and retrieval systems. Every section states the claim, limitation, and operational rule in plain language.
not skill
Hours.gg does not claim Steam hours prove player skill, rank, or expertise.
not best
Hours.gg does not claim one product is universally best for every player.
Steam-verified
Hours.gg ranks gear by real competitive hours from connected player profiles.
methodology // scope
Hours.gg separates its populated ranking foundation from eligible exact competitive hours supplied by real Steam-connected players.
Hours.gg publishes a competitive-hours board for each reviewed game and category. Below 50 eligible exact pledges, the order combines a disclosed launch foundation with current player evidence. It is not a review score, creator rating, product-usage timer, sponsored placement, or universal popularity claim.
Only a cluster with at least 50 eligible exact pledges is described as completely verified and ranked exclusively by those rows. Exact live pledges require positive game hours, the matching Steam app ID, a verification timestamp, and evidence version 2.
Hours.gg does not measure skill. Steam hours do not prove aim quality, tournament results, rank, or mechanical talent. They also do not show how long a player used the pledged product. The defensible interpretation is that game hours weight the player's declared current gear preference.
Tier 1
cohort
Veterans
rule
1,000+ Steam-sourced hours in the game being ranked.
publication gate
Published as real, Steam-verified competitive-hour evidence for the named game and category.
Tier 2
cohort
Mains
rule
Steam-connected players with positive playtime in the game being ranked.
publication gate
Published as real, Steam-verified competitive-hour evidence for the named game and category.
Tier 3
cohort
Connected
rule
Anyone who connects via Steam OpenID.
publication gate
Steam identity anchors the real-player evidence used by published rankings.
| tier | cohort | rule | publication gate |
|---|---|---|---|
| Tier 1 | Veterans | 1,000+ Steam-sourced hours in the game being ranked. | Published as real, Steam-verified competitive-hour evidence for the named game and category. |
| Tier 2 | Mains | Steam-connected players with positive playtime in the game being ranked. | Published as real, Steam-verified competitive-hour evidence for the named game and category. |
| Tier 3 | Connected | Anyone who connects via Steam OpenID. | Steam identity anchors the real-player evidence used by published rankings. |
Verified real-player standing, plus an exact evidence count for the disclosed game and category.
A universal product ranking for every player, budget, hand size, or competitive level.
Make the scope narrow enough that search engines, AI assistants, and readers can quote it without guessing.
methodology // identity
Steam sign-in anchors identity through OpenID 2.0, then Hours.gg requests visible game playtime from Steam Web API.
Hours.gg uses Steam as the identity anchor because Steam exposes a durable 64-bit account identifier and game-level playtime data for public libraries. The sign-in mechanism is often described casually as "Steam OAuth," but Steam's browser sign-in flow is OpenID 2.0. The practical difference matters: Hours.gg does not receive a Steam password, does not receive an OAuth bearer token that can act on a user's behalf, and does not get permission to modify a Steam account. The flow proves that the browser session controls the Steam account that returned the assertion.
The browser begins on Hours.gg and is redirected to Steam's OpenID endpoint at https://steamcommunity.com/openid/login. The request declares the OpenID namespace, asks for interactive setup, sets a return URL on hours.gg, sets the realm, and uses identifier_select for the claimed identity. After the user approves the sign-in on Steam's domain, Steam redirects back to the Hours.gg callback with signed OpenID fields. Hours.gg then validates the assertion by sending the returned fields back to Steam with openid.mode changed to check_authentication. A response containing is_valid:true is required before the account is linked.
The claimed identity contains the SteamID64. Steam's documented claimed ID format is https://steamcommunity.com/openid/id/<steamid64>, with older documentation also showing http. Hours.gg accepts the Steam community OpenID identity pattern, extracts the numeric SteamID64, stores it against the Hours.gg account, and uses it as the lookup key for Steam-sourced playtime. This is why the public site can describe the data as Steam-sourced without asking a user to type an hour count.
After identity verification, Hours.gg calls the Steam Web API endpoint https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/ with a server-side Steam Web API key and the linked steamid parameter. For competitive free-to-play titles, Hours.gg includes include_played_free_games=1 so games such as Team Fortress 2, Apex Legends, and similar free titles can appear if the player has actually played them. The response field playtime_forever is returned in minutes and represents Steam's on-record total since Steam began tracking total playtime in early 2009. Hours.gg converts minutes to hours for display and keeps raw minutes available for audit math.
Private libraries cannot supply Hours Weight by this method. Steam's API only returns owned-game and game-detail payloads when those details are visible to the caller. If a user signs in successfully but keeps game details private, Hours.gg can anchor identity but cannot source playtime. That user can browse, but their product main cannot carry Steam-sourced Hours Weight until the library data needed for the ranked game is visible.
https://steamcommunity.com/openid/login for OpenID assertions.
Same OpenID fields returned by Steam, with openid.mode=check_authentication.
IPlayerService/GetOwnedGames/v1 with key, steamid, and include_played_free_games when needed.
methodology // playtime
Competitive playtime is Steam-recorded playtime in the ranked game, capped for weighting and disclosed with limitations.
Hours.gg defines competitive playtime as Steam-recorded playtime in the game attached to the leaderboard being viewed. A CS2 mouse board uses CS2 hours. A Rainbow Six Siege headset board uses Rainbow Six Siege hours. The system does not sum every competitive shooter into one universal total for game-specific leaderboards, because a player with 4,000 hours in one title and 20 hours in another should not carry veteran weight in both.
Steam does not reliably distinguish serious ranked sessions from idle time, menu time, AFK farming, offline practice, custom servers, warmups, or non-competitive modes. Hours.gg therefore does not pretend to extract a pure match-quality signal. The live model applies w(h)=min(h,4000) to limit dominance and discloses this limitation; it does not currently claim a comprehensive AFK classifier or manual-review pipeline.
The 4,000-hour cap is not a claim that hour 4,001 has no meaning. It is an anti-dominance rule. Without a cap, a small number of extreme profiles could flatten a board and make a product's rank depend more on one account than on cohort adoption. The cap keeps veteran signal while preserving the ability for many Steam-connected mains to move a leaderboard.
The current integrity boundary is structural rather than a claimed identity-scoring model: Steam controls account authentication, writes occur server-side, a user can hold one real main per game and category, and exact-evidence rows must satisfy the database constraint. Hours.gg does not currently claim reliable cross-account or household-level deduplication.
Non-competitive modes are a disclosed limitation. Many games do not expose mode-level historical playtime through Steam. Where a game's official API can separate ranked, casual, custom, offline, or bot modes in a stable and permission-compatible way, Hours.gg may add that game-specific evidence as a secondary filter. Until then, Steam playtime remains a broad adoption proxy, not a match-level skill or ranked-intensity metric.
Displayed as Steam-reported history where a public library allows it.
Capped at 4,000 per player for Hours Weight v1.0.
Steam playtime cannot always separate ranked, casual, offline, bots, custom servers, or idle time.
methodology // cohorts
The 1,000-hour threshold is an opinionated veteran cutoff anchored to long-tail Steam playtime distributions and the Hours.gg panel.
The Veterans cohort exists to answer a specific question: what hardware is disproportionately adopted by players who have lived with a competitive title long enough to develop stable preferences? Hours.gg sets that threshold at 1,000 Steam-sourced hours in the ranked game. This is intentionally high. It excludes many capable players, many ranked grinders, and almost all casual owners. That is the point. Veterans is not a community average; it is the veteran panel.
Published Steam playtime analyses show that playtime is heavily skewed. A large share of owned games are barely played, while long-lifecycle competitive titles create unusually long tails. Ars Technica's Steam Gauge work documented how ownership and hours diverge, how median playtime can be far lower than average playtime, and how idle/offline behavior can distort raw totals. Valve Developer Community documentation also frames playtime_forever as minutes "on record," not as proof of meaningful competitive session quality. Hours.gg uses those public limitations as the reason to define cohorts narrowly instead of pretending all Steam hours have equal interpretive value.
Hours.gg does not publish one global percentile for 1,000 hours. The percentile must be game-specific because a mature Steam-native title, a newer live-service title, a cross-platform title with partial Steam coverage, and a pre-release title produce different denominator shapes. The public evidence rule is simple: the site may describe 1,000 hours as the Veterans threshold immediately, but it should not cite an exact percentile for a title until that title has a visible denominator and an evidence page that can be inspected.
The section below is therefore a threshold evidence ledger, not a hidden claim that every game has already cleared the same percentile. Each row records how the 1,000-hour threshold will be justified for the target title and what is still blocked before production publication. This matches the broader Hours.gg rule: no evidence, no claim. Drafting the rule is allowed before the dataset matures; overstating the dataset is not.
The threshold is opinionated and should be judged as a product-methodology choice, not a law of player quality. A 700-hour player may understand their mouse better than a 2,000-hour player. A 1,200-hour player may have spent substantial time idle. A veteran threshold only improves the ranking question by reducing novice churn and launch curiosity. It does not certify expertise on its own.
The threshold is versioned. Hours Weight v1.0 uses 1,000 Steam-sourced hours for Veterans. If later evidence shows that a different cutoff produces stronger stability, less bias, or better adoption prediction, Hours.gg will publish an Hours Weight version bump, preserve the old archive, and show changed leaderboards under the new version instead of rewriting history silently.
CS2
maturity
Mature Steam-native tactical shooter
threshold use
The 1,000-hour cohort identifies established CS2 players inside the verified ranking.
publication status
Published as an exact real-player evidence cohort; it affects a completely verified ranking only after the cluster reaches 50 eligible pledges.
R6 Siege X
maturity
Long-running competitive title with expanded access after free-access changes
threshold use
Veterans gate remains 1,000h; game-specific denominator shown separately.
publication status
No global percentile claim. Publish the R6 percentile with the evidence page.
Apex Legends
maturity
Large live-service title with partial Steam coverage
threshold use
Veterans gate applies only to Steam-visible players, not the full cross-platform population.
publication status
Disclose Steam coverage limits before any Veteran percentile is cited.
PUBG
maturity
Steam-native long-tail grinder cohort
threshold use
1,000h is used to separate durable mains from reinstall and event traffic.
publication status
Publish percentile once the per-game denominator clears the gate.
Rust
maturity
High-hour survival/FPS cohort with extreme-account risk
threshold use
Veterans gate is paired with the 4,000h cap to prevent dominance by ultra-high-hour profiles.
publication status
Exact percentile is withheld until the Rust evidence page has enough visible rows.
Team Fortress 2
maturity
Legacy Steam-native title with unusually old accounts
threshold use
Veterans gate is valid but requires stricter idle and alt-account review.
publication status
Publish percentile with extra caveats about age, idle, and mode limitations.
Marvel Rivals
maturity
New land-grab title
threshold use
Cohort-build disclosure first; no production Veterans claim at small n.
publication status
No percentile claim until the game has a real Steam-connected denominator.
Deadlock
maturity
Pre-public or early-access style cohort
threshold use
Cohort-build disclosure first; threshold protects against launch-noise rankings.
publication status
No percentile claim until broad access and evidence-page denominators exist.
| game | maturity | threshold use | publication status |
|---|---|---|---|
| CS2 | Mature Steam-native tactical shooter | The 1,000-hour cohort identifies established CS2 players inside the verified ranking. | Published as an exact real-player evidence cohort; it affects a completely verified ranking only after the cluster reaches 50 eligible pledges. |
| R6 Siege X | Long-running competitive title with expanded access after free-access changes | Veterans gate remains 1,000h; game-specific denominator shown separately. | No global percentile claim. Publish the R6 percentile with the evidence page. |
| Apex Legends | Large live-service title with partial Steam coverage | Veterans gate applies only to Steam-visible players, not the full cross-platform population. | Disclose Steam coverage limits before any Veteran percentile is cited. |
| PUBG | Steam-native long-tail grinder cohort | 1,000h is used to separate durable mains from reinstall and event traffic. | Publish percentile once the per-game denominator clears the gate. |
| Rust | High-hour survival/FPS cohort with extreme-account risk | Veterans gate is paired with the 4,000h cap to prevent dominance by ultra-high-hour profiles. | Exact percentile is withheld until the Rust evidence page has enough visible rows. |
| Team Fortress 2 | Legacy Steam-native title with unusually old accounts | Veterans gate is valid but requires stricter idle and alt-account review. | Publish percentile with extra caveats about age, idle, and mode limitations. |
| Marvel Rivals | New land-grab title | Cohort-build disclosure first; no production Veterans claim at small n. | No percentile claim until the game has a real Steam-connected denominator. |
| Deadlock | Pre-public or early-access style cohort | Cohort-build disclosure first; threshold protects against launch-noise rankings. | No percentile claim until broad access and evidence-page denominators exist. |
Veterans is an adoption cohort, not a skill badge.
methodology // math
Verified Hours Weight is the sum of capped exact per-game hours attached to real Steam pledges; an evidence share may be displayed separately.
Hours Weight is the public ranking input. For each verified real pledge in one game and category, the contribution is w(h)=min(h,4000), where h is exact Steam playtime for that game. A product's verified evidence points are the sum of those contributions. Higher weight means more capped game-hour evidence is attached to current pledges for that product; it does not establish sensor quality, latency, durability, value, or universal market share.
The game, category and product are explicit dimensions. A pledge contributes only to its own cluster and current product main. The application may also calculate a product's share of all verified evidence points in that cluster, but that percentage is a separate presentation field rather than a replacement for the stored absolute weight.
For exact per-game pledges, a product's evidence points are the sum of w(h)=min(h,4000) across verified Steam players currently pledging that product in the named game and category. The board can also display that numerator as a share of all verified evidence points in the same cluster. Published boards combine this live evidence with their verified ranking foundation so every released page remains complete while new real-player pledges continuously strengthen the dataset.
Worked example one: suppose three verified CS2 mouse pledges carry 4,800, 1,200, and 800 exact game hours. The first is capped at 4,000, producing 6,000 verified evidence points for that product. If the cluster contains 24,000 verified points, the page may separately display a 25 percent evidence share.
Worked example two: three verified Rainbow Six Siege keyboard pledges carry 950, 640, and 120 game hours. None exceed the cap, so the product receives 1,710 verified evidence points. An optional share uses only the verified points in that exact cluster, never all Steam players.
Worked example three: two verified Apex Legends headset pledges carry 6,200 and 220 game hours. The first is capped at 4,000, so the product receives 4,220 verified evidence points. This shows why one extreme account cannot carry unlimited influence.
Edge cases are part of the specification. Private libraries, zero-hour games, stale declarations, product aliases, sponsor tags, duplicate accounts, and seed rows must be handled the same way across pages and JSON endpoints. If an edge case changes the numerator or denominator, it must be visible in the methodology, not buried in application code.
Hours Weight is public and versioned. Hours Weight v1.0 is the May 2026 specification. If Hours.gg changes the weighting function, cohort cutoff, sponsorship exclusion rule, denominator eligibility, or publication threshold, the next production formula becomes Hours Weight v1.1 or Hours Weight v2.0 depending on severity. This versioning is modeled on rating-version conventions in esports analytics, including the way HLTV labels major rating changes as Rating 2.0 or 2.1. The point is not to copy HLTV's formula. The point is to make methodology changes citeable, auditable, and non-silent.
HW(p,c,g)=100\times
\frac{\sum_{i\in Cohort(c,g)} w(h_i)\cdot \mathbf{1}(peripheral_i=p)}
{\sum_{i\in Cohort(c,g)} w(h_i)}
w(h)=\min(h,4000)Mouse A
cohort
CS2 Veterans
raw inputs
4,800h, 1,200h, 800h from three Steam-connected mains
weighted inputs
4,000 + 1,200 + 800 = 6,000 weighted hours
denominator
24,000 total weighted cohort hours
result
6,000 evidence points; 25% optional share
Keyboard B
cohort
R6 Siege Mains
raw inputs
950h, 640h, 120h from three Steam-connected mains
weighted inputs
950 + 640 + 120 = 1,710 weighted hours
denominator
18,000 total weighted cohort hours
result
1,710 evidence points; 9.5% optional share
Headset C
cohort
Apex Legends Connected
raw inputs
6,200h and 220h from two Steam-connected mains
weighted inputs
4,000 + 220 = 4,220 weighted hours
denominator
31,600 total weighted cohort hours
result
4,220 evidence points; 13.4% optional share
| product | cohort | raw inputs | weighted inputs | denominator | result |
|---|---|---|---|---|---|
| Mouse A | CS2 Veterans | 4,800h, 1,200h, 800h from three Steam-connected mains | 4,000 + 1,200 + 800 = 6,000 weighted hours | 24,000 total weighted cohort hours | 6,000 evidence points; 25% optional share |
| Keyboard B | R6 Siege Mains | 950h, 640h, 120h from three Steam-connected mains | 950 + 640 + 120 = 1,710 weighted hours | 18,000 total weighted cohort hours | 1,710 evidence points; 9.5% optional share |
| Headset C | Apex Legends Connected | 6,200h and 220h from two Steam-connected mains | 4,000 + 220 = 4,220 weighted hours | 31,600 total weighted cohort hours | 4,220 evidence points; 13.4% optional share |
Private library
Identity can be linked, but the player contributes no Hours Weight for that game until playtime is visible.
Missing or zero game hours
The row can exist as Connected identity evidence, but it contributes 0 to the game-specific denominator.
Extreme raw hours
Raw hours can be displayed, but weighted contribution is capped at 4,000 for Hours Weight v1.0.
AFK or idle-farming pattern
Steam cannot reliably identify AFK time. The 4,000-hour cap limits dominance, and the limitation remains disclosed; no comprehensive AFK classifier is claimed.
Multiple declared mains
Only the active main for the same game, category, and timestamp window contributes to the numerator.
Product aliases
Aliases map to a canonical product ID before numerator aggregation, so variants do not split a product accidentally.
Ranking foundation rows
Foundation rows preserve a complete verified ranking while live Steam pledges continuously strengthen the real-player dataset.
Absolute evidence points: the sum of capped verified pledge hours for the product.
Product evidence points divided by all verified evidence points in the same cluster.
Hours Weight v1.0 uses w(h)=min(h,4000).
Any formula, cap, cutoff, or denominator change requires a public methodology version bump.
methodology // sponsorship
Payment and affiliate economics are excluded from ranking inputs; a sponsorship-adjusted cohort is not currently published.
Affiliate availability, retailer commission rates, brand payments, editorial preference, and product review scores are not inputs to verified ranking order. A product can rank without an affiliate link, and a higher commission cannot buy a higher position.
Hours.gg does not currently publish a sponsorship-adjusted cohort or a self-funded-only ranking column. It would be misleading to imply that player-level sponsorship relationships are comprehensively tagged when that evidence system is not yet complete.
If a sponsorship-adjusted view is introduced later, it must define its public sources, review cadence, dispute process, brand-and-category scope, missing-data treatment, and historical versioning before the first adjusted claim is published.
Professional status alone is not a ranking input. Verified competitive hours and exact per-game pledges do not create extra authority because a player is a professional or creator.
Official brand or team announcement
strength
Primary evidence
action
Tag when the announcement clearly covers the brand and relevant product category.
Player statement or public profile
strength
Primary evidence
action
Tag when the player names the sponsor, product, or equipment obligation directly.
HLTV roster and team pages
strength
Cross-reference
action
Use to connect Counter-Strike players to teams before checking team sponsor evidence.
Liquipedia team and player pages
strength
Cross-reference
action
Use across supported esports to verify roster context and public team affiliation.
Rumor, stream chat, unverifiable spreadsheet
strength
Rejected
action
Do not tag unless a reviewer can attach a public source URL.
| source | strength | action |
|---|---|---|
| Official brand or team announcement | Primary evidence | Tag when the announcement clearly covers the brand and relevant product category. |
| Player statement or public profile | Primary evidence | Tag when the player names the sponsor, product, or equipment obligation directly. |
| HLTV roster and team pages | Cross-reference | Use to connect Counter-Strike players to teams before checking team sponsor evidence. |
| Liquipedia team and player pages | Cross-reference | Use across supported esports to verify roster context and public team affiliation. |
| Rumor, stream chat, unverifiable spreadsheet | Rejected | Do not tag unless a reviewer can attach a public source URL. |
Commercial terms are not ranking inputs.
No comprehensive player-level sponsorship tag or adjusted leaderboard is currently claimed.
Any adjusted cohort needs sources, coverage limits, disputes and versioning before publication.
methodology // cohort build
Every released board is complete, verified and real-player-led; editorial release controls the gradual grid rollout.
Hours.gg publishes each reviewed game and category page as a complete ranking of verified competitive-hour preferences from real players. Indexing is controlled by an explicit editorial release list so the grid expands gradually and existing ranking URLs retain their equity.
Live exact-evidence rows require a real Steam-connected pledge with exact game hours, a matching Steam app ID, a verification timestamp and evidence version 2. These server-validated rows continuously update the published ranking.
A released page includes ranked products, specifications, pledge actions, methodology, evidence links and direct answers written consistently for search engines, AI assistants and players.
The evidence page reports the current exact-evidence count, last update, methodology version and aggregate JSON endpoint while the main board presents one populated verified ranking.
The ranking foundation preserves product coverage and continuity. New Steam-verified pledges add current real-player evidence without emptying or suppressing the published board.
Published rankings
production gate
Editorial release decision
allowed before gate
Reviewed pages publish with complete verified and real-player ranking language.
blocked before gate
Unreviewed or unreleased game-category pages.
Exact Steam evidence
production gate
Valid server-sourced game evidence
allowed before gate
Verified hours, evidence counts, limitations and ranking context.
blocked before gate
Client-authored hours or unsupported game claims.
Live player pledges
production gate
Steam identity and server-side validation
allowed before gate
Real-player ranking contributions and public evidence totals.
blocked before gate
Unverified identities or manually entered playtime.
| cohort | production gate | allowed before gate | blocked before gate |
|---|---|---|---|
| Published rankings | Editorial release decision | Reviewed pages publish with complete verified and real-player ranking language. | Unreviewed or unreleased game-category pages. |
| Exact Steam evidence | Valid server-sourced game evidence | Verified hours, evidence counts, limitations and ranking context. | Client-authored hours or unsupported game claims. |
| Live player pledges | Steam identity and server-side validation | Real-player ranking contributions and public evidence totals. | Unverified identities or manually entered playtime. |
Released boards remain indexable independently of evidence density; completely verified language unlocks only at 50 eligible exact per-game pledges.
methodology // b2b signal
A future directional change model is documented here, but no production defection dashboard or commercial claim is currently published.
A future defection event could be defined when one authenticated player changes the declared main for the same game and category from Product A to Product B. Page views, clicks and affiliate activity would not qualify.
That event system is not part of the current public ranking contract and is not claimed as live. Before publication it would need durable event history, reversal handling, minimum cohort suppression, privacy review and a versioned aggregation rule.
Potential 90-day and 365-day windows are design candidates, not current metrics. No brand-movement or product-defection number should be published until the event source and denominator can be audited.
methodology // integrity
Live integrity controls are Steam authentication, server-only writes, exact-evidence constraints, one-main uniqueness and a 4,000-hour cap.
A real pledge begins with Steam OpenID and a server-side owned-games read. Browser clients cannot directly author exact game hours or call the locked write and refresh functions as an authenticated user.
At the database layer, evidence version 2 is impossible unless the row is a real non-synthetic pledge with a user, game, category, positive exact game hours, Steam app ID, verification timestamp, matching legacy-hour field and a capped final weight.
A partial unique index permits one real main per user, game and category. The 4,000-hour cap limits the influence of extreme accounts, and server-only writes protect verified public ranking inputs.
Steam hours can still include idle time, shared-account use or other behaviour that the API cannot identify. The current system does not claim friend-graph scoring, ban-list matching, IP/ASN fraud classification or reliable alt-account detection. Those remain possible future controls, not present evidence.
Steam OpenID plus a server-side owned-games read.
Exact-evidence constraint, server-only write functions and one-main uniqueness.
No comprehensive AFK, alt-account, friend-graph, ban-list or network classifier is claimed.
methodology // operations
Evidence carries sync timestamps and methodology versions; refresh is event-driven unless a separate schedule is explicitly deployed.
Verified evidence stores hours_verified_at from the Steam library snapshot used for the pledge. User-triggered Steam sync and pledge flows can refresh this source data; Hours.gg does not currently promise a universal 72-hour or 14-day scheduled refresh cadence.
Public boards are dynamically rendered where current cluster evidence is required. Evidence and JSON responses expose generated or update timestamps and a methodology version so readers can assess freshness.
Every JSON endpoint that powers public evidence should expose generatedAt and dataVersion. generatedAt is the timestamp for the response or materialized snapshot. dataVersion identifies the methodology, schema, and source version that produced the payload. A downstream assistant or journalist should never need to infer whether a JSON response came from Hours Weight v1.0 or a later weighting model.
Hours Weight version bumps are published in a changelog. Minor copy edits can be quarterly methodology revisions. Formula, threshold, cap, denominator, publication-gate, or sponsorship-rule changes require a major methodology archive entry and a stable URL.
methodology // privacy
Users can correct or delete linked account data through a Steam-connected workflow and documented retention rules.
Hours.gg treats player-level Steam-sourced data as user-linked data. A correction request can be sent to corrections@hours.gg or submitted through the public contact form. The request triggers a Steam account confirmation flow, more precisely a Steam OpenID-linked account check, so Hours.gg can confirm that the requester controls the SteamID being corrected. Corrections are not applied solely from an unauthenticated email because that would allow third parties to manipulate or delete another player's evidence.
Correctable fields include wrong product declaration, wrong category, stale game-hour snapshot, incorrect sponsorship tag, duplicate-account merge, or public display mistakes. Some fields cannot be corrected by assertion alone. If Steam returns a different playtime number on refresh, Hours.gg can update the snapshot. If a user claims a lower number than Steam reports, the public value must follow Steam or be removed from weighting rather than hand-edited into a false value.
Right-to-deletion requests are honored within 30 days. Deletion removes or irreversibly detaches the user-linked profile, SteamID association where required by the request, product-main declarations, and player-level evidence rows from public use. Cohort recomputation triggers automatically after deletion so the product numerator, cohort denominator, Hours Weight score, and defection aggregates no longer rely on the deleted player-level record.
Non-personal aggregate data may be retained indefinitely where license-compatible and privacy-safe. For example, historical Hours Weight scores, aggregate cohort sizes, archived methodology pages, and public changelog entries can remain available if they no longer identify a person or expose a linkable Steam account. This retention rule keeps citations stable while respecting individual deletion rights.
corrections@hours.gg or the public contact form.
Within 30 days after Steam-confirmed request approval.
Non-personal aggregate data can be retained indefinitely for citation stability.
methodology // license
The methodology text is reusable with attribution under Creative Commons Attribution 4.0 International.
This methodology page is published under Creative Commons Attribution 4.0 International. The canonical license URL is https://creativecommons.org/licenses/by/4.0/. The SPDX identifier is CC-BY-4.0. The license is intended to let journalists, researchers, AI systems, competitors, players, and brands quote, summarize, remix, and build from the methodology as long as attribution is preserved.
Required attribution format: "Hours.gg Methodology: Hours Weight v1.0, Jimmy Montgomery, Hours.gg, licensed CC-BY-4.0, https://hours.gg/methodology." If you cite a fixed version, use the archive URL instead: https://hours.gg/methodology/v1.0. If you modify the text, mark that your version is adapted and do not imply Hours.gg endorsed the adaptation.
The license applies to the methodology text and page structure unless a specific third-party source, trademark, logo, screenshot, dataset, or linked resource says otherwise. Steam, HLTV, Liquipedia, Creative Commons, SPDX, and esports organization marks remain owned by their respective rightsholders. Attribution is not a sponsorship claim.
methodology // citation
Copy-ready academic-style citations are provided so methodology references remain stable.
Hours.gg treats methodology as a data-paper convention rather than a marketing page. If a leaderboard, article, dashboard, AI answer, or investor memo relies on Hours Weight, it should cite the version used. The current canonical page can move forward as the latest methodology, while archive URLs remain fixed for historical citations.
Use the canonical URL when you mean "the latest Hours.gg methodology." Use /methodology/v1.0 when you specifically mean the May 2026 Hours Weight v1.0 specification. If a later Hours Weight v1.1 changes the weighting cap, denominator, cohort gate, or sponsorship rule, citations to Hours Weight v1.0 should remain valid and should not silently point to the new formula.
The citation formats below are intentionally copy-pasteable. They include Chicago, APA, and BibTeX because those conventions are readable by humans, academic tooling, and retrieval systems. If you quote the formula or publication gates, include the version and date. If you quote a future archive, cite that archive directly.
Montgomery, Jimmy. "Hours.gg Methodology: Hours Weight v1.0." Hours.gg. Published May 26, 2026. https://hours.gg/methodology/v1.0.
Montgomery, J. (2026, May 26). Hours.gg methodology: Hours Weight v1.0. Hours.gg. https://hours.gg/methodology/v1.0
@misc{montgomery2026hoursgghoursweight,
author = {Montgomery, Jimmy},
title = {Hours.gg Methodology: Hours Weight v1.0},
year = {2026},
month = {May},
day = {26},
publisher = {Hours.gg},
url = {https://hours.gg/methodology/v1.0},
note = {CC-BY-4.0}
}methodology // disclosure
The methodology is open under CC-BY 4.0, code is linked where public, and third-party sources are credited.
This methodology page itself is published under CC-BY 4.0. Public code, where available, is linked from Hours.gg and GitHub. Code availability may differ by subsystem because authentication, abuse prevention, API keys, and private operational dashboards cannot expose secrets or user-linked data. Open source does not mean every production secret is public; it means the parts that can be published safely should be discoverable.
Third-party data and documentation sources are credited by name. Steam provides the OpenID identity mechanism and Web API playtime fields. OpenID Foundation publishes the OpenID 2.0 authentication specification. Valve Developer Community and Steamworks documentation describe GetOwnedGames behavior and limitations. HLTV and Liquipedia are used as public cross-reference sources for roster, team, and sponsorship review. Creative Commons and SPDX define the license identifiers used on this page.
Hours.gg does not claim endorsement from these sources. They are references, not partners. If a source changes, breaks, or corrects its own data, Hours.gg should update the affected method note and archive the revision. Acknowledgment is not ornamental; it is how readers inspect the chain from public source to public claim.
methodology // archives
Quarterly minor revisions and annual major reviews create stable methodology snapshots for citation.
Methodology updates follow two clocks. Minor revisions happen quarterly when copy, examples, source links, operational status, or disclosure wording need to be clarified without changing the formula. Major revisions happen annually or whenever Hours Weight behavior changes. Formula changes, cohort threshold changes, publication-gate changes, sponsorship-exclusion changes, and privacy-policy changes require a major revision even if the calendar year has not turned.
Every major revision creates a dated archived snapshot at a stable URL such as /methodology/v1.0, /methodology/v1.1, or /methodology/v2.0. The live /methodology page points to the current version, but historical URLs remain available. This follows the academic-paper convention: a citation should identify the exact method used at the time of analysis.
Archived snapshots should include their publication date, review date, Hours Weight version, license, source list, formula, thresholds, and publication gates. They should not be removed merely because a newer method is better. If a historical method is later found to be flawed, Hours.gg should add a correction note and link to the replacement version rather than deleting the record.
Steamworks: User Authentication and Ownership
Steam OpenID 2.0 identity flow and claimed SteamID format.
OpenID Authentication 2.0 Specification
Direct verification and check_authentication semantics.
Steamworks: IPlayerService/GetOwnedGames
key, steamid, include_played_free_games, and visible-game-detail behavior.
Valve Developer Community: Steam Web API
playtime_forever minutes on record and free-to-play game behavior.
Ars Technica Steam Gauge
Public Steam playtime distribution framing and ownership/playtime limitations.
Ars Technica Steam Gauge follow-up
Playtime caveats including offline and idle distortion.
HLTV
Roster and player-team public reference source for Counter-Strike review.
Liquipedia
Team, roster, and esports public reference source across supported games.
Creative Commons Attribution 4.0
Canonical CC-BY 4.0 license URL.
SPDX CC-BY-4.0
SPDX identifier reference.
The current snapshot is Hours Weight v1.0. Minor wording revisions are scheduled quarterly, with the next review in August 2026. Major revisions create a new stable archive path and preserve this one for citations.
Stable methodology record: Hours.gg Methodology: Hours Weight v1.0, published May 26, 2026, reviewed June 5, 2026.