From 2014 through 2019, Netflix reported a profit every single year. It also burned cash every single year, and the burn got worse each time: free cash flow went from -$128 million in 2014 to -$3.14 billion in 2019. Over the same six years, Snowflake's story runs the other way: its net losses have widened every year since its 2020 IPO, reaching -$1.29 billion in 2025, while its free cash flow flipped positive in 2022 and reached $913 million by 2025.
Same direction of travel for the headline number, opposite direction for the cash. Both companies are real, and both are explained entirely by what the cash flow statement adds back or strips out that the income statement does not. This article uses the Finance Toolkit to walk through both cases. The source code for every calculation is on GitHub. The MCP server documentation lives here.
Setting Things Up
Start by installing the Finance Toolkit:
pip install financetoolkit
Then import the library and create a Toolkit instance for both companies:
from financetoolkit import Toolkit
companies = Toolkit(
tickers=["NFLX", "SNOW"],
api_key="YOUR_FMP_API_KEY",
start_date="2014-01-01"
)
Get your FMP API key at jeroenbouma.com/fmp. Netflix needs the full 10+ year history this article uses, which requires a paid plan; Snowflake only IPO'd in 2020, so its history fits within the free plan's five-year window.
Netflix: Profitable on Paper, Burning Cash for Six Years
Pull the income statement and cash flow statement for both companies, then line up Netflix's net income against its operating and free cash flow:
income = companies.get_income_statement()
cash_flow = companies.get_cash_flow_statement()
netflix = pd.DataFrame({
"Net Income": income.loc["NFLX"].loc["Net Income"] / 1e9,
"Operating Cash Flow": cash_flow.loc["NFLX"].loc["Operating Cash Flow"] / 1e9,
"Free Cash Flow": cash_flow.loc["NFLX"].loc["Free Cash Flow"] / 1e9
})
Which returns:
| Year | Net Income ($B) | Operating Cash Flow ($B) | Free Cash Flow ($B) |
|---|---|---|---|
| 2014 | 0.27 | 0.02 | -0.13 |
| 2015 | 0.12 | -0.75 | -0.92 |
| 2016 | 0.19 | -1.47 | -1.66 |
| 2017 | 0.56 | -1.79 | -2.01 |
| 2018 | 1.21 | -2.68 | -2.89 |
| 2019 | 1.87 | -2.89 | -3.14 |
| 2020 | 2.76 | 2.43 | 1.93 |
| 2021 | 5.12 | 0.39 | -0.13 |
| 2022 | 4.49 | 2.03 | 1.62 |
| 2023 | 5.41 | 7.27 | 6.93 |
| 2024 | 8.71 | 7.36 | 6.92 |
| 2025 | 10.98 | 10.15 | 9.46 |
The gap in 2019 is the most extreme: $1.87 billion in reported profit against -$3.14 billion in free cash flow, a $5 billion difference in the same year. The cause sits in one line of the cash flow statement most people skip past: Netflix capitalizes the cost of producing content and amortizes it on the income statement over the years that content is expected to draw viewers, the same way a factory depreciates a machine. But the cash for that content goes out the door upfront, all at once, when it is produced or licensed. In 2019, Netflix's non-cash content amortization add-back was nowhere near large enough to offset the actual cash spent acquiring new content, so operating cash flow came in nearly $4.8 billion below net income.
The flip starting in 2020 is just as informative. COVID production shutdowns slowed new content spending right as the prior years' library kept generating amortization add-backs, and operating cash flow turned positive for the first time in the dataset. By 2023, free cash flow ($6.93 billion) had not just caught up to net income ($5.41 billion), it exceeded it, since by then the content library built over the previous decade was throwing off amortization faster than new cash spend was replacing it.
Try this with the Finance Toolkit MCP: "Compare Netflix's net income, operating cash flow, and free cash flow from 2014 to 2025. In which years was free cash flow most negative relative to net income, and when did that reverse?"
Snowflake: Losing Money on Paper, Generating Cash in Practice
Slice out Snowflake's rows from the same two statements, and add stock-based compensation alongside net income to see what is doing the reconciling:
snowflake_income = income.loc["SNOW"]
snowflake_cash_flow = cash_flow.loc["SNOW"]
snowflake = pd.DataFrame({
"Net Income": snowflake_income.loc["Net Income"] / 1e6,
"Stock Based Compensation": snowflake_cash_flow.loc["Stock Based Compensation"] / 1e6,
"Operating Cash Flow": snowflake_cash_flow.loc["Operating Cash Flow"] / 1e6,
"Free Cash Flow": snowflake_cash_flow.loc["Free Cash Flow"] / 1e6
})
Which returns:
| Year | Net Income ($M) | Stock Based Compensation ($M) | Operating Cash Flow ($M) | Free Cash Flow ($M) |
|---|---|---|---|---|
| 2020 | -348.5 | 78.4 | -176.6 | -199.4 |
| 2021 | -539.1 | 301.4 | -45.4 | -85.7 |
| 2022 | -680.0 | 605.1 | 110.2 | 81.2 |
| 2023 | -797.5 | 861.5 | 545.6 | 496.5 |
| 2024 | -838.0 | 1,168.0 | 848.1 | 778.9 |
| 2025 | -1,289.2 | 1,479.3 | 959.8 | 913.5 |
Snowflake's net loss has widened every single year, more than tripling from -$348.5 million in 2020 to -$1.29 billion in 2025. Read in isolation, that looks like a company getting less profitable over time. Its free cash flow tells the opposite story, turning positive in 2022 and reaching $913.5 million by 2025. The reconciling line is stock-based compensation, which grew from $78.4 million in 2020 to $1.48 billion in 2025, larger than the entire net loss for that year. SBC is a real cost to shareholders (it dilutes ownership), but it is not a cash cost to the company, so it gets added back when calculating operating cash flow. By 2025, Snowflake's SBC add-back alone was large enough to flip a -$1.29 billion accounting loss into nearly $1 billion of cash generated.
Neither number is "wrong." The net loss correctly captures the dilution cost to existing shareholders. The cash flow statement correctly captures that the business is not actually consuming cash to operate, it is consuming equity. Reading only one of the two gives an incomplete, and in this case contradictory, picture of the same company.
Try this with the Finance Toolkit MCP: "Show Snowflake's net income, stock-based compensation, and operating cash flow from 2020 to 2025. How much of the gap between net income and operating cash flow is explained by stock-based compensation alone?"
Reading the Cash Flow Statement First
Netflix and Snowflake diverge from earnings in opposite directions, but the mechanism is the same in both cases: a non-cash item on the income statement (content amortization, stock-based compensation) moves in a different rhythm than the actual cash leaving or entering the business. The other common sources of this gap that did not show up here but are worth checking on any company: changes in working capital (growing receivables eat cash even as revenue and earnings grow), deferred revenue (cash collected before it is recognized as earnings, the opposite mismatch from Netflix's content spend), and one-time gains or impairments that hit net income without any cash changing hands at all.
None of this means net income is useless or that free cash flow is the only number that matters. It means neither one is sufficient on its own. A company that looks profitable but is burning cash for years, like Netflix before 2020, needs to be asked how it intends to fund that gap. A company that looks unprofitable but is generating real cash, like Snowflake since 2022, needs to be asked how much of its reported loss is real economic cost versus an accounting treatment of compensation. The cash flow statement does not replace the income statement. It is the cross-check that tells you whether to trust what the income statement is implying.
Top comments (0)