<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeroen Bouma</title>
    <description>The latest articles on DEV Community by Jeroen Bouma (@jerbouma).</description>
    <link>https://dev.to/jerbouma</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3984416%2Fa6ce2342-e0c6-4953-a572-426967835ac3.jpeg</url>
      <title>DEV Community: Jeroen Bouma</title>
      <link>https://dev.to/jerbouma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jerbouma"/>
    <language>en</language>
    <item>
      <title>Competitor and Sector Analysis with the Finance Toolkit</title>
      <dc:creator>Jeroen Bouma</dc:creator>
      <pubDate>Tue, 07 Jul 2026 13:33:00 +0000</pubDate>
      <link>https://dev.to/jerbouma/competitor-and-sector-analysis-with-the-finance-toolkit-2e9f</link>
      <guid>https://dev.to/jerbouma/competitor-and-sector-analysis-with-the-finance-toolkit-2e9f</guid>
      <description>&lt;p&gt;In 2010, Intel generated $43.6 billion in revenue and its nearest competitor in logic chips, AMD, generated $6.5 billion. NVIDIA was a $3.3 billion company still best known for gaming graphics cards. Qualcomm was growing rapidly on the smartphone wave. Broadcom and Texas Instruments were mid-sized analog and connectivity specialists.&lt;/p&gt;

&lt;p&gt;By 2025, the same six companies tell a radically different story. NVIDIA has grown to $130.5 billion in revenue driven almost entirely by AI infrastructure demand. Intel sits at $52.9 billion, barely changed from its 2020 peak, now reporting losses. AMD has reached $34.6 billion and crossed Intel's gross margin for the first time in the company's history.&lt;/p&gt;

&lt;p&gt;The Finance Toolkit makes it straightforward to track this transformation through financial data, both via Python code and the MCP server for those who prefer conversational analysis. &lt;strong&gt;The source code for every calculation is on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The MCP server documentation lives &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/mcp" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this with the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"Let's do a deep dive in the Semiconductor industry. What trends do you see in the last 10 years? And what about the fundamentals?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Setting Things Up
&lt;/h2&gt;

&lt;p&gt;Start by installing the Finance Toolkit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;financetoolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import the library and define a universe of tickers. The example below uses six semiconductor companies: Intel, AMD, NVIDIA, Qualcomm, Broadcom, and Texas Instruments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;sector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QCOM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AVGO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TXN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your FMP API key at &lt;a href="https://www.jeroenbouma.com/fmp" rel="noopener noreferrer"&gt;jeroenbouma.com/fmp&lt;/a&gt;. A paid plan is required to access the full 15-year history used here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revenue: How the Landscape Shifted
&lt;/h2&gt;

&lt;p&gt;The most immediate observation from pulling 15 years of income statements is the NVIDIA revenue trajectory. Everything else looks like normal cyclical variation by comparison.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;income&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_income_statement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;revenue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;income&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2014&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2018&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;2010&lt;/th&gt;
&lt;th&gt;2014&lt;/th&gt;
&lt;th&gt;2018&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;INTC&lt;/td&gt;
&lt;td&gt;43.6&lt;/td&gt;
&lt;td&gt;55.9&lt;/td&gt;
&lt;td&gt;70.8&lt;/td&gt;
&lt;td&gt;63.1&lt;/td&gt;
&lt;td&gt;52.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;5.5&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;23.6&lt;/td&gt;
&lt;td&gt;34.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVDA&lt;/td&gt;
&lt;td&gt;3.3&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;td&gt;9.7&lt;/td&gt;
&lt;td&gt;26.9&lt;/td&gt;
&lt;td&gt;130.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QCOM&lt;/td&gt;
&lt;td&gt;11.0&lt;/td&gt;
&lt;td&gt;26.5&lt;/td&gt;
&lt;td&gt;22.7&lt;/td&gt;
&lt;td&gt;44.2&lt;/td&gt;
&lt;td&gt;44.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AVGO&lt;/td&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;4.3&lt;/td&gt;
&lt;td&gt;20.8&lt;/td&gt;
&lt;td&gt;33.2&lt;/td&gt;
&lt;td&gt;63.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TXN&lt;/td&gt;
&lt;td&gt;14.0&lt;/td&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;td&gt;15.8&lt;/td&gt;
&lt;td&gt;20.0&lt;/td&gt;
&lt;td&gt;17.7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Several things stand out. Intel peaked somewhere between 2020 and 2022, then contracted, a pattern without precedent in the company's history. NVIDIA's inflection is visible between 2022 and 2025: revenue grew from $26.9 billion to $130.5 billion in three years. Broadcom's growth looks smooth in this table but masks something important: the jump from $4.3 billion in 2014 to $20.8 billion in 2018 was almost entirely acquisition-driven, as the company absorbed Avago Technologies, Brocade, and CA Technologies in rapid succession. TXN and QCOM, the two companies least exposed to the AI compute buildout, show the flattest trajectories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gross Margins: The Fabless Advantage
&lt;/h2&gt;

&lt;p&gt;Revenue tells you who is growing. Gross margins tell you who controls their cost structure. In semiconductors, the key structural divide is between integrated device manufacturers (companies that design and fabricate their own chips) and fabless companies that outsource manufacturing to foundries like TSMC.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;gross_margin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_gross_margin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;margins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gross_margin&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2014&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2018&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;2010&lt;/th&gt;
&lt;th&gt;2014&lt;/th&gt;
&lt;th&gt;2018&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;INTC&lt;/td&gt;
&lt;td&gt;66.1%&lt;/td&gt;
&lt;td&gt;63.7%&lt;/td&gt;
&lt;td&gt;61.7%&lt;/td&gt;
&lt;td&gt;42.6%&lt;/td&gt;
&lt;td&gt;34.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;45.6%&lt;/td&gt;
&lt;td&gt;33.4%&lt;/td&gt;
&lt;td&gt;37.8%&lt;/td&gt;
&lt;td&gt;44.9%&lt;/td&gt;
&lt;td&gt;49.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVDA&lt;/td&gt;
&lt;td&gt;35.4%&lt;/td&gt;
&lt;td&gt;54.9%&lt;/td&gt;
&lt;td&gt;59.9%&lt;/td&gt;
&lt;td&gt;64.9%&lt;/td&gt;
&lt;td&gt;75.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QCOM&lt;/td&gt;
&lt;td&gt;68.0%&lt;/td&gt;
&lt;td&gt;59.7%&lt;/td&gt;
&lt;td&gt;54.9%&lt;/td&gt;
&lt;td&gt;57.8%&lt;/td&gt;
&lt;td&gt;55.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AVGO&lt;/td&gt;
&lt;td&gt;46.2%&lt;/td&gt;
&lt;td&gt;43.9%&lt;/td&gt;
&lt;td&gt;51.5%&lt;/td&gt;
&lt;td&gt;66.6%&lt;/td&gt;
&lt;td&gt;67.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TXN&lt;/td&gt;
&lt;td&gt;53.6%&lt;/td&gt;
&lt;td&gt;56.9%&lt;/td&gt;
&lt;td&gt;65.1%&lt;/td&gt;
&lt;td&gt;68.8%&lt;/td&gt;
&lt;td&gt;57.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Intel margin collapse is the defining story of the table. A company that earned 66% gross margins in 2010 earns 34.8% in 2025. The proximate cause is that Intel's manufacturing processes fell behind TSMC's, first by one node generation, then two, meaning Intel's chips cost more to produce while competitors using TSMC got access to better processes at lower cost. The structural consequence is that Intel's cost-per-chip disadvantage compounds every product cycle.&lt;/p&gt;

&lt;p&gt;NVIDIA went in the opposite direction: from 35.4% in 2010 to 75.0% in 2025. A fabless company with a near-monopoly on AI training hardware can charge what the market bears, and the market has been willing to pay very high prices for H100 and Blackwell GPUs. NVIDIA's gross margin today is higher than Intel's ever was.&lt;/p&gt;

&lt;p&gt;AMD transitioned from a company with 33% gross margins in 2014 (a period when it was fighting for survival) to 49.5% in 2025. In 2022, AMD's gross margin crossed above Intel's for the first time. That crossover is not primarily a product story, it is a manufacturing story. AMD, as a fabless company using TSMC, gained access to better nodes while Intel's own fabs struggled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intel vs AMD: The x86 CPU Battle
&lt;/h2&gt;

&lt;p&gt;Not every company in this sector competes with every other. Texas Instruments makes analog chips for industrial and automotive customers; it does not compete with NVIDIA for AI data center revenue. Qualcomm sells ARM-based mobile processors and has never produced an x86 chip. Broadcom targets networking and storage controllers.&lt;/p&gt;

