wOBA Calculator (Weighted On-Base Average)

wOBA Calculator (Weighted On-Base Average)

Weighted on-base average: one denominator, and a separate published run value for each way of reaching base. The weights are recomputed every season by FanGraphs, so this page asks which season’s weights you want rather than pretending they are constants.

wOBA from a named season's weights

Weighted runs per plate appearance
The weights change every year with the run environment. FanGraphs publishes 156 seasons of them, 1871 to 2026, on its Guts! page; three are offered here, and the identical batting line gives .382 on 2024 weights and .386 on 2013 weights. For another season, read the six weights off that table and work the numerator by hand: this page does not interpolate between seasons and nothing should.
Hits that were not doubles, triples or home runs.
Two-base hits.
Three-base hits.
Four-base hits.
Walks MINUS intentional walks. The numerator pays only for unintentional ones, on the reasoning that an intentional walk says more about the situation than about the batter.
Weighted just above an unintentional walk in every season offered here.
For the denominator: at-bats plus unintentional walks plus hit-by-pitches plus sacrifice flies.
In the denominator and not the numerator, exactly as in on-base percentage.
0.382Example

112 singles, 30 doubles, 3 triples, 25 home runs, 55 unintentional walks, 8 hit by pitch, 550 at-bats and 5 sacrifice flies, on 2024 weights

Advertisement

The formula is published in full; the weights are a seasonal table

wOBA = (wBB×uBB + wHBP×HBP + w1B×1B + w2B×2B + w3B×3B + wHR×HR) ÷ (AB + uBB + HBP + SF)
the structure, from FanGraphs’ own library
the 2013 formula is printed there as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” over “(AB + BB – IBB + SF + HBP)”. Bases on balls minus intentional walks is simply unintentional walks
the weights are run values, not bases
slugging percentage prices a double at exactly twice a single because it is two bases. The fitted run values disagree: in 2024 a double was 1.254 against a single’s 0.882, which is 1.42 times, not two, and a home run 2.050, which is 2.32 times, not four
one denominator
and that is the point. OPS adds a fraction over at-bats to a fraction over at-bats plus walks plus hit-by-pitches plus sacrifice flies, which is not a weighted average of anything. wOBA puts every event over the same base, so the result really is runs per plate appearance on a scale set to look like on-base percentage
annual weights, and what is NOT here
FanGraphs recomputes the weights every season and publishes 156 of them; three are offered above, and anything else has to be read off that table, because interpolating between two seasons’ fitted weights would invent a run environment that never existed. wRC+, wRAA and every park- or league-adjusted version are absent for a harder reason: all of them need league-wide seasonal totals and a park factor for the specific stadiums a batter played in, neither of which is on a box score

Worked example

112 singles, 30 doubles, 3 triples, 25 home runs, 55 unintentional walks, 8 hit by pitch, 550 at-bats and 5 sacrifice flies, on 2024 weights
Numerator = 0.689×55 + 0.720×8 + 0.882×112 + 1.254×30 + 1.590×3 + 2.050×25 = 236.08 runs above an out
Denominator = 550 + 55 + 8 + 5 = 618
wOBA = 236.08 ÷ 618 = .382, against a 2024 league average of .310
Switch the weights to 2023 and the same line reads .380; switch them to 2013 and it reads .386. Nothing about the batter changed — the run environment the weights were fitted to did
Move 10 of the singles into home runs and wOBA rises to .401, because the weights price the two differently. On-base percentage would not move at all
Double every count and nothing moves; set them all to 0 and the page returns nothing, because a weighted average over no plate appearances does not exist
Advertisement

The weights, for the three seasons this page offers

202420232013
Unintentional walk0.6890.6960.690
Hit by pitch0.7200.7260.722
Single0.8820.8830.888
Double1.2541.2441.271
Triple1.5901.5691.616
Home run2.0502.0042.101
League-average wOBA.310.318.314
Read off FanGraphs’ Guts! page on 12 October 2026, which carried 156 seasons from 1871 to 2026 as real text rather than as an image. It was fetched twice at two different URLs and the 2024 and 2023 columns agreed digit for digit; the 2013 column also matches, digit for digit, the weights printed in prose on FanGraphs’ separate library article, fetched independently. That double check is here because an annual coefficient table is exactly the kind of thing a summary can invent.

How four on-base statistics price the same four events

WalkSingleDoubleHome run
Batting averagenothing111
On-base percentage1111
Slugging percentagenothing124
wOBA, 2024 weights0.6890.8821.2542.050
Only the last row is trying to measure runs. A batting average cannot tell a walk from nothing and cannot tell a home run from a single. On-base percentage treats all four as identical. Slugging percentage prices a home run at four times a single when the fitted run values say 2.32 times, and prices a walk at zero. OPS, which adds the last two of these rows together over different denominators, inherits every one of those faults.

One denominator, and a published price for each event

Weighted on-base average exists because of two specific faults in the statistics it replaces, and both are arithmetic rather than taste. On-base percentage cannot tell a walk from a home run: both are one time on base out of one plate appearance. And OPS — on-base percentage plus slugging percentage — adds two fractions that do not share a denominator, which is not a weighted average of anything and leaves the result without an interpretation. wOBA puts every way of reaching base over a single denominator and multiplies each by a fitted run value, so the answer really is runs per plate appearance, on a scale deliberately set to read like an on-base percentage.

