<?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: Kevin Meneses González</title>
    <description>The latest articles on DEV Community by Kevin Meneses González (@kevin_menesesgonzlez).</description>
    <link>https://dev.to/kevin_menesesgonzlez</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2412421%2F23a50b66-3e3e-4d13-8809-9bc0b03c0f40.png</url>
      <title>DEV Community: Kevin Meneses González</title>
      <link>https://dev.to/kevin_menesesgonzlez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kevin_menesesgonzlez"/>
    <language>en</language>
    <item>
      <title>How to Connect Claude to Real Financial Data with FMP MCP</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Wed, 22 Apr 2026 06:09:28 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/how-to-connect-claude-to-real-financial-data-with-fmp-mcp-1ibg</link>
      <guid>https://dev.to/kevin_menesesgonzlez/how-to-connect-claude-to-real-financial-data-with-fmp-mcp-1ibg</guid>
      <description>&lt;p&gt;Most investors using AI are still stuck analyzing screenshots.&lt;/p&gt;

&lt;p&gt;They copy numbers from a brokerage. Paste charts into ChatGPT. Ask questions about data that's already 3 hours old.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building a portfolio monitoring system,&lt;/li&gt;
&lt;li&gt;automating weekly research reports,&lt;/li&gt;
&lt;li&gt;or trying to cut 4 hours of manual work down to 20 minutes,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters.&lt;/p&gt;

&lt;p&gt;The real problem isn't the AI. It's the pipeline. And MCP fixes that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Financial AI Tools Break at the Data Layer
&lt;/h2&gt;

&lt;p&gt;The pattern repeats constantly.&lt;/p&gt;

&lt;p&gt;A developer sets up a solid Claude workflow. The prompts are good. The logic is there. Then they hit the wall: getting real, structured financial data into the model without building and maintaining a custom API layer.&lt;/p&gt;

&lt;p&gt;The options until recently were ugly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrape Yahoo Finance and pray it doesn't break&lt;/li&gt;
&lt;li&gt;Pay for a premium API and write integration code from scratch&lt;/li&gt;
&lt;li&gt;Use CSV exports and process everything manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these scale. All of them break.&lt;/p&gt;

&lt;p&gt;The issue is infrastructure, not intelligence.&lt;/p&gt;




&lt;h2&gt;
  
  
  What FMP MCP Actually Does
&lt;/h2&gt;

&lt;p&gt;Financial Modeling Prep launched an official MCP server that exposes its entire financial data catalog directly to Claude.&lt;/p&gt;

&lt;p&gt;No middleware. No custom connectors. No parsing logic.&lt;/p&gt;

&lt;p&gt;Claude reads the available tools, calls them when needed, and returns structured answers — the same way a senior analyst would query a Bloomberg terminal, except you don't need to pay $24,000/year for the hardware.&lt;/p&gt;

&lt;p&gt;FMP's MCP server gives you access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time and historical stock prices&lt;/li&gt;
&lt;li&gt;Income statements, balance sheets, and cash flow data&lt;/li&gt;
&lt;li&gt;Financial ratios and valuation metrics&lt;/li&gt;
&lt;li&gt;Earnings calendars and analyst estimates&lt;/li&gt;
&lt;li&gt;Sector performance and market movers&lt;/li&gt;
&lt;li&gt;Crypto, forex, and commodities data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One server. One configuration. Everything your research workflow needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setup in Under 10 Minutes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Get your FMP API key
&lt;/h3&gt;

&lt;p&gt;Sign up at Financial Modeling Prep and grab your API key from the dashboard.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://financialmodelingprep.com" rel="noopener noreferrer"&gt;Get access to FMP's data plans here&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;

&lt;/div&gt;


&lt;p&gt;The free tier covers a solid range of endpoints — enough to test and build the core of your workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install the MCP server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @financialmodelingprep/mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Configure Claude Desktop
&lt;/h3&gt;

&lt;p&gt;Open your &lt;code&gt;claude_desktop_config.json&lt;/code&gt; file and add:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fmp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@financialmodelingprep/mcp-server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"FMP_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Restart Claude Desktop. The FMP tools will appear automatically in the interface.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Test the connection
&lt;/h3&gt;

&lt;p&gt;Ask Claude directly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is Apple's current P/E ratio and how does it compare to the sector average?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude will call the FMP tools, retrieve live data, and return a structured response. No copy-paste. No manual lookup.&lt;/p&gt;


&lt;h2&gt;
  
  
  3 Systems You Can Build This Week
&lt;/h2&gt;

&lt;p&gt;This is where the time savings become concrete.&lt;/p&gt;
&lt;h3&gt;
  
  
  System 1 — Morning Portfolio Brief (15 minutes saved daily)
&lt;/h3&gt;

&lt;p&gt;Instead of checking 6 different tabs every morning, set up a prompt that pulls everything in one shot:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Retrieve the current price, daily change, and P/E ratio for AAPL, MSFT, NVDA, and AMZN. 
Then summarize which position has moved most relative to its 52-week range 
and flag any that have dropped more than 2% today.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Claude queries FMP, compares positions, and gives you a ranked brief.&lt;/p&gt;

&lt;p&gt;What used to take 20 minutes of tab-hopping takes 90 seconds.&lt;/p&gt;
&lt;h3&gt;
  
  
  System 2 — Earnings Prep Autopilot (2 hours saved per company)
&lt;/h3&gt;

&lt;p&gt;Before an earnings call, most investors pull the same data every time: revenue trend, margin evolution, analyst consensus, year-over-year comparisons.&lt;/p&gt;

&lt;p&gt;Claude can do it all in one call:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For $TSLA: retrieve the last 4 quarters of revenue, gross margin, and EPS. 
Compare against analyst consensus estimates. 
Highlight the biggest deviation between reported and estimated figures.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You get a structured earnings preview in under a minute.&lt;/p&gt;

&lt;p&gt;From here you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-earnings briefing templates for your full watchlist&lt;/li&gt;
&lt;li&gt;Automated flags when a company is expected to miss consensus by &amp;gt;10%&lt;/li&gt;
&lt;li&gt;Comparative analysis across sectors before reporting season&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  System 3 — Fundamental Screening on Demand
&lt;/h3&gt;

&lt;p&gt;Screening tools are useful. But they're fixed. They show you what the tool was designed to show.&lt;/p&gt;

&lt;p&gt;With FMP MCP + Claude, you ask in natural language:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find companies in the S&amp;amp;P 500 with a P/E below 15, 
debt-to-equity under 0.5, and revenue growth above 10% YoY. 
Sort by free cash flow yield descending.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Claude translates that into FMP queries, aggregates the results, and returns a clean list.&lt;/p&gt;

&lt;p&gt;Your own screener. No SQL. No filters to configure.&lt;/p&gt;


&lt;h2&gt;
  
  
  What This Looks Like in a Python Workflow
&lt;/h2&gt;

&lt;p&gt;If you're building automated pipelines rather than interactive sessions, FMP's REST API integrates cleanly alongside the MCP layer.&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;requests&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_api_key_here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://financialmodelingprep.com/api/v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&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;ticker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/income-statement/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&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;apikey&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_ratios&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/ratios-ttm/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&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;apikey&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="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Pull last 4 quarters of financials + current ratios
&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="o"&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="n"&gt;income&lt;/span&gt; &lt;span class="o"&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;ticker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ratios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_ratios&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Revenue (last quarter): $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;income&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Net income margin: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;netProfitMarginTTM&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P/E ratio (TTM): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ratios&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;peRatioTTM&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&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;Sample output:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Revenue (last quarter)&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$124,300,000,000&lt;/span&gt;
&lt;span class="na"&gt;Net income margin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;23.97%&lt;/span&gt;
&lt;span class="na"&gt;P/E ratio (TTM)&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;28.43&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;From here you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated weekly reports delivered to Slack or email&lt;/li&gt;
&lt;li&gt;Portfolio dashboards that refresh with real data on a schedule&lt;/li&gt;
&lt;li&gt;Watchlist monitors that alert you when a ratio crosses a threshold&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Practical Tips for Investors Using This Stack
&lt;/h2&gt;

&lt;p&gt;Before building anything, a few lessons that save time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with one workflow, not three.&lt;/strong&gt; The most common mistake is trying to automate everything on day one. Pick your highest-friction task — for most investors it's the morning check — and make that seamless first. Once it runs reliably, extend it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use specific tickers, not vague questions.&lt;/strong&gt; Claude performs better when you anchor queries to concrete symbols. "How is Apple doing?" produces a generic summary. "Retrieve AAPL's current P/E, 52-week range, and analyst consensus for Q2" produces structured, actionable data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chain queries, don't stack them.&lt;/strong&gt; Instead of asking Claude to do everything in one giant prompt, build multi-step conversations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Step 1: Pull the raw data&lt;/li&gt;
&lt;li&gt;Step 2: Ask for the analysis&lt;/li&gt;
&lt;li&gt;Step 3: Ask for the formatted output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the model focused and makes errors easier to debug.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set a daily schedule for automated queries.&lt;/strong&gt; If you're using the Python pipeline, run it at a fixed time — 7:30 AM before markets open works well. Use a simple cron job or a task scheduler like &lt;code&gt;schedule&lt;/code&gt;:&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;schedule&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_morning_brief&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# Your FMP data pull + report generation here
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Morning brief generated.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;at&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;07:30&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;do&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_morning_brief&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_pending&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Store your API key as an environment variable, never in code.&lt;/strong&gt; A small discipline that matters:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;FMP_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;os&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FMP_API_KEY&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;&lt;strong&gt;Use FMP's free tier to prototype, then upgrade only when you hit a wall.&lt;/strong&gt; The free plan covers quotes, financial statements, and ratios for most common tickers. You'll only need a paid plan when you require real-time data at high frequency, access to smaller/international stocks, or advanced endpoints like institutional holdings.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Build a Portfolio Dashboard with FMP + Python
&lt;/h2&gt;

&lt;p&gt;This is where the stack becomes a genuine time-saving system.&lt;/p&gt;

&lt;p&gt;The goal: a single HTML file that opens in any browser and shows your portfolio's key metrics, refreshed every morning without manual effort.&lt;/p&gt;
&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Desktop + MCP&lt;/strong&gt; handles interactive queries and one-off analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Pipeline&lt;/strong&gt; handles scheduled, automated data pulls via REST API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FMP&lt;/strong&gt; is the single source of truth for all financial data&lt;/li&gt;
&lt;li&gt;Outputs are either Claude responses, Python-generated files, or Slack/email alerts&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 1 — Define your dashboard metrics
&lt;/h3&gt;

&lt;p&gt;Pick 5–8 metrics that actually drive your decisions. A solid starting set:&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;PORTFOLIO&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="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# shares
&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="mi"&gt;10&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="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMZN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;METRICS&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;price&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;changesPercentage&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;pe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# P/E ratio
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eps&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;52WeekHigh&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;52WeekLow&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;h3&gt;
  
  
  Step 2 — Pull data for all positions
&lt;/h3&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;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://financialmodelingprep.com/api/v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_quotes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;symbols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tickers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/quote/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbols&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&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;apikey&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="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;portfolio_tickers&lt;/span&gt; &lt;span class="o"&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;PORTFOLIO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;quotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_quotes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;portfolio_tickers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3 — Calculate portfolio value and build the report
&lt;/h3&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;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;report&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;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%Y-%m-%d %H:%M&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;positions&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;total_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;quotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;shares&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&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&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="n"&gt;shares&lt;/span&gt;
        &lt;span class="n"&gt;daily_pnl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;change&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="n"&gt;shares&lt;/span&gt;

        &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticker&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ticker&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&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;q&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&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;change_pct&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;changesPercentage&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;pe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pe&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;N/A&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;shares&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;shares&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily_pnl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;daily_pnl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_value&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="n"&gt;value&lt;/span&gt;
        &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&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="n"&gt;daily_pnl&lt;/span&gt;

    &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_value&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="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&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="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt;

&lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quotes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PORTFOLIO&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4 — Export to HTML dashboard
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;export_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dashboard.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;positions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#22c55e&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily_pnl&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="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#ef4444&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily_pnl&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="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ticker&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&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&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/td&amp;gt;
            &amp;lt;td style=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;color:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;change_pct&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;pe&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;shares&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/td&amp;gt;
            &amp;lt;td style=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;color:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sign&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;daily_pnl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;title&amp;gt;Portfolio Dashboard&amp;lt;/title&amp;gt;
  &amp;lt;style&amp;gt;
    body {{ font-family: Arial, sans-serif; padding: 20px; background: #0f172a; color: #e2e8f0; }}
    h1 {{ color: #94a3b8; font-size: 18px; }}
    table {{ width: 100%; border-collapse: collapse; margin-top: 20px; }}
    th {{ background: #1e293b; padding: 10px; text-align: left; color: #94a3b8; }}
    td {{ padding: 10px; border-bottom: 1px solid #1e293b; }}
    .total {{ margin-top: 20px; font-size: 22px; }}
  &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;h1&amp;gt;Portfolio Dashboard — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/h1&amp;gt;
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Ticker&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Price&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Change&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;P/E&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Shares&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Value&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;P&amp;amp;L Today&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
  &amp;lt;/table&amp;gt;
  &amp;lt;div class=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;
    Total: &amp;lt;strong&amp;gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;total_value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/strong&amp;gt; &amp;amp;nbsp;|&amp;amp;nbsp;
    Today: &amp;lt;strong style=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;color:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#22c55e&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&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="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;#ef4444&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;total_daily_change&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/strong&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dashboard saved: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;export_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open &lt;code&gt;dashboard.html&lt;/code&gt; in any browser. Schedule the full script at 7:30 AM and your portfolio brief is ready before you pour your coffee.&lt;/p&gt;

&lt;p&gt;From here you can extend it with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Slack webhook to push the summary to a channel automatically&lt;/li&gt;
&lt;li&gt;A second tab comparing current P/E ratios against 5-year historical averages&lt;/li&gt;
&lt;li&gt;An alert row that highlights any position down more than 3% in red&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP removes the integration layer&lt;/strong&gt; — Claude connects to FMP directly, without custom code or API wrappers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The time savings are real&lt;/strong&gt; — systems like these compress hours of manual research into minutes of structured output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The free tier is enough to start&lt;/strong&gt; — you don't need a premium plan to build and test the core workflows&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Start Building
&lt;/h2&gt;

&lt;p&gt;FMP's MCP server is one of the cleanest financial data integrations available for Claude today.&lt;/p&gt;

&lt;p&gt;If you're building research workflows, portfolio tools, or automated briefings — this is the infrastructure layer that makes it practical.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://financialmodelingprep.com" rel="noopener noreferrer"&gt;Explore FMP's data plans and get started&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need to know how to code to use FMP MCP with Claude?
&lt;/h3&gt;

&lt;p&gt;No. The Claude Desktop setup requires only editing a JSON config file — no coding involved. You can query financial data in plain English from day one. The Python examples are optional, for those who want to build automated pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is FMP MCP available for free?
&lt;/h3&gt;

&lt;p&gt;FMP offers a free tier that includes access to a solid range of endpoints — enough to test and build core workflows. Paid plans unlock higher rate limits, more historical data, and premium endpoints like institutional ownership or advanced DCF models.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between using FMP's REST API directly vs using MCP?
&lt;/h3&gt;

&lt;p&gt;The REST API requires you to write integration code: authentication, request formatting, response parsing. MCP exposes those same endpoints as tools Claude can call autonomously. For interactive workflows and natural language queries, MCP is significantly faster to set up and easier to extend.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use FMP MCP with Claude Code, not just Claude Desktop?
&lt;/h3&gt;

&lt;p&gt;Yes. The same MCP server configuration works with Claude Code. You can reference FMP data inside your development environment and build AI-assisted financial tooling without switching contexts.&lt;/p&gt;

&lt;h3&gt;
  
  
  How current is the data?
&lt;/h3&gt;

&lt;p&gt;FMP provides real-time quotes with minimal delay on paid plans. Historical data, financial statements, and ratios are updated following each earnings release. For intraday trading decisions, always verify against your broker's live feed.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>api</category>
      <category>stocks</category>
    </item>
    <item>
      <title>How to Get Real-Time Crypto Prices with the Mobula API in Python</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Sun, 19 Apr 2026 10:59:42 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/how-to-get-real-time-crypto-prices-with-the-mobula-api-in-python-2oop</link>
      <guid>https://dev.to/kevin_menesesgonzlez/how-to-get-real-time-crypto-prices-with-the-mobula-api-in-python-2oop</guid>
      <description>&lt;p&gt;Most crypto APIs are either too expensive, too slow, or designed for traders — not developers.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building a portfolio tracker,&lt;/li&gt;
&lt;li&gt;automating a DeFi monitoring bot,&lt;/li&gt;
&lt;li&gt;or just need live onchain data without paying for an enterprise plan,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Getting Crypto Data in 2026
&lt;/h2&gt;

&lt;p&gt;Developers hit the same wall every time.&lt;/p&gt;

&lt;p&gt;CoinGecko throttles free-tier requests. CoinMarketCap requires manual API key approval. Binance only covers exchange-listed tokens. And most "real-time" endpoints return data that's 60 seconds stale.&lt;/p&gt;

&lt;p&gt;You need price. You need 24h change. You need volume. You need market cap.&lt;/p&gt;

&lt;p&gt;What you don't need is a rate limit after 30 requests.&lt;/p&gt;

&lt;p&gt;The real issue isn't access. It's that most crypto data APIs weren't built with developers in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Mobula API?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;Mobula&lt;/a&gt; is an onchain data API that provides structured market data — including real-time prices, volume, market cap, and liquidity — for thousands of tokens across multiple chains.&lt;/p&gt;

&lt;p&gt;It works through a standard REST API with JSON responses.&lt;/p&gt;

&lt;p&gt;Developers get access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time price data (sub-second updates)&lt;/li&gt;
&lt;li&gt;24h price change percentage&lt;/li&gt;
&lt;li&gt;24h trading volume&lt;/li&gt;
&lt;li&gt;Fully diluted market cap&lt;/li&gt;
&lt;li&gt;Multi-chain token support (Ethereum, BSC, Polygon, Solana, and more)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No WebSocket setup required for basic use cases. A single HTTP GET request is enough.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Quick note: if you're a developer tool or fintech company looking for this kind of technical content — tutorials, integration guides, API comparisons — feel free to reach out on &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Setup: Install the Dependencies
&lt;/h2&gt;

&lt;p&gt;No official SDK is needed. Mobula's API is REST-based, so &lt;code&gt;requests&lt;/code&gt; is all you need.&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;requests python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file to store your API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;MOBULA_API_KEY&lt;/span&gt;=&lt;span class="n"&gt;your_api_key_here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your free API key at &lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;mobula.io&lt;/a&gt;.&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%2Fqgk48q6i39qn9kfak0jz.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%2Fqgk48q6i39qn9kfak0jz.png" alt=" " width="640" height="127"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Example 1 — Fetch Real-Time Price for a Single Token
&lt;/h2&gt;

&lt;p&gt;This is the core use case. One token, one request, live 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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&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="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MOBULA_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;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.mobula.io/api/1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_token_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/market/data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&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;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;Authorization&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="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&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&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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&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_change_24h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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_change_24h&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;volume_24h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volume&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;market_cap&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;market_cap&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_token_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sample output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;64312.47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_change_24h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"volume_24h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;28450000000.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"market_cap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1264000000000.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean. Structured. No parsing gymnastics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example 2 — Fetch Multiple Tokens at Once
&lt;/h2&gt;

&lt;p&gt;When you're building a dashboard or tracker, you need batch data — not 10 separate requests.&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_multiple_tokens&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbols&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;symbols&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_token_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;

&lt;span class="n"&gt;tokens&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;BTC&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;ETH&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;SOL&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;MATIC&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;LINK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;portfolio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_multiple_tokens&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;portfolio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&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&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&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_change_24h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vol: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;volume_24h&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&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;&lt;strong&gt;Sample output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BTC    | $64,312.47 | +2.34% | Vol: $28,450,000,000
ETH    | $3,121.88  | +1.12% | Vol: $14,200,000,000
SOL    | $148.50    | -0.78% | Vol: $3,800,000,000
MATIC  | $0.87      | +0.45% | Vol: $420,000,000
LINK   | $14.23     | +3.10% | Vol: $510,000,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five tokens. Five lines. Ready to pipe into a Telegram alert, a Google Sheet, or a Notion dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example 3 — Search by Contract Address (Onchain Tokens)
&lt;/h2&gt;

&lt;p&gt;Not every token has a clean ticker symbol. For newer or less-listed tokens, use the contract address instead.&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_token_by_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blockchain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ethereum&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="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/market/data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;params&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;asset&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blockchain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blockchain&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;Authorization&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="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&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;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&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&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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&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_change_24h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&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_change_24h&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;market_cap&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;market_cap&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;liquidity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;liquidity&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="c1"&gt;# Example: PEPE token on Ethereum
&lt;/span&gt;&lt;span class="n"&gt;pepe_address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x6982508145454Ce325dDbE47a25d4ec3d2311933&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_token_by_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pepe_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blockchain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ethereum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where Mobula stands out from traditional exchange APIs.&lt;/p&gt;

&lt;p&gt;Most CEX-based APIs don't index long-tail or newly launched tokens. Mobula does — because it reads directly from onchain liquidity pools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example 4 — Build a Simple Price Alert
&lt;/h2&gt;

&lt;p&gt;Combine the fetcher with a basic threshold check. Useful for bots and automations.&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;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;price_alert_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold_pct&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Polls the API every `interval` seconds.
    Triggers an alert if 24h change exceeds `threshold_pct`.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitoring &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; every &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s | Alert threshold: ±&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;threshold_pct&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_token_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;change&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&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_change_24h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&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&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | 24h: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold_pct&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🚨 ALERT: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; moved &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;change&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% in 24h — price is $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error fetching &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run the alert loop for ETH
&lt;/span&gt;&lt;span class="nf"&gt;price_alert_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ETH&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold_pct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From here you can extend this into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram notifications via &lt;code&gt;python-telegram-bot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Slack alerts via webhooks&lt;/li&gt;
&lt;li&gt;n8n automations with an HTTP trigger node&lt;/li&gt;
&lt;li&gt;Discord bots for trading communities&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Mobula API — Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/market/data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Price, volume, market cap, 24h change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/market/history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Historical OHLCV data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/market/multi-data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Batch price data by symbols&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/metadata&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Token metadata (logo, description, socials)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Authentication: &lt;code&gt;Authorization: YOUR_API_KEY&lt;/code&gt; header on all requests.&lt;/p&gt;

&lt;p&gt;Free tier includes several thousand requests/day — enough for personal projects and prototypes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You've Built
&lt;/h2&gt;

&lt;p&gt;A working Python module that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetches live price, 24h change, volume, and market cap&lt;/li&gt;
&lt;li&gt;Handles both ticker symbols and contract addresses&lt;/li&gt;
&lt;li&gt;Supports batch queries across any token list&lt;/li&gt;
&lt;li&gt;Runs as a polling alert system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No SDKs. No bloated dependencies. Just &lt;code&gt;requests&lt;/code&gt; and clean JSON.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is the Mobula API free?&lt;/strong&gt;&lt;br&gt;
Yes. Mobula offers a free tier with several thousand requests per day — enough for personal projects, prototypes, and low-frequency automations. Paid plans unlock higher rate limits, priority support, and access to premium endpoints like institutional-grade OHLCV history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Mobula support tokens not listed on major exchanges?&lt;/strong&gt;&lt;br&gt;
Yes, and this is one of its key advantages. Because Mobula indexes onchain liquidity pools directly, it covers long-tail tokens and newly launched assets that CoinGecko and CoinMarketCap often lag behind on. You can query any token by contract address across supported chains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which blockchains does Mobula support?&lt;/strong&gt;&lt;br&gt;
As of 2026, Mobula covers Ethereum, BNB Chain, Polygon, Solana, Avalanche, Arbitrum, Base, and several other EVM-compatible chains. The &lt;code&gt;/market/data&lt;/code&gt; endpoint accepts a &lt;code&gt;blockchain&lt;/code&gt; parameter to scope results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How fast is the price data?&lt;/strong&gt;&lt;br&gt;
Price updates are sub-second for major assets. For long-tail tokens with lower liquidity, refresh rates depend on onchain activity. For most use cases — dashboards, bots, alerts — the latency is negligible compared to alternatives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use Mobula in production?&lt;/strong&gt;&lt;br&gt;
Yes. The REST API is stable and versioned. For high-throughput production systems, use the &lt;code&gt;/market/multi-data&lt;/code&gt; endpoint to batch requests and stay within rate limits. If you're building something at scale, check the paid plans for SLA guarantees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a special library or SDK?&lt;/strong&gt;&lt;br&gt;
No. Mobula's API is standard REST — just &lt;code&gt;requests&lt;/code&gt; in Python is enough. There's no proprietary SDK required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Start Building with Mobula
&lt;/h2&gt;

&lt;p&gt;Crypto data doesn't need to be complicated.&lt;/p&gt;

&lt;p&gt;One endpoint, one request, one structured response — and you have everything you need to build monitoring tools, portfolio trackers, and trading automations without paying for an enterprise contract.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;Get your free Mobula API key here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll get access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time prices across thousands of tokens&lt;/li&gt;
&lt;li&gt;Onchain data including contract address lookup&lt;/li&gt;
&lt;li&gt;Multi-chain support out of the box&lt;/li&gt;
&lt;li&gt;A free tier that covers most personal and side-project use cases&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>python</category>
      <category>api</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>I Asked Claude to Analyze My Portfolio. Here’s What Happened.</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Fri, 17 Apr 2026 11:02:31 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/i-asked-claude-to-analyze-my-portfolio-heres-what-happened-4km</link>
      <guid>https://dev.to/kevin_menesesgonzlez/i-asked-claude-to-analyze-my-portfolio-heres-what-happened-4km</guid>
      <description>&lt;p&gt;A Bloomberg Terminal costs $24,000 a year.&lt;/p&gt;

&lt;p&gt;For that price, you get real-time market data, financial statements, earnings history, analyst estimates, and a research interface that institutional traders have used for decades.&lt;/p&gt;

&lt;p&gt;Most developers, indie investors, and fintech builders can't justify that.&lt;/p&gt;

&lt;p&gt;But here's what changed in 2026: you don't need Bloomberg anymore.&lt;/p&gt;

&lt;p&gt;I connected Claude to real-time financial data using FMP's MCP server, asked it to analyze a portfolio of five stocks, and documented the entire session. No Python. No API calls. No JSON parsing.&lt;/p&gt;

&lt;p&gt;Just questions. And real answers backed by live data.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building AI-powered finance tools,&lt;/li&gt;
&lt;li&gt;managing your own portfolio and tired of switching between tabs,&lt;/li&gt;
&lt;li&gt;or just curious about what AI agents can actually do with real market data,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is worth reading.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Let me tell you about a conversation I had with a buy-side analyst last year.&lt;/p&gt;

&lt;p&gt;She covers 15 companies. Every Monday morning, her routine looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Bloomberg, pull the weekly movers&lt;/li&gt;
&lt;li&gt;Export to Excel, reformat the columns&lt;/li&gt;
&lt;li&gt;Cross-reference with last quarter's earnings in a separate tab&lt;/li&gt;
&lt;li&gt;Check FactSet for analyst revisions&lt;/li&gt;
&lt;li&gt;Manually note any insider filings flagged in SEC EDGAR&lt;/li&gt;
&lt;li&gt;Build a summary for the 9am team call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole process takes about two hours. Every week. For fifteen companies.&lt;/p&gt;

&lt;p&gt;I asked her: "How much of that time is actual thinking versus data gathering?"&lt;/p&gt;

&lt;p&gt;She didn't hesitate. "Maybe 20 minutes of thinking. The rest is plumbing."&lt;/p&gt;

&lt;p&gt;That's the problem. Financial analysts aren't being paid to copy numbers between systems. They're being paid for the judgment that comes after. But most of their time gets consumed before they ever get there.&lt;/p&gt;

&lt;p&gt;The bottleneck isn't intelligence.&lt;/p&gt;

&lt;p&gt;It's infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Data Quality Is the Foundation of Everything
&lt;/h2&gt;

&lt;p&gt;Before getting into the setup, this point is worth making explicitly — because it's the one that gets glossed over in most AI + finance content.&lt;/p&gt;

&lt;p&gt;An AI agent is only as good as the data it reasons on.&lt;/p&gt;

&lt;p&gt;Claude can structure an argument brilliantly. It can synthesize across multiple data points, flag inconsistencies, and produce analysis that reads like a well-prepared research note. But if the underlying data is stale, incomplete, or sourced from unofficial endpoints that break under load — the output is worthless. Worse than worthless, because it looks credible.&lt;/p&gt;

&lt;p&gt;This is why the choice of data provider matters more when you introduce AI into the equation, not less.&lt;/p&gt;

&lt;p&gt;With a traditional workflow, an analyst can visually spot when a number looks wrong. They have the context to flag it. An AI agent acting on bad data doesn't have that safety net — it reasons confidently on whatever it's given.&lt;/p&gt;

&lt;p&gt;FMP solves this by providing institutional-grade financial data through a clean, reliable API: 70,000+ data points, direct sourcing from exchanges and SEC filings, consistent update cycles, and full coverage across income statements, balance sheets, cash flow, earnings estimates, insider transactions, and macro indicators.&lt;/p&gt;

&lt;p&gt;When you connect Claude to FMP via MCP, you're not connecting it to a scraper or a free feed. You're connecting it to the same underlying data infrastructure that powers serious financial tools.&lt;/p&gt;

&lt;p&gt;That distinction changes what the AI can actually do.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Setup: FMP + MCP + Claude in 3 Steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FMP&lt;/strong&gt; (Financial Modeling Prep) is a financial data API with 70,000+ data points covering everything from real-time quotes to earnings transcripts. &lt;strong&gt;MCP&lt;/strong&gt; (Model Context Protocol) is the open standard introduced by Anthropic that lets AI agents connect directly to external data sources — no custom integration code, no glue scripts.&lt;/p&gt;

&lt;p&gt;FMP now has an official MCP server. Connect it once, and Claude has direct access to FMP's entire dataset in natural language.&lt;/p&gt;

&lt;p&gt;Here's how:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Get your FMP API key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a free account at &lt;a href="https://site.financialmodelingprep.com/pricing-plans?utm_source=blog&amp;amp;utm_medium=medium&amp;amp;utm_campaign=keving14" rel="noopener noreferrer"&gt;financialmodelingprep.com&lt;/a&gt;. The free tier gives you 250 requests/day — enough to run all the experiments in this article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Build your connection URL&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://financialmodelingprep.com/mcp?apikey=YOUR_FMP_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3 — Add it to Claude&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Claude.ai: Settings → Connectors → Add custom connector → paste the URL → name it "FMP" → Add.&lt;/p&gt;

&lt;p&gt;Start a new chat. FMP's tools are now available to Claude automatically.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The diagram below shows exactly how the pieces connect — from your question to the structured insight that comes back.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Session: Real Questions, Real Data
&lt;/h2&gt;

&lt;p&gt;I built a portfolio of five stocks representing different sectors and risk profiles: &lt;strong&gt;Apple (AAPL), NVIDIA (NVDA), JPMorgan (JPM), Pfizer (PFE), and Tesla (TSLA)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then I started asking questions as if I were talking to an analyst.&lt;/p&gt;




&lt;h3&gt;
  
  
  Question 1: "Give me a quick overview of each company in my portfolio"
&lt;/h3&gt;

&lt;p&gt;Claude pulled live company profiles for all five tickers simultaneously — sector, market cap, P/E ratio, 52-week range, and a one-line business description for each.&lt;/p&gt;

&lt;p&gt;What would normally take 10 minutes of tab-switching took about 8 seconds.&lt;/p&gt;

&lt;p&gt;The output was structured, comparable, and current. Not a cached summary from training data — actual live data from FMP's API, called in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time saved for a typical analyst: ~25 minutes per week&lt;/strong&gt; just on the Monday morning overview pull.&lt;/p&gt;




&lt;h3&gt;
  
  
  Question 2: "Which of these companies has the strongest balance sheet right now?"
&lt;/h3&gt;

&lt;p&gt;Claude pulled the latest balance sheets for all five companies, compared cash positions, total debt, and debt-to-equity ratios, and ranked them with a clear explanation of its reasoning.&lt;/p&gt;

&lt;p&gt;The answer: Apple, with a net cash position that dwarfs the others. But the analysis also flagged that NVIDIA's balance sheet has strengthened considerably over the past two years, while Pfizer's debt load increased significantly post-pandemic acquisitions.&lt;/p&gt;

&lt;p&gt;Not just numbers — interpretation.&lt;/p&gt;

&lt;p&gt;Think about what this replaces. Pulling five balance sheets, normalizing the figures, building a comparison table, writing the summary. That's 40 minutes of work for a single analyst. Claude does it in one query.&lt;/p&gt;




&lt;h3&gt;
  
  
  Question 3: "Show me how earnings have trended for NVDA over the last 8 quarters"
&lt;/h3&gt;

&lt;p&gt;Claude fetched NVIDIA's quarterly earnings history from FMP, organized it chronologically, and presented a clear progression of EPS and revenue growth.&lt;/p&gt;

&lt;p&gt;It also noted the quarters where results beat analyst estimates versus where they came in below — data it pulled from FMP's analyst estimates endpoint without me asking for it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It went further than the question asked. Because it had the tools to do so.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the compounding effect of quality data infrastructure. When the underlying data is complete and reliable, the AI makes connections you didn't think to ask for. When it's not, you get confident-sounding summaries built on gaps.&lt;/p&gt;




&lt;h3&gt;
  
  
  Question 4: "Which of these stocks has the most insider selling activity recently?"
&lt;/h3&gt;

&lt;p&gt;Claude queried FMP's insider trades endpoint for all five tickers and returned a ranked summary.&lt;/p&gt;

&lt;p&gt;The result surfaced something I hadn't thought to check: a notable cluster of executive sell transactions at one of the portfolio companies in the prior 90 days. Not necessarily a red flag — executives sell for many reasons — but exactly the kind of signal that gets buried when you're managing a portfolio manually.&lt;/p&gt;

&lt;p&gt;For analysts covering a broader universe, systematic signal monitoring like this is the difference between catching something early and reading about it in a post-mortem.&lt;/p&gt;




&lt;h3&gt;
  
  
  Question 5: "If I had to cut this portfolio to 3 stocks based purely on fundamentals, which would you keep?"
&lt;/h3&gt;

&lt;p&gt;Claude synthesized everything it had already pulled — balance sheets, earnings trends, analyst ratings, insider activity — and made a structured argument for three positions, with explicit reasoning for each exclusion.&lt;/p&gt;

&lt;p&gt;It wasn't financial advice. It was structured analytical reasoning applied to real data.&lt;/p&gt;

&lt;p&gt;This is what analysts spend hours producing for their morning call notes. With FMP + Claude, the raw material for that synthesis is assembled in seconds. The analyst's job shifts from data gathering to judgment — which is where their expertise actually lives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical Use Cases for Financial Analysts
&lt;/h2&gt;

&lt;p&gt;The portfolio session above is a starting point. Here's how this setup maps to real analyst workflows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Earnings season preparation&lt;/strong&gt;&lt;br&gt;
Before a company reports, pull the last 8 quarters of EPS and revenue vs. estimates in one query. Ask Claude to identify the trend, flag any pattern of beats or misses, and summarize the setup going into the print. What used to take 30 minutes of spreadsheet work becomes a 2-minute prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peer group comparison&lt;/strong&gt;&lt;br&gt;
"Compare the operating margins of the five largest US semiconductor companies over the last 3 years." Claude queries FMP for each income statement, normalizes the figures, and returns a structured comparison. No export to Excel, no manual table building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Macro sensitivity analysis&lt;/strong&gt;&lt;br&gt;
"How has JPM's net interest income correlated with Fed rate changes over the last 10 quarters?" FMP has both financial statements and macro indicators. Claude connects them. This kind of cross-dataset analysis typically requires a quant setup — here it's a natural language question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-meeting research brief&lt;/strong&gt;&lt;br&gt;
Heading into an earnings call or management meeting? Ask Claude to pull the company profile, recent earnings history, analyst consensus, and notable insider activity, structured as a one-page brief. Five minutes instead of forty-five.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watchlist monitoring&lt;/strong&gt;&lt;br&gt;
Set up a weekly prompt that pulls the latest price, P/E, and analyst rating changes for your entire coverage list. Claude flags what moved, what changed in estimates, and what warrants a closer look. The cognitive overhead of monitoring 20 names drops dramatically.&lt;/p&gt;


&lt;h2&gt;
  
  
  What This Actually Means
&lt;/h2&gt;

&lt;p&gt;Most AI tools work with static knowledge. They know what they learned during training — with a cutoff date and no access to real-time data.&lt;/p&gt;

&lt;p&gt;FMP's MCP server changes that equation.&lt;/p&gt;

&lt;p&gt;Claude connected to FMP doesn't hallucinate earnings numbers. It fetches them. It doesn't estimate balance sheet ratios. It calculates them from live statements. It doesn't guess at analyst consensus. It reads it directly from FMP's database.&lt;/p&gt;

&lt;p&gt;The result is an AI that reasons about markets the way a well-prepared analyst would — with access to the same raw data, applied in real time, in natural language.&lt;/p&gt;

&lt;p&gt;For developers, this removes weeks of integration work. For investors, it removes the cognitive overhead of data aggregation. For fintech teams, it collapses the distance between idea and working demo.&lt;/p&gt;

&lt;p&gt;And for analysts — it gives back the two hours every Monday that were going to plumbing.&lt;/p&gt;


&lt;h2&gt;
  
  
  Getting Started with FMP
&lt;/h2&gt;

&lt;p&gt;FMP's free tier covers 250 API requests per day — enough to replicate everything in this article. Paid plans unlock higher limits, real-time data, and premium endpoints like earnings transcripts and institutional holdings.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://site.financialmodelingprep.com/pricing-plans?utm_source=blog&amp;amp;utm_medium=medium&amp;amp;utm_campaign=keving14" rel="noopener noreferrer"&gt;Start free on FMP here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connection URL once you have your key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://financialmodelingprep.com/mcp?apikey=YOUR_FMP_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Settings → Connectors → Add custom connector. Two minutes. No code.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Can Build From Here
&lt;/h2&gt;

&lt;p&gt;From here you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automated weekly portfolio reviews that pull fresh data every Monday&lt;/li&gt;
&lt;li&gt;earnings surprise trackers that flag when actual EPS deviates significantly from estimates&lt;/li&gt;
&lt;li&gt;sector rotation monitors comparing relative performance across holdings&lt;/li&gt;
&lt;li&gt;custom screening sessions where you describe criteria and Claude queries FMP for matches&lt;/li&gt;
&lt;li&gt;pre-earnings research briefs assembled in minutes, not hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The infrastructure is already there. The data is live. The interface is natural language.&lt;/p&gt;

&lt;p&gt;Most analysts don't need a better instinct for markets.&lt;/p&gt;

&lt;p&gt;They need to stop spending 80% of their time on plumbing — and start spending it on the 20% that actually matters.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>mcp</category>
      <category>api</category>
      <category>stocks</category>
    </item>
    <item>
      <title>Top 5 Crowdlending Platforms in Europe (2026): Where to Invest Your Money</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Thu, 16 Apr 2026 08:29:27 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/top-5-crowdlending-platforms-in-europe-2026-where-to-invest-your-money-105j</link>
      <guid>https://dev.to/kevin_menesesgonzlez/top-5-crowdlending-platforms-in-europe-2026-where-to-invest-your-money-105j</guid>
      <description>&lt;p&gt;Most people still believe generating passive income requires either a lot of capital or accepting a lot of risk.&lt;/p&gt;

&lt;p&gt;Crowdlending breaks that assumption.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tired of savings accounts paying 1–2% while inflation erodes your balance,&lt;/li&gt;
&lt;li&gt;looking for fixed-income alternatives outside volatile stock markets,&lt;/li&gt;
&lt;li&gt;or building a diversified portfolio that generates monthly cash flow,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters.&lt;/p&gt;

&lt;p&gt;The European P2P lending sector has matured significantly. Regulation is catching up. Platforms are getting stricter about borrower selection. And the gap in quality between good platforms and bad ones is now very clear.&lt;/p&gt;

&lt;p&gt;Here's a curated comparison of the five platforms worth your attention in 2026 — with a breakdown of what each one does well and where it falls short.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Criteria
&lt;/h2&gt;

&lt;p&gt;Before getting into the list, the comparison uses five dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expected returns&lt;/strong&gt; (annual yield, realistic range)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk protection&lt;/strong&gt; (buyback guarantee, collateral, provision fund)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulation&lt;/strong&gt; (licensing, jurisdiction, compliance framework)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usability&lt;/strong&gt; (minimum investment, auto-invest, secondary market)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track record&lt;/strong&gt; (default history, transparency, audits)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No platform is perfect. The goal is to understand the trade-offs.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Maclear — The Structured SME Platform from Switzerland
&lt;/h2&gt;

&lt;p&gt;Maclear isn't the biggest name in European crowdlending. It's the most serious one.&lt;/p&gt;

&lt;p&gt;Founded in Switzerland and operating as a P2B (peer-to-business) marketplace, Maclear connects investors with EU-based SMEs seeking capital for real industrial and commercial projects — manufacturing, logistics, retail, renewable energy. Not consumer loans. Not payday debt.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns:&lt;/strong&gt; 13.5% to 16.5% annually, with monthly interest payments and no cash drag reported by investors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk protection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provision Fund financed by 2% of every funded project&lt;/li&gt;
&lt;li&gt;Collateral on every loan (equipment, assets, property)&lt;/li&gt;
&lt;li&gt;Maclear acts as Collateral Agent, meaning it can legally enforce recovery on behalf of investors — not just hand you paperwork&lt;/li&gt;
&lt;li&gt;More than 60% of loan applications are rejected before reaching the platform&lt;/li&gt;
&lt;li&gt;One default recorded to date, resolved with full principal recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regulation:&lt;/strong&gt; Member of PolyReg SRO (Switzerland), with European crowdfunding license application filed. The platform is registered in the official Swiss company registry and has published a 2023 financial audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usability:&lt;/strong&gt; €50 minimum investment. AutoInvest launched in July 2025. Secondary market available. No deposit fees. KYC in approximately 5 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track record:&lt;/strong&gt; Growing at 6M€ per month invested as of early 2026. Surpassed platforms like Swaper in total registered users. No missed investor payments on record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real collateral behind every loan — not just a buyback promise from the same originator issuing the loan&lt;/li&gt;
&lt;li&gt;Swiss regulatory framework adds structural credibility&lt;/li&gt;
&lt;li&gt;Transparent project pages with financial scoring, business plans, and collateral details&lt;/li&gt;
&lt;li&gt;Loyalty program with bonus rates on top of standard returns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller loan supply than volume-driven marketplaces like Mintos&lt;/li&gt;
&lt;li&gt;2024 financial audit delayed (expected Q1 2026)&lt;/li&gt;
&lt;li&gt;Fewer projects available simultaneously compared to larger platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Investors who want structured protection, not just high numbers on a screen.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article contains an affiliate link for Maclear. If you sign up through &lt;a href="https://app.maclear.ch/en/registration?ref=E478W7" rel="noopener noreferrer"&gt;this link&lt;/a&gt;, you receive a 2% cashback bonus on investments in your first 90 days — at no extra cost.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Mintos — The European Giant
&lt;/h2&gt;

&lt;p&gt;Mintos is the largest P2P lending marketplace in Europe. That's both its main argument and its main risk.&lt;/p&gt;

&lt;p&gt;With over €10 billion in funded loans, 340,000+ investors, and access to 50+ loan originators across multiple countries, Mintos delivers diversification at a scale no other platform matches. The auto-invest tool is robust. The secondary market is active. The reporting is detailed.&lt;/p&gt;

&lt;p&gt;The problem: you're not lending directly to borrowers. You're buying Notes issued by loan originators. If an originator fails, the Notes can go into recovery — which has happened before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns:&lt;/strong&gt; 10–12.25% average annually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk protection:&lt;/strong&gt; Buyback guarantee on most loans, but dependent on originator solvency. Regulated investment firm license in Latvia. Mintos Ratings system for originator assessment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unmatched diversification — dozens of originators, multiple countries, multiple loan types&lt;/li&gt;
&lt;li&gt;Regulated platform with structured Notes product&lt;/li&gt;
&lt;li&gt;Active secondary market for liquidity&lt;/li&gt;
&lt;li&gt;Includes ETFs and bonds alongside loans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Originator defaults have happened — the buyback is only as solid as the originator&lt;/li&gt;
&lt;li&gt;Complexity can overwhelm new investors&lt;/li&gt;
&lt;li&gt;Auto-invest setup requires careful configuration to avoid concentration risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Experienced investors building a large, diversified P2P portfolio.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. PeerBerry — Reliability Over Everything
&lt;/h2&gt;

&lt;p&gt;PeerBerry doesn't chase headlines. It has maintained a zero historical capital loss record since launching in 2017, and that consistency is its entire pitch.&lt;/p&gt;

&lt;p&gt;Average return sits around 11.14%. Buyback guarantee on all loans, backed by a group guarantee from the Aventus Group — which paid back over €50 million in war-affected loans during the Russia-Ukraine conflict. That single data point explains why PeerBerry retains its investor base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns:&lt;/strong&gt; 10–12% annually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk protection:&lt;/strong&gt; 60-day buyback guarantee + group guarantee from Aventus Group. No capital losses recorded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero historical capital loss&lt;/li&gt;
&lt;li&gt;Group guarantee from a financially solid originator group&lt;/li&gt;
&lt;li&gt;Clean, simple interface — low learning curve&lt;/li&gt;
&lt;li&gt;No fees on deposits, withdrawals, or investing&lt;/li&gt;
&lt;li&gt;Loyalty bonus program for larger portfolios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loan supply occasionally insufficient for investor demand (cash drag possible)&lt;/li&gt;
&lt;li&gt;No secondary market for early exits&lt;/li&gt;
&lt;li&gt;Platform is unregulated&lt;/li&gt;
&lt;li&gt;High concentration in Aventus Group loans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Conservative investors who prioritize reliability and a proven track record.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Esketit — Consumer Loans, High Efficiency
&lt;/h2&gt;

&lt;p&gt;Esketit is the clean-room option for consumer loan investors. Backed by the AvaFin Group (formerly known as Creamfinance), the platform offers 12% average returns with 60-day buyback guarantees and a group guarantee layer on top.&lt;/p&gt;

&lt;p&gt;The secondary market has no fees. Minimum investment is €10. Auto-invest is functional and easy to configure.&lt;/p&gt;

&lt;p&gt;The trade-off is concentration: most loans come from a single originator group. That's efficient until it isn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns:&lt;/strong&gt; 10–14% annually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk protection:&lt;/strong&gt; 60-day buyback guarantee + AvaFin Group guarantee. Low historical default rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistently high Trustpilot rating&lt;/li&gt;
&lt;li&gt;Group guarantee adds a second protection layer&lt;/li&gt;
&lt;li&gt;Secondary market with zero fees&lt;/li&gt;
&lt;li&gt;€10 minimum — accessible for very small portfolios&lt;/li&gt;
&lt;li&gt;Backed by an originator with 10+ years of experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No regulatory license (unregulated platform)&lt;/li&gt;
&lt;li&gt;Strong originator concentration — almost all loans are AvaFin-originated&lt;/li&gt;
&lt;li&gt;Exposure to consumer loan risk, which behaves differently from SME/collateralized loans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Investors focused on short-term consumer loans who want simplicity and solid buyback protection.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Bondora Go &amp;amp; Grow — Passive Income with Daily Liquidity
&lt;/h2&gt;

&lt;p&gt;Bondora belongs in this list for a different reason than the others. It's not the highest yield. It's the simplest entry point.&lt;/p&gt;

&lt;p&gt;Go &amp;amp; Grow offers 6% annually with daily liquidity. You deposit money, it earns 6%, you withdraw whenever you want. No loan selection. No configuration. No complexity.&lt;/p&gt;

&lt;p&gt;For someone who wants to park savings at returns above a bank account without thinking about originators, collateral, or buyback mechanics — Bondora is the answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returns:&lt;/strong&gt; 6% fixed annually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk protection:&lt;/strong&gt; Regulated in Estonia. No buyback guarantee — Bondora manages the portfolio internally. Investors do not see underlying loans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Daily liquidity (rare in crowdlending)&lt;/li&gt;
&lt;li&gt;Fully automated — zero management required&lt;/li&gt;
&lt;li&gt;Regulated, experienced platform (founded 2008)&lt;/li&gt;
&lt;li&gt;Minimum €1 investment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6% is significantly below what structured platforms like Maclear or Mintos offer&lt;/li&gt;
&lt;li&gt;No visibility into underlying loans&lt;/li&gt;
&lt;li&gt;Not suitable for investors seeking higher yields or active control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Beginners or investors who want passive savings above bank rates with instant access to funds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Annual Return&lt;/th&gt;
&lt;th&gt;Protection Type&lt;/th&gt;
&lt;th&gt;Min. Investment&lt;/th&gt;
&lt;th&gt;Regulation&lt;/th&gt;
&lt;th&gt;Secondary Market&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maclear&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13.5–16.5%&lt;/td&gt;
&lt;td&gt;Collateral + Provision Fund&lt;/td&gt;
&lt;td&gt;€50&lt;/td&gt;
&lt;td&gt;Swiss (PolyReg SRO)&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mintos&lt;/td&gt;
&lt;td&gt;10–12.25%&lt;/td&gt;
&lt;td&gt;Buyback (originator-dependent)&lt;/td&gt;
&lt;td&gt;€50&lt;/td&gt;
&lt;td&gt;Latvia (FCMC)&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PeerBerry&lt;/td&gt;
&lt;td&gt;10–12%&lt;/td&gt;
&lt;td&gt;Buyback + Group Guarantee&lt;/td&gt;
&lt;td&gt;€10&lt;/td&gt;
&lt;td&gt;Unregulated&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Esketit&lt;/td&gt;
&lt;td&gt;10–14%&lt;/td&gt;
&lt;td&gt;Buyback + Group Guarantee&lt;/td&gt;
&lt;td&gt;€10&lt;/td&gt;
&lt;td&gt;Unregulated&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bondora G&amp;amp;G&lt;/td&gt;
&lt;td&gt;6% fixed&lt;/td&gt;
&lt;td&gt;Internal management&lt;/td&gt;
&lt;td&gt;€1&lt;/td&gt;
&lt;td&gt;Estonia (FSA)&lt;/td&gt;
&lt;td&gt;❌ N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why Maclear Ranks First
&lt;/h2&gt;

&lt;p&gt;Most crowdlending platforms offer the same structure: a buyback guarantee backed by the same originator that issued the loan.&lt;/p&gt;

&lt;p&gt;That structure has a well-known weakness. If the originator runs into financial trouble, the buyback promise becomes difficult to honor. It's not necessarily fraud — it's counterparty risk that investors often don't fully price in until a problem surfaces.&lt;/p&gt;

&lt;p&gt;Maclear is structured differently.&lt;/p&gt;

&lt;p&gt;Every loan is backed by real collateral — physical assets that exist regardless of whether the originator is solvent. And because Maclear acts as Collateral Agent, it can enforce recovery on behalf of investors independently, without waiting for borrower cooperation.&lt;/p&gt;

&lt;p&gt;The Provision Fund, the 60%+ rejection rate on applications, the Swiss regulatory environment, and zero missed investor payments to date all point in the same direction: a platform designed with downside scenarios in mind, not just upside marketing.&lt;/p&gt;

&lt;p&gt;That's not a guarantee of future performance. No platform is. But it's a meaningfully different risk architecture than what most alternatives offer.&lt;/p&gt;

&lt;p&gt;If you want to explore it, you can &lt;a href="https://app.maclear.ch/en/registration?ref=E478W7" rel="noopener noreferrer"&gt;open an account here&lt;/a&gt; — new investors get a 2% cashback bonus for the first 90 days.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is crowdlending safe?&lt;/strong&gt;&lt;br&gt;
No investment is risk-free, and crowdlending is no exception. The key variables are platform structure, borrower vetting, and what happens when a loan defaults. Platforms backed by real collateral (like Maclear) offer a different risk profile than those relying solely on buyback guarantees from loan originators — where the guarantee is only as solid as the originator's solvency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What returns can I realistically expect from crowdlending?&lt;/strong&gt;&lt;br&gt;
Conservative platforms like Bondora's Go &amp;amp; Grow offer 6% with high liquidity. Mid-range platforms like PeerBerry and Mintos average 10–12%. Structured SME platforms like Maclear offer 13.5–16.5%, reflecting a more selective borrower pool and collateral-backed structure. Always distinguish between the stated rate and the risk-adjusted return.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between P2P lending and P2B lending?&lt;/strong&gt;&lt;br&gt;
P2P (peer-to-peer) typically refers to lending to individual consumers. P2B (peer-to-business) refers to lending to companies — usually SMEs. P2B platforms like Maclear focus on business projects with defined collateral, which tends to offer more structured risk management than consumer loans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if a borrower defaults on Maclear?&lt;/strong&gt;&lt;br&gt;
Maclear acts as Collateral Agent for all loans. In the event of a default, the platform initiates recovery independently on behalf of investors — enforcing collateral rights and managing the legal process. The one default recorded on the platform to date resulted in full principal recovery for investors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I withdraw my money early?&lt;/strong&gt;&lt;br&gt;
On Maclear, investors can sell loan positions on the secondary market before maturity. Liquidity depends on buyer availability, but the option exists. Platforms like Bondora Go &amp;amp; Grow offer daily liquidity. PeerBerry does not have a secondary market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a Provision Fund?&lt;/strong&gt;&lt;br&gt;
A Provision Fund is a reserve of capital set aside to cover investor losses in the event of a default. On Maclear, it is funded by transferring 2% of every funded project directly to the fund. It acts as a buffer that operates independently from the borrower — providing an additional protection layer on top of collateral.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Maclear regulated?&lt;/strong&gt;&lt;br&gt;
Maclear is registered in Switzerland and is a member of PolyReg SRO, which requires compliance with Swiss AML regulations. The platform has applied for the European Crowdfunding Service Provider (ECSP) license. It is not yet licensed as an ECSP but operates under Swiss financial oversight — a stronger regulatory environment than many competing platforms registered in less scrutinized jurisdictions.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Top 5 Claude Code Skills for Algorithmic Trading</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Wed, 15 Apr 2026 11:04:20 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/top-5-claude-code-skills-for-algorithmic-trading-4dcm</link>
      <guid>https://dev.to/kevin_menesesgonzlez/top-5-claude-code-skills-for-algorithmic-trading-4dcm</guid>
      <description>&lt;p&gt;Most traders think the bottleneck is strategy.&lt;/p&gt;

&lt;p&gt;It's not.&lt;/p&gt;

&lt;p&gt;The bottleneck is the time between "I have an idea" and "this is running in production." Writing boilerplate, wiring APIs, debugging vectorbt errors at 2am. That's where most strategies die.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building systematic trading systems in Python,&lt;/li&gt;
&lt;li&gt;testing technical indicators before deploying real capital,&lt;/li&gt;
&lt;li&gt;or trying to compress weeks of quant work into days,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters.&lt;/p&gt;

&lt;p&gt;Claude Code isn't the chatbot. It's an agentic environment that runs in your terminal, reads your files, and executes code on your machine. For algorithmic trading, that changes what's possible.&lt;/p&gt;

&lt;p&gt;The real power comes from &lt;strong&gt;skills&lt;/strong&gt; — &lt;code&gt;SKILL.md&lt;/code&gt; files that function as instruction sets, telling Claude exactly how to approach a specific task. Think of them as recipes: step-by-step workflows Claude follows automatically when the task matches. Install one, and Claude transforms into a specialist for that domain.&lt;/p&gt;

&lt;p&gt;Here are 5 skills from public repositories that make Claude Code genuinely useful for trading — with the install commands, the recipes inside, and working Python code using EODHD for market data.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Backtesting Expert — Systematic Strategy Testing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/tradermonty/claude-trading-skills" rel="noopener noreferrer"&gt;tradermonty/claude-trading-skills&lt;/a&gt; · ⭐ 16&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/tradermonty/claude-trading-skills.git
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; claude-trading-skills/skills/backtest-expert ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This skill turns Claude Code into a dedicated backtesting analyst. The &lt;code&gt;SKILL.md&lt;/code&gt; recipe instructs Claude to follow a structured workflow every time you describe a strategy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKILL RECIPE (backtest-expert):
1. Confirm strategy rules and parameters
2. Fetch historical OHLCV data for the specified symbol and period
3. Compute indicator(s) from scratch — no library black boxes
4. Generate entry/exit signals with explicit conditions
5. Run a vectorized backtest: returns, Sharpe, max drawdown, win rate
6. Output equity curve + summary table
7. Flag overfitting risks if in-sample window &amp;lt; 2 years
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice, you describe your idea in plain English. Claude follows the recipe.&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;requests&lt;/span&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;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&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_EODHD_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Fetch EOD historical prices via EODHD REST API
&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/AAPL.US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&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-01-01&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;to&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-12-31&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;period&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;d&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;fmt&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;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&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="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;adjusted_close&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;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inplace&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&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;close&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;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# RSI from scratch
&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;gain&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;loss&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rsi&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;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Signals
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&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;0&lt;/span&gt;
&lt;span class="n"&gt;df&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;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rsi&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;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&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;1&lt;/span&gt;  &lt;span class="c1"&gt;# buy
&lt;/span&gt;&lt;span class="n"&gt;df&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;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rsi&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;70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&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="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# sell
&lt;/span&gt;
&lt;span class="c1"&gt;# Vectorized strategy returns
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;returns&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;pct_change&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strategy&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;returns&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;sharpe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;252&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;strategy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;prod&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sharpe: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sharpe&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Total return: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&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;From here you can build: walk-forward validation loops, multi-ticker screeners, parameter sensitivity grids.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured workflow prevents skipping the overfitting check&lt;/li&gt;
&lt;li&gt;Forces explicit signal logic — no implicit library assumptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires a clear strategy description upfront; vague inputs produce generic backtests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Quants who test 5–10 strategy variants per week and need reproducible, comparable results across all of them.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Market Data Pipeline — EODHD Integration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/JoelLewis/finance_skills" rel="noopener noreferrer"&gt;JoelLewis/finance_skills&lt;/a&gt; · trading-operations plugin&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add JoelLewis/finance_skills &lt;span class="nt"&gt;--plugin&lt;/span&gt; trading-operations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This skill handles the full data ingestion layer. Its recipe standardizes how Claude fetches and structures market data — EOD prices, intraday bars, fundamentals, and real-time quotes — from a single provider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKILL RECIPE (market-data-pipeline):
1. Identify data type needed: EOD / intraday / fundamentals / real-time
2. Select the correct EODHD endpoint for that data type
3. Build the request with proper params (symbol format, date range, interval)
4. Normalize response to a DataFrame with standard column names
5. Apply corporate-action adjustments for historical price analysis
6. Cache the result to avoid redundant API calls in the same session
7. Return the DataFrame ready for indicator computation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad data is the silent killer of backtests. Survivorship bias, unadjusted prices, missing corporate actions — these don't throw errors. They just make your strategy look better than it is.&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;requests&lt;/span&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="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_EODHD_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_eod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&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&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;period&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;d&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;fmt&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;json&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;df&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="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;open&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;high&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;low&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;close&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;adjusted_close&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;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_intraday&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1m&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/intraday/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;interval&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fmt&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;json&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;df&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="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;datetime&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;datetime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;datetime&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;open&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;high&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;low&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;close&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;volume&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_fundamentals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/fundamentals/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fmt&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;json&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;aapl&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_eod&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.US&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-01-01&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-12-31&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;fund&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_fundamentals&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.US&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&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fund&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Highlights&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;EPS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EPS: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;eps&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Latest adjusted close: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;aapl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;adjusted_close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&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;EODHD covers 70+ exchanges worldwide — US equities, ETFs, forex, crypto — with corporate-action-adjusted prices and a free tier for prototyping.&lt;/p&gt;

&lt;p&gt;👉 Get started with EODHD and get 10% off any paid plan: &lt;a href="https://eodhd.com/?via=kmg&amp;amp;ref1=Meneses&amp;amp;utm_source=medium&amp;amp;utm_medium=post&amp;amp;utm_campaign=top-5-claude-code-skills-for-algorithmic-trading-49620fa2b02c&amp;amp;utm_content=Meneses" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adjusted EOD + intraday (1-minute) + fundamentals + real-time from a single API&lt;/li&gt;
&lt;li&gt;Free tier available; paid plans from €19.99/mo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time non-delayed quotes require a paid plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Anyone building a serious backtesting or live system who needs institutional-quality data at indie-developer prices.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Signal Generator — Strategy Logic to Executable Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/scientiacapital/skills" rel="noopener noreferrer"&gt;ScientiaCapital/skills&lt;/a&gt; · active/signal-generation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/scientiacapital/skills.git
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; skills/active/signal-generation ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have a strategy. It lives in your head, in a research note, or in a TradingView Pine Script. You need it as clean, vectorized Python. This skill handles the translation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKILL RECIPE (signal-generation):
1. Parse strategy rules from natural language into explicit conditions
2. Map each condition to a pandas/numpy operation
3. Compute indicators using vectorized operations (no row-by-row loops)
4. Build entry and exit Series separately
5. Apply time-of-day or session filters if specified
6. Output DataFrame: [close, *indicators, signal, position]
7. Verify: no lookahead bias (all indicators shifted before signal comparison)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;requests&lt;/span&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;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&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_EODHD_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/TSLA.US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&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-01-01&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;to&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-12-31&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;period&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;d&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;fmt&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;json&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;df&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="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;high&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;low&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;adjusted_close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&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;adjusted_close&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;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# EMA crossover + ADX filter — no TA-Lib
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compute_adx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;tr&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="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&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;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dm_pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;dm_neg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;atr&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;di_pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dm_pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;atr&lt;/span&gt;
    &lt;span class="n"&gt;di_neg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dm_neg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;atr&lt;/span&gt;
    &lt;span class="n"&gt;dx&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;di_pos&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;di_neg&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;di_pos&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;di_neg&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;dx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema20&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="nf"&gt;ema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema50&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="nf"&gt;ema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adx&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="nf"&gt;compute_adx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cross_up&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema20&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema50&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;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema20&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ema50&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;adx_confirmed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adx&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;25&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&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="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cross_up&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;adx_confirmed&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&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;1&lt;/span&gt;&lt;span class="p"&gt;][[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&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;ema20&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;ema50&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;adx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lookahead-bias check is baked into the recipe — Claude flags it before delivering code&lt;/li&gt;
&lt;li&gt;Produces vectorized pandas operations: production-ready, not tutorial code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always validate signal logic manually before connecting to live capital&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Traders who think in strategy rules and want Claude to handle the Python translation.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Risk Manager — Position Sizing and Exposure Control
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/JoelLewis/finance_skills" rel="noopener noreferrer"&gt;JoelLewis/finance_skills&lt;/a&gt; · wealth-management plugin (risk-measurement skill)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add JoelLewis/finance_skills &lt;span class="nt"&gt;--plugin&lt;/span&gt; wealth-management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strategy without risk management is speculation with extra steps. This skill gives Claude a structured decision framework for every sizing and exposure calculation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKILL RECIPE (risk-management):
1. Calculate ATR-based stop distance for the current setup
2. Apply fixed-fractional sizing (default: 1% account risk per trade)
3. Check portfolio heat: flag if total exposure &amp;gt; 5% of equity
4. Compute Historical VaR (95% confidence) on the current portfolio
5. Output: entry, stop, shares, dollar risk, R-multiple target
6. Define kill-switch threshold: halt new entries if drawdown &amp;gt; X%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;requests&lt;/span&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;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&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_EODHD_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/AAPL.US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&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-10-01&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;to&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-12-31&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;period&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;d&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;fmt&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;json&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;df&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="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;high&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;low&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;adjusted_close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&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;adjusted_close&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;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# ATR (14-period)
&lt;/span&gt;&lt;span class="n"&gt;tr&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="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&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;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;atr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ewm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;adjust&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;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;size_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;risk_pct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;risk_per_share&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;risk_per_share&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;equity&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;risk_pct&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;risk_per_share&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;equity&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10_000&lt;/span&gt;
&lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;stop_price&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;atr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shares&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;size_position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;entry_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Entry:         $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;entry_price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Stop (2×ATR):  $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;stop_price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  |  ATR: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;atr&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Position size: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;shares&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; shares&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dollar risk:   $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;shares&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry_price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;stop_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&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;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generates reusable, parameterized modules — not hardcoded values per trade&lt;/li&gt;
&lt;li&gt;Recipe includes portfolio heat check alongside per-trade sizing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sizing models require human review — Claude won't know your personal drawdown tolerance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Systematic traders running multiple strategies simultaneously who need a consistent, auditable risk framework.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Live Signal Monitor — Real-Time Alerts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/roman-rr/trading-skills" rel="noopener noreferrer"&gt;roman-rr/trading-skills&lt;/a&gt; · trading-signals skill&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/roman-rr/trading-skills.git
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; trading-skills/trading-signals ~/.claude/skills/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final skill closes the loop from research to live monitoring. Instead of running backtests, you're watching for signals in real time and triggering alerts when conditions are met.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SKILL RECIPE (live-signal-monitor):
1. Fetch real-time quote and recent EOD bars via EODHD REST API
2. Maintain a rolling window of bars in memory
3. Recompute indicator(s) on each new bar
4. Evaluate signal conditions — entry, exit, or hold
5. On signal trigger: log timestamp, symbol, price, indicator values
6. Send alert (print / Telegram / email)
7. Never execute orders directly — output signal only
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;requests&lt;/span&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;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&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_EODHD_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_live_quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fmt&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;json&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_recent_eod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Series&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;period&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;d&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;fmt&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;json&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;df&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="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&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;adjusted_close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compute_rsi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;series&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;series&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;gain&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;loss&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;rolling&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;gain&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL.US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitoring &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;-%&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-%&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;close_series&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_recent_eod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;live_price&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_live_quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;close_series&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Append live price as today's bar
&lt;/span&gt;    &lt;span class="n"&gt;today&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="n"&gt;Timestamp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;close_series&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;live_price&lt;/span&gt;

    &lt;span class="n"&gt;rsi&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;compute_rsi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;close_series&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;iloc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OVERSOLD → BUY WATCH&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OVERBOUGHT → SELL WATCH&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NEUTRAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;live_price&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | RSI: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rsi&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  🔔 ALERT: RSI oversold at &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rsi&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — review entry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pair this with a Telegram bot and you have automated signal detection running 24/7 — no manual chart watching.&lt;/p&gt;

&lt;p&gt;👉 Get started with EODHD and unlock 10% off any paid plan: &lt;a href="https://eodhd.com/?via=kmg&amp;amp;ref1=Meneses&amp;amp;utm_source=medium&amp;amp;utm_medium=post&amp;amp;utm_campaign=top-5-claude-code-skills-for-algorithmic-trading-49620fa2b02c&amp;amp;utm_content=Meneses" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Polling approach works with the free EODHD tier — no WebSocket subscription required&lt;/li&gt;
&lt;li&gt;Skill enforces the signal/execution separation — no accidental live orders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60-second polling isn't suitable for sub-minute strategies (use EODHD's WebSocket feed for those)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Swing and intraday traders who want automated signal detection without building a full execution system.&lt;/p&gt;




&lt;h2&gt;
  
  
  The shift
&lt;/h2&gt;

&lt;p&gt;Claude Code skills aren't magic. They're structured recipes that eliminate the "figure it out from scratch" tax on every new project.&lt;/p&gt;

&lt;p&gt;Five skills. One reliable data layer. The bottleneck shifts from implementation to what it should always have been: deciding which strategies are worth testing.&lt;/p&gt;

&lt;p&gt;Most quants don't lack ideas. They lack the bandwidth to implement fast enough to find the ones that actually work.&lt;/p&gt;

&lt;p&gt;That's what changes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>code</category>
      <category>stocks</category>
      <category>backtesting</category>
    </item>
    <item>
      <title>5 Best Onchain Data APIs for Developers in 2026</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:38:42 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/5-best-onchain-data-apis-for-developers-in-2026-1adf</link>
      <guid>https://dev.to/kevin_menesesgonzlez/5-best-onchain-data-apis-for-developers-in-2026-1adf</guid>
      <description>&lt;p&gt;Most developers underestimate the data problem until it's too late.&lt;/p&gt;

&lt;p&gt;You've built the logic. The strategy is solid. The architecture makes sense. Then you connect a price feed and realize it's cached. Or that the token you need isn't listed. Or that you're paying $99/month for a provider that covers 80% of what you actually need — and the missing 20% is exactly the part that matters.&lt;/p&gt;

&lt;p&gt;The onchain data layer is where crypto products quietly break.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building a trading bot that needs to react in seconds, not minutes,&lt;/li&gt;
&lt;li&gt;designing a wallet dashboard that tracks PnL across multiple chains,&lt;/li&gt;
&lt;li&gt;or shipping a DeFi tool that depends on newly listed tokens,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the provider you choose will define how far you can go before hitting a wall.&lt;/p&gt;

&lt;p&gt;The problem isn't that good APIs don't exist. The problem is that most comparisons treat them as interchangeable — as if "blockchain data API" means the same thing regardless of what you're building.&lt;/p&gt;

&lt;p&gt;It doesn't.&lt;/p&gt;

&lt;p&gt;An indexer optimized for historical compliance data is a completely different product from a real-time trading infrastructure layer. A decentralized protocol built for protocol-specific subgraphs solves a different problem than a multi-chain wallet analytics API. Choosing the wrong one doesn't mean your product fails immediately — it means you hit the ceiling at exactly the wrong moment.&lt;/p&gt;

&lt;p&gt;This guide cuts through that.&lt;/p&gt;

&lt;p&gt;We compare five of the best onchain data APIs available to developers in 2026 — &lt;strong&gt;Mobula, Moralis, Bitquery, The Graph, and GoldRush (Covalent)&lt;/strong&gt; — focusing on features, data coverage, pricing, free tiers, and what each one is actually built for.&lt;/p&gt;

&lt;p&gt;By the end, you'll know which one fits your stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Overview of the Top 5 Onchain Data API Providers
&lt;/h2&gt;




&lt;h2&gt;
  
  
  1. Mobula — Real-Time Onchain Data + Execution in One Platform
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://mobula.io/" rel="noopener noreferrer"&gt;mobula.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mobula is the only provider on this list that combines a real-time data layer with a built-in execution layer. You can fetch live prices, stream wallet activity, and route onchain swaps through the same API — no second provider needed.&lt;/p&gt;

&lt;p&gt;At the core is the &lt;strong&gt;Octopus engine&lt;/strong&gt;: a multi-chain, composable pricing system that aggregates prices using volume weighting and liquidity ponderation directly from DEX pools. It covers everything from Bitcoin and Ethereum down to tokens listed on obscure DEXs in the last hour, with prices refreshing every 5 seconds and no caching on any tier — including free.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Coverage and Features
&lt;/h3&gt;

&lt;p&gt;Mobula's API surface is wide. The platform exposes 50+ REST endpoints and 10+ real-time WebSocket streams, covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live token prices, 24h change, volume, and market cap for any asset on any supported chain&lt;/li&gt;
&lt;li&gt;OHLCV historical data for backtesting and charting&lt;/li&gt;
&lt;li&gt;Wallet portfolio analytics: balances, historical PnL, DeFi positions, NFT holdings, and wallet labels across chains&lt;/li&gt;
&lt;li&gt;Pair-level and pool-level data: trades, liquidity, pool creation, newly listed tokens&lt;/li&gt;
&lt;li&gt;Token security checks and holder distribution&lt;/li&gt;
&lt;li&gt;Execution layer: swap quotes and onchain trade routing via a single API call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this is accessible via REST, WebSocket streams, a TypeScript SDK, and a GraphQL interface. The team responds to support queries in under an hour across Telegram, Slack, and Discord.&lt;/p&gt;

&lt;p&gt;Beyond standard data retrieval, the Octopus engine specifically handles what most providers fail at: long-tail tokens. New listings on any DEX, low-liquidity assets, freshly deployed contracts — the engine picks them up as soon as they have trading activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain Coverage
&lt;/h3&gt;

&lt;p&gt;Ethereum, Solana, BNB Chain, Base, Arbitrum, Optimism, Polygon, Avalanche, and many others. Multi-chain wallet queries aggregate across all supported networks in a single call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and Limits
&lt;/h3&gt;

&lt;p&gt;Mobula offers a free API key with immediate access to the full endpoint suite, including no-cache pricing. No credit card required to start.&lt;/p&gt;

&lt;p&gt;Paid plans scale with usage through the &lt;a href="https://admin.mobula.io" rel="noopener noreferrer"&gt;Mobula dashboard&lt;/a&gt;, priced by request volume rather than a flat monthly subscription. For teams running lean bots or early-stage apps, this model is significantly more cost-efficient than paying $49–$99/month flat. Enterprise and custom plans available via Telegram or email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No-cache 5-second price refresh on all tiers, including free&lt;/li&gt;
&lt;li&gt;Data + execution in one API — fetch price and route the swap without switching providers&lt;/li&gt;
&lt;li&gt;Broadest long-tail token coverage via the Octopus aggregation engine&lt;/li&gt;
&lt;li&gt;Full wallet analytics: PnL, DeFi positions, NFT holdings, wallet labels&lt;/li&gt;
&lt;li&gt;REST + WebSocket + TypeScript SDK + GraphQL — developer-first from day one&lt;/li&gt;
&lt;li&gt;Sub-1h support response time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires coding — no visual interface or no-code builder&lt;/li&gt;
&lt;li&gt;Execution layer is newer than the data layer&lt;/li&gt;
&lt;li&gt;Smaller community than Moralis or The Graph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developers building trading bots, price aggregators, wallet dashboards, or any product that needs real-time onchain data and the ability to act on it — from a single provider.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://admin.mobula.io" rel="noopener noreferrer"&gt;Get your free Mobula API key&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Moralis — Enterprise-Grade Web3 Backend Infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://moralis.com/" rel="noopener noreferrer"&gt;moralis.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moralis is the most complete Web3 backend platform on this list. It started as a Firebase-for-blockchain and has evolved into a full-stack data infrastructure layer trusted by MetaMask, Blockchain.com, and hundreds of production applications processing billions of API requests per month.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Coverage and Features
&lt;/h3&gt;

&lt;p&gt;The platform covers multiple distinct product lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data APIs&lt;/strong&gt;: token prices, wallet history, NFT metadata, DeFi positions, token holders, swap data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streams API&lt;/strong&gt;: real-time blockchain event monitoring for any wallet, contract, or address — with a 100% delivery guarantee and webhook delivery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Datashare&lt;/strong&gt;: bulk export of blockchain datasets to Snowflake, BigQuery, and S3 for data warehousing and AI pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cortex API&lt;/strong&gt;: an AI-native, LLM-ready crypto data layer for building onchain AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moralis uses a &lt;strong&gt;Compute Units (CUs)&lt;/strong&gt; pricing model. Every API request consumes a different number of CUs depending on complexity — a simple token balance check costs fewer CUs than a multi-chain portfolio aggregation.&lt;/p&gt;

&lt;p&gt;The Streams API deserves special attention. If your product needs to react the moment a wallet receives a token, a smart contract emits an event, or a liquidation threshold is crossed — Moralis Streams handles it reliably at scale with a 100% delivery guarantee.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain Coverage
&lt;/h3&gt;

&lt;p&gt;Ethereum, Solana, BNB Chain, Base, Polygon, Avalanche, Arbitrum, Optimism, and many more EVM-compatible chains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and Limits
&lt;/h3&gt;

&lt;p&gt;Moralis offers a &lt;strong&gt;free Starter plan&lt;/strong&gt; with limited CUs per month. Paid plans start at approximately $49/month and scale to $199/month for higher CU allowances, premium endpoints, and auto-scaling. Enterprise plans with SOC 2 Type II compliance and ISO 27001 certification are available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streams API: 100% delivery guarantee for real-time event monitoring&lt;/li&gt;
&lt;li&gt;Broadest EVM + Solana coverage among enterprise providers&lt;/li&gt;
&lt;li&gt;SOC 2 Type II and ISO 27001 certified&lt;/li&gt;
&lt;li&gt;Cortex AI layer for LLM-ready data pipelines&lt;/li&gt;
&lt;li&gt;Trusted by MetaMask, Blockchain.com, and other large-scale apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CU pricing can be unpredictable for complex or high-frequency workloads&lt;/li&gt;
&lt;li&gt;No built-in execution layer — data only&lt;/li&gt;
&lt;li&gt;Higher entry price for serious production use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams building production-grade dApps, portfolio trackers, AI agents, or compliance tools that need enterprise reliability and event-driven architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Bitquery — Deep Blockchain Analytics via GraphQL and Kafka
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://bitquery.io/" rel="noopener noreferrer"&gt;bitquery.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bitquery is the go-to choice when you need granular, custom queries across 40+ blockchains. Its GraphQL API lets you filter, aggregate, and stream data at a depth that REST-based APIs simply don't expose. Since July 2025 it also offers a dedicated multi-chain Price Index API and Kafka streams for ultra-high-throughput pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Coverage and Features
&lt;/h3&gt;

&lt;p&gt;Using its GraphQL interface, developers can query:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time and historical DEX trade data across all supported chains&lt;/li&gt;
&lt;li&gt;Token prices via the Price Index: OHLCV, SMA, WMA, EMA, cross-chain and cross-DEX aggregations at 1-second granularity&lt;/li&gt;
&lt;li&gt;Wallet transactions, token transfers, internal calls, and failed transactions&lt;/li&gt;
&lt;li&gt;Mempool data — useful for MEV detection, front-running analysis, and liquidation bots&lt;/li&gt;
&lt;li&gt;NFT trades, smart contract events, and protocol-level analytics&lt;/li&gt;
&lt;li&gt;Kafka streams and WebSocket subscriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chain Coverage
&lt;/h3&gt;

&lt;p&gt;40+ chains including Ethereum, BNB Chain, Solana, Polygon, Arbitrum, Bitcoin (non-EVM), and Tron.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and Limits
&lt;/h3&gt;

&lt;p&gt;Bitquery uses a &lt;strong&gt;points-based pricing system&lt;/strong&gt; where queries consume points based on infrastructure resource usage. A free community tier is available for development and light use. Paid plans are usage-based and customized through the sales team — no publicly listed flat-rate tiers for production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;40+ chains including non-EVM networks like Bitcoin&lt;/li&gt;
&lt;li&gt;1-second price granularity via Kafka streams&lt;/li&gt;
&lt;li&gt;Mempool data access — rare among providers, critical for MEV research&lt;/li&gt;
&lt;li&gt;Extremely flexible querying: aggregations, filters, cross-chain joins in one call&lt;/li&gt;
&lt;li&gt;OHLCV + SMA + WMA + EMA pre-calculated in the Price Index&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Steep GraphQL learning curve — not beginner-friendly&lt;/li&gt;
&lt;li&gt;Pricing is opaque: no clear public flat-rate tiers, requires sales contact&lt;/li&gt;
&lt;li&gt;No execution layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Blockchain analytics, MEV research, algorithmic trading requiring tick-level data, compliance tools, and deeply customized cross-chain queries.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Graph — Decentralized Indexing Protocol
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://thegraph.com/" rel="noopener noreferrer"&gt;thegraph.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Graph takes a fundamentally different architectural approach. Rather than a centralized API, it's a decentralized protocol where developers deploy &lt;strong&gt;subgraphs&lt;/strong&gt; — custom indexing schemas tied to specific smart contracts. Query fees are paid in GRT tokens to a network of indexers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Coverage and Features
&lt;/h3&gt;

&lt;p&gt;The value of The Graph depends on what subgraphs already exist. For major DeFi protocols — Uniswap, Aave, Compound, Curve, Balancer — there are well-maintained, community-curated subgraphs that deliver highly efficient, protocol-specific data.&lt;/p&gt;

&lt;p&gt;For anything outside supported protocols, developers must build their own subgraph: define a schema, write mapping logic in AssemblyScript, deploy to the decentralized network. Significant setup overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain Coverage
&lt;/h3&gt;

&lt;p&gt;Primarily EVM chains: Ethereum, Arbitrum, Optimism, Polygon, Base, Avalanche, Gnosis, and others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and Limits
&lt;/h3&gt;

&lt;p&gt;The Graph uses a token-economic model where consumers pay GRT for queries. No flat monthly fee — costs scale directly with usage. The Graph Foundation offers grants and subsidies for education and public good infrastructure projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Censorship-resistant and decentralized — no vendor dependency&lt;/li&gt;
&lt;li&gt;Highly efficient for protocol-specific indexed data&lt;/li&gt;
&lt;li&gt;Large library of existing subgraphs for major DeFi protocols&lt;/li&gt;
&lt;li&gt;Open source — full visibility into data pipelines&lt;/li&gt;
&lt;li&gt;No vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Significant setup overhead for custom subgraphs&lt;/li&gt;
&lt;li&gt;Not suitable for real-time arbitrary token price feeds&lt;/li&gt;
&lt;li&gt;No wallet-level analytics or cross-protocol coverage out of the box&lt;/li&gt;
&lt;li&gt;GRT costs are less predictable than flat subscriptions&lt;/li&gt;
&lt;li&gt;No execution layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; dApp developers building on specific, well-supported DeFi protocols who need reliable, decentralized, protocol-specific indexed data.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. GoldRush (Covalent) — Historical Depth Across 100+ Chains
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://goldrush.dev/" rel="noopener noreferrer"&gt;goldrush.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GoldRush, the rebranded product from Covalent, specializes in structured historical onchain data with a clean, standardized REST interface. It covers 100+ blockchains — the broadest chain support of any provider on this list — and delivers every endpoint in a consistent schema, making it fast to integrate and easy to switch chains without rewriting queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Coverage and Features
&lt;/h3&gt;

&lt;p&gt;GoldRush focuses on making historical blockchain data accessible and structured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full transaction history for any wallet address across all supported chains&lt;/li&gt;
&lt;li&gt;Token balances and portfolio snapshots at any block height&lt;/li&gt;
&lt;li&gt;NFT metadata, floor prices, and ownership history&lt;/li&gt;
&lt;li&gt;Token approval tracking — useful for security audits and revoke tools&lt;/li&gt;
&lt;li&gt;DEX liquidity and swap data&lt;/li&gt;
&lt;li&gt;Historical PnL and unrealized/realized gains per token via the &lt;code&gt;upnlForWallet&lt;/code&gt; GraphQL endpoint&lt;/li&gt;
&lt;li&gt;A terminal-first interface for developers and AI agents to query data without writing code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Particularly strong for &lt;strong&gt;audit-grade historical accuracy&lt;/strong&gt;: compliance tools, tax reporting, portfolio analytics, and any product that needs to reconstruct wallet state at an arbitrary point in the past. GoldRush maintains a full archival copy of every supported blockchain from the genesis block — every balance, transaction, and log event.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain Coverage
&lt;/h3&gt;

&lt;p&gt;100+ chains including Ethereum, BNB Chain, Polygon, Avalanche, Base, Optimism, Arbitrum, and a large number of smaller EVM-compatible networks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and Limits
&lt;/h3&gt;

&lt;p&gt;GoldRush offers a &lt;strong&gt;14-day free trial&lt;/strong&gt; with access to all APIs and 25,000 API credits. After the trial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vibe Coding&lt;/strong&gt;: $10/month — 10,000 credits, community Discord support, full historical data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional&lt;/strong&gt;: $250/month — 300,000 credits, auto-scaling flex credits, production-grade performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inner Circle (Enterprise)&lt;/strong&gt;: Custom pricing — dedicated support, SLAs, NDAs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100+ chains — the widest coverage of any provider on this list&lt;/li&gt;
&lt;li&gt;Consistent REST schema across all chains — one integration pattern for everything&lt;/li&gt;
&lt;li&gt;Strong historical depth: full transaction history from genesis block&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;upnlForWallet&lt;/code&gt; endpoint for PnL and cost basis — ideal for tax reporting tools&lt;/li&gt;
&lt;li&gt;Transparent, predictable credit-based pricing&lt;/li&gt;
&lt;li&gt;Terminal-first interface for AI agents and developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not optimized for real-time price feeds or active trading use cases&lt;/li&gt;
&lt;li&gt;No execution layer&lt;/li&gt;
&lt;li&gt;Significant pricing gap between $10 and $250 tiers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Portfolio trackers, compliance and audit tools, tax reporting platforms, and any product that needs structured historical onchain data across a wide range of chains.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Mobula&lt;/th&gt;
&lt;th&gt;Moralis&lt;/th&gt;
&lt;th&gt;Bitquery&lt;/th&gt;
&lt;th&gt;The Graph&lt;/th&gt;
&lt;th&gt;GoldRush&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real-time prices&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ 5s, no cache&lt;/td&gt;
&lt;td&gt;✅ Block-level&lt;/td&gt;
&lt;td&gt;✅ 1s via Kafka&lt;/td&gt;
&lt;td&gt;⚠️ Protocol-specific&lt;/td&gt;
&lt;td&gt;⚠️ Not focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Long-tail tokens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Octopus engine&lt;/td&gt;
&lt;td&gt;⚠️ Major tokens&lt;/td&gt;
&lt;td&gt;✅ DEX trades&lt;/td&gt;
&lt;td&gt;⚠️ Subgraph needed&lt;/td&gt;
&lt;td&gt;✅ Historical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chain coverage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Multi-chain&lt;/td&gt;
&lt;td&gt;✅ EVM + Solana&lt;/td&gt;
&lt;td&gt;✅ 40+ chains&lt;/td&gt;
&lt;td&gt;✅ EVM-focused&lt;/td&gt;
&lt;td&gt;✅ 100+ chains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wallet analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ Custom queries&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ Historical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Historical data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Deep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real-time streams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ WebSocket&lt;/td&gt;
&lt;td&gt;✅ Streams API&lt;/td&gt;
&lt;td&gt;✅ Kafka/WS&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mempool data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Free API key&lt;/td&gt;
&lt;td&gt;✅ Limited CU&lt;/td&gt;
&lt;td&gt;✅ Limited&lt;/td&gt;
&lt;td&gt;✅ GRT-based&lt;/td&gt;
&lt;td&gt;✅ 14-day trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usage-based&lt;/td&gt;
&lt;td&gt;CU-based&lt;/td&gt;
&lt;td&gt;Points-based&lt;/td&gt;
&lt;td&gt;GRT tokens&lt;/td&gt;
&lt;td&gt;Credit-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entry price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free → usage&lt;/td&gt;
&lt;td&gt;Free → ~$49/mo&lt;/td&gt;
&lt;td&gt;Free → custom&lt;/td&gt;
&lt;td&gt;Free → GRT&lt;/td&gt;
&lt;td&gt;Free trial → $10/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Ready to Build with Onchain Data That Moves at Market Speed?
&lt;/h2&gt;

&lt;p&gt;If you want real-time token prices with no caching, multi-chain wallet analytics, and the ability to execute swaps — all from a single provider, without stitching together three different APIs — Mobula is the practical pick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Mobula wins for most developer teams:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All-in-one:&lt;/strong&gt; data + execution in one API — no second provider for swap routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest refresh rate:&lt;/strong&gt; 5-second no-cache pricing on every tier, including free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-tail coverage:&lt;/strong&gt; Octopus engine tracks any token the moment it has liquidity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer-first:&lt;/strong&gt; REST + WebSocket + TypeScript SDK + GraphQL, sub-1h support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start free:&lt;/strong&gt; full API access, no credit card, no sandbox limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What you can ship this week:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live price monitors for any token across any supported chain&lt;/li&gt;
&lt;li&gt;Multi-wallet PnL dashboards with historical balance tracking&lt;/li&gt;
&lt;li&gt;Bot triggers based on real-time price thresholds&lt;/li&gt;
&lt;li&gt;Swap execution flows without switching providers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://admin.mobula.io" rel="noopener noreferrer"&gt;Start for free with Mobula — grab your API key and make your first request in minutes.&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the best onchain data API for building a crypto trading bot?
&lt;/h3&gt;

&lt;p&gt;Mobula is the strongest option for trading bots. It provides real-time prices with 5-second no-cache refresh, covers long-tail tokens via the Octopus engine, and includes a swap execution layer — all from a single REST API. Most other providers require combining a data API with a separate execution provider, which adds latency and complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which onchain API has the best free tier?
&lt;/h3&gt;

&lt;p&gt;Mobula offers a free API key with immediate access to the full endpoint suite including no-cache pricing — no credit card required. GoldRush offers a 14-day free trial with 25,000 credits and access to all APIs. Moralis has a free Starter plan with limited CUs. Bitquery provides a free community tier with limited daily query allowances.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between an onchain data API and a blockchain RPC node?
&lt;/h3&gt;

&lt;p&gt;A blockchain RPC node gives you raw access to chain state — but you need to parse and index everything yourself. An onchain data API does that indexing and aggregation for you, delivering structured, application-ready data through clean endpoints. For most product teams, onchain data APIs are significantly faster to integrate and easier to scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which onchain API covers the most chains?
&lt;/h3&gt;

&lt;p&gt;GoldRush (Covalent) leads with 100+ supported chains. Bitquery covers 40+ chains including non-EVM networks like Bitcoin. Mobula and Moralis focus on the most-used chains with deep per-chain coverage rather than maximum breadth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use an onchain data API without coding experience?
&lt;/h3&gt;

&lt;p&gt;Most providers require development knowledge. Moralis is the most accessible for Web3 newcomers. GoldRush offers a terminal interface for AI agents and non-coders. For production bot-building or custom analytics, you will need to write code regardless of provider.&lt;/p&gt;




&lt;p&gt;Onchain data is infrastructure. The provider you choose defines your latency, your coverage, and your cost structure as you scale.&lt;/p&gt;

&lt;p&gt;The ceiling you hit six months from now is the decision you make today.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>api</category>
      <category>defi</category>
      <category>cryptocurrency</category>
    </item>
    <item>
      <title>Top 5 Cryptocurrency Data APIs: Comprehensive Comparison (2026)</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Mon, 13 Apr 2026 19:56:09 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/top-5-cryptocurrency-data-apis-comprehensive-comparison-2026-bml</link>
      <guid>https://dev.to/kevin_menesesgonzlez/top-5-cryptocurrency-data-apis-comprehensive-comparison-2026-bml</guid>
      <description>&lt;p&gt;Choosing the right API means finding a balance between data coverage, update speed, reliability, and cost.&lt;/p&gt;

&lt;p&gt;In this article, we compare five of the most popular crypto data API providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EODHD&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CoinMarketCap&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CoinGecko&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CryptoCompare&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Glassnode&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We evaluate each on data types (historical, real-time, on-chain), rate limits, documentation quality, and pricing plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Mobula — The Developer-First Onchain Data &amp;amp; Execution Layer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;Mobula Official Site&lt;/a&gt; | &lt;strong&gt;Standout Feature:&lt;/strong&gt; Stream-based, real-time onchain API infrastructure with sub-second latency, multi-chain coverage, and built-in execution — the data backbone for building serious trading bots.&lt;/p&gt;

&lt;p&gt;Most trading bot platforms give you a pre-packaged interface and call it a day. Mobula takes a different approach: it gives you the raw infrastructure to build exactly the bot you want.&lt;/p&gt;

&lt;p&gt;Mobula is a real-time onchain data and execution platform designed for developers building automated trading tools, crypto dashboards, AI agents, and DeFi products. At its core is the &lt;strong&gt;Octopus engine&lt;/strong&gt; — a multi-chain pricing system that tracks assets from major tokens down to the latest listings on any DEX, aggregating prices using volume weighting and liquidity ponderation. Prices update every 5 seconds with no caching, even on free plans, and streams are available via both REST and WebSocket (WSS).&lt;/p&gt;

&lt;p&gt;Where Mobula stands apart is its breadth. The API covers over 50 endpoints and 10+ real-time streams: token prices, wallet balances, historical PnL, pair trades, pool states, OHLCV data, wallet labels, token security checks, and more. It also includes an &lt;strong&gt;execution layer&lt;/strong&gt; — meaning you can not only pull live market data but also route swaps and execute onchain trades programmatically. That combination (data + execution in one API) is what makes it especially powerful for bot builders who want to skip stitching together multiple providers.&lt;/p&gt;

&lt;p&gt;Mobula supports a wide range of chains including Ethereum, Solana, BNB Chain, Base, and many others, with a TypeScript SDK and a GraphQL interface available alongside the REST API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blazing fast, no-cache data:&lt;/strong&gt; Prices refresh every 5 seconds with no cache on any tier — your bot reacts to the real market, not stale snapshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data + execution in one platform:&lt;/strong&gt; Pull prices, wallet states, and pair-level data, then route swaps through the same API. No need to juggle five providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broadest onchain coverage:&lt;/strong&gt; The Octopus engine covers not just top-cap coins but long-tail tokens, newly listed DEX pairs, and low-liquidity assets — essential for strategies that go beyond BTC/ETH.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer-first tooling:&lt;/strong&gt; REST, WebSocket streams, TypeScript SDK, GraphQL, and detailed documentation with real-world cookbooks (Telegram bots, liquidation alerts, AI agents). Free API key to get started immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-chain wallet analytics:&lt;/strong&gt; Track PnL, historical balance, trades, DeFi positions, and NFT holdings across chains in a single call — gold for portfolio-aware bots.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Requires coding:&lt;/strong&gt; Mobula is an API, not a no-code interface. If you're not comfortable with Python, JavaScript, or TypeScript, you'll need to pair it with another tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No visual strategy builder:&lt;/strong&gt; Unlike Cryptohopper or Coinrule, there's no drag-and-drop interface. You build your own logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execution layer is newer:&lt;/strong&gt; The swap execution and spot/perps features are more recent additions; mature no-code platforms have more battle-tested execution track records at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Mobula offers a free tier with a free API key — queries without an API key are available for testing but not production-ready. Paid plans are available through the Mobula dashboard, with pricing scaled to usage and rate limits. Given that most competitors charge $50–$100+/month for flat subscriptions, Mobula's usage-based model can be significantly more cost-efficient for builders running lean bots or early-stage projects. Contact the team via Telegram or email for custom enterprise plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Developers and technically proficient traders who want to build custom bots, dashboards, or AI agents on top of institutional-grade onchain data. If your ideal setup is writing your own strategy in Python or TypeScript — not clicking through a UI — Mobula is the infrastructure layer you've been looking for. It's also the natural choice when your strategy involves DeFi tokens, newly listed assets, or cross-chain wallet tracking that most no-code platforms simply don't cover.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. EODHD — All-in-One Multi-Asset Data
&lt;/h2&gt;

&lt;p&gt;EODHD is a versatile financial data provider covering stocks, forex, and cryptocurrencies under a single API. It supports 2,600+ crypto pairs against USD and offers data types that most providers split across multiple products.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Historical Price Data&lt;/strong&gt;&lt;br&gt;
Daily OHLCV (open-high-low-close-volume) going back to 2009 for major coins — essentially Bitcoin's entire history. Ideal for long-term backtesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Market Data&lt;/strong&gt;&lt;br&gt;
Live crypto price quotes via REST API and WebSocket, with up to 1,000 requests/minute on paid plans. Bulk endpoints available for efficient multi-asset pulls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamental Metrics&lt;/strong&gt;&lt;br&gt;
Market cap (actual and diluted), circulating/total/max supply, all-time highs/lows, whitepaper links, block explorer links. Not a full on-chain analytics platform, but fundamentals are solid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;&lt;br&gt;
Clean JSON responses (CSV optional), Excel and Google Sheets add-ons, an API Academy with code examples, and 24/7 live customer support.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Calls/Day&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Basic exploration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$19.99/mo&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;End-of-day + live data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-Time&lt;/td&gt;
&lt;td&gt;$29.99/mo&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;Adds WebSocket streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All-in-One&lt;/td&gt;
&lt;td&gt;$99.99/mo&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Everything incl. fundamentals, news&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Students get 50% off. Enterprise/commercial licenses available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best price-to-performance ratio in the list. Especially powerful if you need crypto &lt;em&gt;and&lt;/em&gt; equities/FX under one API key.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. CoinMarketCap — Industry-Standard Market Data
&lt;/h2&gt;

&lt;p&gt;CoinMarketCap is the most recognized crypto data aggregator, tracking 10,000+ assets from hundreds of exchanges. It's the default choice for current prices, rankings, and global market stats.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Quotes&lt;/strong&gt;&lt;br&gt;
Prices, market caps, volumes, rankings, and global metrics (total market cap, BTC dominance). Data refreshes every 1–2 minutes — no WebSocket streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical Data&lt;/strong&gt;&lt;br&gt;
Available on paid tiers. Daily and intraday historical OHLCV back to 2013. The free tier only returns latest data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exchange &amp;amp; Derivatives Data&lt;/strong&gt;&lt;br&gt;
Exchange listings, trading pair metadata, liquidity scores, and futures/options prices on higher plans. No on-chain metrics.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Monthly Credits&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;10,000 (~333/day)&lt;/td&gt;
&lt;td&gt;Current data only, 11 endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hobbyist&lt;/td&gt;
&lt;td&gt;~$29/mo&lt;/td&gt;
&lt;td&gt;~50,000&lt;/td&gt;
&lt;td&gt;More endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup&lt;/td&gt;
&lt;td&gt;~$79/mo&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;Intraday history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;~$199/mo&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;td&gt;Derivatives, more history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;$699+/mo&lt;/td&gt;
&lt;td&gt;Millions&lt;/td&gt;
&lt;td&gt;Full dataset + SLA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Very robust but expensive at scale. The free tier lacks historical data, which limits it for research use cases.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. CoinGecko — Broad Coverage &amp;amp; Developer-Friendly
&lt;/h2&gt;

&lt;p&gt;CoinGecko tracks 13,000+ cryptocurrencies, including small-caps, DeFi tokens, and NFTs. It's the go-to for breadth of coverage and a genuinely useful free tier.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Wide Asset Coverage&lt;/strong&gt;&lt;br&gt;
Any asset trading on a major exchange or DEX is likely listed. DeFi protocols, NFT collections, and emerging tokens included.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beyond Price Data&lt;/strong&gt;&lt;br&gt;
GitHub repo stats (forks, stars, commits), social media followers, Reddit subscribers — useful for gauging community health alongside price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST Only&lt;/strong&gt;&lt;br&gt;
No WebSocket streaming. Free users get data cached every 1–5 minutes; Pro users get 30-second updates.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Calls/Month&lt;/th&gt;
&lt;th&gt;Rate Limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Demo (Free)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;~10–30/min dynamic&lt;/td&gt;
&lt;td&gt;Lower priority&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyst&lt;/td&gt;
&lt;td&gt;~$129/mo&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;500/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;~$499/mo&lt;/td&gt;
&lt;td&gt;2,000,000&lt;/td&gt;
&lt;td&gt;500/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;~$999+/mo&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best free tier in this comparison. If you need heavy usage or guaranteed uptime, costs rise sharply. Great for projects that value breadth over latency.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. CryptoCompare — Full Market Data + Extras
&lt;/h2&gt;

&lt;p&gt;CryptoCompare covers 5,700+ coins across 260,000+ trading pairs from 170+ exchanges. It aggregates prices into a proprietary index (CCCAGG) that filters out exchange anomalies, making it reliable for backtesting.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Market Data&lt;/strong&gt;&lt;br&gt;
Real-time quotes, order book snapshots, tick-level trade data, OHLCV at multiple intervals. WebSocket available for streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical Data&lt;/strong&gt;&lt;br&gt;
Full daily history on all plans; minute-level history goes up to 7 days on standard plans, up to 1 year on enterprise. Raw trade data available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Extra Data Layers&lt;/strong&gt;&lt;br&gt;
News feeds, social sentiment endpoints, and basic on-chain metrics (transaction counts, address data for major chains). Not as deep as Glassnode, but useful for correlation analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;br&gt;
Up to 40,000 API calls/second burst capacity. Built for real-time dashboards.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Non-commercial, thousands of calls/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;~$80/mo&lt;/td&gt;
&lt;td&gt;~100k calls/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;~$200/mo&lt;/td&gt;
&lt;td&gt;More resolution + endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Unlimited + raw data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Best option if you need price data &lt;em&gt;and&lt;/em&gt; news/sentiment in one place. Mid-range pricing. Minute-level history beyond 7 days requires enterprise.&lt;/p&gt;


&lt;h2&gt;
  
  
  6. Glassnode — On-Chain Analytics Leader
&lt;/h2&gt;

&lt;p&gt;Glassnode is the industry standard for blockchain analytics. Its focus is not market prices but the &lt;em&gt;fundamental health of blockchain networks&lt;/em&gt; — what's happening inside the chain, not just on the order book.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;800+ On-Chain Metrics&lt;/strong&gt;&lt;br&gt;
Active addresses, transaction volumes, exchange inflows/outflows, UTXO distributions, SOPR, realized cap, HODLer stats, mining hash rates, and much more across Bitcoin, Ethereum, Litecoin, and major ERC-20 tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Derivatives Data&lt;/strong&gt;&lt;br&gt;
Futures open interest, funding rates, and options data on higher tiers — useful for correlating on-chain behavior with derivatives markets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time Resolutions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free: Daily, previous day's data&lt;/li&gt;
&lt;li&gt;Advanced: Up to hourly&lt;/li&gt;
&lt;li&gt;Professional: Down to 10-minute intervals&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Access Level&lt;/th&gt;
&lt;th&gt;Resolution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Basic Tier 1 metrics&lt;/td&gt;
&lt;td&gt;Daily only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;~$29–49/mo&lt;/td&gt;
&lt;td&gt;Essential Tier 2&lt;/td&gt;
&lt;td&gt;Hourly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;~$79/mo&lt;/td&gt;
&lt;td&gt;All metrics&lt;/td&gt;
&lt;td&gt;10-minute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;API + custom SLAs&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ API access is officially included only for Professional/Enterprise users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Irreplaceable for on-chain research. Not the right tool if you just need price feeds. Best suited for analysts and quant funds, not everyday app development.&lt;/p&gt;


&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Historical Data&lt;/th&gt;
&lt;th&gt;Real-Time&lt;/th&gt;
&lt;th&gt;On-Chain&lt;/th&gt;
&lt;th&gt;WebSocket&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;th&gt;Starting Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EODHD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ 30 years&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;20 calls/day&lt;/td&gt;
&lt;td&gt;$19.99/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoinMarketCap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (paid)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Latest only&lt;/td&gt;
&lt;td&gt;$29/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoinGecko&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Near real-time&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~10–30/min&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CryptoCompare&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;~$80/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glassnode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌ (focus is on-chain)&lt;/td&gt;
&lt;td&gt;✅ 800+ metrics&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Daily, delayed&lt;/td&gt;
&lt;td&gt;~$29/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Which API Should You Use?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Building a trading bot or portfolio tracker?&lt;/strong&gt; → EODHD or CoinMarketCap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need maximum asset coverage on a budget?&lt;/strong&gt; → CoinGecko free tier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Want price + news + basic on-chain in one?&lt;/strong&gt; → CryptoCompare&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doing institutional on-chain research?&lt;/strong&gt; → Glassnode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need crypto &lt;em&gt;and&lt;/em&gt; equities/FX under one key?&lt;/strong&gt; → EODHD&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Getting Started with EODHD (Free)
&lt;/h2&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;requests&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_api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC-USD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;params&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;api_token&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="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fmt&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;json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Symbol: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;code&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price:  $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Volume: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;volume&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&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;Grab a free API key at &lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt; and make your first request in minutes.&lt;/p&gt;


&lt;h2&gt;
  
  
  What can you ship this week?
&lt;/h2&gt;



&lt;p&gt;📈 &lt;strong&gt;Real-time dashboards&lt;/strong&gt; — Live crypto prices and alerts via REST or WebSocket.&lt;/p&gt;

&lt;p&gt;🔁 &lt;strong&gt;Strategy backtesting&lt;/strong&gt; — Years of OHLCV data to validate your logic before going live.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Cross-asset analytics&lt;/strong&gt; — Correlate BTC vs S&amp;amp;P 500, ETH vs USD from one API key.&lt;/p&gt;

&lt;p&gt;📊 &lt;strong&gt;Auto-refreshing spreadsheets&lt;/strong&gt; — Excel and Google Sheets add-ins, no code required.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://eodhd.com" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;🚀 Get your free EODHD API key →&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cryptocurrency</category>
      <category>api</category>
      <category>fintech</category>
      <category>python</category>
    </item>
    <item>
      <title>The 7 Best MCP Servers for Stock Market Data (2026)</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Sun, 12 Apr 2026 11:04:17 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/the-7-best-mcp-servers-for-stock-market-data-2026-389l</link>
      <guid>https://dev.to/kevin_menesesgonzlez/the-7-best-mcp-servers-for-stock-market-data-2026-389l</guid>
      <description>&lt;p&gt;Everyone is building MCP servers.&lt;/p&gt;

&lt;p&gt;Almost nobody is talking about data quality.&lt;/p&gt;

&lt;p&gt;If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building AI agents that trade or analyze markets,&lt;/li&gt;
&lt;li&gt;connecting LLMs to financial workflows,&lt;/li&gt;
&lt;li&gt;or replacing a fragile API wrapper with something that actually scales,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MCP you choose isn't a minor implementation detail. It's your data foundation.&lt;/p&gt;

&lt;p&gt;And a bad foundation breaks everything downstream.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Mentions
&lt;/h2&gt;

&lt;p&gt;Here's what typically happens.&lt;/p&gt;

&lt;p&gt;A developer finds an MCP server, connects it in ten minutes, runs a few queries, gets clean JSON back. Looks great. Ships it.&lt;/p&gt;

&lt;p&gt;Then, three weeks later:&lt;/p&gt;

&lt;p&gt;Rate limits hit during a live session. Fundamentals are six months stale. The free tier silently returns incomplete data without an error. The endpoint for options chains requires a separate paid plan that wasn't in the docs.&lt;/p&gt;

&lt;p&gt;The MCP worked. The data didn't.&lt;/p&gt;

&lt;p&gt;That's the real problem with most MCP server comparisons: they evaluate the connector, not what's behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Read This Comparison
&lt;/h2&gt;

&lt;p&gt;Each server is evaluated on five criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data depth&lt;/strong&gt; — prices, fundamentals, options, macroeconomic data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time quality&lt;/strong&gt; — latency, update frequency, free vs. paid tier gap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP maturity&lt;/strong&gt; — official support, stability, documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer experience&lt;/strong&gt; — setup speed, response structure, Python integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best-fit use case&lt;/strong&gt; — where it actually wins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a "best overall" ranking. It's a best-for-your-job guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. EODHD — Best for Fundamentals + OHLCV in One Call
&lt;/h2&gt;

&lt;p&gt;EODHD (End-of-Day Historical Data) is the most complete financial data provider for developers who need both price data and company fundamentals without juggling multiple APIs.&lt;/p&gt;

&lt;p&gt;Its MCP server exposes the same clean REST infrastructure that powers production fintech workflows — covering global equities, ETFs, forex, crypto, macroeconomic indicators, and earnings calendars through a single, predictable interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fundamentals and OHLCV data in one endpoint — no merging from separate sources&lt;/li&gt;
&lt;li&gt;Broad global coverage: US, Europe, Asia, 70+ exchanges&lt;/li&gt;
&lt;li&gt;Consistent response structure, automation-friendly (no surprise field changes)&lt;/li&gt;
&lt;li&gt;Financial news API with sentiment analysis included&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free tier limited to 20 API calls/day — sufficient for testing, not for production&lt;/li&gt;
&lt;li&gt;Some niche datasets (full options chains) require higher-tier plans&lt;/li&gt;
&lt;li&gt;Less brand recognition than Alpha Vantage among beginners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; AI agents doing fundamental analysis, backtesting pipelines, n8n/Python automation workflows that need price + financials in one call.&lt;/p&gt;

&lt;p&gt;Here's what a basic integration looks like:&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;requests&lt;/span&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="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_EODHD_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL.US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Historical OHLCV
&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/eod/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;fmt=json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;df&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="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;returns&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="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;close&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;pct_change&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Fundamentals in the same session
&lt;/span&gt;&lt;span class="n"&gt;fund_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/fundamentals/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;filter=Highlights,Valuation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;fundamentals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fund_url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PE Ratio:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fundamentals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Highlights&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;PERatio&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;From here you can build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stock screeners combining price momentum and valuation&lt;/li&gt;
&lt;li&gt;AI agent contexts with full financial snapshots&lt;/li&gt;
&lt;li&gt;Automated research reports with no manual data merging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Get started with EODHD APIs here: &lt;a href="https://eodhd.com/?via=kmg&amp;amp;ref1=Meneses&amp;amp;utm_source=medium&amp;amp;utm_medium=post&amp;amp;utm_campaign=the-7-best-mcp-servers-for-stock-market-data-2026-a08c55179541&amp;amp;utm_content=Meneses" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Financial Modeling Prep (FMP) — Best for Deep Fundamental Screening
&lt;/h2&gt;

&lt;p&gt;FMP is the go-to choice when your agent needs to go deeper than prices — income statements, balance sheets, cash flow, DCF valuations, insider transactions, and analyst estimates, all available through a clean REST interface.&lt;/p&gt;

&lt;p&gt;Its MCP server makes it straightforward to connect these datasets directly into AI workflows, without building custom parsers for SEC filings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exceptional fundamentals depth: 10+ years of standardized financials per company&lt;/li&gt;
&lt;li&gt;Built-in valuation endpoints (DCF, P/E comparison, EV/EBITDA)&lt;/li&gt;
&lt;li&gt;Affordable entry point (~$19.99/month for serious access)&lt;/li&gt;
&lt;li&gt;Google Sheets add-on for non-code workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free tier: 250 calls/day — hits limits fast in multi-ticker workflows&lt;/li&gt;
&lt;li&gt;Real-time data is on paid plans; free tier is end-of-day only&lt;/li&gt;
&lt;li&gt;Not a streaming solution — snapshot-based only&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Equity analysts, AI-powered stock screeners, any workflow that needs multi-year financials without writing a Bloomberg integration.&lt;/p&gt;

&lt;p&gt;👉 Explore FMP pricing plans: &lt;a href="https://site.financialmodelingprep.com/pricing-plans?utm_source=blog&amp;amp;utm_medium=medium&amp;amp;utm_campaign=keving14" rel="noopener noreferrer"&gt;financialmodelingprep.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Alpaca — Best for Agents That Execute Trades
&lt;/h2&gt;

&lt;p&gt;Alpaca is the only option on this list that combines market data with a commission-free brokerage API. This means your AI agent can go from analysis to order placement in the same workflow, without switching platforms.&lt;/p&gt;

&lt;p&gt;The MCP server exposes both the data layer and the trading layer — real-time quotes, historical bars, account management, and order execution — all through the same interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data + execution in one API: no brokerage integration required&lt;/li&gt;
&lt;li&gt;Paper trading environment included — test strategies with live data risk-free&lt;/li&gt;
&lt;li&gt;Free core tier with real-time US equity data&lt;/li&gt;
&lt;li&gt;Python SDK is excellent; community is active&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US equities and crypto only — no international markets&lt;/li&gt;
&lt;li&gt;Live trading requires KYC and US residency (or select other countries)&lt;/li&gt;
&lt;li&gt;Data depth is narrower than dedicated providers (no deep fundamentals)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Trading bots, strategy automation, AI agents that need to close the loop between signal and execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Alpha Vantage — Best Free Tier for Beginners
&lt;/h2&gt;

&lt;p&gt;Alpha Vantage is the most widely known financial data provider for developers learning to build with market data. Its MCP server makes the same accessible infrastructure available to AI agents — stocks, forex, crypto, commodities, and built-in technical indicators.&lt;/p&gt;

&lt;p&gt;The free tier is genuinely useful for prototyping, which is why it appears in so many tutorials and side projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in technical indicators (RSI, MACD, Bollinger Bands) via direct API call&lt;/li&gt;
&lt;li&gt;Official Nasdaq data vendor — data reliability is solid for US equities&lt;/li&gt;
&lt;li&gt;Free tier covers real-time US quotes: no credit card required to start&lt;/li&gt;
&lt;li&gt;Extensive community examples and documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free limit: 25 calls/day (standard), 5 calls/minute — hits walls fast&lt;/li&gt;
&lt;li&gt;Fundamentals are basic compared to EODHD or FMP&lt;/li&gt;
&lt;li&gt;International market coverage is limited on lower tiers&lt;/li&gt;
&lt;li&gt;Paid plans start at $29.99/month but rate limits still feel restrictive at entry level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Learning, prototyping, agents that need quick technical indicators without building them manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Polygon.io — Best for Real-Time US Market Data
&lt;/h2&gt;

&lt;p&gt;Polygon is built for speed. If your agent needs tick-by-tick price data, WebSocket streaming, or low-latency US equity quotes, Polygon is the specialist choice.&lt;/p&gt;

&lt;p&gt;Its MCP server exposes the same infrastructure used by trading desks and fintech startups that can't afford delayed data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebSocket streaming: live trades and quotes with minimal latency&lt;/li&gt;
&lt;li&gt;Full tick-level historical data for backtesting high-frequency strategies&lt;/li&gt;
&lt;li&gt;Strong documentation with interactive API explorer&lt;/li&gt;
&lt;li&gt;Covers stocks, options, forex, and crypto under one account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primarily US-focused — limited international equity coverage&lt;/li&gt;
&lt;li&gt;Real-time professional-grade data gets expensive quickly (hundreds/month)&lt;/li&gt;
&lt;li&gt;Fundamentals and news coverage is thinner than EODHD or FMP&lt;/li&gt;
&lt;li&gt;Free tier: 5 requests/minute, 2 years of historical data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Day trading agents, live market dashboards, HFT-adjacent workflows where latency is the primary constraint.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Finnhub — Best for News + Sentiment Integration
&lt;/h2&gt;

&lt;p&gt;Finnhub covers a broad range of financial data types under one API — real-time quotes, fundamentals, earnings calendars, and financial news with sentiment scores. Its free tier is among the most generous: 60 API calls per minute.&lt;/p&gt;

&lt;p&gt;For agents that need to monitor news flow alongside price data, Finnhub is the easiest path to a combined signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60 calls/minute on the free tier — highest in this list&lt;/li&gt;
&lt;li&gt;Financial news with sentiment analysis included at no extra cost&lt;/li&gt;
&lt;li&gt;Corporate calendars: earnings, IPOs, economic events&lt;/li&gt;
&lt;li&gt;Multilingual news coverage and alternative data (ESG, COVID-19 stats)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full fundamentals and international data require paid plans ($49–50/month per market)&lt;/li&gt;
&lt;li&gt;Pricing can stack up fast if you need multiple markets&lt;/li&gt;
&lt;li&gt;Response structure is less consistent across endpoints than EODHD or FMP&lt;/li&gt;
&lt;li&gt;No WebSocket streaming for real-time price feeds on the free tier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; News-driven agents, sentiment analysis workflows, event-based trading strategies.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. QuantConnect — Best for Full Algo Trading Pipelines
&lt;/h2&gt;

&lt;p&gt;QuantConnect is a different category entirely. It's not a data provider with an MCP wrapper — it's an end-to-end algorithmic trading platform that exposes its backtesting engine, strategy deployment, and brokerage integration through the MCP protocol.&lt;/p&gt;

&lt;p&gt;If you're building AI agents that design, test, and execute trading strategies (not just analyze data), QuantConnect closes the entire loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full backtesting engine: equities, options, futures, forex, crypto&lt;/li&gt;
&lt;li&gt;Research-to-live-trading pipeline in one platform&lt;/li&gt;
&lt;li&gt;Open-source strategy library with thousands of community algorithms&lt;/li&gt;
&lt;li&gt;Brokerage integrations for real-money execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Steep learning curve — this is a serious platform, not a quick integration&lt;/li&gt;
&lt;li&gt;Pricing scales with compute usage, not just API calls&lt;/li&gt;
&lt;li&gt;Not suitable if you only need data — it's overkill for read-only workflows&lt;/li&gt;
&lt;li&gt;Python/C# required for strategy logic; no no-code option&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Serious algo traders who want AI agents to assist in the full strategy lifecycle — from signal generation to live execution.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Selection Guide
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Best Option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fundamentals + prices in one call&lt;/td&gt;
&lt;td&gt;EODHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deep financial statement analysis&lt;/td&gt;
&lt;td&gt;FMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trading bot with execution&lt;/td&gt;
&lt;td&gt;Alpaca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning / prototyping&lt;/td&gt;
&lt;td&gt;Alpha Vantage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time US streaming&lt;/td&gt;
&lt;td&gt;Polygon.io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News + sentiment signals&lt;/td&gt;
&lt;td&gt;Finnhub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full algo trading pipeline&lt;/td&gt;
&lt;td&gt;QuantConnect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global market coverage&lt;/td&gt;
&lt;td&gt;EODHD or FMP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best free tier (calls/min)&lt;/td&gt;
&lt;td&gt;Finnhub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best free tier (data depth)&lt;/td&gt;
&lt;td&gt;Alpha Vantage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Insight Most Guides Miss
&lt;/h2&gt;

&lt;p&gt;An MCP server is not a data source.&lt;/p&gt;

&lt;p&gt;It's a protocol layer on top of a data source.&lt;/p&gt;

&lt;p&gt;The quality of your financial agent depends almost entirely on what sits behind that layer — the coverage, consistency, and reliability of the underlying data. Two MCP servers can expose identical tool names and return fundamentally different results at production scale.&lt;/p&gt;

&lt;p&gt;Choose the connector that matches your data requirements first. Then evaluate the MCP implementation.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;p&gt;❓ &lt;strong&gt;What is an MCP server in the context of financial data?&lt;/strong&gt;&lt;br&gt;
✅ MCP (Model Context Protocol) is a standard that lets AI agents connect to external tools and data sources through a consistent interface. A financial MCP server exposes market data, fundamentals, or trading capabilities as tools that an LLM can call directly — without custom API wrappers or manual parsing.&lt;/p&gt;

&lt;p&gt;❓ &lt;strong&gt;Which MCP server has the best free tier for developers?&lt;/strong&gt;&lt;br&gt;
✅ Finnhub offers 60 API calls per minute for free, which is the most generous rate limit in this list. Alpha Vantage is the better choice if you need a broader mix of data types (prices + indicators + some fundamentals) for prototyping. For production work, both require paid plans.&lt;/p&gt;

&lt;p&gt;❓ &lt;strong&gt;Can I use these MCP servers with Claude or other AI agents?&lt;/strong&gt;&lt;br&gt;
✅ Yes. All servers in this list are compatible with MCP-enabled clients including Claude Desktop, Cursor, and VS Code. EODHD, FMP, and Alpha Vantage also expose standard REST APIs, which means you can integrate them directly into Python-based agent frameworks (LangChain, CrewAI, n8n) regardless of MCP support.&lt;/p&gt;

&lt;p&gt;❓ &lt;strong&gt;Is EODHD better than Alpha Vantage for financial agents?&lt;/strong&gt;&lt;br&gt;
✅ For production workflows, yes. EODHD covers both OHLCV data and company fundamentals under a single API with global exchange coverage — which eliminates the need to merge from multiple sources. Alpha Vantage is easier to start with and has excellent built-in technical indicators, but its free tier limits (25 calls/day) and thinner fundamentals make it less practical at scale.&lt;/p&gt;

&lt;p&gt;❓ &lt;strong&gt;Do I need coding skills to use these MCP servers?&lt;/strong&gt;&lt;br&gt;
✅ For most of them, basic Python knowledge is enough to get started. EODHD, FMP, and Alpha Vantage all have clear documentation with copy-paste examples. QuantConnect is the exception — strategy development there requires solid Python or C# skills. If you prefer no-code workflows, EODHD and FMP both offer Google Sheets integrations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;MCP is changing how financial data connects to AI systems.&lt;/p&gt;

&lt;p&gt;But the protocol is not the product. The data is.&lt;/p&gt;

&lt;p&gt;Pick the server that solves your actual data problem — not the one with the best GitHub stars or the most tutorials on YouTube.&lt;/p&gt;

&lt;p&gt;If you need one place to start, EODHD gives you the widest data surface for the least integration complexity. Fundamentals, prices, macroeconomics, and news — one API key, one clean interface.&lt;/p&gt;

&lt;p&gt;👉 Get started with EODHD: &lt;a href="https://eodhd.com/?via=kmg&amp;amp;ref1=Meneses&amp;amp;utm_source=medium&amp;amp;utm_medium=post&amp;amp;utm_campaign=the-7-best-mcp-servers-for-stock-market-data-2026-a08c55179541&amp;amp;utm_content=Meneses" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>stocks</category>
      <category>api</category>
      <category>finance</category>
    </item>
    <item>
      <title>How I Built a Daily Stock Digest Using n8n (Financial Automation Guide)</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Fri, 10 Apr 2026 11:40:31 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/how-i-built-a-daily-stock-digest-using-n8n-financial-automation-guide-4j28</link>
      <guid>https://dev.to/kevin_menesesgonzlez/how-i-built-a-daily-stock-digest-using-n8n-financial-automation-guide-4j28</guid>
      <description>&lt;p&gt;You open Chrome. One tab turns into eight.&lt;/p&gt;

&lt;p&gt;Yahoo Finance. TradingView. Twitter. A random newsletter you barely trust. Back to your watchlist. Copy. Paste. Scroll. Repeat.&lt;/p&gt;

&lt;p&gt;Forty-five minutes later, you still don't feel confident about what's actually moving the market.&lt;/p&gt;

&lt;p&gt;And the worst part?&lt;/p&gt;

&lt;p&gt;You'll do it all again tomorrow.&lt;/p&gt;

&lt;p&gt;There's a better way.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You're Actually Going to Build
&lt;/h2&gt;

&lt;p&gt;A daily email that lands in your inbox at 7 AM with your tracked stocks, clearly labeled movers (🟢 up, 🔴 down, ⚪ flat), plus the 2–3 most relevant news headlines per ticker.&lt;/p&gt;

&lt;p&gt;Built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;n8n workflow&lt;/li&gt;
&lt;li&gt;EODHD APIs (market data + news)&lt;/li&gt;
&lt;li&gt;Google Sheets (your watchlist)&lt;/li&gt;
&lt;li&gt;Gmail (delivery)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Problem Is Bigger Than It Looks
&lt;/h2&gt;

&lt;p&gt;This isn't about saving 30 minutes.&lt;/p&gt;

&lt;p&gt;It's about consistency.&lt;/p&gt;

&lt;p&gt;Manual research feels productive, but it's chaotic. One day you check everything. The next day you skip half your list because you're in a rush.&lt;/p&gt;

&lt;p&gt;That's how you miss entries.&lt;/p&gt;

&lt;p&gt;That's how you react instead of plan.&lt;/p&gt;

&lt;p&gt;And slowly, your "system" becomes noise.&lt;/p&gt;

&lt;p&gt;I realized this the hard way.&lt;/p&gt;

&lt;p&gt;I wasn't losing money because I lacked information.&lt;/p&gt;

&lt;p&gt;I was losing clarity because I had too much of it — scattered across tabs, tools, and half-finished notes.&lt;/p&gt;

&lt;p&gt;The fix wasn't more data.&lt;/p&gt;

&lt;p&gt;It was structure.&lt;/p&gt;

&lt;p&gt;That's where n8n financial automation changes everything.&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%2F2zpybezj9ud62uhhcv8j.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%2F2zpybezj9ud62uhhcv8j.png" alt=" " width="720" height="225"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Chose EODHD APIs (And Why It Actually Matters)
&lt;/h2&gt;

&lt;p&gt;Most people underestimate this part.&lt;/p&gt;

&lt;p&gt;They think: "I just need stock data."&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;You need reliable, structured, and consistent data — every single day.&lt;/p&gt;

&lt;p&gt;Otherwise, your automation breaks silently.&lt;/p&gt;

&lt;p&gt;I tested multiple APIs before landing on EODHD APIs. Some had good pricing but poor coverage. Others had great data… but inconsistent endpoints. And a few? They just randomly failed when you needed them most.&lt;/p&gt;

&lt;p&gt;That's unacceptable if you're building automated stock alerts.&lt;/p&gt;

&lt;p&gt;Here's what changed with EODHD.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. One API, Multiple Use Cases
&lt;/h3&gt;

&lt;p&gt;With a single provider, I could fetch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;End-of-day prices&lt;/li&gt;
&lt;li&gt;Intraday movements&lt;/li&gt;
&lt;li&gt;Financial news&lt;/li&gt;
&lt;li&gt;Fundamentals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matters. Because the moment you start stitching multiple APIs together… things break. Different formats. Different latencies. Different failure points.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Try EODHD APIs&lt;/a&gt;&lt;/strong&gt; — one consistent financial data API for prices, news, and fundamentals.&lt;br&gt;

&lt;/div&gt;


&lt;h3&gt;
  
  
  2. Clean, Predictable Responses
&lt;/h3&gt;

&lt;p&gt;This sounds boring. It's not.&lt;/p&gt;

&lt;p&gt;If your JSON structure changes unexpectedly, your whole n8n workflow collapses. With EODHD APIs, the responses are stable. Which means your automation stays stable. And that's the real goal.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Built for Automation, Not Just Dashboards
&lt;/h3&gt;

&lt;p&gt;Most tools are built for humans — dashboards, charts, interfaces. But when you're building stock market automation, you need something built for machines. Fast responses. Clear endpoints. No unnecessary noise.&lt;/p&gt;

&lt;p&gt;That's exactly what EODHD APIs provide.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Coverage That Actually Scales
&lt;/h3&gt;

&lt;p&gt;You start with 10 tickers. Then 20. Then 50. Maybe you add crypto. Maybe ETFs. Maybe international stocks.&lt;/p&gt;

&lt;p&gt;If your API can't scale with you, you'll rebuild everything later. EODHD handles that from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Hidden Advantage: News Integration
&lt;/h3&gt;

&lt;p&gt;This was the game changer.&lt;/p&gt;

&lt;p&gt;Most APIs give you price data. Few give you context.&lt;/p&gt;

&lt;p&gt;EODHD APIs let me pull news per ticker, which turns raw numbers into actionable insight. Because +2% without context is meaningless. +2% because of earnings or a product launch? That's signal.&lt;/p&gt;

&lt;p&gt;That's why this setup works — not because of n8n alone, but because the data layer is solid. And if you're serious about n8n financial automation, this is the part you don't want to mess up.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Workflow, Step by Step
&lt;/h2&gt;

&lt;p&gt;This entire system runs on a simple n8n workflow with five nodes. Each one does one job. Nothing fancy. Just clean automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Schedule Trigger (7 AM daily)
&lt;/h3&gt;

&lt;p&gt;Runs the workflow every morning before you wake up. Because if it depends on you clicking a button, it won't happen consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Google Sheets — Read Ticker List
&lt;/h3&gt;

&lt;p&gt;Pulls your watchlist dynamically from a simple spreadsheet. This turns your system into something you can edit in seconds without touching code.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. HTTP Request → EODHD APIs
&lt;/h3&gt;

&lt;p&gt;Fetches end-of-day price changes and latest news per ticker. This is where your financial data API does the heavy lifting.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Code Node (JavaScript)
&lt;/h3&gt;

&lt;p&gt;Classifies each stock as 🟢 / 🔴 / ⚪ and builds the email layout. This is the "brain" — turning raw data into something readable.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Gmail Node — Send the Digest
&lt;/h3&gt;

&lt;p&gt;Sends a clean, formatted email straight to your inbox. No dashboards. No logins. Just information where you already are.&lt;/p&gt;

&lt;p&gt;That's it. Five nodes. And suddenly you've built your own stock market automation system.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Output: What the Email Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Subject line:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📈 Daily Market Movers — March 23&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You open it. First thing you see: a clean list of your stocks, each one with a clear signal:&lt;/p&gt;

&lt;p&gt;No thinking required.&lt;/p&gt;

&lt;p&gt;Then underneath each ticker: 2–3 short headlines. Not 20 links. Just the ones that matter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AAPL 🟢 +2.3%&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple announces new AI chip strategy&lt;/li&gt;
&lt;li&gt;Analysts raise price target ahead of earnings&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;You scan it in under a minute. You understand what's happening in under two.&lt;/p&gt;

&lt;p&gt;And for the first time, your morning doesn't start with chaos. It starts with clarity.&lt;/p&gt;

&lt;p&gt;That's what n8n financial automation actually buys you.&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%2F5qgo8tlvttsuvs95yaju.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%2F5qgo8tlvttsuvs95yaju.png" alt=" " width="764" height="414"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Customize It for Your Strategy
&lt;/h2&gt;

&lt;p&gt;Once this is running, you'll start tweaking it. That's where it gets interesting.&lt;/p&gt;

&lt;p&gt;You can also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change your tickers directly in Google Sheets — no redeploy needed&lt;/li&gt;
&lt;li&gt;Adjust the "mover" threshold (e.g., only show stocks moving ±3%)&lt;/li&gt;
&lt;li&gt;Add a Slack or Telegram notification alongside email&lt;/li&gt;
&lt;li&gt;Extend it to crypto using the same EODHD APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or go further — turn it into a mini financial dashboard. Combine it with a screener:&lt;/p&gt;

&lt;p&gt;That's how simple workflow automation turns into a full system.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need coding skills to build this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not really. You can build most of this using n8n's visual interface. The only "code" part is the formatting node, and even that can be copied and adjusted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the EODHD APIs free tier enough to run this daily?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, for a small watchlist. If you're tracking 10–20 tickers, the free tier works fine. If you scale beyond that, upgrading makes sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run this on n8n cloud or do I need to self-host?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both work. n8n Cloud is faster to set up. Self-hosting gives you more control if you already run your own stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if a ticker returns an error?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can handle it in the workflow. Add a simple fallback in the code node to skip or flag missing data. Your email still sends — just without breaking everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I add more data points like earnings dates or analyst ratings?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. That's the beauty of using a proper financial data API. You can enrich the digest with whatever data matters to your strategy.&lt;/p&gt;




&lt;p&gt;You know that moment in the morning when you're staring at 8 tabs, trying to piece together what matters?&lt;/p&gt;

&lt;p&gt;That used to be me.&lt;/p&gt;

&lt;p&gt;Now I wake up, open one email, and I'm done. No friction. No noise. No wasted time. Just signal.&lt;/p&gt;

&lt;p&gt;If you're serious about building your own n8n financial automation system, don't overthink it. Set this up this weekend.&lt;/p&gt;

&lt;p&gt;Because once it's running, you don't go back.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Get your free EODHD APIs key here&lt;/a&gt;&lt;/strong&gt; — and have this running before Monday.&lt;br&gt;

&lt;/div&gt;





&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>api</category>
      <category>finance</category>
    </item>
    <item>
      <title>How to Connect Real-Time Stock Data to Your AI Agent (MCP Tutorial)</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Thu, 09 Apr 2026 20:20:55 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/how-to-connect-real-time-stock-data-to-your-ai-agent-mcp-tutorial-2oj</link>
      <guid>https://dev.to/kevin_menesesgonzlez/how-to-connect-real-time-stock-data-to-your-ai-agent-mcp-tutorial-2oj</guid>
      <description>&lt;p&gt;Most AI agents sound impressive until you ask for something that depends on the present moment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's Apple trading at right now?"&lt;br&gt;
"Show me the latest fundamentals for Microsoft."&lt;br&gt;
"Which stocks are moving today?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's when the weakness appears.&lt;/p&gt;

&lt;p&gt;A model can be eloquent, persuasive, and fast. But without access to external tools and live data, it is still reasoning in a closed room. Claude's tool use lets it request external functions that your application executes, and MCP is an open standard for connecting AI applications like Claude to tools and data sources.&lt;/p&gt;

&lt;p&gt;In finance, that limitation is fatal.&lt;/p&gt;

&lt;p&gt;Because in this category, "almost correct" is just another way of being wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem: AI Without Data Is Not a Financial Product
&lt;/h2&gt;

&lt;p&gt;A lot of people are building "AI finance apps" that are really just polished chat interfaces.&lt;/p&gt;

&lt;p&gt;They have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a nice prompt&lt;/li&gt;
&lt;li&gt;a clean UI&lt;/li&gt;
&lt;li&gt;maybe some charts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they do not have a robust data layer.&lt;/p&gt;

&lt;p&gt;That means the assistant cannot reliably access:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;live prices&lt;/li&gt;
&lt;li&gt;historical candles&lt;/li&gt;
&lt;li&gt;fundamental data&lt;/li&gt;
&lt;li&gt;market news&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that destroys trust.&lt;/p&gt;

&lt;p&gt;If a financial assistant cannot access current market information through tools or APIs, it either refuses, guesses, or answers from stale context. Claude's tool flow is explicitly designed so the model decides when to call a tool, your application runs it, and then the result is sent back for a grounded answer.&lt;/p&gt;

&lt;p&gt;That is why the real product is not "the chatbot."&lt;/p&gt;

&lt;p&gt;The real product is the combination of: &lt;strong&gt;LLM + tool access + reliable financial data&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why MCP Matters Here
&lt;/h2&gt;

&lt;p&gt;MCP matters because it gives your AI a clean way to interact with external capabilities instead of pretending to know everything.&lt;/p&gt;

&lt;p&gt;The MCP architecture is client-server based: a host such as Claude or Claude Desktop connects to one or more MCP servers, and those servers expose tools and resources. In practice, that means your AI can ask for a stock price, a fundamentals lookup, or a market-news request through an external tool instead of inventing an answer.&lt;/p&gt;

&lt;p&gt;That is the bridge from "smart text generation" to "useful financial system."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why EODHD APIs Are So Important
&lt;/h2&gt;

&lt;p&gt;This is the part people underestimate.&lt;/p&gt;

&lt;p&gt;You do not just need an API. You need a data source that is broad enough, stable enough, and practical enough to power repeated tool calls.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Try EODHD APIs&lt;/a&gt;&lt;/strong&gt; — the financial data layer that turns Claude from a language model into a finance-aware assistant.&lt;br&gt;

&lt;/div&gt;


&lt;p&gt;For an AI financial assistant, the data layer needs to support use cases like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current quote retrieval&lt;/li&gt;
&lt;li&gt;historical chart context&lt;/li&gt;
&lt;li&gt;fundamentals for deeper analysis&lt;/li&gt;
&lt;li&gt;news-driven reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your data is fragmented across multiple providers, integration gets messy fast. If the responses are inconsistent, the AI layer becomes brittle. If the coverage is weak, the user notices immediately.&lt;/p&gt;

&lt;p&gt;So the role of EODHD here is not cosmetic. It is the system that turns Claude from a language model into a finance-aware assistant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two Practical Ways to Connect Claude
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1: Claude API + Tool Calling
&lt;/h3&gt;

&lt;p&gt;This is the easiest path if you are building your own app or backend. Claude supports tool use through the Messages API: you define the tools, Claude decides when to request one, your app executes it, and then Claude uses the returned data in the final answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Claude + MCP Server
&lt;/h3&gt;

&lt;p&gt;This is ideal if you want Claude clients such as Claude Desktop or Claude Code to connect to your tools through MCP. Claude Code supports MCP connections, and Claude Desktop can connect to local MCP servers; Claude also supports remote MCP servers through custom connectors.&lt;/p&gt;

&lt;p&gt;For most projects, start with tool calling — it is simpler to understand. Then graduate to MCP when you want reusability across AI clients.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1 — Simple Claude Integration with Tool Calling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install the SDK
&lt;/h3&gt;

&lt;p&gt;Anthropic provides an official Python SDK for Claude.&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;anthropic requests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 2: Create the EODHD function
&lt;/h3&gt;

&lt;p&gt;This is the function your app will execute when Claude asks for stock 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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;EODHD_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_EODHD_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;fmt=json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This function is the bridge between Claude and real market data.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: Define the tool for Claude
&lt;/h3&gt;

&lt;p&gt;Claude needs a schema so it knows the tool exists, what it does, and which input it requires. Anthropic's tool use docs emphasize defining tool schemas and descriptions clearly so Claude knows when to call them.&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;tools&lt;/span&gt; &lt;span class="o"&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;name&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;get_stock_price&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;description&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;Get the latest real-time stock price for a public company ticker symbol using EODHD APIs.&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;input_schema&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;type&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;object&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;properties&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;symbol&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;type&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;string&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;description&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;Stock ticker symbol, for example AAPL, MSFT, TSLA&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;required&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;symbol&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4: Send the user question to Claude
&lt;/h3&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;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&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_ANTHROPIC_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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&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;role&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;user&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;content&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;What is the current price of Apple stock?&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Anthropic's Messages API is the standard way to construct turns, manage state, and build the tool loop yourself.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Detect Claude's tool request
&lt;/h3&gt;

&lt;p&gt;When Claude decides the question requires live data, it returns a tool-use block instead of answering directly. That is the expected flow in Anthropic's tool use pattern.&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Typically, Claude will request something equivalent to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tool_use"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_stock_price"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AAPL"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 6: Execute the function in your backend
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;At this point, your application has done the real work: it queried EODHD APIs and got live data.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Send the result back to Claude
&lt;/h3&gt;

&lt;p&gt;Now you continue the conversation and give Claude the tool result so it can answer the user with grounded 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="n"&gt;follow_up&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&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;role&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;user&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;content&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;What is the current price of Apple stock?&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;role&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;assistant&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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;role&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;user&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;content&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="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;follow_up&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And now Claude can answer with real market information instead of guessing.&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%2Ftuganpcxcjpir5yw1bd0.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%2Ftuganpcxcjpir5yw1bd0.png" alt=" " width="681" height="399"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Full Working Example (Claude + EODHD)
&lt;/h2&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;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&lt;/span&gt;

&lt;span class="n"&gt;ANTHROPIC_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_ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;EODHD_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_EODHD_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&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="n"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://eodhd.com/api/real-time/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?api_token=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;EODHD_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;fmt=json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&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;name&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;get_stock_price&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;description&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;Get the latest real-time stock price for a public company ticker symbol using EODHD APIs.&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;input_schema&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;type&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;object&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;properties&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;symbol&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;type&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;string&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;description&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;Stock ticker symbol, for example AAPL, MSFT, TSLA&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;required&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;symbol&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;user_question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is the current price of Apple stock?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&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;role&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;user&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_question&lt;/span&gt;
        &lt;span class="p"&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;tool_use_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_stock_price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;tool_use_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Claude answered directly:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;tool_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_stock_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;follow_up&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&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;role&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;user&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_question&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;role&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;assistant&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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;role&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;user&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;content&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="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&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;tool_result&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;tool_use_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tool_use_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Claude final grounded answer:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;follow_up&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the Claude Connection Actually Works
&lt;/h2&gt;

&lt;p&gt;Claude does not call your API directly by magic.&lt;/p&gt;

&lt;p&gt;The flow is this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user asks Claude a question.&lt;/li&gt;
&lt;li&gt;Claude sees that it needs external financial data.&lt;/li&gt;
&lt;li&gt;Claude requests a tool call.&lt;/li&gt;
&lt;li&gt;Your backend executes that tool.&lt;/li&gt;
&lt;li&gt;The tool fetches live data from EODHD APIs.&lt;/li&gt;
&lt;li&gt;Your backend sends the result back to Claude.&lt;/li&gt;
&lt;li&gt;Claude writes the final answer using that live data.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;That means Claude is the reasoning layer. Your tool is the execution layer. And EODHD APIs is the data layer that makes the whole thing useful.&lt;/p&gt;


&lt;h2&gt;
  
  
  If You Want Claude to Access This Through MCP
&lt;/h2&gt;

&lt;p&gt;If you want to expose the same capability through MCP, the idea is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You create an MCP server&lt;/li&gt;
&lt;li&gt;That server exposes a tool such as &lt;code&gt;get_stock_price&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Claude Desktop, Claude Code, or another MCP-compatible client connects to that server&lt;/li&gt;
&lt;li&gt;Claude can then use the tool through the MCP connection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;MCP servers are the standard way to expose tools to compatible AI clients, and Claude Code plus Claude Desktop both support MCP-based tool connections.&lt;/p&gt;

&lt;p&gt;Conceptually, it looks like this&lt;/p&gt;

&lt;p&gt;Claude / Claude Desktop / Claude Code&lt;br&gt;
↓&lt;br&gt;
MCP Client&lt;br&gt;
↓&lt;br&gt;
MCP Server&lt;br&gt;
↓&lt;br&gt;
EODHD API request&lt;br&gt;
↓&lt;br&gt;
Real-time market data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool calling&lt;/strong&gt; is great when you control the app. &lt;strong&gt;MCP&lt;/strong&gt; is great when you want to make your tool reusable across AI clients and workflows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you're building a custom finance app, tool calling is the fastest way to connect Claude to EODHD APIs.&lt;/li&gt;
&lt;li&gt;If you want a reusable integration that works across AI clients, MCP is the better long-term structure.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why EODHD APIs Is the Layer That Creates Trust
&lt;/h2&gt;

&lt;p&gt;In AI finance products, trust is not created by the model alone.&lt;/p&gt;

&lt;p&gt;It is created by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data freshness&lt;/li&gt;
&lt;li&gt;response consistency&lt;/li&gt;
&lt;li&gt;source reliability&lt;/li&gt;
&lt;li&gt;breadth of market coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why the data provider matters so much.&lt;/p&gt;

&lt;p&gt;A model can explain. A model can summarize. A model can compare.&lt;/p&gt;

&lt;p&gt;But only a strong financial API can provide the live market context that makes those outputs valuable.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;Explore EODHD APIs&lt;/a&gt;&lt;/strong&gt; — it gives Claude something far more important than words. It gives Claude evidence.&lt;br&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the easiest way to connect Claude to a financial API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The easiest way is to define a tool in the Claude Messages API, let Claude request it when needed, execute the API call in your backend, and return the result so Claude can answer with grounded data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Claude tool calling and MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tool calling is the direct API pattern where your application defines and runs tools for Claude. MCP is an open standard for exposing tools and data sources to compatible AI clients like Claude Desktop or Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use a financial API with Claude?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because Claude alone does not have guaranteed access to live market information. A financial API supplies current prices, fundamentals, and other real-world data needed for reliable finance use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is EODHD APIs useful for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because it gives your AI agent a practical source of financial data that can be called through tools, which makes the assistant more accurate, more useful, and far more product-ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Most AI agents in finance fail for one simple reason: they have intelligence, but they do not have access to reality.&lt;/p&gt;

&lt;p&gt;Claude can reason beautifully. MCP can connect tools elegantly. But EODHD APIs is what gives the system real financial substance.&lt;/p&gt;

&lt;p&gt;If you want to build an AI finance assistant that does more than generate polished guesses, start with the data layer.&lt;/p&gt;

&lt;p&gt;That is where the real product begins.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Looking for technical content for your company? I can help — &lt;a href="https://www.linkedin.com/in/kevin-meneses-gonzalez/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="mailto:kevinmenesesgonzalez@gmail.com"&gt;kevinmenesesgonzalez@gmail.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Tried 33 Data Analytics Courses and These 5 Are the Best</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Sun, 17 Nov 2024 13:21:59 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/i-tried-33-data-analytics-courses-and-these-5-are-the-best-4ijb</link>
      <guid>https://dev.to/kevin_menesesgonzlez/i-tried-33-data-analytics-courses-and-these-5-are-the-best-4ijb</guid>
      <description>&lt;p&gt;When I first dipped my toes into the world of data analytics, I was like many others: excited but lost. I remember sitting at my desk, watching hours of tutorials on YouTube, only to realize that half of them were either outdated or too simplistic. My frustration grew, especially one particular night when, after hours of wrestling with a data visualization project, I found myself scrolling through yet another online course catalog, feeling like I’d never find the right path. “Why does learning data analytics have to be so complicated?” I thought.&lt;/p&gt;

&lt;p&gt;That night, as I stared at my screen surrounded by coffee cups and crumpled notes, I promised myself I’d make this work. I dove headfirst into dozens of platforms, testing out courses across Google, DataCamp, and even Harvard’s edX, hoping to find something that could make the process clearer and more practical. After months of trial and error, I finally found a few gems that made a real difference in my journey.&lt;/p&gt;

&lt;p&gt;Here, I’ll break down the top five data analytics courses that were genuinely worth the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="http://datacamp.pxf.io/OrjyqK" rel="noopener noreferrer"&gt;DataCamp: Practical, Hands-On Learning for All Levels&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: DataCamp provides hands-on training focused on practical skills in data analysis, data science, and machine learning. The platform offers over 23 career tracks, including Data Analyst, Data Scientist, and Machine Learning Specialist, designed to meet users at any skill level — from complete beginners to advanced learners.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: DataCamp’s interactive, project-based learning approach makes it feel as if you’re actively working as a data analyst. You’re not just watching tutorials; you’re coding, visualizing, and manipulating data immediately, which reinforces learning. DataCamp also offers specialized tracks for key tools like Python, SQL, and Power BI — essential skills for a data analyst today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Certification Discounts: DataCamp has partnered with Microsoft to offer students a 50% discount on certification exams, making it easier to obtain recognized credentials.&lt;br&gt;
Flexible and Interactive: Courses are highly interactive, allowing you to work on real-world datasets and complete challenges.&lt;br&gt;
Tell me and I forget, teach me and I may remember, involve me and I learn.” — Benjamin Franklin. DataCamp’s interactive style truly embodies this principle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drawbacks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subscription-based, which may not appeal to those looking for a single-course purchase.&lt;br&gt;
If you’re looking to start your analytics career with practical, job-ready skills and certification discounts, DataCamp is a stellar choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Google Data Analytics Professional Certificate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Purpose&lt;/strong&gt;: Google’s Data Analytics Professional Certificate is aimed at absolute beginners, covering fundamental skills and preparing you for entry-level positions in data analysis.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: Developed by Google, the course teaches practical skills like data cleaning, data visualization, and basic statistical analysis. It’s a great introduction for those who are new to the field and provides a broad overview of core concepts that every data analyst should know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beginner-Friendly: Structured in a way that makes complex concepts easy to grasp.&lt;br&gt;
Practical Knowledge: Includes various projects and case studies that give students hands-on experience.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;Not an Industry-Recognized Certification: The certificate is not widely acknowledged by recruiters as an official qualification, but it serves as an excellent starting point.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The journey of a thousand miles begins with one step.” — Lao Tzu. Google’s certificate is that first step for anyone entering the data analytics world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re a beginner wanting a foundational overview, this certificate is a solid, approachable option.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Microsoft Power BI and SQL Certifications
&lt;/h2&gt;

&lt;p&gt;Purpose: Microsoft offers certifications for specific tools like Power BI (PL-300) and SQL (DP-300), which are highly valued in the data analytics industry.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: These certifications are industry-recognized, often required by employers, and cover both data visualization with Power BI and data management with SQL. This makes them essential for those wanting to demonstrate strong technical proficiency and a solid grasp of two in-demand tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Globally Recognized: Having a Microsoft certification on your resume can set you apart from others and even fulfill job prerequisites.&lt;br&gt;
Free Learning Pathways: Microsoft provides free study resources to prepare for these exams, making it accessible to everyone.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;Cost and Difficulty: Exam fees can add up ($165 for Power BI and $99 for Azure Fundamentals), and the exams require in-depth preparation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Success is where preparation and opportunity meet.” — Bobby Unser. Preparing for Microsoft certifications is challenging but incredibly rewarding for career growth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For those serious about a data analytics career, mastering Power BI and SQL with Microsoft’s certifications can significantly enhance your employability.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Tableau Certified Data Analyst
&lt;/h2&gt;

&lt;p&gt;Purpose: This certification validates your proficiency with Tableau, one of the top data visualization tools, and is highly valued by companies seeking candidates with advanced data visualization skills.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: The Tableau Certified Data Analyst credential proves your ability to analyze data and create visually compelling, interactive dashboards. This certification is particularly suited for business intelligence roles where data presentation is key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Highly Recognized Certification: Validates your ability to use Tableau, which is one of the most in-demand visualization tools.&lt;br&gt;
Practical Exam: The certification requires a hands-on test, so your knowledge is proven through real tasks.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;High Exam Cost: The certification exam is expensive at $250 and requires a subscription to Tableau’s learning resources. However, you can also prepare on DataCamp.&lt;br&gt;
“A picture is worth a thousand words.” — Fred R. Barnard. Tableau’s visualization capabilities bring data to life, making it easier for stakeholders to understand complex information.&lt;/p&gt;

&lt;p&gt;For those focused on a career in data visualization, Tableau certification is an asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. HarvardX Data Science Professional Certificate (edX
&lt;/h2&gt;

&lt;p&gt;)&lt;br&gt;
Purpose: HarvardX’s Data Science Professional Certificate provides a rigorous academic foundation in data science, covering programming in R, statistical concepts, and machine learning.&lt;/p&gt;

&lt;p&gt;Why It Stands Out: Taught by professors from Harvard, this program provides a high-caliber education and is recognized globally. It’s ideal for those interested in a thorough and respected foundation in data science, including data analysis, probability, and machine learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Academic Prestige: A certification from HarvardX stands out on any resume.&lt;br&gt;
Comprehensive Curriculum: Covers not only analytics but also deeper statistical methods and machine learning.&lt;br&gt;
Limitations:&lt;/p&gt;

&lt;p&gt;High Cost and Time Commitment: The certification costs over $1,200 and can take a year or more to complete if studied part-time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Education is the most powerful weapon which you can use to change the world.” — Nelson Mandela. This certification offers a transformative learning experience, backed by the academic rigor of Harvard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is perfect for those willing to invest in an intensive, high-quality education to gain in-depth data science knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Choosing the right course in data analytics can be daunting with so many options out there. If you’re looking to dive right in and start building skills that you can apply immediately, DataCamp offers an excellent balance of practical skills and recognized certifications. For entry-level fundamentals, Google’s certificate is a great place to begin, while Microsoft and Tableau certifications add significant value for specific technical skills. And if you’re looking for a comprehensive, prestigious academic experience, HarvardX provides exactly that.&lt;/p&gt;

&lt;p&gt;To anyone just beginning this journey, remember: “The only limit to our realization of tomorrow is our doubts of today.” — Franklin D. Roosevelt. Dive into learning, and each of these courses can become a stepping stone to your success in data analytics.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://datacamp.pxf.io/OrjyqK" rel="noopener noreferrer"&gt;Datacamp Plataform&lt;/a&gt;&lt;br&gt;
Follow me on Linkedin&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/kevin-meneses-897a28127/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/kevin-meneses-897a28127/&lt;/a&gt;&lt;br&gt;
Medium&lt;br&gt;
&lt;a href="https://medium.com/@kevinmenesesgonzalez/subscribe" rel="noopener noreferrer"&gt;https://medium.com/@kevinmenesesgonzalez/subscribe&lt;/a&gt;&lt;br&gt;
Subscribe to the Data Pulse Newsletter&lt;br&gt;
&lt;a href="https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720" rel="noopener noreferrer"&gt;https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720&lt;/a&gt;&lt;br&gt;
Join my Patreon Community &lt;a href="https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink" rel="noopener noreferrer"&gt;https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink&lt;/a&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>analytics</category>
      <category>datacamp</category>
      <category>python</category>
    </item>
    <item>
      <title>How I Automated My Workflow by Connecting Python to Google Sheets API</title>
      <dc:creator>Kevin Meneses González</dc:creator>
      <pubDate>Tue, 12 Nov 2024 12:22:30 +0000</pubDate>
      <link>https://dev.to/kevin_menesesgonzlez/how-i-automated-my-workflow-by-connecting-python-to-google-sheets-api-3l30</link>
      <guid>https://dev.to/kevin_menesesgonzlez/how-i-automated-my-workflow-by-connecting-python-to-google-sheets-api-3l30</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A few months ago, I faced a familiar problem. I was working on a project where I needed to manage a large dataset that required frequent updates and collaboration. At first, I kept everything in Excel, thinking it would be simple enough. But the more data I added, the slower Excel became. I’d save my work, try to update a few cells, and watch as it took minutes to respond. It was a nightmare. Every time I tried collaborating with a team member, I’d have to send over a new version of the file, which quickly became chaotic and prone to mistakes. I realized that I needed a way to update and share data in real-time, something that Excel just couldn’t handle effectively with large datasets.&lt;/p&gt;

&lt;p&gt;That’s when I discovered the power of Google Sheets combined with Python. Google Sheets offers the flexibility of cloud storage, allowing multiple users to access and update data simultaneously, while Python offers powerful data manipulation capabilities. Using the Google Sheets API, I was able to seamlessly integrate Python with Google Sheets, creating a system that automatically updated my data, managed real-time changes, and eliminated version conflicts. Here’s a guide to how I set it up, with examples to help you get started with your own projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  *&lt;em&gt;The Solution: *&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Using the Google Sheets API with Python&lt;br&gt;
Connecting Python to Google Sheets allows you to automate tasks, fetch data, and update sheets effortlessly. The Google Sheets API enables programmatic access to Google Sheets, providing endless possibilities for data management.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step-by-Step Guide to Setting Up Google Sheets API with Python
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Set Up Your Google Cloud Project
&lt;/h3&gt;

&lt;p&gt;To begin, you’ll need to create a project in the Google Cloud Console:&lt;/p&gt;

&lt;p&gt;Go to the Google Cloud Console and create a new project.&lt;br&gt;
Enable the Google Sheets API and the Google Drive API for this project, as you’ll need both for full access.&lt;br&gt;
Go to Credentials and click on Create Credentials. Choose OAuth client ID or Service Account depending on your requirements. For automated scripts without user interaction, Service Account is recommended.&lt;br&gt;
Once the credentials are created, download the JSON file containing your service account key. Keep this file secure, as it provides access to your Google Sheets.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Install Required Libraries in Python
&lt;/h3&gt;

&lt;p&gt;To work with the Google Sheets API, install the following libraries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client spread
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;google-auth and google-api-python-client are essential for connecting with Google’s APIs.&lt;br&gt;
gspread is a Python library that simplifies interactions with Google Sheets.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Obtain Permissions to Access Google Sheets
&lt;/h3&gt;

&lt;p&gt;Before you can interact with Google Sheets through the API, you need to configure the permissions properly to allow your service account or OAuth credentials to access specific sheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share Your Google Sheet with the Service Account Email:&lt;/strong&gt;&lt;br&gt;
If you are using a service account, you’ll notice that the JSON file contains an email address (something like &lt;a href="mailto:your-service-account@your-project.iam.gserviceaccount.com"&gt;your-service-account@your-project.iam.gserviceaccount.com&lt;/a&gt;). For the service account to access your Google Sheets, you must share the sheet with this email address.&lt;br&gt;
Open the Google Sheet you want to use.&lt;br&gt;
Click Share in the top-right corner of the sheet.&lt;br&gt;
Enter the service account email address and set the permissions to Editor.&lt;br&gt;
Click Send to save these changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Ensure Proper API Scopes:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
When setting up your Google Cloud project, make sure you included the necessary API scopes to allow reading and writing to Google Sheets. In your Python code, use these scopes to ensure proper permissions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scope = [&lt;br&gt;
    "https://www.googleapis.com/auth/spreadsheets",  # For accessing and editing Google Sheets&lt;br&gt;
    "https://www.googleapis.com/auth/drive"  # For accessing Google Drive&lt;br&gt;
]&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Authenticate and Connect to Your Google Sheet
&lt;/h3&gt;

&lt;p&gt;Here’s a Python script to authenticate and connect to your Google Sheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import gspread
from google.oauth2.service_account import Credentials

# Define the scope and authenticate using the JSON key file
scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
credentials = Credentials.from_service_account_file("path/to/your/credentials.json", scopes=scope)

# Authorize the client and open the Google Sheet
client = gspread.authorize(credentials)
sheet = client.open("Your Google Sheet Name").sheet1  # Access the first sheet
Replace "path/to/your/credentials.json" with the path to your JSON file, and "Your Google Sheet Name" with the name of your Google Sheet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Examples of Google Sheets API Functionalities
&lt;/h2&gt;

&lt;p&gt;Once connected, you can perform a wide range of operations on your Google Sheet. Here are some useful examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 1: Read Data from Google Sheets&lt;/strong&gt;&lt;br&gt;
To retrieve data from a specific range of cells:&lt;/p&gt;
&lt;h3&gt;
  
  
  Fetch all data from the sheet as a list of lists
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data = sheet.get_all_values()
print("All data:", data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Fetch data from specific cell range
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;specific_data = sheet.get("A1:C10")  # Adjust the range as needed
print("Specific data:", specific_data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This code retrieves all the data in the sheet or a specific range, displaying it as a list of lists.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example 2: Write Data to Google Sheets
&lt;/h3&gt;

&lt;p&gt;To add data to specific cells:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Update a single cell
sheet.update("B2", "New Data")

# Update a range of cells
sheet.update("A1:C1", [["Header1", "Header2", "Header3"]])

# Append a new row at the end of the sheet
sheet.append_row(["Row1 Data", "Row2 Data", "Row3 Data"])
These commands allow you to write to individual cells, multiple cells, or append entire rows of data.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 3: Clear Data from Google Sheets
&lt;/h3&gt;

&lt;p&gt;If you need to clear data in a specific range:&lt;/p&gt;

&lt;h4&gt;
  
  
  Clear data from a specific range
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sheet.batch_clear(["A2:C100"])  # Adjust the range as needed
This code clears all values within the specified range, which is useful for cleaning up data before importing new information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 4: Automate Data Updates
&lt;/h3&gt;

&lt;p&gt;If you want to automate updates to your data, for example, appending daily statistics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import datetime

# Append a new row with the current date and dummy statistics
today = datetime.date.today().isoformat()
stats = [today, 123, 456, 789]  # Replace with actual data
sheet.append_row(stats)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script appends a new row with the current date and data points, making it ideal for tracking daily changes or automating periodic updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using Python to interact with the Google Sheets API has transformed the way I handle large datasets, saving time and reducing errors from manual work. Whether you need to automate data updates, retrieve real-time information, or simply make collaborative work easier, connecting Python to Google Sheets opens up a world of possibilities.&lt;/p&gt;

&lt;p&gt;With these examples, you should be well-equipped to start automating your own workflows and move away from outdated methods that slow down your productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me on Linkedin&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/kevin-meneses-897a28127/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/kevin-meneses-897a28127/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;and Medium&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://medium.com/@kevinmenesesgonzalez/subscribe" rel="noopener noreferrer"&gt;https://medium.com/@kevinmenesesgonzalez/subscribe&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Subscribe to the Data Pulse Newsletter&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720" rel="noopener noreferrer"&gt;https://www.linkedin.com/newsletters/datapulse-python-finance-7208914833608478720&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join my Patreon Community &lt;a href="https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink" rel="noopener noreferrer"&gt;https://patreon.com/user?u=29567141&amp;amp;utm_medium=unknown&amp;amp;utm_source=join_link&amp;amp;utm_campaign=creatorshare_creator&amp;amp;utm_content=copyLink&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>googlecloud</category>
      <category>data</category>
    </item>
  </channel>
</rss>