&lt;p&gt;The genuine competitive battle in x86 CPUs is between exactly two companies: Intel and AMD. Every server, desktop, and laptop CPU socket holds a chip made by one of them. Market share gained by one is market share lost by the other.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cpu_rivals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;years&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2014&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2018&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2024&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;cpu_revenue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;income&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;cpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e9&lt;/span&gt;
&lt;span class="n"&gt;cpu_margins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_gross_margin&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;cpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="n"&gt;cpu_roic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_return_on_invested_capital&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;cpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;INTC Rev ($B)&lt;/th&gt;
&lt;th&gt;AMD Rev ($B)&lt;/th&gt;
&lt;th&gt;INTC GM&lt;/th&gt;
&lt;th&gt;AMD GM&lt;/th&gt;
&lt;th&gt;INTC ROIC&lt;/th&gt;
&lt;th&gt;AMD ROIC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;43.6&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;66.1%&lt;/td&gt;
&lt;td&gt;45.6%&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;55.9&lt;/td&gt;
&lt;td&gt;5.5&lt;/td&gt;
&lt;td&gt;63.7%&lt;/td&gt;
&lt;td&gt;33.4%&lt;/td&gt;
&lt;td&gt;22.8%&lt;/td&gt;
&lt;td&gt;-16.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;70.8&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;61.7%&lt;/td&gt;
&lt;td&gt;37.8%&lt;/td&gt;
&lt;td&gt;27.0%&lt;/td&gt;
&lt;td&gt;14.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;77.9&lt;/td&gt;
&lt;td&gt;9.8&lt;/td&gt;
&lt;td&gt;56.0%&lt;/td&gt;
&lt;td&gt;44.5%&lt;/td&gt;
&lt;td&gt;23.6%&lt;/td&gt;
&lt;td&gt;50.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;63.1&lt;/td&gt;
&lt;td&gt;23.6&lt;/td&gt;
&lt;td&gt;42.6%&lt;/td&gt;
&lt;td&gt;44.9%&lt;/td&gt;
&lt;td&gt;10.1%&lt;/td&gt;
&lt;td&gt;4.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;53.1&lt;/td&gt;
&lt;td&gt;25.8&lt;/td&gt;
&lt;td&gt;32.7%&lt;/td&gt;
&lt;td&gt;49.4%&lt;/td&gt;
&lt;td&gt;-10.9%&lt;/td&gt;
&lt;td&gt;2.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;52.9&lt;/td&gt;
&lt;td&gt;34.6&lt;/td&gt;
&lt;td&gt;34.8%&lt;/td&gt;
&lt;td&gt;49.5%&lt;/td&gt;
&lt;td&gt;-0.2%&lt;/td&gt;
&lt;td&gt;6.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From 2010 to 2017, Intel was dominant by every metric. AMD spent this period losing money, cutting headcount, and struggling to produce a competitive architecture. Its gross margins compressed from 45.6% to below 30% in 2015 and 2016 as it competed on price with inferior products.&lt;/p&gt;

&lt;p&gt;The inflection came in 2017 when AMD launched the Zen architecture under Lisa Su. The first Ryzen CPUs and EPYC server chips were genuinely competitive with Intel's best products. The financial data lags the product cycle: revenue did not break meaningfully higher until 2021-2022, and gross margin recovery tracked along with product mix shifting toward EPYC.&lt;/p&gt;

&lt;p&gt;By 2022, AMD's gross margin had exceeded Intel's, a reversal that would have seemed implausible in 2015. By 2024 and 2025, Intel's ROIC had turned negative, meaning the company was destroying capital. Intel's $5 billion investment in foundry capacity between 2020 and 2024 has not yet returned the expected margins, and the company returned a net loss in 2025.&lt;/p&gt;

&lt;p&gt;AMD's ROIC of 6.8% in 2025 is modest, reflecting the Xilinx acquisition ($35 billion, 2022) which dramatically expanded the invested capital base. The business is generating reasonable returns on operating assets; the acquisition debt is working against the ratio.&lt;/p&gt;

&lt;h2&gt;
  
  
  NVIDIA vs AMD: The GPU and AI Accelerator Race
&lt;/h2&gt;

&lt;p&gt;AMD and NVIDIA have been GPU competitors since AMD's 2006 acquisition of ATI Technologies. Both companies design discrete graphics chips for gaming, professional workstations, and data center compute. In 2010, the two companies were comparable in size. By 2025, the gap was $130.5 billion versus $34.6 billion.&lt;/p&gt;

&lt;p&gt;The divergence is almost entirely explained by AI infrastructure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;gpu_rivals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;gpu_revenue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;income&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;gpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e9&lt;/span&gt;
&lt;span class="n"&gt;gpu_margins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_gross_margin&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;gpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="n"&gt;gpu_roic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_return_on_invested_capital&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;gpu_rivals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;years&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;NVDA Rev ($B)&lt;/th&gt;
&lt;th&gt;AMD Rev ($B)&lt;/th&gt;
&lt;th&gt;NVDA GM&lt;/th&gt;
&lt;th&gt;AMD GM&lt;/th&gt;
&lt;th&gt;NVDA ROIC&lt;/th&gt;
&lt;th&gt;AMD ROIC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;3.3&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;35.4%&lt;/td&gt;
&lt;td&gt;45.6%&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;4.1&lt;/td&gt;
&lt;td&gt;5.5&lt;/td&gt;
&lt;td&gt;54.9%&lt;/td&gt;
&lt;td&gt;33.4%&lt;/td&gt;
&lt;td&gt;11.6%&lt;/td&gt;
&lt;td&gt;-16.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;9.7&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;59.9%&lt;/td&gt;
&lt;td&gt;37.8%&lt;/td&gt;
&lt;td&gt;37.5%&lt;/td&gt;
&lt;td&gt;14.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;10.9&lt;/td&gt;
&lt;td&gt;9.8&lt;/td&gt;
&lt;td&gt;62.0%&lt;/td&gt;
&lt;td&gt;44.5%&lt;/td&gt;
&lt;td&gt;24.3%&lt;/td&gt;
&lt;td&gt;50.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;26.9&lt;/td&gt;
&lt;td&gt;23.6&lt;/td&gt;
&lt;td&gt;64.9%&lt;/td&gt;
&lt;td&gt;44.9%&lt;/td&gt;
&lt;td&gt;32.2%&lt;/td&gt;
&lt;td&gt;4.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;60.9&lt;/td&gt;
&lt;td&gt;25.8&lt;/td&gt;
&lt;td&gt;72.7%&lt;/td&gt;
&lt;td&gt;49.4%&lt;/td&gt;
&lt;td&gt;68.4%&lt;/td&gt;
&lt;td&gt;2.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;130.5&lt;/td&gt;
&lt;td&gt;34.6&lt;/td&gt;
&lt;td&gt;75.0%&lt;/td&gt;
&lt;td&gt;49.5%&lt;/td&gt;
&lt;td&gt;102.6%&lt;/td&gt;
&lt;td&gt;6.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Through 2020, the two companies moved roughly in parallel. AMD and NVIDIA were neck-and-neck on revenue. The ROIC numbers for 2020, AMD at 50.2% and NVIDIA at 24.3%, actually show AMD leading, a reflection of AMD's lean capital base at that moment before the Xilinx acquisition.&lt;/p&gt;

&lt;p&gt;The separation happened in 2021 and accelerated through 2022 to 2025. The driver is not gaming GPUs, where AMD's Radeon line remains a genuine competitor for NVIDIA's GeForce range. The driver is AI training infrastructure. NVIDIA's H100 and Blackwell GPUs, running on CUDA, became the default compute substrate for training large language models. The software ecosystem, built over 15 years around CUDA, proved nearly impossible for AMD to replicate quickly with its ROCm platform.&lt;/p&gt;

&lt;p&gt;The financial consequence shows in ROIC. NVIDIA earned 102.6% return on invested capital in 2025. AMD earned 6.8%. Both companies make GPUs. One of them has a software moat that the other does not.&lt;/p&gt;

&lt;p&gt;AMD's position in this race is structurally harder than its Intel rivalry. Against Intel, AMD competes on x86 CPU performance, a problem of engineering execution. Against NVIDIA, AMD competes on AI software ecosystem depth, a problem of developer adoption and network effects that is slower and more expensive to overcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Market Is Pricing In
&lt;/h2&gt;

&lt;p&gt;The financial history explains the divergence. Current valuations reflect where the market expects each company to go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_price_to_earnings_ratio&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;ev_ebitda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_ev_to_ebitda_ratio&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;current_valuation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pe&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EV/EBITDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ev_ebitda&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EV/EBITDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;P/E&lt;/th&gt;
&lt;th&gt;EV/EBITDA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;QCOM&lt;/td&gt;
&lt;td&gt;34.1&lt;/td&gt;
&lt;td&gt;14.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INTC&lt;/td&gt;
&lt;td&gt;neg&lt;/td&gt;
&lt;td&gt;19.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TXN&lt;/td&gt;
&lt;td&gt;31.9&lt;/td&gt;
&lt;td&gt;21.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVDA&lt;/td&gt;
&lt;td&gt;63.5&lt;/td&gt;
&lt;td&gt;55.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AVGO&lt;/td&gt;
&lt;td&gt;72.6&lt;/td&gt;
&lt;td&gt;50.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;80.8&lt;/td&gt;
&lt;td&gt;52.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Qualcomm is the cheapest name on EV/EBITDA at 14.2x, pricing in limited AI exposure and the ARM licensing exposure risk. Texas Instruments at 21.3x is being valued as a stable analog business with cyclical revenue sensitivity.&lt;/p&gt;

&lt;p&gt;Intel is uninvestable on P/E (the company is reporting losses) and its EV/EBITDA of 19.1x is elevated relative to the earnings power the business is currently generating. The market is either pricing in a recovery or pricing in acquisition optionality. The gross margin and ROIC data suggest recovery will take years.&lt;/p&gt;

&lt;p&gt;NVIDIA at 63.5x P/E and 55.5x EV/EBITDA is expensive in absolute terms. Whether those multiples are justified depends on whether AI infrastructure CapEx remains elevated and whether NVIDIA maintains its software ecosystem lead. At 102.6% ROIC in 2025, the business is extraordinary; the question is the duration of that advantage.&lt;/p&gt;

