The BSZ analysis (Boll, Saez and Zucman, NBER,
August 2026) finds that the billionaire tax raises money for California. The
JR analysis (Jaros and Rauh, NBER, September
2026) finds that it loses money.
This page puts both on one measure, the net fiscal
effect: the wealth tax collected, plus extra income tax from asset sales, minus the income
tax lost to people who leave. This is part of an Open Policy Analysis. See more
here:
Both numbers rest on decisions this comparison makes, not the authors. The BSZ number adds income tax effects to the paper's headline, the wealth tax alone. The JR number is the average of the authors' 100,000 draws, which spread from −$208.8B to $47.7B. Each keeps its own horizon, 5 years against for ever. The six decisions, in the report.
Each amount is what its dials change when they are moved to the JR values, term by term from left to right, as the Walk the path button does.2
Each dial (a slider) moves one disputed input between the two analyses' values. Every dial has its smaller value at the left end and its larger value at the right end, and each end names whose value it is. The BSZ panel starts at the BSZ values, the JR panel at the JR values, so a dial can start at either end. Tap or hover over a symbol or an end for what it means and the kind of each value.
The BSZ analysis's main estimate1 (Boll, Saez and Zucman, NBER, August 2026)
With these sliders $106.8B
Wealth tax collectedWealth tax collected = 5% × (W − D) × (1 − a) × q
The tax takes 5% of the wealth. W is the wealth on the list, D the part counted as moved out in time, a the share lost to avoidance, q the chance the tax survives in court. moreThe four dials multiply, so one dial's effect depends on the others. W and D are valued on the same Forbes list.
Income tax lostIncome tax lost = f × C × A(H, r)A(H, r): what $1 a year for H years is worth today at rate r.
f is the share of billionaires' income tax lost, C that tax per year, H the years it is counted, and r the rate that discounts it. moref, C and A(H, r) multiply, so one dial's effect depends on the others. f also moves with D and a, so its end labels differ between the panels.
The JR analysis's main estimate1, the exact average of the authors' model (Jaros and Rauh, NBER, September 2026)
It averages the authors' 100,000 draws. 90% of them fall between −$107.9B and $15.9B, and all between −$208.8B and $47.7B.
With these sliders −$39.0B
Wealth tax collectedWealth tax collected = 5% × (W − D) × (1 − a) × q
The tax takes 5% of the wealth. W is the wealth on the list, D the part counted as moved out in time, a the share lost to avoidance, q the chance the tax survives in court. moreThe four dials multiply, so one dial's effect depends on the others. W and D are valued on the same Forbes list.
Income tax lostIncome tax lost = f × C × A(H, r)A(H, r): what $1 a year for H years is worth today at rate r.
f is the share of billionaires' income tax lost, C that tax per year, H the years it is counted, and r the rate that discounts it. moref, C and A(H, r) multiply, so one dial's effect depends on the others. f also moves with D and a, so its end labels differ between the panels.
Apply to the BSZ panel, from left to right.2
The BSZ panel with these dials: $106.8B
Each dial's two ends above give both analyses' values. The overview's table of differences sets them side by side with their sources.
Most of these are empirical quantities, and none should depend on whether one supports or opposes a wealth tax. H and r are scenario choices. An expert should be able to judge which of the two values is more credible.
Take the survey: which values are more credible?
The survey is primarily for economists and policy analysts. Share this survey with people you think have expertise in this area, to learn which values they find more credible.
1 The BSZ number is this OPA's net total over 5 years at 3% (BSZ's own headline is the wealth tax alone), and the JR number is the authors' mean net present value in perpetuity. The paper prints −$38.9B, the average of one seeded run of 100,000 draws. The exact average of the same formula is −$38.98B, used throughout this page (more in the report: The two main estimates).
2 The equation adds up only when the terms are switched one after another, in this order, from left to right. In another order the same dials split the gap differently among the terms: moved first, q would take −$53.75B instead of −$39.44B, because it would also halve the tax on the billionaires who already left. The Apply buttons work from left to right, each unlocking the next, so each press changes the estimate by its amount in the equation (more in the report: The explorer's equation).
The net fiscal effect puts both on one definition, and the panels start at its two ends. The BSZ end is $106.8B and the JR end −$39.0B, a gap of $145.8B. The discount rate is a dial: 3% at the BSZ end, the rate the BSZ overview uses, and 2.73% at the JR end, the one rate worth the same as the authors' random draw of it (more in the report: The discount rate).
The litigation dial, q, is at 50% at the JR end. The JR explorer's litigation dial reads 1 at the main estimate, because there the revenue draw from 0 to the ceiling already halves the mean revenue. This explorer applies the same half as q = 50% of the ceiling (more in the report: The litigation dial).
PolicyEngine's calculator does the same walk in its own model, with each paper's assumptions as a setting. It was built independently of this project and lands at +$106.2B and −$37.2B. Its code is public (more in the report: Two other comparisons).
Conventions. All amounts are billions of dollars. Present values are as of the date the wealth tax is assessed, and the first year of lost income tax is counted one year later (more in the report: Conventions).
Where the numbers come from. Every number on this page is computed by
comparison/R/ from the two analyses' export contracts
(bsz-analysis/export/r/, rjkdc-analysis/export/r/: the files each
pipeline writes for others to read) and the transcriptions in comparison/data/.
The estimating function is score_common() in comparison/R/model.R,
with a Python twin (R and Python agree to 1e-9 on every exported number; see comparison/tests). The browser runs model.js,
a copy of it, and a test runs that copy with node over 600 slider mixes
against the R values, to 1e-9. The report derives each number
step by step and shows the bridge from the BSZ end to the JR end; the
materials page lists the code, tests and files.
Data. ends.csv (the two ends, at
each horizon setting),
slider_sample.csv (300 slider mixes per
panel with their values, the sample the tests run model.js on),
inputs.csv (every disputed input and its sources),
DISPUTES.md
(the crosswalk of the disagreements, one row each, with what each analysis says and where),
dial_path.csv (the terms of the equation at the top, dial by dial),
comparison-data.js (what this page reads).
A test fails if comparison-data.js or this page differs from the generator's
output.
Kinds. Each end's tip ends with the kind of that analysis's value: data (settled by observable facts), research (a published estimate), guesswork (an assumption with no data or study behind it), guesswork on data (a judgement applied to observed facts), scenario (a choice of which world is estimated) and derived (computed from the analysis's own inputs). A kind says what evidence is behind a value, not whether the quantity itself can be observed.
The function. The report states the estimating function line by line. The BSZ panel's sliders move only the BSZ bar and the JR panel's sliders only the JR bar.
Survey links. This page records, without any identifying data, that a survey link was opened and which form it drew.