FanGraphs publishes the structure in full. Its library article prints the 2013 formula as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” divided by “(AB + BB – IBB + SF + HBP)”, and bases on balls minus intentional walks is just unintentional walks. Unlike an expected-goals model or a WAR implementation, nothing here is withheld: the formula is written out, every input is on a published batting line, and the fitted weights are tabulated season by season.

The weights are not constants. FanGraphs recomputes them every season from that season’s run environment and publishes them on its Guts! page, which carried 156 seasons from 1871 to 2026 when it was read for this page. A weight set is therefore a seasonal table, and the honest choices are to take the figures from the reader or to offer a small number of named seasons and say which. This page does the second, and the season selector above is not a detail: it changes the answer.

The weights are run values, and they do not agree with slugging percentage about anything. On 2024 weights a double is 1.254 against a single’s 0.882 — 1.42 times a single, not two. A home run is 2.050, or 2.32 times a single, not four. An unintentional walk is 0.689, which slugging percentage prices at zero and on-base percentage prices the same as a home run. That is the argument for the statistic in three numbers, and it is why an identical batting line moves four points of wOBA between two seasons’ weights without the batter doing anything differently.

Where this page stops. wRC+, wRAA and every park-and-league-adjusted descendant of wOBA need league-wide seasonal totals and a park factor for the specific stadiums a batter actually played in. Neither is on a box score, both are annual tables of the kind this engine cannot hold, and a fitted stand-in would be wrong at the extremes, which is where a park adjustment changes anything. So this page computes the raw weighted average, prints the league average beside it and goes no further; the same wall, built higher, is what stops the WAR page computing anything at all. For the unweighted versions of the same line, with the rule numbers that define them, see the batting average, OBP and SLG calculator.

Frequently asked questions

What is the formula for wOBA?

Each way of reaching base multiplied by that season’s fitted run value, divided by at-bats plus unintentional walks plus hit-by-pitches plus sacrifice flies. FanGraphs prints the 2013 version as (0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR) over (AB + BB – IBB + SF + HBP).

Why does this page ask which season’s weights to use?

Because the weights are not constants. FanGraphs recomputes them every year and publishes 156 seasons of them. The same batting line reads .382 on 2024 weights and .386 on 2013 weights, so a calculator with one hidden weight set is answering about a season it never names.

Is wOBA better than OPS?

It fixes two specific faults: OPS adds two fractions with different denominators, and it weights on-base and slugging equally when the fitted run values do not. wOBA has one denominator and a separate price per event. The cost is that it depends on a seasonal table.

What is a good wOBA?

FanGraphs prints a rule-of-thumb chart — Excellent .400 down to Awful .290 — with its own warning that “the following chart is meant as an estimate”. Those are point estimates rather than published bands, so this page does not turn them into a verdict; compare against the league average printed beside your answer.

Why can’t this page give me wRC+ as well?

Because wRC+ needs a league-wide seasonal run total and a park factor for the stadiums a batter actually played in. Neither is on any batting line, both are annual tables, and a fitted approximation would be wrong at exactly the extremes where a park adjustment matters.

Related calculators

References

  1. FanGraphs Library. wOBA — gives the 2013 formula as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” over “(AB + BB – IBB + SF + HBP)”, states that “These weights change on a yearly basis”, gives the 2013 league wOBA as .314, and prints a rule-of-thumb chart (Excellent .400 down to Awful .290) warning that “the following chart is meant as an estimate”. library.fangraphs.com (read 12 Oct 2026).
  2. FanGraphs. Guts! — wOBA and FIP Constants — 156 seasons, 1871 to 2026, fetched twice at two URLs on 12 Oct 2026 and real text rather than an image both times. 2024: wOBA .310, wBB .689, wHBP .720, w1B .882, w2B 1.254, w3B 1.590, wHR 2.050. 2023: .318, .696, .726, .883, 1.244, 1.569, 2.004. 2013: .314, .690, .722, .888, 1.271, 1.616, 2.101 — matching, digit for digit, the weights printed in prose on the separate library article. fangraphs.com.
  3. Major League Baseball. Glossary: On-base Percentage (OBP) — times on base “include hits, walks and hit-by-pitches” and exclude errors, fielder’s choice and a dropped third strike, while “sacrifice bunts are removed from the equation entirely”. The entry calls OBP a per-plate-appearance rate, which is looser than Rule 9.21(f): removing sacrifice bunts means the denominator is not plate appearances. mlb.com (read 12 Oct 2026).
  4. Major League Baseball. Glossary: Slugging Percentage (SLG) — “the total number of bases a player records per at-bat”, as “(1B + 2Bx2 + 3Bx3 + HRx4)/AB”; it “deals only with hits and does not include walks and hit-by-pitches in its equation”. mlb.com (read 12 Oct 2026).
  5. Major League Baseball. Glossary: On-base Plus Slugging (OPS) — “OPS adds on-base percentage and slugging percentage to get one number that unites the two.” The entry states no shortcoming at all: it mentions neither the two different denominators nor the equal weighting, which is why this page says both in its own words. mlb.com (read 12 Oct 2026).