&lt;p&gt;AMD at 80.8x P/E trades at a premium to NVIDIA despite lower ROIC and a two-front competitive battle. The premium reflects expectations for ROIC recovery as the Xilinx acquisition amortizes and as AI GPU shipments scale. The execution risk is real.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Screening for Undervalued Stocks with the Finance Toolkit</title>
      <dc:creator>Jeroen Bouma</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:43:00 +0000</pubDate>
      <link>https://dev.to/jerbouma/screening-for-undervalued-stocks-with-the-finance-toolkit-1jnd</link>
      <guid>https://dev.to/jerbouma/screening-for-undervalued-stocks-with-the-finance-toolkit-1jnd</guid>
      <description>&lt;p&gt;With thousands of publicly listed companies, finding undervalued stocks by hand is impractical. A systematic screen changes that: pull valuation multiples across an entire universe, filter by multiple criteria simultaneously, and overlay profitability metrics to separate genuine value from value traps. The Finance Toolkit makes each of those steps a few lines of Python.&lt;/p&gt;

&lt;p&gt;This article walks through a complete screening process from universe definition to a final shortlist. It uses 15 stocks across five sectors to illustrate the logic. A real screen would cast a wider net, and the Discovery module supports that too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The source code for every calculation is on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The MCP server documentation lives &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/mcp" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Things Up
&lt;/h2&gt;

&lt;p&gt;Start by installing the Finance Toolkit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;financetoolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import the library and define a universe of tickers. The example below uses 15 stocks across technology, healthcare, consumer staples, financials, and energy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;screener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MSFT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;IBM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JNJ&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PFE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MRK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;KO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WMT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JPM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BAC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XOM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CVX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;META&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GOOGL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your FMP API key at &lt;a href="https://www.jeroenbouma.com/fmp" rel="noopener noreferrer"&gt;jeroenbouma.com/fmp&lt;/a&gt;. The free plan covers five years of history; a paid plan unlocks deeper history and a larger universe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Pulling Valuation Multiples
&lt;/h2&gt;

&lt;p&gt;The first pass uses four ratios to get a broad picture of relative cheapness. P/E and EV/EBITDA are the most common entry points; P/FCF and P/B provide cross-checks that are harder to manipulate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_price_to_earnings_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;pfcf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_price_to_free_cash_flow_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;pb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_price_to_book_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ev_ebitda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_ev_to_ebitda_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;valuation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/FCF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pfcf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/B&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EV/EBITDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ev_ebitda&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;P/E&lt;/th&gt;
&lt;th&gt;P/FCF&lt;/th&gt;
&lt;th&gt;P/B&lt;/th&gt;
&lt;th&gt;EV/EBITDA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;INTC&lt;/td&gt;
&lt;td&gt;neg&lt;/td&gt;
&lt;td&gt;neg&lt;/td&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;19.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BAC&lt;/td&gt;
&lt;td&gt;14.3&lt;/td&gt;
&lt;td&gt;32.9&lt;/td&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;td&gt;14.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MRK&lt;/td&gt;
&lt;td&gt;14.5&lt;/td&gt;
&lt;td&gt;21.4&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;td&gt;10.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JPM&lt;/td&gt;
&lt;td&gt;16.2&lt;/td&gt;
&lt;td&gt;8.9&lt;/td&gt;
&lt;td&gt;2.6&lt;/td&gt;
&lt;td&gt;18.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XOM&lt;/td&gt;
&lt;td&gt;18.0&lt;/td&gt;
&lt;td&gt;21.9&lt;/td&gt;
&lt;td&gt;2.0&lt;/td&gt;
&lt;td&gt;9.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PFE&lt;/td&gt;
&lt;td&gt;18.3&lt;/td&gt;
&lt;td&gt;15.6&lt;/td&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;9.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JNJ&lt;/td&gt;
&lt;td&gt;18.8&lt;/td&gt;
&lt;td&gt;25.5&lt;/td&gt;
&lt;td&gt;6.2&lt;/td&gt;
&lt;td&gt;16.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVX&lt;/td&gt;
&lt;td&gt;23.0&lt;/td&gt;
&lt;td&gt;17.0&lt;/td&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;td&gt;8.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KO&lt;/td&gt;
&lt;td&gt;23.0&lt;/td&gt;
&lt;td&gt;56.9&lt;/td&gt;
&lt;td&gt;9.4&lt;/td&gt;
&lt;td&gt;22.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IBM&lt;/td&gt;
&lt;td&gt;26.5&lt;/td&gt;
&lt;td&gt;24.3&lt;/td&gt;
&lt;td&gt;8.6&lt;/td&gt;
&lt;td&gt;21.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;META&lt;/td&gt;
&lt;td&gt;28.1&lt;/td&gt;
&lt;td&gt;36.8&lt;/td&gt;
&lt;td&gt;7.8&lt;/td&gt;
&lt;td&gt;17.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GOOGL&lt;/td&gt;
&lt;td&gt;29.0&lt;/td&gt;
&lt;td&gt;52.2&lt;/td&gt;
&lt;td&gt;9.2&lt;/td&gt;
&lt;td&gt;25.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MSFT&lt;/td&gt;
&lt;td&gt;35.5&lt;/td&gt;
&lt;td&gt;50.4&lt;/td&gt;
&lt;td&gt;10.5&lt;/td&gt;
&lt;td&gt;22.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AAPL&lt;/td&gt;
&lt;td&gt;36.4&lt;/td&gt;
&lt;td&gt;41.3&lt;/td&gt;
&lt;td&gt;55.3&lt;/td&gt;
&lt;td&gt;28.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WMT&lt;/td&gt;
&lt;td&gt;46.3&lt;/td&gt;
&lt;td&gt;71.1&lt;/td&gt;
&lt;td&gt;9.9&lt;/td&gt;
&lt;td&gt;22.6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The spread is immediately visible. BAC and MRK trade below 15x earnings. WMT trades at 46x. INTC appears at the top of the sort only because its P/E is negative, since the company reported a net loss, which is why sorting by a single metric is dangerous without additional filters.&lt;/p&gt;

&lt;p&gt;A few other readings worth noting. KO trades at 57x free cash flow despite a relatively modest P/E of 23x, suggesting either elevated CapEx or capital structure effects. P/B of 55.3x for AAPL reflects the reality that Apple has bought back so much equity it has almost none left, a reminder that P/B is most useful for asset-heavy sectors like financials and energy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Applying the Filter
&lt;/h2&gt;

&lt;p&gt;A single-metric screen is easy to game by accounting choices, one-time charges, or unusual capital structures. The approach here requires two metrics to pass simultaneously: a P/E below 20x and an EV/EBITDA below 18x, with negative earners excluded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;value_candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;valuation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valuation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valuation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valuation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EV/EBITDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value_candidates&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;['BAC', 'JNJ', 'MRK', 'PFE', 'XOM']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JPM passes the P/E filter but misses on EV/EBITDA at 18.7x, marginally above the threshold. CVX passes on EV/EBITDA (8.9x) but its P/E of 23x falls just outside the cut. Five stocks pass both filters: BAC, JNJ, MRK, PFE, and XOM.&lt;/p&gt;

&lt;p&gt;Note that EV/EBITDA is less meaningful for banks, where the concept of enterprise value and operating earnings work differently from industrial companies. JPM at 16x P/E with a P/FCF of 8.9x deserves separate consideration using bank-specific metrics like price-to-tangible-book and return on equity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: The Quality Overlay
&lt;/h2&gt;

&lt;p&gt;Cheap on valuation is not the same as undervalued. The value trap problem is real: stocks trade at low multiples because investors expect deteriorating earnings, balance sheet stress, or structural decline. Before acting on any of the five candidates, the profitability picture needs to hold up.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;roe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_return_on_equity&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;roic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_return_on_invested_capital&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;gross_margin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;screener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_gross_margin&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;quality&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;roe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROIC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;roic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gross Margin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gross_margin&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;value_candidates&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;ROE&lt;/th&gt;
&lt;th&gt;ROIC&lt;/th&gt;
&lt;th&gt;Gross Margin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BAC&lt;/td&gt;
&lt;td&gt;9.7%&lt;/td&gt;
&lt;td&gt;4.8%&lt;/td&gt;
&lt;td&gt;56.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JNJ&lt;/td&gt;
&lt;td&gt;35.0%&lt;/td&gt;
&lt;td&gt;33.0%&lt;/td&gt;
&lt;td&gt;72.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MRK&lt;/td&gt;
&lt;td&gt;36.9%&lt;/td&gt;
&lt;td&gt;28.1%&lt;/td&gt;
&lt;td&gt;71.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PFE&lt;/td&gt;
&lt;td&gt;8.8%&lt;/td&gt;
&lt;td&gt;11.3%&lt;/td&gt;
&lt;td&gt;70.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XOM&lt;/td&gt;
&lt;td&gt;10.7%&lt;/td&gt;
&lt;td&gt;14.8%&lt;/td&gt;
&lt;td&gt;21.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table separates the field. JNJ and MRK both earn above 28% on invested capital with gross margins above 71%. These are not cheap because the business is deteriorating. They are cheap because pharmaceutical stocks have faced broader sector pressure, patent cliff concerns (MRK), and litigation overhangs (JNJ). The underlying profitability is intact.&lt;/p&gt;

&lt;p&gt;XOM earns 14.8% ROIC, which is solid for an energy company operating with significant fixed asset bases. The thin gross margin of 21.7% reflects the commodity economics of oil refining and distribution rather than a structural weakness. The risk here is cyclical: energy earnings compress when oil prices fall.&lt;/p&gt;

&lt;p&gt;PFE at 11.3% ROIC is borderline. Its gross margin of 70.3% confirms the underlying pharmaceutical business generates strong economics, but the headline return metrics are depressed by the revenue reset after COVID vaccine revenues ran off. Whether this is a genuine recovery opportunity or a prolonged restructuring depends on the pipeline.&lt;/p&gt;

&lt;p&gt;BAC at 4.8% ROIC would look like a disqualifier in an industrial context. For a bank, where assets are funded by deposits rather than equity, ROE of 9.7% is the more relevant metric. That said, it suggests the market's discount is modest rather than an obvious bargain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: The Final Screen
&lt;/h2&gt;

&lt;p&gt;Five stocks passed the dual valuation filter. The last step applies a ROIC threshold to separate the genuine opportunities from those where cheap pricing reflects structurally weak returns on capital.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;final_screen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROIC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROIC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;ROE&lt;/th&gt;
&lt;th&gt;ROIC&lt;/th&gt;
&lt;th&gt;Gross Margin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JNJ&lt;/td&gt;
&lt;td&gt;35.0%&lt;/td&gt;
&lt;td&gt;33.0%&lt;/td&gt;
&lt;td&gt;72.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MRK&lt;/td&gt;
&lt;td&gt;36.9%&lt;/td&gt;
&lt;td&gt;28.1%&lt;/td&gt;
&lt;td&gt;71.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XOM&lt;/td&gt;
&lt;td&gt;10.7%&lt;/td&gt;
&lt;td&gt;14.8%&lt;/td&gt;
&lt;td&gt;21.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PFE&lt;/td&gt;
&lt;td&gt;8.8%&lt;/td&gt;
&lt;td&gt;11.3%&lt;/td&gt;
&lt;td&gt;70.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;BAC falls out at 4.8% ROIC under the industrial threshold, though the banking context warrants separate analysis. The remaining four represent meaningfully different risk profiles.&lt;/p&gt;

&lt;p&gt;JNJ and MRK are the strongest combination of value and quality in this screen. Both earn well above their cost of capital, carry strong franchise positions, and trade at multiples that imply no earnings growth, which is conservative given both have significant product pipelines. XOM offers commodity exposure with decent capital efficiency and a low EV/EBITDA of 9.3x, appropriate for investors comfortable with oil cycle risk. PFE is the speculative recovery candidate: the business model is intact, the discount is real, but the recovery timeline is uncertain.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Screen Does Not Tell You
&lt;/h2&gt;

&lt;p&gt;A quantitative screen narrows the field. It does not do the work.&lt;/p&gt;

&lt;p&gt;Each of these names requires analysis the Toolkit can support but cannot automate: debt maturity profiles, near-term earnings catalysts, management capital allocation track records, and sector-specific risk factors. MRK's patent cliff on Keytruda is a known risk not captured in trailing ROIC. XOM's capital expenditure plans depend heavily on a commodity price path no screen can forecast.&lt;/p&gt;

&lt;p&gt;The output of this screen is a watchlist, not a buy list. What it does efficiently is eliminate the 11 stocks where the combination of price and quality does not justify closer attention.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this with the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"Screen 15 stocks across technology, healthcare, consumer staples, financials, and energy for P/E below 20, EV/EBITDA below 18, and ROIC above 10%. Show the valuation and quality metrics side by side."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;The Finance Toolkit is open-source and available on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The Finance Toolkit MCP server is accessible directly from Claude, Copilot, Cursor, Windsurf, and Gemini for analysis without writing any code.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How Microsoft Has Changed Since Its IPO: 40 Years of Financial Data with the Finance Toolkit</title>
      <dc:creator>Jeroen Bouma</dc:creator>
      <pubDate>Tue, 23 Jun 2026 13:53:00 +0000</pubDate>
      <link>https://dev.to/jerbouma/how-microsoft-has-changed-since-its-ipo-40-years-of-financial-data-with-the-finance-toolkit-21pd</link>
      <guid>https://dev.to/jerbouma/how-microsoft-has-changed-since-its-ipo-40-years-of-financial-data-with-the-finance-toolkit-21pd</guid>
      <description>&lt;p&gt;March 13, 1986. Microsoft went public at $21 per share. Split-adjusted, that works out to roughly $0.08. The stock closed 2025 at $484, making it one of the most remarkable compounding records in market history: a return of more than 5,000x over four decades.&lt;/p&gt;

&lt;p&gt;But the stock price alone obscures something more interesting. The Microsoft that went public in 1986 and the Microsoft that generates $282 billion in annual revenue today are not the same company. The financials show three distinct businesses operating under the same name, each shaped by a different CEO, a different product strategy, and a different relationship with capital. Pulling 40 years of data through the Finance Toolkit makes that transformation visible in a way that no headline number can.&lt;/p&gt;

&lt;p&gt;This article demonstrates using the Finance Toolkit to analyze Microsoft's financial history. It also includes MCP prompts at the end of each section so you can run the same analysis yourself with an AI assistant instead of Python, if you'd rather skip straight to the conversation. &lt;strong&gt;The source code for every calculation is on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The MCP server documentation lives &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/mcp" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Things Up
&lt;/h2&gt;

&lt;p&gt;Start by installing the Finance Toolkit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;financetoolkit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import the library and create a Toolkit instance for Microsoft, specifying the ticker, your FMP API key, and the start date for historical data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MSFT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1986-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your FMP API key at &lt;a href="https://www.jeroenbouma.com/fmp" rel="noopener noreferrer"&gt;jeroenbouma.com/fmp&lt;/a&gt;. The free plan covers five years of history; a paid plan unlocks the full 40-year dataset used here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revenue: Three Very Different Eras
&lt;/h2&gt;

&lt;p&gt;Microsoft's revenue history divides cleanly into three phases, each corresponding to a CEO tenure: Bill Gates (1986-2000), Steve Ballmer (2000-2014), and Satya Nadella (2014-present).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;income_statement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_income_statement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;revenue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;income_statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Net Income&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1986&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1990&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1995&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2005&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Revenue ($B)&lt;/th&gt;
&lt;th&gt;Net Income ($B)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1986&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1990&lt;/td&gt;
&lt;td&gt;1.2&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;5.9&lt;/td&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;23.0&lt;/td&gt;
&lt;td&gt;9.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;39.8&lt;/td&gt;
&lt;td&gt;12.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;62.5&lt;/td&gt;
&lt;td&gt;18.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;93.6&lt;/td&gt;
&lt;td&gt;12.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;143.0&lt;/td&gt;
&lt;td&gt;44.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;281.7&lt;/td&gt;
&lt;td&gt;101.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Gates era was extraordinary by any standard. Revenue grew from $197 million in 1986 to $23 billion in 2000, a 115-fold increase in 14 years driven almost entirely by Windows and Office on the back of the PC revolution. Microsoft was not really a technology company in the modern sense; it was a licensing machine with near-zero cost of reproduction and near-monopoly pricing power.&lt;/p&gt;

&lt;p&gt;The Ballmer era is often described as a lost decade, but that framing is partly unfair. Revenue grew from $23 billion to $87 billion between 2000 and 2014. That is real growth by any measure. What failed was not the business but the valuation. Ballmer inherited Microsoft at the height of the dot-com bubble, when the market was pricing in decades of compounding at rates no company could sustain. The stock went roughly nowhere for 14 years not because the business stagnated, but because the starting price was simply too high.&lt;/p&gt;

&lt;p&gt;The 2015 net income of $12.2 billion against $93.6 billion in revenue reflects Nadella's first full year, when Microsoft took a $7.5 billion write-down on the Nokia acquisition (&lt;a href="https://en.wikipedia.org/wiki/List_of_mergers_and_acquisitions_by_Microsoft" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;). Strip that out and the underlying business was already accelerating. By 2020, net income had grown to $44 billion. By 2025 it reached $102 billion, a number that would have seemed absurd when Nadella took over.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this in the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"Show me Microsoft's annual revenue from 1986 to 2025, and identify the three distinct growth phases under Gates, Ballmer, and Nadella."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Profitability: Margins That Compress, Then Recover
&lt;/h2&gt;

&lt;p&gt;The revenue story is straightforward. The margin story is more nuanced.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ratios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect_profitability_ratios&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;margins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gross Margin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Net Profit Margin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1990&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1995&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2005&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Gross Margin&lt;/th&gt;
&lt;th&gt;Net Margin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1990&lt;/td&gt;
&lt;td&gt;82.6%&lt;/td&gt;
&lt;td&gt;23.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;89.8%&lt;/td&gt;
&lt;td&gt;24.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;86.9%&lt;/td&gt;
&lt;td&gt;41.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;84.8%&lt;/td&gt;
&lt;td&gt;30.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;80.2%&lt;/td&gt;
&lt;td&gt;30.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;64.7%&lt;/td&gt;
&lt;td&gt;13.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;67.8%&lt;/td&gt;
&lt;td&gt;31.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;68.8%&lt;/td&gt;
&lt;td&gt;36.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gross margins peaked near 90% in the mid-1990s, reflecting what pure software economics look like. Distributing a copy of Windows cost almost nothing once the disc was pressed. As Microsoft expanded into hardware (Xbox, Surface), services, and cloud infrastructure, the cost structure changed. Azure compute costs real money to run. So does gaming content, data center operations, and technical support at enterprise scale. By 2015, gross margins had compressed to 64.7%.&lt;/p&gt;

&lt;p&gt;That compression has largely stabilized. Azure's gross margin has improved as the infrastructure matures and higher-margin software services (Azure AI, Microsoft 365, Copilot) grow as a share of the mix. The more important metric is net margin, which tells a different story: it has recovered to 36.2% in 2025, approaching the levels Microsoft achieved at the peak of its software monopoly in 2000. The 2015 net margin of 13% is an outlier caused by the Nokia write-down, not a structural deterioration.&lt;/p&gt;

&lt;p&gt;The reason for the recovery is operating leverage. Revenue nearly tripled from 2015 to 2025, but operating expenses did not. Each additional dollar of cloud or subscription revenue drops to the bottom line at an increasingly favorable rate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this in the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"What were Microsoft's gross margin and net profit margin at five-year intervals from 1990 to 2025? Highlight where margins compressed and where they recovered."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Balance Sheet Tells a Story by Decade
&lt;/h2&gt;

&lt;p&gt;Early Microsoft had no debt. None. The business generated more cash than it could spend, and management had no desire to lever up. For most of the Gates era and the first half of the Ballmer era, the balance sheet was a cash accumulation machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;balance_sheet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_balance_sheet_statement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;snapshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance_sheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cash and Short Term Investments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Long Term Debt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Goodwill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1995&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2005&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Cash + Investments ($B)&lt;/th&gt;
&lt;th&gt;Long-Term Debt ($B)&lt;/th&gt;
&lt;th&gt;Goodwill ($B)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;2.0&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;23.8&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;37.8&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;36.8&lt;/td&gt;
&lt;td&gt;4.9&lt;/td&gt;
&lt;td&gt;12.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;96.5&lt;/td&gt;
&lt;td&gt;27.8&lt;/td&gt;
&lt;td&gt;16.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;136.5&lt;/td&gt;
&lt;td&gt;59.6&lt;/td&gt;
&lt;td&gt;43.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;94.6&lt;/td&gt;
&lt;td&gt;40.2&lt;/td&gt;
&lt;td&gt;119.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The first debt appeared in 2009, not because Microsoft needed the money, but because borrowing at low rates to fund buybacks was more tax-efficient than repatriating overseas cash. By 2020, cash and investments had reached $136 billion while long-term debt stood at $60 billion. The net position was still comfortably positive, but the capital structure had become more aggressive.&lt;/p&gt;

&lt;p&gt;The most striking shift is goodwill. It was zero for most of Microsoft's history because the company built rather than bought. That changed under Ballmer with acquisitions like aQuantive and Skype, and accelerated dramatically under Nadella. LinkedIn ($26 billion, 2016), GitHub ($7.5 billion, 2018), Nuance ($19 billion, 2022), and Activision Blizzard ($69 billion, 2023) turned Microsoft into one of the most acquisitive companies in tech (&lt;a href="https://en.wikipedia.org/wiki/List_of_mergers_and_acquisitions_by_Microsoft" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;). Goodwill reached $119.5 billion in 2025.&lt;/p&gt;

&lt;p&gt;The cash balance fell from $136 billion in 2020 to $94.6 billion in 2025, largely because of Activision. Long-term debt has declined from its peak of $66.7 billion in 2019 to $40.2 billion in 2025 as Microsoft pays down the acquisition-related borrowing, a sign that the balance sheet is normalising after the deal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free Cash Flow: The Number That Matters Most
&lt;/h2&gt;

&lt;p&gt;Revenue and earnings can be managed. Free cash flow is harder to fake. It is also the number that ultimately determines what a company is worth. Not the earnings per share, not the operating income, but the actual cash that flows out of the business after maintaining and expanding the asset base.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cash_flow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_cash_flow_statement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;fcf_table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cash_flow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Operating Cash Flow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Capital Expenditure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free Cash Flow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1995&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2005&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Operating Cash Flow ($B)&lt;/th&gt;
&lt;th&gt;CapEx ($B)&lt;/th&gt;
&lt;th&gt;Free Cash Flow ($B)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;2.0&lt;/td&gt;
&lt;td&gt;-0.5&lt;/td&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;11.4&lt;/td&gt;
&lt;td&gt;-0.9&lt;/td&gt;
&lt;td&gt;10.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;16.6&lt;/td&gt;
&lt;td&gt;-0.8&lt;/td&gt;
&lt;td&gt;15.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;24.1&lt;/td&gt;
&lt;td&gt;-2.0&lt;/td&gt;
&lt;td&gt;22.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;29.7&lt;/td&gt;
&lt;td&gt;-5.9&lt;/td&gt;
&lt;td&gt;23.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;60.7&lt;/td&gt;
&lt;td&gt;-15.4&lt;/td&gt;
&lt;td&gt;45.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;136.2&lt;/td&gt;
&lt;td&gt;-64.6&lt;/td&gt;
&lt;td&gt;71.6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Microsoft generated $71.6 billion in free cash flow in fiscal 2025, more than the entire annual revenue of companies like Netflix or Airbnb. It is the product of two converging forces: subscription and consumption revenue that scales without proportional cost increases, and a customer base that has locked itself into the Microsoft ecosystem so deeply that churn is structurally low.&lt;/p&gt;

&lt;p&gt;There is a caveat embedded in those numbers. Capital expenditure has increased from $5.9 billion in 2015 to $64.6 billion in 2025, the vast majority of it AI infrastructure. Microsoft is making an enormous bet on data center capacity to support Azure AI and Copilot services. Whether that $65 billion in annual CapEx generates returns commensurate with its cost will be the defining capital allocation question of the next five years. For now, operating cash flow has grown fast enough to absorb it, but the ratio of FCF to operating cash flow has compressed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this in the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"What was Microsoft's free cash flow in 2015 and 2025? Show the operating cash flow and capital expenditure over time."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Return on Equity: What Buybacks and Leverage Changed
&lt;/h2&gt;

&lt;p&gt;Return on equity sounds like a clean measure of profitability, but it is not always clean. ROE depends on the size of the equity base, which Microsoft has spent the last 15 years shrinking through aggressive buybacks and debt-funded capital return. A company can raise its ROE by buying back enough shares to reduce equity even if underlying profitability does not improve.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;profitability_ratios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect_profitability_ratios&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;profitability_ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return on Equity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return on Assets&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return on Invested Capital&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1990&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1995&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2010&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;ROE&lt;/th&gt;
&lt;th&gt;ROA&lt;/th&gt;
&lt;th&gt;ROIC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1990&lt;/td&gt;
&lt;td&gt;37.7%&lt;/td&gt;
&lt;td&gt;30.6%&lt;/td&gt;
&lt;td&gt;36.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1995&lt;/td&gt;
&lt;td&gt;29.3%&lt;/td&gt;
&lt;td&gt;23.1%&lt;/td&gt;
&lt;td&gt;29.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;27.0%&lt;/td&gt;
&lt;td&gt;20.7%&lt;/td&gt;
&lt;td&gt;27.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;43.8%&lt;/td&gt;
&lt;td&gt;22.9%&lt;/td&gt;
&lt;td&gt;47.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;14.4%&lt;/td&gt;
&lt;td&gt;7.0%&lt;/td&gt;
&lt;td&gt;19.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;40.1%&lt;/td&gt;
&lt;td&gt;15.1%&lt;/td&gt;
&lt;td&gt;30.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;33.3%&lt;/td&gt;
&lt;td&gt;18.0%&lt;/td&gt;
&lt;td&gt;30.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The early Microsoft numbers are a reminder of what a capital-light monopoly looks like. ROE of 38% in 1990 with zero debt and no buybacks means the underlying business was genuinely that profitable. Those returns compressed through the 2000s as the business mix changed and the equity base remained large.&lt;/p&gt;

&lt;p&gt;The 2015 figures are distorted by the Nokia write-down, which depressed net income and inflated the apparent collapse in ROA and ROE. By 2020 ROE had rebounded to 40%, though this partly reflects the equity base shrinking from buybacks rather than purely improved profitability. ROIC strips out the effects of capital structure and tells a cleaner story: Microsoft earns roughly 30-31% on invested capital today, which is very good but not dramatically different from what it earned in the 1990s. The business quality has been maintained; what changed is how the returns are distributed to shareholders.&lt;/p&gt;

&lt;p&gt;Return on assets paints a similar picture. ROA of 18% in 2025 reflects that Microsoft now carries a much heavier asset base of cloud infrastructure, acquisitions, and data centers than the software company of the 1990s. The high-30s ROA of the Gates era is gone, but 18% is a strong number for a company of this size and scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;Forty years of operating history tell you what Microsoft has been. Valuation multiples tell you what the market thinks it will be. The tables below show where Microsoft's key ratios and risk-adjusted performance metrics have stood over the past six years, alongside the Alpha and Beta figures that put the stock's behaviour in market context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;valuation_ratios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect_valuation_ratios&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;current_valuation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;valuation_ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price-to-Earnings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price-to-Book&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price-to-Free-Cash-Flow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EV-to-EBITDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2021&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2023&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2024&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;performance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect_all_metrics&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;alpha_beta_performance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2021&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2022&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2023&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2024&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Beta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alpha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;2020&lt;/th&gt;
&lt;th&gt;2021&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2023&lt;/th&gt;
&lt;th&gt;2024&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P/E&lt;/td&gt;
&lt;td&gt;38.6&lt;/td&gt;
&lt;td&gt;41.8&lt;/td&gt;
&lt;td&gt;24.9&lt;/td&gt;
&lt;td&gt;38.8&lt;/td&gt;
&lt;td&gt;35.7&lt;/td&gt;
&lt;td&gt;35.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P/B&lt;/td&gt;
&lt;td&gt;14.4&lt;/td&gt;
&lt;td&gt;18.0&lt;/td&gt;
&lt;td&gt;10.9&lt;/td&gt;
&lt;td&gt;13.6&lt;/td&gt;
&lt;td&gt;11.7&lt;/td&gt;
&lt;td&gt;10.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P/FCF&lt;/td&gt;
&lt;td&gt;37.8&lt;/td&gt;
&lt;td&gt;45.6&lt;/td&gt;
&lt;td&gt;27.8&lt;/td&gt;
&lt;td&gt;47.2&lt;/td&gt;
&lt;td&gt;42.5&lt;/td&gt;
&lt;td&gt;50.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EV/EBITDA&lt;/td&gt;
&lt;td&gt;27.0&lt;/td&gt;
&lt;td&gt;32.2&lt;/td&gt;
&lt;td&gt;19.1&lt;/td&gt;
&lt;td&gt;27.9&lt;/td&gt;
&lt;td&gt;24.5&lt;/td&gt;
&lt;td&gt;22.7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;2020&lt;/th&gt;
&lt;th&gt;2021&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2023&lt;/th&gt;
&lt;th&gt;2024&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Beta&lt;/td&gt;
&lt;td&gt;1.14&lt;/td&gt;
&lt;td&gt;1.15&lt;/td&gt;
&lt;td&gt;1.28&lt;/td&gt;
&lt;td&gt;1.16&lt;/td&gt;
&lt;td&gt;1.19&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpha&lt;/td&gt;
&lt;td&gt;+0.25&lt;/td&gt;
&lt;td&gt;+0.24&lt;/td&gt;
&lt;td&gt;-0.09&lt;/td&gt;
&lt;td&gt;+0.33&lt;/td&gt;
&lt;td&gt;-0.11&lt;/td&gt;
&lt;td&gt;-0.02&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At 35x earnings and 50x free cash flow, Microsoft is priced for sustained growth. The P/FCF ratio in particular looks stretched on the surface, but it needs to be read alongside the elevated CapEx. Microsoft spent $64.6 billion on capital expenditure in fiscal 2025, the vast majority of it on AI infrastructure. If that investment generates meaningful Azure revenue growth over the next three to five years, the normalized FCF picture is more attractive than the headline ratio suggests. If it does not, the multiple will prove optimistic.&lt;/p&gt;

&lt;p&gt;Beta declining to 0.88 in 2025 is notable. For most of the Nadella era, Microsoft moved in line with or slightly above the broader market. A beta below 1 suggests the market increasingly treats it as a defensive-quality holding: a large, profitable, cash-generative business that belongs in portfolios regardless of the macro environment.&lt;/p&gt;

&lt;p&gt;Alpha has been positive in most years, notably +0.33 in 2023 when Microsoft's AI positioning drove a 57% stock return against the S&amp;amp;P 500's 26%. The negative alpha in 2022 and 2024 reflects years when the market rotated toward other sectors, not fundamental deterioration. The business compounded steadily throughout.&lt;/p&gt;

&lt;p&gt;What to watch over the next few years: the pace of Azure growth (which funds everything else), margin expansion as the AI CapEx cycle matures, and whether Activision contributes enough to earnings to justify the $69 billion price tag. The financial track record over 40 years gives Microsoft the benefit of the doubt. But at these valuations, the margin for error is narrower than it has been at any point in the company's history outside the dot-com peak.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try this in the Finance Toolkit MCP:&lt;/strong&gt; &lt;em&gt;"Pull Microsoft's current valuation ratios and its yearly Beta and Alpha since 2020. Is the market pricing it as a growth stock or a defensive one right now?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;The Finance Toolkit is open-source and available on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The Finance Toolkit MCP server is accessible directly from Claude, Copilot, Cursor, Windsurf, and Gemini for analysis without writing any code.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Access 200+ Financial Metrics with the Finance Toolkit (Python Library + MCP Server)</title>
      <dc:creator>Jeroen Bouma</dc:creator>
      <pubDate>Tue, 16 Jun 2026 13:28:00 +0000</pubDate>
      <link>https://dev.to/jerbouma/access-200-financial-metrics-with-the-finance-toolkit-python-library-mcp-server-3m4c</link>
      <guid>https://dev.to/jerbouma/access-200-financial-metrics-with-the-finance-toolkit-python-library-mcp-server-3m4c</guid>
      <description>&lt;p&gt;On the 6th of May, 2023, Microsoft's Price-to-Earnings ratio was reported as 28.93 by Stockopedia, 32.05 by Morningstar, 32.66 by Macrotrends, 33.67 by the Wall Street Journal, and 34.4 by Companies Market Cap. Every one of those numbers is "correct." They just use different definitions of earnings, different share counts, and different rounding. None of the providers publish the formula, so there is no way to know which one matches the calculation you actually want.&lt;/p&gt;

&lt;p&gt;That inconsistency is why I built the Finance Toolkit: an open-source Python library where every ratio, indicator, and model is implemented in plain, readable code you can audit yourself. It covers 200+ metrics across equities, options, currencies, crypto, ETFs, indices, and macroeconomic data going back over a century, all sourced from 30+ years of financial statements. On top of the library sits an MCP server that exposes the same 200+ metrics to any AI assistant that supports the Model Context Protocol, so you (or your assistant) never have to choose between writing Python and asking a question in plain English.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The source code for every calculation is on &lt;a href="https://github.com/JerBouma/FinanceToolkit" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. The MCP server documentation lives &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/mcp" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Things Up
&lt;/h2&gt;

&lt;p&gt;The Python library and the MCP server are the same engine with two different front doors. Start with the Python side, since understanding it makes the MCP tool calls easier to reason about later.&lt;/p&gt;

&lt;p&gt;Start by installing the Finance Toolkit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;financetoolkit &lt;span class="nt"&gt;-U&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import the library and create a Toolkit instance. Each section below swaps in a different ticker universe, since the point is showing the breadth of what one consistent API can pull, but the syntax never changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;companies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MSFT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your FMP API key at &lt;a href="https://www.jeroenbouma.com/fmp" rel="noopener noreferrer"&gt;jeroenbouma.com/fmp&lt;/a&gt;. The free plan covers five years of history and 250 requests a day; a paid plan unlocks the full 30+ years and quarterly data, at a 15% discount through that (affiliate) link. I do provide means to provide your own data as well, see &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/external-datasets" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Code to Conversation: the MCP Server
&lt;/h2&gt;

&lt;p&gt;Writing Python is not always the fastest way to get an answer, and getting an AI assistant to reason accurately over financial data by itself usually falls short: web search is unreliable, scraped data is inconsistent across sources (see the PE example above), and models hallucinate numbers when they cannot find them. The Finance Toolkit MCP server fixes this by giving any MCP-compatible assistant direct, structured access to the same 200+ metrics, backed by the transparent calculation methods in the library.&lt;/p&gt;

&lt;p&gt;You do not need a local Python environment to use it. A single command configures your AI client automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx &lt;span class="nt"&gt;--from&lt;/span&gt; &lt;span class="s2"&gt;"financetoolkit[mcp]"&lt;/span&gt; financetoolkit-mcp-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This supports Claude Desktop, Claude Code, GitHub Copilot in VS Code, Cursor, Windsurf, and Gemini. If you use Claude Desktop specifically, there is also a one-click MCPB bundle on the &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/mcp#claude-desktop" rel="noopener noreferrer"&gt;latest GitHub release&lt;/a&gt; that skips the terminal entirely. Either way, you will be asked for the same FMP API key used above, and the free plan is enough to get started.&lt;/p&gt;

&lt;p&gt;Once it is running, the server groups the 200+ Finance Toolkit methods into about 21 categorical tools. You never name a function or set a parameter yourself; the assistant picks the right tool from your question and returns structured output. The depth of interpretation scales with the model: Claude Sonnet layers in qualitative reasoning on top of the numbers, while smaller models like GPT-5 mini return clean structured data without the narrative. Both work, since the server is built to support either.&lt;/p&gt;

&lt;p&gt;Within Claude Desktop, it will look like below once setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0o5322rfem76oub01l5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0o5322rfem76oub01l5.png" alt="Once everything is setup, you should see the Finance Toolkit as one of the available connectors." width="799" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Equity Analysis: Margins, Returns, and Multiples Side by Side
&lt;/h2&gt;

&lt;p&gt;The Finance Toolkit was built with equity research first, which is why this is the deepest category: profitability, valuation, efficiency, liquidity, and solvency ratios, plus models like WACC, DuPont decomposition, the Altman Z-Score, and the Piotroski F-Score. A good stress test for any of these is an industry where growth rates differ wildly between names that are nominally in the same business: semiconductors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;chips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ASML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TSM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AVGO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QCOM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TXN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMAT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2015-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cumulative_return&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_historical_data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;pe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_price_to_earnings_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ev_ebitda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_ev_to_ebitda_ratio&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;eps_growth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_earnings_per_share&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;growth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;revenue_per_share&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chips&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_revenue_per_share&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;Cumulative Return (2015-2025)&lt;/th&gt;
&lt;th&gt;P/E (2025)&lt;/th&gt;
&lt;th&gt;EV/EBITDA (2025)&lt;/th&gt;
&lt;th&gt;EPS Growth (2025)&lt;/th&gt;
&lt;th&gt;Revenue/Share (2025)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NVDA&lt;/td&gt;
&lt;td&gt;+42,215%&lt;/td&gt;
&lt;td&gt;63.5x&lt;/td&gt;
&lt;td&gt;55.5x&lt;/td&gt;
&lt;td&gt;+146.2%&lt;/td&gt;
&lt;td&gt;$5.26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;+20,344%&lt;/td&gt;
&lt;td&gt;80.8x&lt;/td&gt;
&lt;td&gt;52.2x&lt;/td&gt;
&lt;td&gt;+164.3%&lt;/td&gt;
&lt;td&gt;$21.17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AVGO&lt;/td&gt;
&lt;td&gt;+3,935%&lt;/td&gt;
&lt;td&gt;72.6x&lt;/td&gt;
&lt;td&gt;50.5x&lt;/td&gt;
&lt;td&gt;+286.2%&lt;/td&gt;
&lt;td&gt;$13.16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMAT&lt;/td&gt;
&lt;td&gt;+2,347%&lt;/td&gt;
&lt;td&gt;29.7x&lt;/td&gt;
&lt;td&gt;23.8x&lt;/td&gt;
&lt;td&gt;+0.6%&lt;/td&gt;
&lt;td&gt;$35.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TSM&lt;/td&gt;
&lt;td&gt;+1,981%&lt;/td&gt;
&lt;td&gt;28.4x&lt;/td&gt;
&lt;td&gt;18.0x&lt;/td&gt;
&lt;td&gt;+57.2%&lt;/td&gt;
&lt;td&gt;$23.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ASML&lt;/td&gt;
&lt;td&gt;+1,762%&lt;/td&gt;
&lt;td&gt;36.9x&lt;/td&gt;
&lt;td&gt;28.0x&lt;/td&gt;
&lt;td&gt;+45.0%&lt;/td&gt;
&lt;td&gt;$98.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QCOM&lt;/td&gt;
&lt;td&gt;+297%&lt;/td&gt;
&lt;td&gt;34.1x&lt;/td&gt;
&lt;td&gt;14.2x&lt;/td&gt;
&lt;td&gt;-44.1%&lt;/td&gt;
&lt;td&gt;$40.08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TXN&lt;/td&gt;
&lt;td&gt;+585%&lt;/td&gt;
&lt;td&gt;31.9x&lt;/td&gt;
&lt;td&gt;21.3x&lt;/td&gt;
&lt;td&gt;+4.8%&lt;/td&gt;
&lt;td&gt;$19.37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INTC&lt;/td&gt;
&lt;td&gt;+352%&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;19.1x&lt;/td&gt;
&lt;td&gt;-98.75%&lt;/td&gt;
&lt;td&gt;$10.88&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The dispersion inside one industry is the whole story here: NVDA turned a 2015 position into roughly 421 times its starting value, while INTC is (compared to NVDA) essentially flat a decade later, its P/E reported as negative because it posted a net loss and its EPS collapsing 98.75% in 2025 alone. AVGO's EPS growth of 286.2% outpaces even NVDA, reflecting the VMware acquisition layered on top of its AI networking business rather than organic chip sales growth, worth separating out before reading too much into the headline number. ASML trades at the richest EV/EBITDA multiple in the group (28.0x) despite the slowest revenue-per-share base of the bunch in absolute growth terms, a premium the market assigns to its effective monopoly on the EUV lithography machines every leading-edge fab depends on.&lt;/p&gt;

&lt;p&gt;A call with the Finance Toolkit MCP would return an answer such as below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbwucatw62srxqu3qc3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbwucatw62srxqu3qc3v.png" alt="Semiconductors went from a cyclical industrial sector to the backbone of AI infrastructure over the last decade and the market priced that transition in full. NVDA and AMD returned over 150x since 2015 while the S&amp;amp;P 500 compounded quietly at the bottom of the same chart." width="800" height="998"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Analysis: Is the Market Overbought?
&lt;/h2&gt;

&lt;p&gt;Technical indicators work off OHLC price data, so they apply to any asset class the Toolkit supports, not just equities. RSI, MACD, the Stochastic Oscillator, and Bollinger Bands are all available, grouped under categories like momentum, volatility, and overlap. The clearest stress test for a momentum indicator is a market shock, so this one looks at European sector ETFs through the 2020 Corona crash and the year that followed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;sectors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXV9.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXV1.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXV4.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXI5.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXV3.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXH9.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EXH1.DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2019-11-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sectors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;technicals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_relative_strength_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monthly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are iShares STOXX Europe 600 sector UCITS ETFs: EXV9.DE (Travel &amp;amp; Leisure), EXV1.DE (Banks), EXV4.DE (Health Care), EXI5.DE (Real Estate), EXV3.DE (Technology), EXH9.DE (Utilities), and EXH1.DE (Oil &amp;amp; Gas).&lt;/p&gt;

&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Travel &amp;amp; Leisure&lt;/th&gt;
&lt;th&gt;Banks&lt;/th&gt;
&lt;th&gt;Health Care&lt;/th&gt;
&lt;th&gt;Real Estate&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Utilities&lt;/th&gt;
&lt;th&gt;Oil &amp;amp; Gas&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2019-12&lt;/td&gt;
&lt;td&gt;63.3&lt;/td&gt;
&lt;td&gt;51.4&lt;/td&gt;
&lt;td&gt;77.0&lt;/td&gt;
&lt;td&gt;70.4&lt;/td&gt;
&lt;td&gt;72.7&lt;/td&gt;
&lt;td&gt;89.7&lt;/td&gt;
&lt;td&gt;51.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020-03&lt;/td&gt;
&lt;td&gt;26.9&lt;/td&gt;
&lt;td&gt;31.9&lt;/td&gt;
&lt;td&gt;65.9&lt;/td&gt;
&lt;td&gt;36.2&lt;/td&gt;
&lt;td&gt;53.2&lt;/td&gt;
&lt;td&gt;51.9&lt;/td&gt;
&lt;td&gt;26.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020-06&lt;/td&gt;
&lt;td&gt;30.2&lt;/td&gt;
&lt;td&gt;26.2&lt;/td&gt;
&lt;td&gt;70.2&lt;/td&gt;
&lt;td&gt;39.5&lt;/td&gt;
&lt;td&gt;59.1&lt;/td&gt;
&lt;td&gt;59.9&lt;/td&gt;
&lt;td&gt;21.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020-09&lt;/td&gt;
&lt;td&gt;34.9&lt;/td&gt;
&lt;td&gt;28.9&lt;/td&gt;
&lt;td&gt;61.5&lt;/td&gt;
&lt;td&gt;44.0&lt;/td&gt;
&lt;td&gt;61.6&lt;/td&gt;
&lt;td&gt;57.6&lt;/td&gt;
&lt;td&gt;19.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2021-01&lt;/td&gt;
&lt;td&gt;40.7&lt;/td&gt;
&lt;td&gt;35.4&lt;/td&gt;
&lt;td&gt;48.4&lt;/td&gt;
&lt;td&gt;40.7&lt;/td&gt;
&lt;td&gt;61.0&lt;/td&gt;
&lt;td&gt;57.9&lt;/td&gt;
&lt;td&gt;34.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2021-05&lt;/td&gt;
&lt;td&gt;77.0&lt;/td&gt;
&lt;td&gt;79.0&lt;/td&gt;
&lt;td&gt;63.3&lt;/td&gt;
&lt;td&gt;75.3&lt;/td&gt;
&lt;td&gt;80.9&lt;/td&gt;
&lt;td&gt;71.2&lt;/td&gt;
&lt;td&gt;61.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2021-12&lt;/td&gt;
&lt;td&gt;61.7&lt;/td&gt;
&lt;td&gt;79.5&lt;/td&gt;
&lt;td&gt;79.1&lt;/td&gt;
&lt;td&gt;74.5&lt;/td&gt;
&lt;td&gt;83.3&lt;/td&gt;
&lt;td&gt;65.9&lt;/td&gt;
&lt;td&gt;76.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Oil &amp;amp; Gas was the most oversold sector of the whole crisis, bottoming at an RSI of 19.3 in September 2020, well past the typical oversold line of 30, and it stayed depressed there for most of the year as travel demand collapse fed straight through to fuel demand. Banks were close behind, troughing at 26.2 in June 2020 and not climbing back above the 40 mark until November, longer than any other sector here took to recover. Health Care and Technology never came close to oversold even at the worst of the March 2020 crash, with RSI bottoming at 65.9 and 53.2 respectively, the closest thing to a flight-to-quality signal in this dataset.&lt;/p&gt;

&lt;p&gt;The more striking part is the reversal. The same two sectors that bottomed hardest, Oil &amp;amp; Gas and Banks, both closed 2021 deep in overbought territory at 76.3 and 79.5, a swing of roughly 50 to 60 RSI points in eighteen months. That is the kind of regime change a single point-in-time RSI reading would never catch; it only shows up when you pull the full series.&lt;/p&gt;

&lt;p&gt;A call with the Finance Toolkit MCP is showing what I mean:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef2dxd12heokum126nsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef2dxd12heokum126nsl.png" alt="The COVID crash was swift but uneven. Airlines collapsed into extreme oversold territory with RSI hitting 22 in April 2020. Alevel that signals panic selling, not fundamental repricing. Technology barely dipped. Oil &amp;amp; Gas, untouched by the initial shock, swung to RSI 91 a year later as the energy cycle turned." width="800" height="1012"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Risk and Performance: What the Fama-French Factors Reveal About South American Stocks
&lt;/h2&gt;

&lt;p&gt;Beta and alpha alone treat "the market" as the only systematic risk that matters. The Fama-French five-factor model goes further, decomposing returns into exposure to the market (Mkt-RF), company size (SMB), value versus growth (HML), profitability (RMW), and investment intensity (CMA), plus an R-squared that tells you how much of the return that combination actually explains. South American equities are a good test case, since they mix commodity exporters, banks, and a tech name that behaves nothing like the rest of the region.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Toolkit&lt;/span&gt;

&lt;span class="n"&gt;south_america&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Toolkit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PBR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YPF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VALE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SCCO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ITUB&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CIB&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MELI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GGB&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2021-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fama_french&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;south_america&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;performance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_fama_and_french_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yearly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns, for 2025:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;Mkt-RF&lt;/th&gt;
&lt;th&gt;SMB&lt;/th&gt;
&lt;th&gt;HML&lt;/th&gt;
&lt;th&gt;RMW&lt;/th&gt;
&lt;th&gt;CMA&lt;/th&gt;
&lt;th&gt;R²&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ITUB (Itau, bank)&lt;/td&gt;
&lt;td&gt;0.0167&lt;/td&gt;
&lt;td&gt;-0.0023&lt;/td&gt;
&lt;td&gt;-0.0071&lt;/td&gt;
&lt;td&gt;-0.0116&lt;/td&gt;
&lt;td&gt;-0.0051&lt;/td&gt;
&lt;td&gt;0.683&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCCO (Southern Copper, mining)&lt;/td&gt;
&lt;td&gt;0.0146&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;td&gt;-0.0047&lt;/td&gt;
&lt;td&gt;-0.0117&lt;/td&gt;
&lt;td&gt;-0.0033&lt;/td&gt;
&lt;td&gt;0.529&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VALE (Vale, mining)&lt;/td&gt;
&lt;td&gt;0.0118&lt;/td&gt;
&lt;td&gt;0.0042&lt;/td&gt;
&lt;td&gt;-0.0086&lt;/td&gt;
&lt;td&gt;0.0032&lt;/td&gt;
&lt;td&gt;-0.0103&lt;/td&gt;
&lt;td&gt;0.511&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CIB (Bancolombia, bank)&lt;/td&gt;
&lt;td&gt;0.0109&lt;/td&gt;
&lt;td&gt;-0.0029&lt;/td&gt;
&lt;td&gt;0.0024&lt;/td&gt;
&lt;td&gt;-0.0107&lt;/td&gt;
&lt;td&gt;-0.0101&lt;/td&gt;
&lt;td&gt;0.340&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MELI (MercadoLibre, e-commerce)&lt;/td&gt;
&lt;td&gt;0.0087&lt;/td&gt;
&lt;td&gt;-0.0001&lt;/td&gt;
&lt;td&gt;-0.0005&lt;/td&gt;
&lt;td&gt;-0.0023&lt;/td&gt;
&lt;td&gt;-0.0049&lt;/td&gt;
&lt;td&gt;0.122&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YPF (YPF, energy)&lt;/td&gt;
&lt;td&gt;0.0067&lt;/td&gt;
&lt;td&gt;0.0023&lt;/td&gt;
&lt;td&gt;-0.0027&lt;/td&gt;
&lt;td&gt;-0.0041&lt;/td&gt;
&lt;td&gt;-0.0008&lt;/td&gt;
&lt;td&gt;0.192&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GGB (Gerdau, steel)&lt;/td&gt;
&lt;td&gt;0.0063&lt;/td&gt;
&lt;td&gt;-0.0029&lt;/td&gt;
&lt;td&gt;-0.0014&lt;/td&gt;
&lt;td&gt;-0.0110&lt;/td&gt;
&lt;td&gt;-0.0009&lt;/td&gt;
&lt;td&gt;0.276&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PBR (Petrobras, energy)&lt;/td&gt;
&lt;td&gt;0.0057&lt;/td&gt;
&lt;td&gt;-0.0017&lt;/td&gt;
&lt;td&gt;0.0002&lt;/td&gt;
&lt;td&gt;-0.0037&lt;/td&gt;
&lt;td&gt;0.0009&lt;/td&gt;
&lt;td&gt;0.169&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The R-squared column is the most useful read here, since it tells you how reliable the rest of the row is. ITUB's 2025 regression explains 68.3% of its return variance through these five factors, the highest in the group and typical of a large, liquid bank whose returns track broad risk factors closely. MELI sits at the other extreme: only 12.2% of its return is explained by the model, which fits a company whose price action is driven far more by idiosyncratic growth narrative and earnings surprises than by size, value, or investment-style exposures.&lt;/p&gt;

&lt;p&gt;That gap widens when you look at the trend across years rather than a single snapshot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ticker&lt;/th&gt;
&lt;th&gt;2021&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2023&lt;/th&gt;
&lt;th&gt;2024&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MELI R²&lt;/td&gt;
&lt;td&gt;0.619&lt;/td&gt;
&lt;td&gt;0.347&lt;/td&gt;
&lt;td&gt;0.213&lt;/td&gt;
&lt;td&gt;0.334&lt;/td&gt;
&lt;td&gt;0.122&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VALE R²&lt;/td&gt;
&lt;td&gt;0.131&lt;/td&gt;
&lt;td&gt;0.196&lt;/td&gt;
&lt;td&gt;0.408&lt;/td&gt;
&lt;td&gt;0.489&lt;/td&gt;
&lt;td&gt;0.511&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCCO R²&lt;/td&gt;
&lt;td&gt;0.149&lt;/td&gt;
&lt;td&gt;0.288&lt;/td&gt;
&lt;td&gt;0.299&lt;/td&gt;
&lt;td&gt;0.471&lt;/td&gt;
&lt;td&gt;0.529&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MELI's R-squared has fallen almost every year since 2021, from 0.619 to 0.122, meaning the five-factor model explains less and less of its return over time as the stock has decoupled further from traditional risk factors. VALE and SCCO show the opposite pattern, with explanatory power roughly tripling over the same five years as both mining names became more tightly linked to broad market and value-style risk during the commodity cycle. None of that shows up in a beta or alpha calculation alone, which is the case for running the full factor model instead of stopping at single-factor CAPM.&lt;/p&gt;

&lt;p&gt;A call with the Finance Toolkit MCP would return an answer such as below. Note that the LLM picked a different timeframe which is why there is a mismatch between these results and the table above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcpyhbr1gwkezepzvss0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcpyhbr1gwkezepzvss0.png" alt="The Fama-French 5-factor model decomposes stock returns into market beta, size, value, profitability, and investment exposure. Applied to South American industries, it reveals that MercadoLibre behaves more like a US growth stock than a Latin American consumer play while energy names like Petrobras and YPF are primarily market-beta bets with a secondary value tilt." width="800" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Macroeconomic Analysis: Tracking Asia's Growth Engines
&lt;/h2&gt;

&lt;p&gt;Macroeconomic data goes back over a century and covers 60+ countries: unemployment, GDP growth, inflation, trade balances, government debt, central bank rates, and government bond yields, sourced from the &lt;a href="https://www.oecd.org/en/data/indicators.html?orderBy=mostRelevant&amp;amp;page=0&amp;amp;facetTags=oecd-languages%3Aen" rel="noopener noreferrer"&gt;OECD&lt;/a&gt; and the &lt;a href="https://www.globalmacrodata.com/" rel="noopener noreferrer"&gt;Global Macro Database&lt;/a&gt;. It is available through the &lt;code&gt;economics&lt;/code&gt; module on a Toolkit instance, or as a fully standalone module if you only need macro data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;financetoolkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Economics&lt;/span&gt;

&lt;span class="n"&gt;economics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Economics&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start_date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2020-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;gdp_growth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;economics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_gross_domestic_product&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;countries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;India&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vietnam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Indonesia&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;China&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;South Korea&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;growth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;2020&lt;/th&gt;
&lt;th&gt;2021&lt;/th&gt;
&lt;th&gt;2022&lt;/th&gt;
&lt;th&gt;2023&lt;/th&gt;
&lt;th&gt;2024&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;India&lt;/td&gt;
&lt;td&gt;-1.2%&lt;/td&gt;
&lt;td&gt;18.9%&lt;/td&gt;
&lt;td&gt;14.2%&lt;/td&gt;
&lt;td&gt;9.6%&lt;/td&gt;
&lt;td&gt;10.1%&lt;/td&gt;
&lt;td&gt;10.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vietnam&lt;/td&gt;
&lt;td&gt;4.4%&lt;/td&gt;
&lt;td&gt;5.5%&lt;/td&gt;
&lt;td&gt;12.5%&lt;/td&gt;
&lt;td&gt;7.1%&lt;/td&gt;
&lt;td&gt;10.4%&lt;/td&gt;
&lt;td&gt;9.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indonesia&lt;/td&gt;
&lt;td&gt;-2.5%&lt;/td&gt;
&lt;td&gt;9.9%&lt;/td&gt;
&lt;td&gt;15.4%&lt;/td&gt;
&lt;td&gt;6.7%&lt;/td&gt;
&lt;td&gt;7.6%&lt;/td&gt;
&lt;td&gt;7.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;China&lt;/td&gt;
&lt;td&gt;3.5%&lt;/td&gt;
&lt;td&gt;11.7%&lt;/td&gt;
&lt;td&gt;5.0%&lt;/td&gt;
&lt;td&gt;4.6%&lt;/td&gt;
&lt;td&gt;4.5%&lt;/td&gt;
&lt;td&gt;6.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;South Korea&lt;/td&gt;
&lt;td&gt;0.9%&lt;/td&gt;
&lt;td&gt;7.9%&lt;/td&gt;
&lt;td&gt;4.6%&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;td&gt;5.5%&lt;/td&gt;
&lt;td&gt;4.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;India has held growth above 9.5% every year since the 2020 contraction, while China has settled into a slower mid-single-digit pace after its 2021 reopening spike. South Korea, the most mature economy in this group, tracks closest to developed-market growth rates throughout. None of this required scraping a single government website or reconciling conflicting definitions across sources, which is the same problem this whole project started from.&lt;/p&gt;

&lt;p&gt;A call with the Finance Toolkit MCP would return an answer such as below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6o1jp35n33itf807nhx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6o1jp35n33itf807nhx5.png" alt="Investment as a share of GDP is one of the cleanest leading indicators of structural economic development. Vietnam and India led the region in the 2000s, fuelling their infrastructure and manufacturing buildouts. Bangladesh has been rising steadily since 2010. The hallmark of an economy still in the upgrading phase, not yet plateauing like Malaysia or Thailand." width="800" height="1042"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This only covers four of the roughly 21 categories the MCP server groups its tools into. The same approach extends to options Greeks, fixed income yield curves, ESG scores, revenue segmentation by product and geography and a Discovery module for screening across 80,000+ tickers. A Portfolio module that loads your own positions from a spreadsheet is also available albeit only through the Python library due to the added complexity. All of it is documented &lt;a href="https://www.jeroenbouma.com/projects/financetoolkit/docs" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and all of it is queryable the moment the MCP server is connected.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
