<?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: TheBitForge</title>
    <description>The latest articles on DEV Community by TheBitForge (@thebitforge).</description>
    <link>https://dev.to/thebitforge</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png</url>
      <title>DEV Community: TheBitForge</title>
      <link>https://dev.to/thebitforge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thebitforge"/>
    <language>en</language>
    <item>
      <title>Best Stock Market APIs for Python Developers in 2026</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Wed, 28 Oct 2026 18:07:11 +0000</pubDate>
      <link>https://dev.to/thebitforge/best-stock-market-apis-for-python-developers-in-2026-4j15</link>
      <guid>https://dev.to/thebitforge/best-stock-market-apis-for-python-developers-in-2026-4j15</guid>
      <description>&lt;p&gt;If your Python project is built on company numbers rather than ticking prices, start with &lt;a href="https://www.roic.ai" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt;. That is my short answer, and the rest of this guide explains why, where it falls short, and which other stock market APIs make more sense when your project looks different.&lt;/p&gt;

&lt;p&gt;Almost everyone starts the same way, by the way. Three lines with a popular library, a neat table in the terminal, one proud afternoon. Then the script runs on a schedule, an unofficial endpoint changes, and the dashboard is dead on a Monday morning. This guide is for the day after that.&lt;/p&gt;


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

  &lt;br&gt;
&lt;strong&gt;Quick picks&lt;/strong&gt; 🏆

&lt;p&gt;&lt;strong&gt;Fundamentals, ratios, transcripts:&lt;/strong&gt; ROIC.ai (top pick)&lt;br&gt;
&lt;strong&gt;Live US data and options:&lt;/strong&gt; Massive&lt;br&gt;
&lt;strong&gt;Trading bots:&lt;/strong&gt; Alpaca&lt;br&gt;
&lt;strong&gt;Global history:&lt;/strong&gt; EODHD&lt;br&gt;
&lt;strong&gt;Learning on a free key:&lt;/strong&gt; Alpha Vantage or Twelve Data&lt;br&gt;
&lt;strong&gt;Free live US quotes:&lt;/strong&gt; Finnhub&lt;br&gt;
&lt;strong&gt;Personal notebooks only:&lt;/strong&gt; yfinance&lt;br&gt;

&lt;/p&gt;
&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; Pricing in this market moves without warning. Everything here was checked against public pages and recent developer write ups in October 2026. Confirm on the provider's own page before you add a card.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ROIC.ai, the top pick&lt;/li&gt;
&lt;li&gt;Scorecard at a glance&lt;/li&gt;
&lt;li&gt;The other APIs&lt;/li&gt;
&lt;li&gt;How to choose&lt;/li&gt;
&lt;li&gt;Mistakes that cost time&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ROIC.ai, the top pick for fundamentals driven projects
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://www.roic.ai" rel="noopener noreferrer"&gt;roic.ai&lt;/a&gt; and its &lt;a href="https://www.roic.ai/api" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most stock APIs are really price APIs with fundamentals bolted on later. ROIC.ai is built the other way round. The core product is standardized company data: income statements, balance sheets, cash flow, more than 90 pre calculated ratios, valuation multiples and earnings call transcripts, all behind one consistent JSON format.&lt;/p&gt;

&lt;p&gt;The published scale is roughly 68,000 tickers across more than 70 exchanges, up to 40 years of statements depending on the plan, 120 plus quarters per company, over 17 years of call transcripts, and daily forex rates for more than 4,000 currency pairs. It also has company profiles, logos, sector and industry reference data, stock splits and an earnings calendar with estimates and surprises.&lt;/p&gt;

&lt;p&gt;Why Python developers tend to like it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ratios arrive pre computed.&lt;/strong&gt; You do not have to rebuild return on invested capital from raw statements. The idea behind the name is simple.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;RO&lt;/span&gt;&lt;span class="mord mathnormal"&gt;I&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;I&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord mathnormal"&gt;v&lt;/span&gt;&lt;span class="mord mathnormal"&gt;es&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="mord mathnormal"&gt;d&lt;/span&gt;&lt;span class="mspace"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;NOP&lt;/span&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One format everywhere.&lt;/strong&gt; Resources, lists and errors share the same JSON shapes, so once you integrate statements, the same habits work for prices and transcripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An official Python SDK&lt;/strong&gt;, with Node and Go versions too. The package works with pandas and polars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcripts in the same API.&lt;/strong&gt; Prepared remarks and Q and A organized by fiscal quarter, which is rare at this price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosted MCP server&lt;/strong&gt;, so assistants like Claude or Cursor can query the same data in plain language. That matters if you build AI research tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy to try.&lt;/strong&gt; The free plan needs no credit card.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A first call takes a minute:&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="c1"&gt;# pip install roicai
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;roicai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Roicai&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;Roicai&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_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# or set ROICAI_API_KEY
&lt;/span&gt;
&lt;span class="n"&gt;statements&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;fundamentals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;income_statements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NASDAQ:AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;period_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;annual&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="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&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;year&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;statements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&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;year&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fiscal_year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_sales_revenue_turnover&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_net_income&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Prefer plain REST? The identifier is just exchange, colon, ticker:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/stock-prices/latest/NASDAQ:AAPL?apikey=YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and the response is clean, predictable JSON:&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;"data"&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="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"open"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;210.61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;213.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;"low"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;209.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"close"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;212.41&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"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48923700&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="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;"NASDAQ:AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&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;&lt;/p&gt;
  Plans and limits in short
  &lt;br&gt;
The free plan allows 5 requests per minute with about two years of annual fundamentals and daily prices, and no card. Paid plans start at 29 USD per month with higher limits, and the vendor lists 300 requests per minute at that level. Bulk downloads and some endpoints need a paid plan, and commercial redistribution is handled through an Enterprise plan. Check the pricing page for current tiers.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;The honest part:&lt;/strong&gt; ROIC.ai serves daily price data, not streaming quotes&lt;sup&gt;1&lt;/sup&gt;. If you need a live ticker or tick data, pair it with a real time provider from the list below. For screeners, valuation models, research dashboards and anything that asks how a business is really doing, it is the one I would start with.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/roicai" rel="noopener noreferrer"&gt;
        roicai
      &lt;/a&gt; / &lt;a href="https://github.com/roicai/roicai-python" rel="noopener noreferrer"&gt;
        roicai-python
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Official Python SDK for the ROIC.ai financial data and stock API: fundamentals, earnings call transcripts, stock prices, pandas and polars
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ROIC.AI Python Library&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/roicai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ee48a1dc1b19c48fc960120d87cb433b246181780380be1c698d2336e3c762b6/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f726f696361692e737667" alt="PyPI"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/roicai/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/72586b75c1d5af6a5c2959d8db6fdb9f0dfeb2e1a564f6afcf9b809711d77018/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f726f696361692e737667" alt="Python versions"&gt;&lt;/a&gt;
&lt;a href="https://github.com/roicai/roicai-python/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/roicai/roicai-python/actions/workflows/ci.yml/badge.svg" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The ROIC.AI Python library is the official Python client for the &lt;a href="https://www.roic.ai" rel="nofollow noopener noreferrer"&gt;ROIC.AI&lt;/a&gt; financial data API and stock API. Use it to get fundamentals for public companies, such as income statements, balance sheets, cash flow statements, financial ratios and valuation multiples, and earnings call transcripts. It also covers historical and latest stock prices, SEC filings and other company documents, the earnings calendar, company profiles and forex rates.&lt;/p&gt;
&lt;p&gt;Responses are typed Pydantic models, list methods fetch the next pages for you, and any response converts to a pandas or polars DataFrame.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;See the &lt;a href="https://api.roic.ai/v3.0.0/openapi" rel="nofollow noopener noreferrer"&gt;ROIC.AI API reference&lt;/a&gt; for every endpoint, parameter and field, and the &lt;a href="https://www.roic.ai/api" rel="nofollow noopener noreferrer"&gt;API guides&lt;/a&gt; for authentication, plans and response formats. &lt;a href="https://github.com/roicai/roicai-python/blob/main/reference.md" rel="noopener noreferrer"&gt;reference.md&lt;/a&gt; lists every method of this library with its parameters.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Python 3.10 or later.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Install the package with:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install --upgrade roicai&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;To convert responses to DataFrames, install pandas or polars with it:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/roicai/roicai-python" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://www.roic.ai/signup" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Get a free ROIC.ai API key&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scorecard at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Best at&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;First paid plan&lt;/th&gt;
&lt;th&gt;Python route&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ROIC.ai&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fundamentals, transcripts&lt;/td&gt;
&lt;td&gt;5 requests per minute&lt;/td&gt;
&lt;td&gt;29 USD per month&lt;/td&gt;
&lt;td&gt;Official SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpha Vantage&lt;/td&gt;
&lt;td&gt;Learning, indicators&lt;/td&gt;
&lt;td&gt;25 requests per day&lt;/td&gt;
&lt;td&gt;49.99 USD per month&lt;/td&gt;
&lt;td&gt;requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Massive (ex Polygon.io)&lt;/td&gt;
&lt;td&gt;Live US, options&lt;/td&gt;
&lt;td&gt;5 calls per minute&lt;/td&gt;
&lt;td&gt;about 29 USD per month&lt;/td&gt;
&lt;td&gt;Official client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EODHD&lt;/td&gt;
&lt;td&gt;Global history&lt;/td&gt;
&lt;td&gt;about 20 calls per day&lt;/td&gt;
&lt;td&gt;about 19.99 per month&lt;/td&gt;
&lt;td&gt;Official library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Financial Modeling Prep&lt;/td&gt;
&lt;td&gt;US fundamentals&lt;/td&gt;
&lt;td&gt;about 250 calls per day&lt;/td&gt;
&lt;td&gt;about 22 USD per month&lt;/td&gt;
&lt;td&gt;requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twelve Data&lt;/td&gt;
&lt;td&gt;Many asset types&lt;/td&gt;
&lt;td&gt;about 800 requests per day&lt;/td&gt;
&lt;td&gt;see pricing page&lt;/td&gt;
&lt;td&gt;Official client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finnhub&lt;/td&gt;
&lt;td&gt;Free live US quotes&lt;/td&gt;
&lt;td&gt;about 60 calls per minute&lt;/td&gt;
&lt;td&gt;about 49.99 USD per month&lt;/td&gt;
&lt;td&gt;Official client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpaca&lt;/td&gt;
&lt;td&gt;Trading bots&lt;/td&gt;
&lt;td&gt;Free, IEX feed&lt;/td&gt;
&lt;td&gt;about 99 USD per month&lt;/td&gt;
&lt;td&gt;alpaca py&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiingo&lt;/td&gt;
&lt;td&gt;Clean price history&lt;/td&gt;
&lt;td&gt;about 1,000 requests per day&lt;/td&gt;
&lt;td&gt;about 30 USD per month&lt;/td&gt;
&lt;td&gt;Official client&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;yfinance&lt;/td&gt;
&lt;td&gt;Personal scripts&lt;/td&gt;
&lt;td&gt;Free, unofficial&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;pip install yfinance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The other APIs, and when they win
&lt;/h2&gt;

&lt;p&gt;Before comparing, decide what data you really need. Stock data is four needs under one name: end of day prices, real time streams, fundamentals, and the extras around them such as transcripts and filings. Most bad choices come from skipping this step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alpha Vantage, the easy first stop
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://www.alphavantage.co" rel="noopener noreferrer"&gt;alphavantage.co&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A huge number of tutorials begin here. A free key arrives in a minute, and one API covers stocks, forex, crypto, fundamentals and many technical indicators. The catch is the free limit of 25 requests per day and 5 per minute. Premium plans are priced by requests per minute, from 49.99 USD for 75 per minute up to 249.99 USD for 1,200, with no daily cap.&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;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&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;function&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;TIME_SERIES_DAILY&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;IBM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALPHAVANTAGE_API_KEY&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.alphavantage.co/query&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="n"&gt;params&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;30&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;latest_day&lt;/span&gt; &lt;span class="o"&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;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;Time Series (Daily)&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;latest_day&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;Time Series (Daily)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;latest_day&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4. close&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;Best for:&lt;/strong&gt; learning and prototypes. &lt;strong&gt;Watch out for:&lt;/strong&gt; the jump from free to 49.99 USD.&lt;/p&gt;
&lt;h3&gt;
  
  
  Massive, formerly Polygon.io
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://massive.com" rel="noopener noreferrer"&gt;massive.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same company, rebranded on October 30, 2025, with existing keys still working. Built around US market infrastructure with REST and WebSocket access, trades, quotes, aggregates and deep options coverage. The free plan gives 5 calls per minute of end of day data. Individual stock plans sit around 29, 79 and 199 USD per month, with options, forex and crypto priced separately.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;massive&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RESTClient&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;RESTClient&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_KEY&lt;/span&gt;&lt;span class="sh"&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;bar&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_aggs&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;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;day&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;2026-09-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;2026-09-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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bar&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;Best for:&lt;/strong&gt; live and intraday US data. &lt;strong&gt;Watch out for:&lt;/strong&gt; paying per asset class.&lt;/p&gt;
&lt;h3&gt;
  
  
  EODHD, for global historical data
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://eodhd.com" rel="noopener noreferrer"&gt;eodhd.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Advertises more than 30 years of history, 60 plus exchanges and over 150,000 tickers, with fundamentals and some real time data under one key. The free plan is closer to a trial at about 20 calls per day. Paid plans start near 19.99 per month, among the cheapest for worldwide coverage. Not built for fast intraday systems.&lt;/p&gt;
&lt;h3&gt;
  
  
  Financial Modeling Prep, for US fundamentals
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://site.financialmodelingprep.com" rel="noopener noreferrer"&gt;financialmodelingprep.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Popular for statements and screening, with about 250 free calls per day of end of day data. The Starter plan is listed near 22 USD per month billed annually, but it is US focused and global data sits in higher tiers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Twelve Data, many asset types in one place
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://twelvedata.com" rel="noopener noreferrer"&gt;twelvedata.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stocks, ETFs, forex, crypto and indices with a clean shared schema. Free gives about 800 requests per day, delayed data, and generally non commercial use, so read the licence.&lt;/p&gt;
&lt;h3&gt;
  
  
  Finnhub, generous free live US quotes
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://finnhub.io" rel="noopener noreferrer"&gt;finnhub.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Around 60 free calls per minute, real time US quotes with limits, news, WebSockets and extras like social sentiment. Paid plans start near 49.99 USD per month. Caps vary by endpoint, so read the docs.&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;finnhub&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;finnhub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&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_KEY&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quote&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Alpaca, when your code also trades
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://alpaca.markets" rel="noopener noreferrer"&gt;alpaca.markets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A broker first, with market data and an order API on one account plus a paper trading sandbox. The free feed is IEX only, so prices can differ from the full tape, and the full feed is listed near 99 USD per month. The Python library is alpaca py.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tiingo, clean historical prices
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://www.tiingo.com" rel="noopener noreferrer"&gt;tiingo.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tidy, error checked end of day data with decades of history. Free allows about a thousand requests per day, and paid plans start near 30 USD per month. Quietly good for backtests.&lt;/p&gt;
&lt;h3&gt;
  
  
  yfinance, free with an asterisk
&lt;/h3&gt;

&lt;p&gt;Website: &lt;a href="https://github.com/ranaroussi/yfinance" rel="noopener noreferrer"&gt;github.com/ranaroussi/yfinance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An open source library that reads the same unofficial endpoints Yahoo uses for its own site. Free, no key, a few lines of code:&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;yfinance&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;yf&lt;/span&gt;

&lt;span class="n"&gt;hist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&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;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;history&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1mo&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;hist&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;The catch is the one we opened with: endpoints change without notice, heavy use triggers rate limits, there is no service agreement, and the project points to Yahoo's terms and describes the data as for personal, research and educational use. Fine for your notebook, a poor base for a product.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ranaroussi" rel="noopener noreferrer"&gt;
        ranaroussi
      &lt;/a&gt; / &lt;a href="https://github.com/ranaroussi/yfinance" rel="noopener noreferrer"&gt;
        yfinance
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Download market data from Yahoo! Finance's API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ranaroussi/yfinance/./doc/yfinance-gh-logo-dark.webp#gh-dark-mode-only"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Franaroussi%2Fyfinance%2FHEAD%2F.%2Fdoc%2Fyfinance-gh-logo-dark.webp%23gh-dark-mode-only" height="100"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ranaroussi/yfinance/./doc/yfinance-gh-logo-light.webp#gh-light-mode-only"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Franaroussi%2Fyfinance%2FHEAD%2F.%2Fdoc%2Fyfinance-gh-logo-light.webp%23gh-light-mode-only" height="100"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Download market data from Yahoo! Finance's API&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://pypi.python.org/pypi/yfinance" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b6869867efded42b869b20d5072e6731903c581d8c2b3d9a5605f89d36cd5bb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d322e372c253230332e362b2d626c75652e7376673f7374796c653d666c6174" alt="Python version"&gt;&lt;/a&gt;
&lt;a href="https://pypi.python.org/pypi/yfinance" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2c75a283a65fb09da093128f6df4602a41a4dd48f566b71459861e6939e8bd68/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f7966696e616e63652e7376673f6d61784167653d363025" alt="PyPi version"&gt;&lt;/a&gt;
&lt;a href="https://pypi.python.org/pypi/yfinance" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a785ad7e0cab7972397694a99bf1abf4eaa94aaf3e83fa2e95b58106e2e09e7e/68747470733a2f2f696d672e736869656c64732e696f2f707970692f7374617475732f7966696e616e63652e7376673f6d61784167653d3630" alt="PyPi status"&gt;&lt;/a&gt;
&lt;a href="https://pypi.python.org/pypi/yfinance" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8ba2d48489446586e3678f6a8d54792e5dfe4eefe09abaedb9e9e89d2ec7802b/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f7966696e616e63652e7376673f6d61784167653d3836343030266c6162656c3d696e7374616c6c7326636f6c6f723d253233323742314646" alt="PyPi downloads"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ranaroussi/yfinance" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f530148e47fcbf616e8ffd4cf0aa179940c3b21209c40ea700dc4d3a5ca50334/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f72616e61726f757373692f7966696e616e63652e7376673f7374796c653d736f6369616c266c6162656c3d53746172266d61784167653d3630" alt="Star this repo"&gt;&lt;/a&gt;
&lt;a href="https://x.com/intent/follow?screen_name=aroussi" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd9e0da9b92253ca793d0945cb6c9df14c5dcd377b60b282317f69b6d2990d5e/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f61726f757373692e7376673f7374796c653d736f6369616c266c6162656c3d466f6c6c6f77266d61784167653d3630" alt="Follow me on twitter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://trendshift.io/repositories/4578" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1cd6be0cdf8550772f5f43759336beadb002efe3eecc5f4c2cd287058f924507/68747470733a2f2f7472656e6473686966742e696f2f6170692f62616467652f7265706f7369746f726965732f34353738" alt="ranaroussi%2Fyfinance | Trendshift" width="250" height="55" class="js-gh-image-fallback"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;yfinance&lt;/strong&gt; offers a Pythonic way to fetch financial &amp;amp; market data from &lt;a href="https://finance.yahoo.com" rel="nofollow noopener noreferrer"&gt;Yahoo!Ⓡ finance&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-alert markdown-alert-important"&gt;
&lt;p class="markdown-alert-title"&gt;Important&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yahoo!, Y!Finance, and Yahoo! finance are registered trademarks of Yahoo, Inc.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;yfinance is &lt;strong&gt;not&lt;/strong&gt; affiliated, endorsed, or vetted by Yahoo, Inc. It's an open-source tool that uses Yahoo's publicly available APIs, and is intended for research and educational purposes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You should refer to Yahoo!'s terms of use&lt;/strong&gt; (&lt;a href="https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;, &lt;a href="https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;, and &lt;a href="https://policies.yahoo.com/us/en/yahoo/terms/index.htm" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;) **for details on your rights to use the actual data downloaded.&lt;/p&gt;
&lt;p&gt;Remember - the Yahoo! finance API is intended for personal use only.**&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-alert markdown-alert-tip"&gt;
&lt;p class="markdown-alert-title"&gt;Tip&lt;/p&gt;
&lt;p&gt;THE NEW DOCUMENTATION WEBSITE IS NOW LIVE! 🤘&lt;/p&gt;
&lt;p&gt;Visit &lt;a href="https://ranaroussi.github.io/yfinance" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;ranaroussi.github.io/yfinance&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Main components&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Ticker&lt;/code&gt;: single ticker data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Tickers&lt;/code&gt;: multiple tickers' data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;download&lt;/code&gt;: download market data for multiple tickers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Market&lt;/code&gt;: get information about a market&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WebSocket&lt;/code&gt; and &lt;code&gt;AsyncWebSocket&lt;/code&gt;: live streaming data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Search&lt;/code&gt;: quotes and…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ranaroussi/yfinance" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Also worth knowing:&lt;/strong&gt; &lt;a href="https://data.nasdaq.com" rel="noopener noreferrer"&gt;Nasdaq Data Link&lt;/a&gt; for research datasets, &lt;a href="https://intrinio.com" rel="noopener noreferrer"&gt;Intrinio&lt;/a&gt; for standardized US fundamentals, &lt;a href="https://marketstack.com" rel="noopener noreferrer"&gt;Marketstack&lt;/a&gt; for cheap end of day data, and &lt;a href="https://www.bloomberg.com/professional" rel="noopener noreferrer"&gt;Bloomberg&lt;/a&gt; or &lt;a href="https://www.quotemedia.com" rel="noopener noreferrer"&gt;QuoteMedia&lt;/a&gt; for teams that need licensed redistribution.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your project&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Screener, valuation tool, research dashboard&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ROIC.ai&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI agent that reads financials and transcripts&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ROIC.ai&lt;/strong&gt; with its MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live US dashboard or options&lt;/td&gt;
&lt;td&gt;Massive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trading bot&lt;/td&gt;
&lt;td&gt;Alpaca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global backtests&lt;/td&gt;
&lt;td&gt;EODHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning project&lt;/td&gt;
&lt;td&gt;Alpha Vantage or Twelve Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private notebook&lt;/td&gt;
&lt;td&gt;yfinance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two providers is normal. A common and sensible pair is ROIC.ai for the fundamentals and a real time source for the prices, which usually costs less than one vendor trying to do everything.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes that cost developers time
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Calling the API on every page load.&lt;/strong&gt; Fetch once, store, refresh on a schedule. A tiny cache fixes most rate limit pain:&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;json&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;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&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;.cache/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="si"&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="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;and&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;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stat&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;st_mtime&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;ttl&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;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_text&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;fetch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exist_ok&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;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&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;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hard coding one provider everywhere.&lt;/strong&gt; Keep data calls in one module so a provider swap is a one line change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- from providers.alphavantage import get_daily
&lt;/span&gt;&lt;span class="gi"&gt;+ from providers.roicai import get_daily
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ignoring adjusted prices.&lt;/strong&gt; Splits and dividends change history, and an unadjusted backtest quietly produces nonsense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting the licence.&lt;/strong&gt; Free plans are often personal or non commercial only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trusting one source.&lt;/strong&gt; Spot check a few values against a second source after any plan change or rebrand.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;
  Is there a completely free stock market API for Python?
  &lt;br&gt;
Several have usable free tiers, including ROIC.ai, Alpha Vantage, Twelve Data, Finnhub, Financial Modeling Prep and Alpaca. All limit requests, history or freshness, so free works best for learning and small tools.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Which API is best for company fundamentals?
  &lt;br&gt;
ROIC.ai, Financial Modeling Prep and Intrinio are the usual picks. ROIC.ai stands out when you want global coverage, pre calculated ratios and earnings call transcripts in one consistent format.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  What is the best stock API for real time data?
  &lt;br&gt;
For US stocks, Massive and Finnhub are the usual names, and Alpaca suits you if you also want to trade. Free real time is limited, so check delays and coverage.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Is yfinance safe for production?
  &lt;br&gt;
No. It relies on unofficial endpoints with no guarantees, and Yahoo's terms point to personal use. Keep it for your own notebooks.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Can I use these APIs in a commercial product?
  &lt;br&gt;
Sometimes, but rarely on a free plan. Check each licence, because redistribution rights usually sit in paid or enterprise tiers.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;There is no perfect stock API, only the one that fits what you are building this month. If the question your project asks is how good a company is, start with ROIC.ai. If it asks what the price is right now, start with a real time provider. Cache your data, keep the provider behind a small wrapper, and you can change your mind without a rewrite.&lt;/p&gt;

&lt;p&gt;Which API are you using right now, and why did you pick it? Tell me in the comments.&lt;/p&gt;




&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; Based on the vendor's published documentation, which lists daily open, high, low, close and volume data. Pricing and limits throughout were checked in October 2026 and may have changed.&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>datascience</category>
      <category>ai</category>
    </item>
    <item>
      <title>Best Free APIs for Developers : The Complete, Categorized List</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Mon, 26 Oct 2026 17:10:15 +0000</pubDate>
      <link>https://dev.to/startupcafe/best-free-apis-for-developers-the-complete-categorized-list-27oc</link>
      <guid>https://dev.to/startupcafe/best-free-apis-for-developers-the-complete-categorized-list-27oc</guid>
      <description>&lt;p&gt;You do not need a credit card or a big budget to build real software in 2026. This guide rounds up 100+ genuinely free APIs across AI, weather, maps, finance, auth, email, payments, images, news, and sports, organized by category, with real free tier limits, auth requirements, and honest notes on where "free" quietly turns into "paid."&lt;/p&gt;

&lt;h3&gt;
  
  
  Table of Contents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What Actually Counts as a Free API in 2026&lt;/li&gt;
&lt;li&gt;Quick Picks by Use Case&lt;/li&gt;
&lt;li&gt;AI and Machine Learning APIs&lt;/li&gt;
&lt;li&gt;Weather APIs&lt;/li&gt;
&lt;li&gt;Maps and Geolocation APIs&lt;/li&gt;
&lt;li&gt;Finance, Stocks and Crypto APIs&lt;/li&gt;
&lt;li&gt;Authentication and Identity APIs&lt;/li&gt;
&lt;li&gt;Email and Messaging APIs&lt;/li&gt;
&lt;li&gt;Payments APIs&lt;/li&gt;
&lt;li&gt;Images, Video and Media APIs&lt;/li&gt;
&lt;li&gt;News and Content APIs&lt;/li&gt;
&lt;li&gt;Sports APIs&lt;/li&gt;
&lt;li&gt;Public and Open Government Data APIs&lt;/li&gt;
&lt;li&gt;Developer Utility APIs&lt;/li&gt;
&lt;li&gt;API Testing and Documentation Tools&lt;/li&gt;
&lt;li&gt;How to Pick a Free API Without Getting Burned&lt;/li&gt;
&lt;li&gt;FAQs: Free APIs for Developers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Actually Counts as a Free API in 2026
&lt;/h2&gt;

&lt;p&gt;Before the list, a quick reality check, because the word "free" gets abused constantly in this space.&lt;/p&gt;

&lt;p&gt;Free API offers generally come in three shapes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No key, no auth, free forever.&lt;/strong&gt; Open data, no signup, no card. The friendliest tier that exists. Examples: &lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;, &lt;a href="https://nominatim.org" rel="noopener noreferrer"&gt;OpenStreetMap and Nominatim&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier, permanent.&lt;/strong&gt; Requires an API key, but the free quota resets every month or day and never expires on its own. Examples: &lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq&lt;/a&gt;, &lt;a href="https://resend.com" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;, &lt;a href="https://supabase.com" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;, &lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free trial or credit based.&lt;/strong&gt; You get a time boxed credit balance, then it is gone. Often disguised as "free." Common with many AI model APIs and some mapping platforms.&lt;/p&gt;

&lt;p&gt;The safest free APIs to build a real project on are the first two types. Trial credit APIs are fine for prototyping, but do not ship a production feature on top of one unless you have checked the pricing page the same week you deploy. Free tier terms change without notice, and "free forever" quietly becomes "free for 30 days" more often than vendors like to admit.&lt;/p&gt;

&lt;p&gt;A genuinely good free API, in practice, should give you the following.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No credit card required to get your first API key&lt;/li&gt;
&lt;li&gt;A clear, published rate limit, not fair use vagueness&lt;/li&gt;
&lt;li&gt;Real documentation with working code samples&lt;/li&gt;
&lt;li&gt;A free tier that scales with your project instead of expiring ahead of it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep that list in mind as you go. It will save you from building on sand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Picks by Use Case
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Weather data&lt;/td&gt;
&lt;td&gt;&lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;No key, no signup, covers forecast plus historical plus air quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast LLM inference&lt;/td&gt;
&lt;td&gt;&lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;14,400 requests a day free, no card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geocoding or maps&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nominatim.org" rel="noopener noreferrer"&gt;OpenStreetMap (Nominatim)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open, no Google lock in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactional email&lt;/td&gt;
&lt;td&gt;&lt;a href="https://resend.com" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clean API, great docs, generous free cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth and user management&lt;/td&gt;
&lt;td&gt;&lt;a href="https://supabase.com/auth" rel="noopener noreferrer"&gt;Supabase Auth&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Full backend plus auth, free Postgres included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payments&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free to integrate, pay only on real transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company financials and stock ratios&lt;/td&gt;
&lt;td&gt;&lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free key, full endpoint access across 70+ exchanges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stock photos&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://unsplash.com/developers" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt; or &lt;a href="https://www.pexels.com/api/" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;No attribution required, commercial use OK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP geolocation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ipinfo.io" rel="noopener noreferrer"&gt;ipinfo.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;50,000 requests a month free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  AI and Machine Learning APIs
&lt;/h2&gt;

&lt;p&gt;AI free tiers move faster than any other category on this list. Treat this section as a discovery map and double check limits before you build on one.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;14,400 requests a day, 30 requests a minute&lt;/td&gt;
&lt;td&gt;API key, free, no card&lt;/td&gt;
&lt;td&gt;Fast open model inference, Llama and Mixtral&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ai.google.dev" rel="noopener noreferrer"&gt;Google Gemini API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generous free quota for prototyping&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;General purpose model with a clean SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://openrouter.ai" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rotating set of free suffixed models&lt;/td&gt;
&lt;td&gt;No card, no phone&lt;/td&gt;
&lt;td&gt;One API key, many models, easy comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://huggingface.co/inference-api" rel="noopener noreferrer"&gt;Hugging Face Inference API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for model evaluation&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Thousands of open models, quick testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.cloudflare.com/workers-ai/" rel="noopener noreferrer"&gt;Cloudflare Workers AI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Best free quota among edge AI providers&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Running inference close to your edge functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/marketplace/models" rel="noopener noreferrer"&gt;GitHub Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free access inside your GitHub workflow&lt;/td&gt;
&lt;td&gt;GitHub account&lt;/td&gt;
&lt;td&gt;Trying frontier models without leaving your repo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aihorde.net" rel="noopener noreferrer"&gt;AI Horde&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Community powered, no account required&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Image or text generation with zero signup friction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ollama.com/cloud" rel="noopener noreferrer"&gt;Ollama Cloud&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free on ramp, OpenAI compatible&lt;/td&gt;
&lt;td&gt;No phone required&lt;/td&gt;
&lt;td&gt;Self hosted style workflow without local GPU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Free LLM API limits change monthly. Before you depend on one for production, check the provider's pricing page the same week you ship, not the week you first signed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weather APIs
&lt;/h2&gt;

&lt;p&gt;Weather is one of the highest intent categories for developers because the free tier limit itself is usually the deciding factor.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Unlimited for non commercial use, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;The best free weather API with no key option: forecast, historical, air quality, marine, flood data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://openweathermap.org/api" rel="noopener noreferrer"&gt;OpenWeatherMap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1,000 calls a day on the free Weather API plan&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Current weather, 5 day or 3 hour forecast, geocoding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://weatherstack.com" rel="noopener noreferrer"&gt;Weatherstack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier with real time data&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Simple real time plus historical weather lookups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.weather.gov/documentation/services-web-api" rel="noopener noreferrer"&gt;Weather.gov (NWS)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, unlimited, US only&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;US government grade forecasts and alerts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OpenWeatherMap's free Weather API plan and its One Call 3.0 product are different offers with different quotas. Do not assume one covers the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maps and Geolocation APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nominatim.org" rel="noopener noreferrer"&gt;OpenStreetMap and Nominatim&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open data geocoding&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Forward and reverse geocoding without vendor lock in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.mapbox.com" rel="noopener noreferrer"&gt;Mapbox&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generous free monthly map loads&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Customizable vector maps, routing, navigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/maps" rel="noopener noreferrer"&gt;Google Maps API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free up to a monthly credit, card required&lt;/td&gt;
&lt;td&gt;API key plus billing&lt;/td&gt;
&lt;td&gt;Industry standard geocoding and Places data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://opencagedata.com" rel="noopener noreferrer"&gt;OpenCage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for geocoding&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Clean, simple geocoding API with good docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://positionstack.com" rel="noopener noreferrer"&gt;PositionStack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier, forward and reverse geocoding&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Lightweight geocoding for smaller apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ipinfo.io" rel="noopener noreferrer"&gt;ipinfo.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;50,000 requests a month free&lt;/td&gt;
&lt;td&gt;Token for detailed data&lt;/td&gt;
&lt;td&gt;IP geolocation, ASN lookup, timezone detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ip-api.com" rel="noopener noreferrer"&gt;ip-api.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free for non commercial use&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Quick IP to location and timezone lookups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.geojs.io" rel="noopener noreferrer"&gt;GeoJS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no published rate limits&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;IP geolocation with minimal friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Finance, Stocks and Crypto APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Full API access on every plan, including free: 5 requests a minute and 2 years of history&lt;/td&gt;
&lt;td&gt;API key, no credit card required&lt;/td&gt;
&lt;td&gt;Pre calculated financial ratios (ROIC, ROE, debt to EBITDA), statements, valuation multiples, and earnings call transcripts across 70+ global exchanges, with JSON or spreadsheet ready TSV output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.alphavantage.co" rel="noopener noreferrer"&gt;Alpha Vantage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free API key, rate limited&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Real time plus historical equities and crypto data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://finnhub.io" rel="noopener noreferrer"&gt;Finnhub&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Freemium, real time stock, forex, crypto plus news&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;All in one market data with news sentiment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://twelvedata.com" rel="noopener noreferrer"&gt;Twelve Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for stock price lookups&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Simple, reliable stock price API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://polygon.io" rel="noopener noreferrer"&gt;Polygon.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Freemium&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Stocks, options, forex, and crypto market data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.coingecko.com/en/api" rel="noopener noreferrer"&gt;CoinGecko API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, generous public tier&lt;/td&gt;
&lt;td&gt;None for basic use&lt;/td&gt;
&lt;td&gt;Cryptocurrency prices, market cap, historical data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.frankfurter.app" rel="noopener noreferrer"&gt;Frankfurter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Currency exchange rates and conversion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.marketaux.com" rel="noopener noreferrer"&gt;Marketaux&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Financial news aggregation tied to tickers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt; is worth a closer look if you are building anything that touches fundamentals. Unlike most "free tier" financial APIs that lock entire endpoint categories behind a paid plan, ROIC.ai gives every plan, including the free one, full access to all tickers and every endpoint. The difference between plans is just rate limit and history depth, so a side project can genuinely run on the free key without hitting a feature wall, only a request volume ceiling. The &lt;a href="https://www.roic.ai/api/docs/getting-started" rel="noopener noreferrer"&gt;getting started docs&lt;/a&gt; walk you through your first call in a few minutes over a plain REST and JSON interface. It also ships a &lt;a href="https://roic.ai/api/mcp" rel="noopener noreferrer"&gt;hosted MCP server&lt;/a&gt;, which is a clean way to wire company financials directly into an AI coding assistant or agent instead of writing a custom fetch layer by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication and Identity APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://supabase.com/auth" rel="noopener noreferrer"&gt;Supabase Auth&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free with the full Supabase stack: Postgres, storage, edge functions&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Full backend as a service with real auth, not just tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://auth0.com" rel="noopener noreferrer"&gt;Auth0&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier with published rate limits, for example 300 request burst on the Authentication API&lt;/td&gt;
&lt;td&gt;Client ID and secret&lt;/td&gt;
&lt;td&gt;Enterprise style auth, SSO, social login, on a budget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for MAU based auth&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Drop in auth UI components for React and Next.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://firebase.google.com/products/auth" rel="noopener noreferrer"&gt;Firebase Authentication&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier, generous for small apps&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Google ecosystem integration, quick setup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Email and Messaging APIs
&lt;/h2&gt;

&lt;p&gt;Free email API limits vary widely by provider. Daily sending caps, inbound webhook support, and retention windows all differ, so match the provider to the job, not just the biggest number on the homepage.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://resend.com" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Solid monthly free cap, React Email support&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Modern transactional email with first class Next.js and React developer experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.mailgun.com" rel="noopener noreferrer"&gt;Mailgun&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier available&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Reliable transactional plus marketing email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/ses/" rel="noopener noreferrer"&gt;Amazon SES&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Very low cost at scale, limited free allowance&lt;/td&gt;
&lt;td&gt;AWS credentials&lt;/td&gt;
&lt;td&gt;High volume sending once you outgrow smaller free tiers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://postmarkapp.com" rel="noopener noreferrer"&gt;Postmark&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free trial tier&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Fast, deliverability focused transactional email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://mailtrap.io" rel="noopener noreferrer"&gt;Mailtrap&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free sandbox plus limited live sending&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Testing email flows before going to production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.cloudflare.com/email-routing/" rel="noopener noreferrer"&gt;Cloudflare Email Workers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, usage based&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Lightweight inbound and outbound email routing on the edge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://www.twilio.com" rel="noopener noreferrer"&gt;Twilio&lt;/a&gt; (SMS)&lt;/td&gt;
&lt;td&gt;Free trial credit&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;SMS and voice messaging for prototypes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Payments APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free to integrate&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://stripe.com" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes, free until you process real transactions, then a per transaction fee&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;The industry benchmark, full test mode for subscriptions, webhooks, refunds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developer.paypal.com" rel="noopener noreferrer"&gt;PayPal API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yes, pay per transaction&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Familiar checkout flow with broad consumer trust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cashfree.com" rel="noopener noreferrer"&gt;Cashfree&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free integration, transaction based pricing&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Strong option for South Asian markets, UPI, cards, wallets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.lemonsqueezy.com" rel="noopener noreferrer"&gt;Lemon Squeezy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free to integrate, revenue share on sales&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Merchant of record setup for indie SaaS and digital products&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Payments APIs are free in the same way almost every entry here is. There is no cost to build the entire flow in test mode. You only pay once real money moves, and that is a per transaction cut, not a subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Images, Video and Media APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://unsplash.com/developers" rel="noopener noreferrer"&gt;Unsplash API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, high request limit for demo apps&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;High quality stock photography, no attribution required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.pexels.com/api/" rel="noopener noreferrer"&gt;Pexels API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, commercial use allowed&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Free stock photos and videos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pixabay.com/api/docs/" rel="noopener noreferrer"&gt;Pixabay API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Images, illustrations, and video assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://picsum.photos" rel="noopener noreferrer"&gt;Lorem Picsum&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Instant placeholder and mockup images by size, ID, or seed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://cloudinary.com" rel="noopener noreferrer"&gt;Cloudinary&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for image and video storage plus transformation&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;On the fly image resizing, optimization, and delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apidocs.imgur.com" rel="noopener noreferrer"&gt;Imgur API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Image hosting and sharing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  News and Content APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://newsapi.org" rel="noopener noreferrer"&gt;NewsAPI.org&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free for development, limited for production&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Aggregated headlines across thousands of sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://worldnewsapi.com" rel="noopener noreferrer"&gt;World News API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Limited free quota&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Global news headlines in a simple JSON format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://open-platform.theguardian.com" rel="noopener noreferrer"&gt;The Guardian Open Platform&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, generous for non commercial use&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;High quality journalism with full article access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developer.nytimes.com" rel="noopener noreferrer"&gt;NYT API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Archive search, article metadata, and more&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Sports APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.thesportsdb.com/api.php" rel="noopener noreferrer"&gt;TheSportsDB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open&lt;/td&gt;
&lt;td&gt;API key, free&lt;/td&gt;
&lt;td&gt;Team, league, and player metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.football-data.org" rel="noopener noreferrer"&gt;Football-Data.org&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier with rate limits&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Live scores and fixtures for major football leagues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.api-football.com" rel="noopener noreferrer"&gt;API-Football&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier with daily request cap&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Detailed stats across global football leagues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.balldontlie.io" rel="noopener noreferrer"&gt;balldontlie API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key for basic use&lt;/td&gt;
&lt;td&gt;Optional key&lt;/td&gt;
&lt;td&gt;NBA stats and historical game data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Public and Open Government Data APIs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.data.gov" rel="noopener noreferrer"&gt;data.gov&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open&lt;/td&gt;
&lt;td&gt;Varies by dataset&lt;/td&gt;
&lt;td&gt;US government datasets across every sector&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://datahelpdesk.worldbank.org/knowledgebase/articles/889392" rel="noopener noreferrer"&gt;World Bank API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Global economic and development indicators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://restcountries.com" rel="noopener noreferrer"&gt;REST Countries&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Country metadata, flags, currencies, languages, borders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;public-apis (GitHub)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free directory, 1,700+ APIs across 50+ categories&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;The master list to discover niche free APIs this guide does not cover&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Developer Utility APIs
&lt;/h2&gt;

&lt;p&gt;Small, boring, and genuinely useful. The kind of API that saves you an afternoon of writing utility functions yourself.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://goqr.me/api/" rel="noopener noreferrer"&gt;QR Server API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Generate QR codes on the fly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.ipify.org" rel="noopener noreferrer"&gt;ipify&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Get your public IP address in one call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://jsonplaceholder.typicode.com" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, unlimited&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Fake REST API for frontend prototyping and testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.abstractapi.com" rel="noopener noreferrer"&gt;AbstractAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free suite of 15 REST APIs: email validation, screenshots, phone validation, and more&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Covering common boring utility needs in one place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apyhub.com" rel="noopener noreferrer"&gt;ApyHub&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier across dozens of micro utilities&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;File conversion, text processing, and similar one off tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  API Testing and Documentation Tools
&lt;/h2&gt;

&lt;p&gt;Not strictly APIs, but essential free tools for anyone building or consuming them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://apidog.com" rel="noopener noreferrer"&gt;Apidog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Up to 4 users, unlimited projects and requests&lt;/td&gt;
&lt;td&gt;All in one API design, mocking, and testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.postman.com" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free tier for individuals and small teams&lt;/td&gt;
&lt;td&gt;The standard API client for testing and collections&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://beeceptor.com" rel="noopener noreferrer"&gt;Beeceptor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, no code API mocking&lt;/td&gt;
&lt;td&gt;Quickly mocking REST and GraphQL endpoints for testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://swagger.io" rel="noopener noreferrer"&gt;Swagger and OpenAPI tools&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, open source&lt;/td&gt;
&lt;td&gt;Auto generated interactive API documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Pick a Free API Without Getting Burned
&lt;/h2&gt;

&lt;p&gt;Before you wire a free API into anything beyond a weekend project, run it through this short list.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No credit card required to get a working API key.&lt;/li&gt;
&lt;li&gt;Published, specific rate limits, not vague fair use language.&lt;/li&gt;
&lt;li&gt;Clear docs with real code samples, not just an endpoint list.&lt;/li&gt;
&lt;li&gt;A changelog or status page showing the provider actively maintains it.&lt;/li&gt;
&lt;li&gt;A free tier that scales with you, so you are not forced into a cliff edge upgrade.&lt;/li&gt;
&lt;li&gt;Commercial use terms you have actually read, especially for anything client facing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If an API fails two or more of these, it is fine for a prototype. Just do not build your startup's core feature on it without a backup plan.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Click to expand: FAQs about free APIs for developers
  &lt;p&gt;&lt;strong&gt;What is the best free API for weather data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://open-meteo.com" rel="noopener noreferrer"&gt;Open-Meteo&lt;/a&gt; is the strongest starting point in 2026. It requires no API key, has no hard rate limit for non commercial use, and covers current conditions, 7 day forecasts, historical weather, and air quality in one response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the best free API for AI and LLM projects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://groq.com" rel="noopener noreferrer"&gt;Groq&lt;/a&gt; currently offers one of the most generous genuinely free tiers, 14,400 requests a day, for fast LLM inference with no credit card required. &lt;a href="https://openrouter.ai" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt; is the best option if you want to compare multiple models through a single API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the best free API for financial data and stock ratios?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt; stands out for anything that needs pre calculated ratios, financial statements, or earnings transcripts, because the free tier is not feature limited, only rate and history limited. &lt;a href="https://www.alphavantage.co" rel="noopener noreferrer"&gt;Alpha Vantage&lt;/a&gt; and &lt;a href="https://finnhub.io" rel="noopener noreferrer"&gt;Finnhub&lt;/a&gt; are solid alternatives if your focus is raw price data rather than fundamentals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are free APIs good enough for production apps?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, for low to moderate traffic. Many providers, including Resend, Supabase, Stripe, Open-Meteo, and ROIC.ai, run permanent free tiers that plenty of small to mid production apps never outgrow. The risk is not that free APIs are unreliable, it is that limits can change, so keep an eye on the provider's pricing page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do free APIs always require a credit card?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. A growing number of providers, including Groq, OpenRouter, Open-Meteo, OpenStreetMap, Hugging Face, and ROIC.ai, let you get a working key with no card and, in several cases, no phone number either.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between a free tier and a free trial?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A free tier is permanent. The same quota resets every billing cycle indefinitely. A free trial is time boxed or credit based and eventually runs out, even if the provider's marketing calls it free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where can I find more free APIs beyond this list?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/public-apis/public-apis" rel="noopener noreferrer"&gt;public-apis GitHub repository&lt;/a&gt; is the largest community maintained directory, listing 1,700+ free APIs across 50+ categories, and is a great next stop once you have exhausted this guide.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The honest takeaway from researching this list is that there is more free API capacity available to developers in 2026 than most people realize. Between open data projects like Open-Meteo and OpenStreetMap, permanent free tiers from Groq, Resend, Supabase, and &lt;a href="https://roic.ai/api" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt;, and pay only when you earn models like Stripe, you can genuinely build and ship a full stack product, AI features, auth, email, payments, financial data, and maps included, without spending a rupee until real users, and real revenue, show up.&lt;/p&gt;

&lt;p&gt;Bookmark this page, keep a shortlist of two providers per category, and re verify limits before every major release. That one habit will save you more debugging time than any single API on this list.&lt;/p&gt;

&lt;p&gt;If this list was useful, share it with a developer who is still paying for something that has a free alternative in here.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" class="crayons-story__hidden-navigation-link"&gt;101 Best Financial Data APIs in 2026&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/roic"&gt;
            &lt;img alt="Roic AI logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15551%2F3a8d04e3-a917-4a8f-be35-ebf72160ea98.jpg" class="crayons-logo__image" width="576" height="576"&gt;
          &lt;/a&gt;

          &lt;a href="/thebitforge" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" alt="thebitforge profile" class="crayons-avatar__image" width="768" height="1344"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thebitforge" class="crayons-story__secondary fw-medium m:hidden"&gt;
              TheBitForge
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                TheBitForge
                
                
              
              &lt;div id="story-author-preview-content-4904768" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thebitforge" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" class="crayons-avatar__image" alt="" width="768" height="1344"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;TheBitForge&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/roic" class="crayons-story__secondary fw-medium"&gt;Roic AI&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" id="article-link-4904768"&gt;
          101 Best Financial Data APIs in 2026
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;57&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            19 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>productivity</category>
      <category>programming</category>
      <category>javascript</category>
      <category>api</category>
    </item>
    <item>
      <title>Best Finance Data APIS</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Sun, 25 Oct 2026 20:40:26 +0000</pubDate>
      <link>https://dev.to/roic/best-finance-data-apis-39da</link>
      <guid>https://dev.to/roic/best-finance-data-apis-39da</guid>
      <description>&lt;p&gt;If you are building anything around company fundamentals, start with ROIC.ai. It is a financial data API with prices, statements, ratios and earnings call transcripts for more than 68,000 tickers on over 70 exchanges, a free plan that needs no credit card, and a hosted MCP server so your AI tools can query the same data. It tops this list, and the first big section below explains why.&lt;/p&gt;

&lt;p&gt;The rest of the post compares ROIC.ai with eight other providers, so you can see where it wins and where it does not. I looked at what actually decides a project: what data you get, how far back it goes, how fast you can pull it, what the free tier really allows, and whether you may ship the data inside a product.&lt;/p&gt;

&lt;p&gt;A few honest notes first. I compared published documentation and pricing pages, last checked in late October 2026, and I did not run my own latency benchmarks. Prices move, so confirm every number on the vendor page. Near the end there is a small script you can use to measure the providers yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The quick answer&lt;/li&gt;
&lt;li&gt;Why ROIC.ai is my top pick&lt;/li&gt;
&lt;li&gt;How to judge a finance data API&lt;/li&gt;
&lt;li&gt;The comparison at a glance&lt;/li&gt;
&lt;li&gt;The other best finance data APIs&lt;/li&gt;
&lt;li&gt;Measure them yourself&lt;/li&gt;
&lt;li&gt;Mistakes that cost real money&lt;/li&gt;
&lt;li&gt;Frequently asked questions&lt;/li&gt;
&lt;li&gt;Final thoughts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The quick answer
&lt;/h2&gt;

&lt;p&gt;There is no single best finance data API for every job, and anyone who names one without asking what you are building is selling something. For fundamentals, ratios and transcripts across many markets, though, ROIC.ai is the one I would try first. For other jobs, here is where I would start.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company fundamentals, ratios and transcripts across many countries&lt;/td&gt;
&lt;td&gt;ROIC.ai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statements and screening, US focused&lt;/td&gt;
&lt;td&gt;Financial Modeling Prep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live and streaming US market data&lt;/td&gt;
&lt;td&gt;Massive, formerly Polygon.io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A free key to prototype with&lt;/td&gt;
&lt;td&gt;Finnhub or Twelve Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decades of end of day history worldwide&lt;/td&gt;
&lt;td&gt;EODHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean adjusted prices for backtests&lt;/td&gt;
&lt;td&gt;Tiingo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official filings and raw XBRL facts at no cost&lt;/td&gt;
&lt;td&gt;SEC EDGAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A first project with plenty of tutorials&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;
  
  
  Why ROIC.ai is my top pick
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.roic.ai/" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt; is a financial data API covering stock prices, financial statements, earnings call transcripts, ratios and company data. Its published scale is more than 68,000 tickers across more than 70 global exchanges, with financial statement history going back over 40 years. Fundamentals come from SEC filings and prices from Nasdaq, refreshed daily, according to a third party review of the service.&lt;/p&gt;

&lt;p&gt;Here is what makes it stand out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth where it matters.&lt;/strong&gt; Beyond income statements, balance sheets and cash flow, it exposes profitability ratios (including return on invested capital, the name on the door), credit and debt ratios, liquidity ratios with an Altman Z-Score, working capital ratios, yield analysis, enterprise value and valuation multiples. Most providers make you calculate those yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A free plan you can really develop on.&lt;/strong&gt; Worldwide coverage, a 5 requests per minute limit and the MCP server are all included at no cost. ROIC.ai's own comparison with Alpha Vantage points out that Alpha Vantage's free key stops at 25 requests per day, which is a very different experience for a developer testing an idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real throughput on a small plan.&lt;/strong&gt; The Individual plan is 29 dollars a month for 300 requests per minute, and Professional at 89 dollars a month has no request cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Earnings coverage.&lt;/strong&gt; Earnings calendars with estimates and surprises, plus call transcripts in raw and edited versions, with audio and slide decks where available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built for AI tools.&lt;/strong&gt; The hosted MCP server exposes 36 read only tools and works on every plan, including free. There is also an open source version you can run locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More than prices.&lt;/strong&gt; Forex for more than 4,000 pairs, stock splits, company profiles, logos, and sector and industry reference data, plus bulk downloads on paid plans. Official clients exist for Python, JavaScript, Ruby and Go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and limits
&lt;/h3&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;Free&lt;/th&gt;
&lt;th&gt;Individual&lt;/th&gt;
&lt;th&gt;Professional&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price per month&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;29 dollars&lt;/td&gt;
&lt;td&gt;89 dollars&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requests per minute&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price and financial history&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;40 plus years&lt;/td&gt;
&lt;td&gt;40 plus years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarterly financials&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;20 quarters&lt;/td&gt;
&lt;td&gt;160 plus quarters&lt;/td&gt;
&lt;td&gt;160 plus quarters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earnings transcripts&lt;/td&gt;
&lt;td&gt;2 quarters&lt;/td&gt;
&lt;td&gt;2 quarters&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earnings calendar and bulk downloads&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commercial license&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Annual billing includes two free months. Free and Individual both cap transcripts at two quarters, so the 17 plus year transcript archive needs Professional.&lt;/p&gt;

&lt;h3&gt;
  
  
  The honest limits
&lt;/h3&gt;

&lt;p&gt;It does not fit every job. Prices are daily only, so there is no intraday or tick data. There is no options or crypto data. And if you plan to redistribute the data inside a product, you need Enterprise, because the lower plans carry no commercial license. If any of those are your main need, look at the providers further down.&lt;/p&gt;

&lt;h3&gt;
  
  
  A first request
&lt;/h3&gt;

&lt;p&gt;Authentication takes one header. Every v3 path starts with the version, and tickers use an exchange prefix such as NASDAQ:AAPL.&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;os&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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE&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.roic.ai/v3.0.0&lt;/span&gt;&lt;span class="sh"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ROIC_API_KEY&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="k"&gt;def&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;path&lt;/span&gt;&lt;span class="p"&gt;,&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;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="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;path&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;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;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;timeout&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="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;429&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="nf"&gt;int&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="n"&gt;headers&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;Retry-After&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
        &lt;span class="k"&gt;return&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;path&lt;/span&gt;&lt;span class="p"&gt;,&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;r&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;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;latest&lt;/span&gt; &lt;span class="o"&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;/stock-prices/latest/NASDAQ:AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;income&lt;/span&gt; &lt;span class="o"&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;/fundamental/income-statement/NASDAQ:AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;period_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;annual&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fiscal_year.gte&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2025&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;latest&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;income&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Two details from the docs are worth knowing. Send either the query parameter key or the bearer header, never both, because supplying both returns a 401. And a request counts against your limit before validation runs, so even a malformed call costs you one.&lt;/p&gt;
&lt;h3&gt;
  
  
  Connecting an AI assistant
&lt;/h3&gt;

&lt;p&gt;The hosted MCP server lives at &lt;a href="https://mcp.roic.ai/mcp" rel="noopener noreferrer"&gt;https://mcp.roic.ai/mcp&lt;/a&gt;. In Claude Code, one command adds it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http roicai https://mcp.roic.ai/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For CI jobs or clients without hosted login support, there is also an open source server you can run locally with an API key. Review its license and recent commits on GitHub before adopting it, as you would with any third party package.&lt;/p&gt;

&lt;p&gt;Once connected, you can ask for things like profitability ratios for two companies over three years, and the assistant routes the request to the right tool. Plan limits apply exactly as they do over REST.&lt;/p&gt;

&lt;p&gt;For every endpoint, error code and the full MCP tool list, ROIC.ai has its own detailed guide:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl" class="crayons-story__hidden-navigation-link"&gt;ROIC.ai Complete Guide - Financial Data API, Pricing, Endpoints, and the 36-Tool MCP Server&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/roic"&gt;
            &lt;img alt="Roic AI logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15551%2F3a8d04e3-a917-4a8f-be35-ebf72160ea98.jpg" class="crayons-logo__image" width="576" height="576"&gt;
          &lt;/a&gt;

          &lt;a href="/thebitforge" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" alt="thebitforge profile" class="crayons-avatar__image" width="768" height="1344"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thebitforge" class="crayons-story__secondary fw-medium m:hidden"&gt;
              TheBitForge
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                TheBitForge
                
                
              
              &lt;div id="story-author-preview-content-4908918" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thebitforge" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" class="crayons-avatar__image" alt="" width="768" height="1344"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;TheBitForge&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/roic" class="crayons-story__secondary fw-medium"&gt;Roic AI&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl" id="article-link-4908918"&gt;
          ROIC.ai Complete Guide - Financial Data API, Pricing, Endpoints, and the 36-Tool MCP Server
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;44&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            13 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;You can start free at &lt;a href="https://www.roic.ai/signup" rel="noopener noreferrer"&gt;roic.ai/signup&lt;/a&gt; with no credit card, and the interactive docs live at &lt;a href="https://www.roic.ai/api/docs" rel="noopener noreferrer"&gt;roic.ai/api/docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to judge a finance data API
&lt;/h2&gt;

&lt;p&gt;Most comparison posts rank by feature count. That is the wrong lens. A longer endpoint list does not help if the one endpoint you need is locked behind a plan you cannot afford. These are the questions I would ask, in this order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What kind of data do I need?&lt;/strong&gt; Prices, fundamentals, filings, news and transcripts are different products. Many providers are strong at one and thin at the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where are my companies listed?&lt;/strong&gt; Several providers cover US stocks well and treat everything else as an upgrade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much history do I need?&lt;/strong&gt; Free and entry plans often cap history at two to five years. That is fine for a dashboard and useless for a long backtest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What will my call budget look like?&lt;/strong&gt; Do this math before you pick a plan, not after.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;calls&amp;nbsp;per&amp;nbsp;day&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;N&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord text mtight"&gt;&lt;span class="mord mtight"&gt;symbols&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord text mtight"&gt;&lt;span class="mord mtight"&gt;refreshes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;E&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord text mtight"&gt;&lt;span class="mord mtight"&gt;endpoints&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Say you track 500 tickers, refresh twice a day, and hit three endpoints for each. That is 3,000 calls a day. On a free tier capped at 25 requests per day, that job would take 120 days to finish once. And some vendors weight calls differently. EODHD, for example, charges 1 call for an end of day request but 10 for fundamentals, so the same job costs far more than the raw count suggests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Am I allowed to ship this data?&lt;/strong&gt; Personal use and commercial redistribution are different licenses. This is the one people skip, and it is the one that can end a product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can an AI agent use it?&lt;/strong&gt; More providers now run MCP servers so assistants can query data directly. If you build with agents, that is worth checking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comparison at a glance
&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;Best for&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Paid entry point&lt;/th&gt;
&lt;th&gt;Standout limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ROIC.ai&lt;/td&gt;
&lt;td&gt;Fundamentals, ratios, transcripts&lt;/td&gt;
&lt;td&gt;5 requests per minute, 2 years, MCP included&lt;/td&gt;
&lt;td&gt;29 dollars a month for 300 per minute&lt;/td&gt;
&lt;td&gt;Daily prices only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpha Vantage&lt;/td&gt;
&lt;td&gt;Learning, scheduled jobs&lt;/td&gt;
&lt;td&gt;25 requests per day, 5 per minute&lt;/td&gt;
&lt;td&gt;49.99 dollars a month for 75 per minute&lt;/td&gt;
&lt;td&gt;Free tier is tiny&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Financial Modeling Prep&lt;/td&gt;
&lt;td&gt;Statements and screening&lt;/td&gt;
&lt;td&gt;250 calls per day, end of day&lt;/td&gt;
&lt;td&gt;Starter, US only&lt;/td&gt;
&lt;td&gt;Global data sits in the top plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Massive (Polygon.io)&lt;/td&gt;
&lt;td&gt;Live US trading data&lt;/td&gt;
&lt;td&gt;5 calls per minute, 2 years end of day&lt;/td&gt;
&lt;td&gt;29 dollars a month, 15 minute delay&lt;/td&gt;
&lt;td&gt;US focus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twelve Data&lt;/td&gt;
&lt;td&gt;Multi asset time series&lt;/td&gt;
&lt;td&gt;800 credits per day&lt;/td&gt;
&lt;td&gt;29 dollars a month&lt;/td&gt;
&lt;td&gt;Credit weights vary by endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finnhub&lt;/td&gt;
&lt;td&gt;Fast prototypes&lt;/td&gt;
&lt;td&gt;60 calls per minute, personal use&lt;/td&gt;
&lt;td&gt;Priced per market&lt;/td&gt;
&lt;td&gt;Free tier is non commercial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EODHD&lt;/td&gt;
&lt;td&gt;Global history&lt;/td&gt;
&lt;td&gt;20 calls per day&lt;/td&gt;
&lt;td&gt;19.99 dollars a month&lt;/td&gt;
&lt;td&gt;Fundamentals cost 10 calls each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiingo&lt;/td&gt;
&lt;td&gt;Adjusted history&lt;/td&gt;
&lt;td&gt;Free Starter plan&lt;/td&gt;
&lt;td&gt;30 dollars a month&lt;/td&gt;
&lt;td&gt;Fundamentals sold separately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC EDGAR&lt;/td&gt;
&lt;td&gt;Filings and XBRL&lt;/td&gt;
&lt;td&gt;Free, no key&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;10 requests per second, you normalize the data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The other best finance data APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Alpha Vantage
&lt;/h3&gt;

&lt;p&gt;Alpha Vantage is where a lot of developers start, and there is a good reason. It has a huge tutorial base, a broad endpoint list that includes technical indicators, and a key you can get in seconds.&lt;/p&gt;

&lt;p&gt;The free tier is the catch. You get 25 requests per day and 5 per minute, and the vendor's own community has noted that the daily number used to be 500, then 100, and is now 25. Paid plans run from 49.99 dollars a month for 75 requests per minute up to 249.99 for 1,200 per minute, and paid plans have no daily cap.&lt;/p&gt;

&lt;p&gt;Use it for learning and for small scheduled jobs. Do not build anything that refreshes often on the free key.&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;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;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://www.alphavantage.co/query&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;function&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;GLOBAL_QUOTE&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;IBM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALPHAVANTAGE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;print&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="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;timeout&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="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Financial Modeling Prep
&lt;/h3&gt;

&lt;p&gt;Financial Modeling Prep, usually called FMP, leans toward statements, ratios and screening. The free Basic plan gives 250 calls per day with end of day data and a sample of tickers.&lt;/p&gt;

&lt;p&gt;The paid ladder matters more than the free tier. Starter allows 300 calls per minute but covers US companies only. Premium raises that to 750 per minute and adds UK and Canadian coverage plus up to 30 years of history. Global coverage, earnings transcripts and 13F filings sit in Ultimate at 3,000 calls per minute.&lt;/p&gt;

&lt;p&gt;One detail most reviews miss: FMP also enforces a trailing 30 day bandwidth cap, 500 MB on free, 20 GB on Starter, 50 GB on Premium and 150 GB on Ultimate. If you pull bulk statements, you can hit that before you hit the call limit.&lt;/p&gt;

&lt;p&gt;Starter pricing shows up in the twenties on annual billing and a little higher month to month, so check the live page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Massive, formerly Polygon.io
&lt;/h3&gt;

&lt;p&gt;Polygon.io became Massive on October 30, 2025. The two API hostnames ran in parallel during the transition, and the plan prices I found match what Polygon charged under its old name.&lt;/p&gt;

&lt;p&gt;Massive is the pick when you care about live US market data. It covers stocks, options, indices, forex and crypto, with WebSocket streaming and flat file downloads. Individual stock plans run from a free Basic tier (5 calls per minute, two years of end of day data) to Starter at 29 dollars a month, Developer at 79 and Advanced at 199. Starter data is delayed 15 minutes, so true real time costs more.&lt;/p&gt;

&lt;p&gt;The tradeoff is scope. It is excellent at market data and less central for fundamentals, and it is US focused.&lt;/p&gt;

&lt;h3&gt;
  
  
  Twelve Data
&lt;/h3&gt;

&lt;p&gt;Twelve Data offers one consistent interface across equities, ETFs, forex, crypto and indices, with server side technical indicators and WebSockets. The free plan gives 800 API credits per day, and paid plans start at 29 dollars a month.&lt;/p&gt;

&lt;p&gt;The word to watch is credits. Different endpoints consume different amounts, so a naive call count will mislead you. Read their data weight explanation before you size a plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finnhub
&lt;/h3&gt;

&lt;p&gt;Finnhub has one of the most generous free tiers in the category: about 60 calls per minute, real time US quotes, company news, basic fundamentals, forex and crypto, and a WebSocket stream, all without a credit card.&lt;/p&gt;

&lt;p&gt;The catch is the license. The free key is meant for personal, non commercial projects. Paid plans are priced per market and not as simple to read as a flat table, so expect to spend some time on the pricing page.&lt;/p&gt;

&lt;p&gt;It is a great prototyping key. Confirm the terms before it goes near a product.&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;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&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://finnhub.io/api/v1/quote&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;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;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;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;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FINNHUB_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;timeout&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="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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  EODHD
&lt;/h3&gt;

&lt;p&gt;EODHD, short for EOD Historical Data, is the long history specialist. The free plan gives only 20 calls per day, but the paid End of Day plan is 19.99 dollars a month and the End of Day plus Intraday plan is 29.99. Paid plans allow 100,000 calls per day and 1,000 per minute.&lt;/p&gt;

&lt;p&gt;Remember the call weights. One call for end of day or live data, five for intraday and news, ten for fundamentals, and 100 or more for bulk. Commercial use goes through a separate startup and enterprise plan, so do not assume a 29.99 dollar plan covers a product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tiingo
&lt;/h3&gt;

&lt;p&gt;Tiingo is the one I would reach for when the quality of adjusted price history and corporate actions matters most, such as backtesting. Its free Starter plan is limited to about 50 requests per hour and 500 unique symbols per month. The Power plan for individuals is 30 dollars a month, or 300 on annual billing, and a Business plan for internal company use is priced higher.&lt;/p&gt;

&lt;p&gt;Fundamentals and news have historically sat behind paid access or add ons, so check what your plan includes before you plan around them.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEC EDGAR
&lt;/h3&gt;

&lt;p&gt;EDGAR is not a vendor. It is the primary source, and it is free. The SEC exposes company submissions and extracted XBRL facts through JSON endpoints on data.sec.gov, with no API key.&lt;/p&gt;

&lt;p&gt;The rules are strict. The fair access guidance caps you at 10 requests per second across all your machines, and you must send a User-Agent that identifies you with contact details. Skip that header and you get a 403 quickly, and repeat offenders can be blocked.&lt;/p&gt;

&lt;p&gt;You also do the normalizing yourself. Facts can appear under several taxonomies, and companies tag things differently. That is the price of free, as filed data, and it is the work a service like ROIC.ai does for you.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&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;User-Agent&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;Your Name your.email@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;facts&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://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.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;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;timeout&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="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;revenues&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;facts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;facts&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;us-gaap&lt;/span&gt;&lt;span class="sh"&gt;"&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;Revenues&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;revenues&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;units&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;keys&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="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# stay far below 10 requests per second
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A note on yfinance. It is a popular open source Python wrapper around Yahoo Finance data. It is great in a notebook, but it is not an official API with an agreement behind it, so I would not build a paid product on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure them yourself
&lt;/h2&gt;

&lt;p&gt;Documentation tells you what a vendor promises. A ten minute test tells you what you will actually get from your own server. Here is a small harness that times a list of endpoints and prints the median and the slowest runs.&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;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;statistics&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;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bench&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&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;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&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="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;runs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;times&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;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;runs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&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;perf_counter&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="n"&gt;url&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;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;timeout&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;r&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;times&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;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;perf_counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&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="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# respect free tier limits
&lt;/span&gt;    &lt;span class="n"&gt;times&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&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;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: median &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;statistics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;times&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="s"&gt; ms, slowest &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;times&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;0&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; ms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;bench&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;roic.ai&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;https://api.roic.ai/v3.0.0/stock-prices/latest/NASDAQ:AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ROIC_API_KEY&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="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Add one line per provider, with your own keys
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it from the region where your app will live. A fast result from your laptop in one country can look very different from a cloud server in another.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes that cost real money
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Using unadjusted prices for returns.&lt;/strong&gt; After a split or dividend, raw closes lie. Check whether an endpoint returns adjusted or unadjusted data before you compute anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treating the free tier as a license.&lt;/strong&gt; A key that works is not permission to redistribute. Read the terms for commercial use every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Counting calls without weights.&lt;/strong&gt; The 3,000 calls you planned can turn into 30,000 on a provider that weights fundamentals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Putting keys in query strings.&lt;/strong&gt; URLs get logged by servers, proxies and browsers. Prefer an authorization header where the provider supports one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skipping the cache.&lt;/strong&gt; Fundamentals change a few times a year. Fetch them once, store them, and stop paying for the same answer twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignoring symbol formats.&lt;/strong&gt; Some providers want a bare ticker, others want an exchange prefix. A mismatch looks like missing data when it is really a wrong identifier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;
  What is the best finance data API?
  &lt;br&gt;
For company fundamentals, ratios and earnings transcripts across many markets, ROIC.ai is the one I would start with. For live US trading data it is Massive, and for a free prototype key it is Finnhub. The right answer depends on the data you need, so use the quick answer table near the top.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  What is the best free finance data API?
  &lt;br&gt;
For raw call volume, Finnhub's 60 calls per minute is the most generous, though it is for personal use. For fundamentals on a free key, ROIC.ai offers worldwide coverage, 5 requests per minute and MCP access, with two years of history. Alpha Vantage's 25 requests per day is the tightest of the group.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Which finance data API works best with AI agents?
  &lt;br&gt;
Look for a native MCP server. ROIC.ai runs a hosted one with 36 read only tools on every plan, including free, and an open source version for local use. Several other providers have community built servers. Plan limits still apply to every tool call.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Which finance data API has real time stock data?
  &lt;br&gt;
Massive, Finnhub and Twelve Data all offer real time or streaming options, with limits that depend on the plan. Several entry plans deliver data delayed by 15 minutes, so check the delay before you build anything that trades. ROIC.ai serves daily prices only.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Is there an official free source for company financials?
  &lt;br&gt;
Yes. SEC EDGAR provides filings and XBRL facts for free with no key, within a limit of 10 requests per second and a required User-Agent header. You normalize the data yourself.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Can I use these APIs in a commercial product?
  &lt;br&gt;
Often only on higher tiers. ROIC.ai reserves commercial redistribution for Enterprise, Finnhub's free key is non commercial, and EODHD routes commercial use to a separate plan. Always read the license, not just the pricing table.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Choose by the job, not by the brand. For live US trading data, Massive is the natural fit. For a free prototype key, Finnhub and Twelve Data are hard to beat. For decades of global end of day history, look at EODHD. For clean adjusted prices, Tiingo. For official filings at no cost, go to EDGAR directly.&lt;/p&gt;

&lt;p&gt;And for fundamentals, ratios and transcripts across many markets, with an MCP server for your AI tools and a free plan to test on, ROIC.ai is the one I would open first. Create a free key at &lt;a href="https://www.roic.ai/signup" rel="noopener noreferrer"&gt;roic.ai/signup&lt;/a&gt;, run the first request from this post, and see whether the data matches what you need.&lt;/p&gt;

&lt;p&gt;Whatever you pick, run the call budget math first, read the license second, and test with your own script third. That order saves you from the expensive kind of surprise.&lt;/p&gt;

&lt;p&gt;What are you building, and which API ended up in your stack? Tell me in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>ROIC.ai Complete Guide - Financial Data API, Pricing, Endpoints, and the 36-Tool MCP Server</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Sat, 24 Oct 2026 06:13:05 +0000</pubDate>
      <link>https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl</link>
      <guid>https://dev.to/roic/roicai-complete-guide-financial-data-api-pricing-endpoints-and-the-36-tool-mcp-server-6fl</guid>
      <description>&lt;p&gt;&lt;a href="https://www.roic.ai/" rel="noopener noreferrer"&gt;ROIC.ai&lt;/a&gt; is a financial data API covering stock prices, financial statements, earnings call transcripts, financial ratios, and company data across 68,000+ tickers and 70+ global exchanges. This guide documents the full product: authentication, response formats, every endpoint category, exact pricing across all four tiers, and the complete 36-tool MCP server with setup steps for every supported client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Data Coverage&lt;/li&gt;
&lt;li&gt;Account Setup and API Keys&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Base URL and First Request&lt;/li&gt;
&lt;li&gt;Response Format&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Error Codes&lt;/li&gt;
&lt;li&gt;Rate Limits&lt;/li&gt;
&lt;li&gt;Full Endpoint Reference&lt;/li&gt;
&lt;li&gt;Pricing — All Four Plans&lt;/li&gt;
&lt;li&gt;MCP Server&lt;/li&gt;
&lt;li&gt;MCP Tool Reference (36 Tools)&lt;/li&gt;
&lt;li&gt;MCP Setup by Client&lt;/li&gt;
&lt;li&gt;Self-Hosting the MCP Server&lt;/li&gt;
&lt;li&gt;SDKs&lt;/li&gt;
&lt;li&gt;Known Limitations&lt;/li&gt;
&lt;li&gt;Reference Links&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;ROIC.ai ( &lt;a class="mentioned-user" href="https://dev.to/vladcx"&gt;@vladcx&lt;/a&gt; ) operates as a REST API (&lt;code&gt;api.roic.ai&lt;/code&gt;) with a parallel MCP server (&lt;code&gt;mcp.roic.ai&lt;/code&gt;) that exposes the same data to AI assistants as callable tools. Both interfaces draw from the same underlying dataset and the same per-plan limits.&lt;/p&gt;

&lt;p&gt;Published scale figures:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Financial statement history&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tickers covered&lt;/td&gt;
&lt;td&gt;68,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarters of data per company&lt;/td&gt;
&lt;td&gt;120+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earnings call transcript history&lt;/td&gt;
&lt;td&gt;17+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global exchanges&lt;/td&gt;
&lt;td&gt;70+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advertised uptime&lt;/td&gt;
&lt;td&gt;99.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advertised response time&lt;/td&gt;
&lt;td&gt;Sub-200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Commercial redistribution rights (shipping the data inside a product you sell) are available only on the Enterprise plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Coverage
&lt;/h2&gt;

&lt;p&gt;The API is organized into four data groups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fundamentals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Income statement (annual + quarterly revenue, net income, EPS, EBITDA)&lt;/li&gt;
&lt;li&gt;Balance sheet (assets, liabilities, equity, debt, cash positions)&lt;/li&gt;
&lt;li&gt;Cash flow statement (operating, investing, financing, CapEx, free cash flow)&lt;/li&gt;
&lt;li&gt;Pre-computed financial ratios and valuation metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Earnings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Earnings calendar (scheduled + reported, filterable by ticker/date)&lt;/li&gt;
&lt;li&gt;Consensus estimates vs. reported actuals&lt;/li&gt;
&lt;li&gt;EPS surprise history (beat/miss with calculated surprise size)&lt;/li&gt;
&lt;li&gt;Full call transcripts — raw and edited versions, organized by fiscal quarter&lt;/li&gt;
&lt;li&gt;Call audio and slide decks (where available)&lt;/li&gt;
&lt;li&gt;SEC filings tied to earnings events&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Market Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Historical daily OHLCV and VWAP, adjusted or unadjusted for splits/dividends&lt;/li&gt;
&lt;li&gt;Latest daily price (single ticker or market-wide snapshot)&lt;/li&gt;
&lt;li&gt;Stock splits (forward and reverse, with ratios and execution dates)&lt;/li&gt;
&lt;li&gt;Forex rates for 4,000+ currency pairs, historical and latest&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Company Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Company profiles (identity, classification, market cap, CEO, exchange listings)&lt;/li&gt;
&lt;li&gt;Company logos (WebP or PNG, sized on request)&lt;/li&gt;
&lt;li&gt;Sector and industry classification with ticker counts per category&lt;/li&gt;
&lt;li&gt;SEC-sourced fiscal-year employee headcount history&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Account Setup and API Keys
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://www.roic.ai/signup" rel="noopener noreferrer"&gt;roic.ai/signup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create an account — no credit card required for the Free plan&lt;/li&gt;
&lt;li&gt;Open your dashboard and copy your API key&lt;/li&gt;
&lt;li&gt;The same key authenticates both API v2 and v3 requests&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Authentication
&lt;/h2&gt;

&lt;p&gt;Every request uses &lt;strong&gt;exactly one&lt;/strong&gt; of two authentication methods. Supplying both on the same request returns &lt;code&gt;401 Unauthorized&lt;/code&gt;, even when both values are the correct key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 1: Query parameter
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/company/profile/NASDAQ:AAPL?apikey=YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Suitable for quick testing in a browser or terminal. Not recommended for production, since query parameters are commonly logged by servers, proxies, and browser history.&lt;/p&gt;
&lt;h3&gt;
  
  
  Method 2: Bearer token (recommended)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/company/profile/NASDAQ:AAPL"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ROIC_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is the documented method for production applications, server-side code, and scripts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key storage rules per the docs:&lt;/strong&gt; store the key in an environment variable or secrets manager; never commit it to source control; never expose it in client-side browser code.&lt;/p&gt;
&lt;h2&gt;
  
  
  Base URL and First Request
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.roic.ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Every v3 endpoint path begins with &lt;code&gt;/v3.0.0&lt;/code&gt;. Example — company profile for Apple:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/company/profile/NASDAQ:AAPL?apikey=YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A successful call returns &lt;code&gt;200 OK&lt;/code&gt;, a &lt;code&gt;Request-Id&lt;/code&gt; response header (used for support/debugging), and the resource object directly.&lt;/p&gt;
&lt;h2&gt;
  
  
  Response Format
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Single-resource responses
&lt;/h3&gt;

&lt;p&gt;Returned as an unwrapped object — not nested under a &lt;code&gt;data&lt;/code&gt; key:&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tkr_cO46h8pgSu9Qqy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v3.reference.ticker"&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;"NASDAQ:AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ticker"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Nullable fields are present with a &lt;code&gt;null&lt;/code&gt; value when no data is available, rather than being omitted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exception:&lt;/strong&gt; stock prices, forex prices, and forex pairs do not include &lt;code&gt;id&lt;/code&gt; or &lt;code&gt;object&lt;/code&gt; fields. A per-row ID would duplicate data already present in the request, so these resources are addressed by &lt;code&gt;symbol&lt;/code&gt; and &lt;code&gt;date&lt;/code&gt; instead:&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;"NASDAQ:AAPL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"close"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;212.41&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;
  
  
  List responses
&lt;/h3&gt;

&lt;p&gt;Returned as a &lt;code&gt;data&lt;/code&gt; array with pagination URLs:&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;"data"&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;"next_page_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/v3.0.0/tickers?limit=50&amp;amp;page=page_v1_opaque_token"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"previous_page_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&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;ul&gt;
&lt;li&gt;First page: &lt;code&gt;previous_page_url&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Last page: &lt;code&gt;next_page_url&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Price-history list endpoints put the shared &lt;code&gt;symbol&lt;/code&gt; and &lt;code&gt;currency&lt;/code&gt; once on the envelope rather than repeating them on every row; these fields remain present even when &lt;code&gt;data&lt;/code&gt; is empty&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Binary response (one exception)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;GET /v3.0.0/company/logo/{identifier}&lt;/code&gt; returns raw WebP or PNG bytes instead of JSON, with &lt;code&gt;Content-Type&lt;/code&gt;, &lt;code&gt;ETag&lt;/code&gt;, and &lt;code&gt;Cache-Control&lt;/code&gt; headers. Conditional requests can return &lt;code&gt;304 Not Modified&lt;/code&gt; with an empty body. Logo failures still return the standard JSON error envelope.&lt;/p&gt;
&lt;h2&gt;
  
  
  Pagination
&lt;/h2&gt;

&lt;p&gt;Most list endpoints use cursor-based pagination.&lt;/p&gt;

&lt;p&gt;Request the first page without a &lt;code&gt;page&lt;/code&gt; parameter:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/tickers?limit=50"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ROIC_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Follow the returned &lt;code&gt;next_page_url&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v3.0.0/tickers?limit=50&amp;amp;page=page_v1_opaque_token"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ROIC_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page tokens are &lt;strong&gt;opaque&lt;/strong&gt; — never decode, edit, or construct one manually. Each token is bound to the specific endpoint, filters, sort order, and &lt;code&gt;limit&lt;/code&gt; that generated it.&lt;/li&gt;
&lt;li&gt;Tokens &lt;strong&gt;expire after one hour&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Changing a filter, sort order, or page size requires starting a new request without a &lt;code&gt;page&lt;/code&gt; parameter.&lt;/li&gt;
&lt;li&gt;Query-authenticated clients must re-append &lt;code&gt;?apikey=&lt;/code&gt; on every followed page URL — returned page URLs never carry credentials.&lt;/li&gt;
&lt;li&gt;The API uses stable keyset ordering, but underlying data can change between requests; store results locally if a reproducible dataset is required.&lt;/li&gt;
&lt;li&gt;A small number of endpoints (e.g., the metric-definition list) are &lt;strong&gt;unpaginated&lt;/strong&gt; — they return every matching record in one response and don't accept &lt;code&gt;limit&lt;/code&gt;, &lt;code&gt;page&lt;/code&gt;, or &lt;code&gt;order&lt;/code&gt;; both page URLs are always &lt;code&gt;null&lt;/code&gt; on these.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Error Codes
&lt;/h2&gt;

&lt;p&gt;All errors use one consistent envelope:&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;"error"&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;"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;"invalid_request_error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"resource_missing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The requested resource does not exist."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"req_0af7651916cd43dd8448eb211c80319c"&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;Application logic should branch on &lt;code&gt;type&lt;/code&gt; and &lt;code&gt;code&lt;/code&gt; — not the human-readable &lt;code&gt;message&lt;/code&gt;, which is not guaranteed to stay stable in wording. The optional &lt;code&gt;param&lt;/code&gt; field, when present, identifies which request value needs to change.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTP Status&lt;/th&gt;
&lt;th&gt;&lt;code&gt;type&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;&lt;code&gt;invalid_request_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invalid parameter, body, or page token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;&lt;code&gt;authentication_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Missing, conflicting, malformed, or unknown credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;402&lt;/td&gt;
&lt;td&gt;&lt;code&gt;payment_required_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current plan does not include access to this resource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;404&lt;/td&gt;
&lt;td&gt;&lt;code&gt;invalid_request_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource or v3 route does not exist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;409&lt;/td&gt;
&lt;td&gt;&lt;code&gt;conflict_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request conflicts with existing state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rate_limit_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request limit exceeded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;&lt;code&gt;api_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unexpected server-side failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;503&lt;/td&gt;
&lt;td&gt;&lt;code&gt;api_error&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A required dependency is unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Error responses carry &lt;code&gt;Cache-Control: no-store&lt;/code&gt; and must not be cached. Every response — success or failure — includes a &lt;code&gt;Request-Id&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documented retry policy:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;429&lt;/code&gt; → wait for the duration in &lt;code&gt;Retry-After&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;500&lt;/code&gt; / &lt;code&gt;503&lt;/code&gt; → capped exponential backoff with jitter&lt;/li&gt;
&lt;li&gt;Validation or authentication errors → correct the request before retrying; retrying unmodified requests will not succeed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Rate Limits
&lt;/h2&gt;

&lt;p&gt;v2 and v3 requests draw from the &lt;strong&gt;same quota&lt;/strong&gt; per API key, enforced on a sliding 60-second window. An authenticated request is counted against the quota before parameter validation runs, so even an invalid request consumes one call if the limit has not been reached.&lt;/p&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;Requests/minute&lt;/th&gt;
&lt;th&gt;History available&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;5&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Individual&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;All available (40+ years)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;All available (40+ years)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Rate-limit response headers
&lt;/h3&gt;

&lt;p&gt;Present on most metered responses, but not guaranteed on every call:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-RateLimit-Limit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enforced limit for the current window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-RateLimit-Remaining&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Requests remaining after this one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;X-RateLimit-Reset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unix timestamp when the oldest request exits the window&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  429 response example
&lt;/h3&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;"error"&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;"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;"rate_limit_error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rate_limit_exceeded"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rate limit exceeded for the free plan. Retry in 42 seconds or update your plan."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"req_0af7651916cd43dd8448eb211c80319c"&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;h2&gt;
  
  
  Full Endpoint Reference
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Tickers
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;List all tickers&lt;/td&gt;
&lt;td&gt;Paginated catalog of all tickers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieve a ticker&lt;/td&gt;
&lt;td&gt;Single ticker resource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search tickers&lt;/td&gt;
&lt;td&gt;Resolve company name/symbol to ticker resources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Company
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company profile&lt;/td&gt;
&lt;td&gt;CEO, sector, industry, market cap, exchange listings, description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company employees&lt;/td&gt;
&lt;td&gt;Fiscal-year headcount history (SEC-sourced)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company logo&lt;/td&gt;
&lt;td&gt;Binary WebP/PNG, supports conditional requests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Earnings Calls
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;List earnings calls&lt;/td&gt;
&lt;td&gt;All available calls by year/quarter/date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw transcript&lt;/td&gt;
&lt;td&gt;Unedited call transcript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edited transcript&lt;/td&gt;
&lt;td&gt;Cleaned/formatted transcript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Call audio&lt;/td&gt;
&lt;td&gt;Audio file for the call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slide decks&lt;/td&gt;
&lt;td&gt;Presentation materials from the call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filings&lt;/td&gt;
&lt;td&gt;SEC filings tied to the earnings event&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Calendar
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Earnings calendar&lt;/td&gt;
&lt;td&gt;Scheduled and reported earnings with estimates/actuals/surprises&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Stock Prices
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Historical prices&lt;/td&gt;
&lt;td&gt;Daily OHLCV with date-range filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latest price&lt;/td&gt;
&lt;td&gt;Most recent quote, single ticker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;List all latest stock prices&lt;/td&gt;
&lt;td&gt;Market-wide latest-price snapshot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Stock Splits
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;List stock splits&lt;/td&gt;
&lt;td&gt;Market-wide or per-ticker split events&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Financial Statements
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Income statement&lt;/td&gt;
&lt;td&gt;Revenue, net income, EPS, EBITDA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Balance sheet&lt;/td&gt;
&lt;td&gt;Assets, liabilities, equity, debt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cash flow statement&lt;/td&gt;
&lt;td&gt;Operating/investing/financing cash flow, CapEx, FCF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Financial Ratios
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Profitability ratios&lt;/td&gt;
&lt;td&gt;ROE, ROA, ROIC, margins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credit &amp;amp; debt ratios&lt;/td&gt;
&lt;td&gt;Debt/EBITDA, debt/equity, interest coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Liquidity ratios&lt;/td&gt;
&lt;td&gt;Current, quick, cash ratio, Altman Z-Score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working capital ratios&lt;/td&gt;
&lt;td&gt;Turnover ratios, cash conversion cycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yield analysis&lt;/td&gt;
&lt;td&gt;FCF yield, shareholder yield, capital yield&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Valuation
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise value&lt;/td&gt;
&lt;td&gt;Market cap, EV, EV/Sales, EV/EBITDA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valuation multiples&lt;/td&gt;
&lt;td&gt;P/E, P/B, P/S, P/CF, EV multiples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-share data&lt;/td&gt;
&lt;td&gt;EPS, revenue, book value, cash flow per share&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Forex
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;List forex pairs&lt;/td&gt;
&lt;td&gt;Currency-pair catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical forex prices&lt;/td&gt;
&lt;td&gt;Daily OHLC history for one pair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latest forex price&lt;/td&gt;
&lt;td&gt;Latest rate for one pair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;List all latest forex prices&lt;/td&gt;
&lt;td&gt;Latest rate, every pair&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Bulk Downloads (paid plans only)
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bulk fundamentals&lt;/td&gt;
&lt;td&gt;Mass financial-statement export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk earnings calls&lt;/td&gt;
&lt;td&gt;Mass transcript export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk stock prices&lt;/td&gt;
&lt;td&gt;Mass price-history export&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Reference Data
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Exchanges&lt;/td&gt;
&lt;td&gt;All exchanges with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exchange trading hours&lt;/td&gt;
&lt;td&gt;Full trading-session history per exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exchange holidays&lt;/td&gt;
&lt;td&gt;Holiday calendar per exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markets&lt;/td&gt;
&lt;td&gt;Markets with country codes and symbol counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sectors&lt;/td&gt;
&lt;td&gt;All sectors with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Industries&lt;/td&gt;
&lt;td&gt;All industries with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Countries&lt;/td&gt;
&lt;td&gt;All countries with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full interactive documentation and the OpenAPI spec: &lt;a href="https://www.roic.ai/api/docs" rel="noopener noreferrer"&gt;roic.ai/api/docs&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Pricing — All Four Plans
&lt;/h2&gt;

&lt;p&gt;Billed monthly or annually; annual billing includes 2 free months.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Individual&lt;/th&gt;
&lt;th&gt;Professional&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price/month&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$29&lt;/td&gt;
&lt;td&gt;$89&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requests/minute&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical data&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;All available (40+ yrs)&lt;/td&gt;
&lt;td&gt;All available (40+ yrs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market coverage&lt;/td&gt;
&lt;td&gt;Worldwide&lt;/td&gt;
&lt;td&gt;Worldwide&lt;/td&gt;
&lt;td&gt;Worldwide&lt;/td&gt;
&lt;td&gt;Worldwide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Annual financials&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarterly financials&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;20 quarters&lt;/td&gt;
&lt;td&gt;160+ quarters&lt;/td&gt;
&lt;td&gt;160+ quarters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Financial ratios&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valuation metrics&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;td&gt;40+ years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stock prices&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch stock prices&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stock splits&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forex&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earnings call transcripts&lt;/td&gt;
&lt;td&gt;2 quarters&lt;/td&gt;
&lt;td&gt;2 quarters&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earnings calendar&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk downloads&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exchange calendars&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commercial-use license&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoicing / multi-user access&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All four tiers include company profile data, ticker search, and reference data (sectors, industries, countries, exchanges) at no additional cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on earnings transcripts:&lt;/strong&gt; both Free and Individual are capped at 2 quarters of call transcripts. Full transcript history (17+ years) is only unlocked on Professional and Enterprise, alongside the 40-year financial history.&lt;/p&gt;
&lt;h2&gt;
  
  
  MCP Server
&lt;/h2&gt;

&lt;p&gt;ROIC.ai runs a hosted MCP (Model Context Protocol) server exposing &lt;strong&gt;36 read-only tools&lt;/strong&gt; to AI assistants. An assistant connected to the server selects the appropriate tool(s) based on a natural-language request, subject to the connected account's plan limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server 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://mcp.roic.ai/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;MCP server access is included on every plan, including Free. Plan limits (requests/minute, history depth) apply identically whether data is requested through the REST API or through MCP tool calls. Some calendar, exchange-schedule, and bulk-feed tools require a paid plan regardless of access method.&lt;/p&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;Requests/minute&lt;/th&gt;
&lt;th&gt;History via MCP&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;5&lt;/td&gt;
&lt;td&gt;2 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Individual&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;5 years&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Professional&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;All available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  MCP Tool Reference (36 Tools)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Tickers &amp;amp; Discovery
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;search_tickers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search by ticker symbol or company name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_tickers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List tickers with listing status, filterable by &lt;code&gt;listed&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_ticker_by_identifier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Look up a ticker by CIK, CUSIP, or ISIN&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Company Information
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;get_company_profile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CEO, employees, sector, industry, description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_employee_counts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Historical fiscal-year employee counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_company_news&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Recent news articles, paginated and date-filterable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Earnings Calls and Calendar
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;list_earnings_calendar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scheduled/reported earnings with estimates, actuals, surprises&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_latest_earnings_call&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Most recent call transcript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_earnings_calls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all available calls by year, quarter, date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_earnings_call_transcript&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specific transcript by year and quarter&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Stock Prices and Splits
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;get_stock_prices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Historical OHLCV with date-range filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_latest_stock_price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Most recent price for one ticker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_latest_stock_prices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latest quote for every ticker, filterable by exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_stock_splits&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Market-wide or per-ticker split events&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Financial Statements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;get_income_statement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Revenue, gross profit, operating income, net income, EPS, EBITDA, margins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_balance_sheet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Assets, liabilities, equity, shares outstanding, debt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_cash_flow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Operating/investing/financing cash flows, CapEx, free cash flow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Financial Ratios
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;get_profitability_ratios&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ROE, ROA, ROIC, margins, effective tax rate, payout ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_credit_ratios&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Debt/EBITDA, debt/equity, interest coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_liquidity_ratios&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current ratio, quick ratio, cash ratio, Altman Z-Score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_working_capital_ratios&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Receivable/inventory/payable turnover, cash conversion cycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_yield_analysis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;FCF yield, shareholder yield, capital yield&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Valuation &amp;amp; Metrics
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;get_enterprise_value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Market cap, enterprise value, EV/Sales, EV/EBITDA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_valuation_multiples&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;P/E, P/B, P/S, P/CF, EV multiples (last/avg/high/low)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_per_share_data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;EPS, revenue, EBITDA, book value, cash flow per share&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Reference Data
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;list_exchanges&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All exchanges with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_exchange_trading_hours&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full trading-session history for one exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_exchange_holidays&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Holiday calendar for one exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_markets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Markets with country codes, exchanges, symbol counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_sectors&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All sectors with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_industries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All industries with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_countries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All countries with ticker counts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Forex
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&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;list_forex_pairs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Currency-pair catalog with base, quote, synthetic status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_forex_prices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Historical daily OHLC rates, one pair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_latest_forex_price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latest daily rate, one pair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_latest_forex_prices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Latest rate for every pair, filterable by currency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Example natural-language queries
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tell me about Apple's business. What do they do, who's the CEO,
and how many employees do they have?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;get_company_profile&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare Microsoft and Google's profitability over the last 3 years.
Show me their margins and ROE.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;get_profitability_ratios&lt;/code&gt;, called once per ticker.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What did Apple's management say about AI in their latest earnings call?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;get_latest_earnings_call&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is Tesla overvalued? Show me its P/E ratio, EV/EBITDA, and
price-to-sales compared to the last 5 years.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;get_valuation_multiples&lt;/code&gt; with a historical range.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me Amazon's stock price performance for January 2025.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;get_stock_prices&lt;/code&gt; with date filters.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which sectors have the most publicly traded companies?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Routes to &lt;code&gt;list_sectors&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  MCP Setup by Client
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ChatGPT
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Settings → Apps → Advanced settings&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Toggle &lt;strong&gt;Developer mode&lt;/strong&gt; on&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt; to open the New App configuration window&lt;/li&gt;
&lt;li&gt;Fill in: Name &lt;code&gt;Roic AI&lt;/code&gt;, Connection type &lt;strong&gt;Server URL&lt;/strong&gt;, URL &lt;code&gt;https://mcp.roic.ai/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;"I understand and want to continue"&lt;/strong&gt;, click &lt;strong&gt;Create&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Sign in with Roic AI&lt;/strong&gt; and authorize in the browser tab that opens&lt;/li&gt;
&lt;li&gt;In a new chat, click &lt;strong&gt;+ → More → Roic AI&lt;/strong&gt; to attach the tool&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Claude Code (CLI)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http roicai https://mcp.roic.ai/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Verify the connection:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Claude (desktop/web)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Profile icon (bottom-left) → &lt;strong&gt;Customize&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connectors&lt;/strong&gt; → &lt;strong&gt;Add custom connector&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;Roic AI&lt;/code&gt;; Remote MCP server URL: &lt;code&gt;https://mcp.roic.ai/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add&lt;/strong&gt;, wait for the connection check, then click &lt;strong&gt;Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Authorize in the browser window that opens&lt;/li&gt;
&lt;li&gt;Review &lt;strong&gt;Tool permissions&lt;/strong&gt; (default may be "Needs approval"; can be changed to "Always allow")&lt;/li&gt;
&lt;li&gt;Start a new chat and confirm the connector is active via the &lt;code&gt;+&lt;/code&gt; icon&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  VS Code
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Command Palette (&lt;code&gt;Cmd+Shift+P&lt;/code&gt; / &lt;code&gt;Ctrl+Shift+P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Search for and select &lt;strong&gt;MCP: Add Server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;HTTP&lt;/strong&gt; as the transport type&lt;/li&gt;
&lt;li&gt;Enter URL: &lt;code&gt;https://mcp.roic.ai/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Name the server (e.g., &lt;code&gt;roicai&lt;/code&gt;) and press Enter&lt;/li&gt;
&lt;li&gt;Authorize in the browser window that opens&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  OpenAI Codex
&lt;/h3&gt;

&lt;p&gt;CLI:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add roicai &lt;span class="nt"&gt;--url&lt;/span&gt; https://mcp.roic.ai/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or in &lt;code&gt;~/.codex/config.toml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="k"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mcp_servers&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="n"&gt;roicai&lt;/span&gt;&lt;span class="k"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"https://mcp.roic.ai/mcp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Manual JSON configuration (any compatible MCP client)
&lt;/h3&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;"roicai"&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;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.roic.ai/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&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;h2&gt;
  
  
  Self-Hosting the MCP Server
&lt;/h2&gt;

&lt;p&gt;The MCP server is open source, published at &lt;a href="https://github.com/roicai/mcp-server" rel="noopener noreferrer"&gt;github.com/roicai/mcp-server&lt;/a&gt;. It runs locally with one command:&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="nv"&gt;ROIC_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key npx @roicai/mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This runs over &lt;strong&gt;stdio&lt;/strong&gt; and authenticates with a standard REST API key instead of OAuth — relevant for CI pipelines, automation scripts, or any MCP client that doesn't support hosted OAuth flows.&lt;/p&gt;

&lt;p&gt;Configuration for Claude Desktop, Cursor, or any command-based MCP client:&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;"roicai"&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;"@roicai/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;"ROIC_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_key"&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;Review the repository's license and recent commit history directly on GitHub before adopting it as a dependency, as with any third-party package.&lt;/p&gt;
&lt;h2&gt;
  
  
  SDKs
&lt;/h2&gt;

&lt;p&gt;Official SDKs/clients: Python, JavaScript/Node.js, Ruby, Go, plus raw cURL examples throughout the docs.&lt;/p&gt;

&lt;p&gt;Python install and basic usage:&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;roicai
&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;from&lt;/span&gt; &lt;span class="n"&gt;roicai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Roicai&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;Roicai&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_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;prices&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;stock_prices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NASDAQ:AAPL&lt;/span&gt;&lt;span class="sh"&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;day&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&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;day&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&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="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Known Limitations
&lt;/h2&gt;

&lt;p&gt;Based on the publicly available documentation at the time of writing, the API does &lt;strong&gt;not&lt;/strong&gt; currently include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intraday or tick-level price data — historical and latest prices are daily OHLCV only&lt;/li&gt;
&lt;li&gt;Options chain or derivatives data&lt;/li&gt;
&lt;li&gt;Cryptocurrency data&lt;/li&gt;
&lt;li&gt;Full earnings call transcript history on Free or Individual plans — both are capped at 2 quarters; full history requires Professional or Enterprise&lt;/li&gt;
&lt;li&gt;Earnings calendar or bulk downloads on Free or Individual plans — both require Professional or above&lt;/li&gt;
&lt;li&gt;Commercial redistribution rights outside the Enterprise plan&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Reference Links
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Homepage&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/" rel="noopener noreferrer"&gt;roic.ai&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign up&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/signup" rel="noopener noreferrer"&gt;roic.ai/signup&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API docs (full)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/docs" rel="noopener noreferrer"&gt;roic.ai/api/docs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Getting started&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/docs/getting-started" rel="noopener noreferrer"&gt;roic.ai/api/docs/getting-started&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/docs/authentication" rel="noopener noreferrer"&gt;roic.ai/api/docs/authentication&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response format docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/docs/response-format" rel="noopener noreferrer"&gt;roic.ai/api/docs/response-format&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAPI spec&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/docs/openapi" rel="noopener noreferrer"&gt;roic.ai/api/docs/openapi&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/api/mcp" rel="noopener noreferrer"&gt;roic.ai/api/mcp&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosted MCP (GitHub)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/roicai/mcp-server" rel="noopener noreferrer"&gt;github.com/roicai/mcp-server&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.roic.ai/pricing" rel="noopener noreferrer"&gt;roic.ai/pricing&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status page&lt;/td&gt;
&lt;td&gt;&lt;a href="https://status.roic.ai" rel="noopener noreferrer"&gt;status.roic.ai&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Base API URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.roic.ai&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://mcp.roic.ai/mcp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;&lt;em&gt;All pricing, rate limits, and endpoint details in this guide reflect the public documentation at the time of writing. APIs and pricing change over time — verify current details at &lt;a href="https://www.roic.ai/pricing" rel="noopener noreferrer"&gt;roic.ai/pricing&lt;/a&gt; and &lt;a href="https://www.roic.ai/api/docs" rel="noopener noreferrer"&gt;roic.ai/api/docs&lt;/a&gt; before making integration decisions based on this reference.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__3581035"&gt;
    &lt;a href="/thebitforge" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" alt="thebitforge image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/thebitforge"&gt;TheBitForge&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/thebitforge"&gt;Founder @thebitforge.dev • Software &amp;amp; AI Product Agency • 181K+ readers &amp;amp; 7K+ followers • We turn ideas into digital products people 💙 to use | visit us also on insta @thebitforge.dev&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__15551"&gt;
  &lt;a href="/roic" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15551%2F3a8d04e3-a917-4a8f-be35-ebf72160ea98.jpg" alt="roic image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/roic" class="ltag__user__link"&gt;Roic AI&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/roic" class="ltag__user__link"&gt;
        ROIC AI empowers developers, investors, and analysts with financial data APIs, company fundamentals, valuation metrics, Python tutorials, and AI-powered research to build smarter applications and uncover actionable insights.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>api</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>101 Best Financial Data APIs in 2026</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Fri, 23 Oct 2026 11:18:31 +0000</pubDate>
      <link>https://dev.to/thebitforge/101-best-financial-data-apis-in-2026-1blf</link>
      <guid>https://dev.to/thebitforge/101-best-financial-data-apis-in-2026-1blf</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foaijaduieosbmlha7n0p.jpg" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0" rel="noopener noreferrer" class="c-link"&gt;
            101 Best Financial Data APIs in 2026 - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            101 financial data APIs for stocks, fundamentals, filings, crypto, forex, macro, news and banking. What each does best, plus how to choose one.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" 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%2F8j7kvp660rqzt99zui8e.png"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>101 Best Financial Data APIs in 2026</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Fri, 23 Oct 2026 11:17:44 +0000</pubDate>
      <link>https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0</link>
      <guid>https://dev.to/roic/101-best-financial-data-apis-in-2026-bb0</guid>
      <description>&lt;p&gt;You find the perfect side project idea, open the docs of the first finance API Google gives you, and twenty minutes later you're staring at a rate-limit error, a pricing page full of "Contact sales" buttons, or data that quietly stops at 2019.&lt;/p&gt;

&lt;p&gt;So we went through a long list of financial data APIs, dropped the ones that shut down, got renamed or were never real APIs, and sorted the rest by what you're actually building. Each section below is a table you can scan in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need...&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean fundamentals and ready-made ratios&lt;/td&gt;
&lt;td&gt;roic.ai, Financial Modeling Prep&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A free key to prototype with&lt;/td&gt;
&lt;td&gt;Alpha Vantage, Finnhub, Twelve Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tick-level and options data&lt;/td&gt;
&lt;td&gt;Massive (ex-Polygon.io), Databento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC filings&lt;/td&gt;
&lt;td&gt;SEC EDGAR, SEC-API.io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global macro data&lt;/td&gt;
&lt;td&gt;FRED, World Bank, Trading Economics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crypto prices&lt;/td&gt;
&lt;td&gt;CoinGecko, CoinMarketCap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency conversion&lt;/td&gt;
&lt;td&gt;Open Exchange Rates, Frankfurter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bank account data&lt;/td&gt;
&lt;td&gt;Plaid, TrueLayer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise-grade coverage&lt;/td&gt;
&lt;td&gt;Bloomberg, LSEG, FactSet, S&amp;amp;P Capital IQ&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;
Featured Pick: A Fundamentals-First Financial Data API (1-1)&lt;/li&gt;
&lt;li&gt;
Stock Market Data and Fundamentals APIs (2-28)&lt;/li&gt;
&lt;li&gt;
SEC Filings, Company and Research APIs (29-36)&lt;/li&gt;
&lt;li&gt;
Government and Central Bank Data APIs (37-48)&lt;/li&gt;
&lt;li&gt;
Crypto Data APIs (49-62)&lt;/li&gt;
&lt;li&gt;
Forex and Currency APIs (63-72)&lt;/li&gt;
&lt;li&gt;
Fixed Income, Derivatives and Exchange Data (73-79)&lt;/li&gt;
&lt;li&gt;
News, Sentiment and Alternative Data APIs (80-88)&lt;/li&gt;
&lt;li&gt;
Banking, Open Banking and Payments APIs (89-101)&lt;/li&gt;
&lt;li&gt;Platforms we left out&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to pick one without regret
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What data do you actually need?&lt;/td&gt;
&lt;td&gt;Prices, fundamentals, filings, macro, crypto and FX each have different leaders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How fresh must it be?&lt;/td&gt;
&lt;td&gt;End-of-day is cheap and everywhere, real-time and tick data cost real money&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where do your tickers trade?&lt;/td&gt;
&lt;td&gt;Many free APIs are great for US stocks and thin everywhere else&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What do the licensing terms say?&lt;/td&gt;
&lt;td&gt;Public display or redistribution often needs a different plan than internal use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What if the provider vanishes?&lt;/td&gt;
&lt;td&gt;IEX Cloud shut down on August 31, 2024, so keep your integration layer thin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What are the rate limits?&lt;/td&gt;
&lt;td&gt;A free tier that throttles at 5 calls a minute is a demo, not a product&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; test with the ten tickers you really care about, including awkward ones like recent IPOs, ADRs and delisted names. It tells you more than any comparison table.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Featured Pick: A Fundamentals-First Financial Data API
&lt;/h2&gt;

&lt;p&gt;If you're building anything that depends on clean company financials, start here.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. roic.ai ( &lt;a class="mentioned-user" href="https://dev.to/vladcx"&gt;@vladcx&lt;/a&gt; )
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The write-up below sticks to what its public docs say.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.roic.ai/api" rel="noopener noreferrer"&gt;roic.ai&lt;/a&gt; is a fundamentals-first API. Instead of handing you raw statements and leaving the math to you, it returns standardized financial statements next to pre-calculated ratios like ROIC, ROE, debt-to-EBITDA and Altman Z-score, plus valuation multiples and per-share data.&lt;/p&gt;

&lt;p&gt;What stands out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wide coverage:&lt;/strong&gt; public companies across 70+ global exchanges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible identifiers:&lt;/strong&gt; API v2 accepts ticker, CIK, CUSIP and ISIN, so you skip a lot of symbol mapping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Earnings call transcripts:&lt;/strong&gt; a dedicated transcripts API sits beside statements and ratios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-ready:&lt;/strong&gt; an official MCP server connects Claude, ChatGPT, Cursor, VS Code and Codex to the data, with OAuth sign-in or an API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spreadsheet friendly:&lt;/strong&gt; a Google Sheets integration pulls the same fundamentals into your sheets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy start:&lt;/strong&gt; the docs describe a free tier with no credit card, and paid plans raise limits and history depth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the whole "hello world" from their getting-started docs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://api.roic.ai/v2/company/profile/AAPL?apikey=YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; fundamental investors, equity research tools, AI assistants that need reliable numbers, and devs who'd rather not compute ratios themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heads-up:&lt;/strong&gt; it's fundamentals-first. If you need tick-level data or order books, pair it with something like Databento or Massive. Check the pricing page for current limits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.roic.ai/api" rel="noopener noreferrer"&gt;Explore the roic.ai API →&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.roic.ai/dashboard" rel="noopener noreferrer"&gt;Get a free roic.ai API key →&lt;/a&gt;&lt;/strong&gt; and run it on a few tickers you already know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Stock Market Data and Fundamentals APIs
&lt;/h2&gt;

&lt;p&gt;This is the busiest corner of the market, and the one most developers care about first. Prices, financial statements, ratios, filings, and technical indicators all live here.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://site.financialmodelingprep.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Financial Modeling Prep (FMP)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;FMP is a go-to for statements, ratios, and market prices in one REST API.&lt;/td&gt;
&lt;td&gt;It also covers ETFs, forex, crypto, and news. Developers like that the endpoints are predictable and the free tier lets you test before paying. It also marketed itself as an alternative after IEX Cloud closed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.alphavantage.co/" rel="noopener noreferrer"&gt;&lt;strong&gt;Alpha Vantage&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;One of the most recognizable names for hobbyists and startups.&lt;/td&gt;
&lt;td&gt;You get stocks, ETFs, FX, crypto, commodities, fundamentals, and a long list of built-in technical indicators over simple JSON or CSV calls. It has a free key, and it has added MCP support for AI agents. The free tier is rate-limited, so plan for that.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://eodhd.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;EOD Historical Data (EODHD)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;EODHD focuses on broad global coverage at a lower price than the enterprise vendors.&lt;/td&gt;
&lt;td&gt;It offers end-of-day, intraday, fundamentals, options, and forex data across a large number of exchanges. A solid choice when you need international tickers without an enterprise contract.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://massive.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Massive (formerly Polygon.io)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Polygon.io rebranded as Massive on October 30, 2025.&lt;/td&gt;
&lt;td&gt;The old api.polygon.io base is still supported, with a parallel api.massive.com base. It is best known for deep tick-level and options data across stocks, options, forex, and crypto, and it is priced per asset class.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://databento.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Databento&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Databento delivers raw, normalized market data straight from exchange feeds, with historical and live access.&lt;/td&gt;
&lt;td&gt;It suits quant teams, backtesting, and anyone who cares about tick-level accuracy and clean symbology more than a friendly spreadsheet export.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tiingo.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tiingo&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tiingo pairs clean end-of-day price history with news and a developer-friendly API.&lt;/td&gt;
&lt;td&gt;It has a long-standing reputation for data quality among retail quants and Python users, with a free tier for experimenting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;a href="https://finnhub.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Finnhub&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Finnhub covers real-time US quotes, fundamentals, company news, alternative datasets, and forex and crypto.&lt;/td&gt;
&lt;td&gt;Its free tier is generous enough for side projects, which is why it shows up in so many tutorials.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twelvedata.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Twelve Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Twelve Data offers time series, technical indicators, fundamentals, and WebSocket streaming across stocks, forex, and crypto.&lt;/td&gt;
&lt;td&gt;The documentation is tidy and the client libraries are easy to get running quickly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;a href="https://intrinio.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Intrinio&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Intrinio sells standardized fundamentals, real-time and historical prices, options, and other datasets with clear licensing options.&lt;/td&gt;
&lt;td&gt;It was the provider IEX named when it told customers about its closure, and it is aimed at fintechs that need compliant redistribution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;a href="https://financialdata.net/" rel="noopener noreferrer"&gt;&lt;strong&gt;FinancialData.net&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A newer entrant covering stock prices, fundamentals, insider transactions, and more through a simple API.&lt;/td&gt;
&lt;td&gt;Worth a look if you want one provider for several datasets and clear flat-rate pricing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;a href="https://marketstack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Marketstack&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Part of the APILayer family, Marketstack provides real-time, intraday, and end-of-day stock data from many global exchanges.&lt;/td&gt;
&lt;td&gt;It is simple, low-cost, and a comfortable pick for dashboards and basic apps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.nasdaq.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Nasdaq Data Link (formerly Quandl)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The home of the datasets that made Quandl famous, now under Nasdaq.&lt;/td&gt;
&lt;td&gt;You can browse a large catalog of free and premium datasets covering markets, economics, and alternative data, accessed through one consistent API.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.xignite.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Xignite&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A cloud market-data provider used by banks, brokerages, and fintechs.&lt;/td&gt;
&lt;td&gt;Morningstar acquired Xignite in 2019, so it sits in the same family as Morningstar's data products. Expect a sales-led process rather than a self-serve signup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.barchart.com/ondemand" rel="noopener noreferrer"&gt;&lt;strong&gt;Barchart OnDemand&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Barchart's APIs cover equities, futures, options, and forex, with a particularly strong reputation for futures and commodities data.&lt;/td&gt;
&lt;td&gt;They are usually bought by firms that want licensed exchange data with support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tradier.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tradier&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tradier is a brokerage with an API that exposes quotes, options chains, and trading.&lt;/td&gt;
&lt;td&gt;It is a handy choice if you want market data and order execution from the same developer platform.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;a href="https://alpaca.markets/" rel="noopener noreferrer"&gt;&lt;strong&gt;Alpaca Market Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Alpaca is an API-first broker that also sells market data for US stocks, options, and crypto.&lt;/td&gt;
&lt;td&gt;It is popular with algo traders who want data and paper trading in the same ecosystem.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;a href="https://finance.yahoo.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Yahoo Finance (unofficial, via yfinance)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yahoo no longer offers a supported public API, but the open-source yfinance library scrapes its pages and is everywhere in tutorials.&lt;/td&gt;
&lt;td&gt;Great for learning and quick experiments. We would not build a paid product on it, because there is no SLA and it can break without notice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.morningstar.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Morningstar&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Morningstar's developer portal sells fund, equity, ESG, and ratings data.&lt;/td&gt;
&lt;td&gt;If your product revolves around mutual funds and ETFs, Morningstar's research depth is hard to beat, though it comes with enterprise pricing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.factset.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;FactSet&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;FactSet offers a wide set of APIs for fundamentals, estimates, ownership, and market data, mostly used by institutions.&lt;/td&gt;
&lt;td&gt;Expect enterprise contracts and strong support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.spglobal.com/market-intelligence/" rel="noopener noreferrer"&gt;&lt;strong&gt;S&amp;amp;P Capital IQ&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;S&amp;amp;P Global Market Intelligence provides company financials, estimates, and credit data through Capital IQ products and APIs.&lt;/td&gt;
&lt;td&gt;It is an institutional standard for corporate research.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.lseg.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;LSEG Data &amp;amp; Analytics (formerly Refinitiv)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Refinitiv is now part of the London Stock Exchange Group.&lt;/td&gt;
&lt;td&gt;The developer portal exposes real-time and historical data, fundamentals, news, and Datastream content. It is built for large firms with licensing needs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bloomberg.com/professional/" rel="noopener noreferrer"&gt;&lt;strong&gt;Bloomberg (B-PIPE and Data License)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The heavyweight of the industry.&lt;/td&gt;
&lt;td&gt;Bloomberg offers real-time feeds and reference data for firms that already live in its ecosystem. It is rarely the right call for a small team, but it is the benchmark everyone else is measured against.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.ice.com/market-data" rel="noopener noreferrer"&gt;&lt;strong&gt;ICE Data Services&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ICE sells exchange data, reference data, and pricing for equities, fixed income, and derivatives.&lt;/td&gt;
&lt;td&gt;It is part of the company that owns the New York Stock Exchange.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.zacks.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Zacks&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Zacks is known for earnings estimates, rankings, and stock research.&lt;/td&gt;
&lt;td&gt;It has data products for institutions and developers who want its estimate-driven view of stocks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.tradestation.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;TradeStation API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TradeStation exposes market data and trading through its brokerage API, covering equities, options, and futures.&lt;/td&gt;
&lt;td&gt;It is a practical option for traders building automated strategies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.schwab.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Charles Schwab Trader API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Schwab's developer portal offers market data and trading APIs for clients, including quotes and order management.&lt;/td&gt;
&lt;td&gt;Access requires an approved developer app and a brokerage relationship, so budget time for onboarding.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.interactivebrokers.com/campus/ibkr-api-page/ibkr-api-home/" rel="noopener noreferrer"&gt;&lt;strong&gt;Interactive Brokers API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Interactive Brokers provides APIs for market data and order execution across global markets, but you need a brokerage account.&lt;/td&gt;
&lt;td&gt;It is powerful and a bit old-school to set up.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  SEC Filings, Company and Research APIs
&lt;/h2&gt;

&lt;p&gt;Filings and research data are where fundamental investors and AI builders spend a lot of time. Some of the best sources here cost nothing.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.sec.gov/search-filings/edgar-application-programming-interfaces" rel="noopener noreferrer"&gt;&lt;strong&gt;SEC EDGAR APIs&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The SEC's own APIs deliver filing metadata and structured XBRL data for US public companies, free of charge.&lt;/td&gt;
&lt;td&gt;Raw EDGAR is the ground truth for 10-Ks and 8-Ks, though you will do some parsing work yourself. Respect the SEC's fair-access limits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sec-api.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;SEC-API.io&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A commercial layer on top of EDGAR that offers search, real-time filing streams, and parsed sections of filings.&lt;/td&gt;
&lt;td&gt;It saves a lot of engineering time if you need filings turned into usable JSON.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.alpha-sense.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;AlphaSense&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;AlphaSense is a market-intelligence platform for filings, transcripts, broker research, and news, with enterprise APIs.&lt;/td&gt;
&lt;td&gt;It absorbed Sentieo, the older research platform some lists still mention.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.crunchbase.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Crunchbase&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crunchbase's API covers private companies, funding rounds, investors, and acquisitions.&lt;/td&gt;
&lt;td&gt;It is the usual starting point for startup and venture data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.cbinsights.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;CB Insights&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CB Insights offers tech and startup intelligence, deals, and market maps, with enterprise data access.&lt;/td&gt;
&lt;td&gt;It suits corporate strategy and VC teams more than individual developers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.msci.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;MSCI&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MSCI is a major provider of indexes, risk analytics, and ESG ratings.&lt;/td&gt;
&lt;td&gt;Its data is typically licensed by asset managers and large platforms.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.reprisk.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;RepRisk&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;RepRisk specializes in ESG and business-conduct risk data built from media and public sources.&lt;/td&gt;
&lt;td&gt;It is a common choice for compliance and sustainable-investing workflows.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tradingeconomics.com/api/" rel="noopener noreferrer"&gt;&lt;strong&gt;Trading Economics&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Trading Economics serves macro indicators, forecasts, and market data for a large number of countries.&lt;/td&gt;
&lt;td&gt;It is a convenient single source when you need global economic series in one place.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Government and Central Bank Data APIs
&lt;/h2&gt;

&lt;p&gt;These are official sources. They are free, authoritative, and often more stable than commercial vendors, although the formats can be quirky.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fred.stlouisfed.org/docs/api/fred/" rel="noopener noreferrer"&gt;&lt;strong&gt;FRED (St. Louis Fed)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;FRED hosts hundreds of thousands of economic time series, from interest rates to inflation, through a free API key.&lt;/td&gt;
&lt;td&gt;It is the first stop for anyone building an economics dashboard.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;&lt;a href="https://datahelpdesk.worldbank.org/knowledgebase/topics/125589" rel="noopener noreferrer"&gt;&lt;strong&gt;World Bank Open Data API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free, well-documented access to development indicators for most of the world's economies.&lt;/td&gt;
&lt;td&gt;Good for long-term, cross-country analysis.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.imf.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;IMF Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The International Monetary Fund publishes international financial statistics and macro data through its data portal and web services.&lt;/td&gt;
&lt;td&gt;It's useful for balance-of-payments, exchange rates, and country-level economics.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.oecd.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;OECD Data API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The OECD provides statistics for its member economies through an SDMX-based API.&lt;/td&gt;
&lt;td&gt;It is excellent for comparing developed economies on labor, trade, and prices.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.bis.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;BIS Data Portal&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Bank for International Settlements shares banking, credit, and exchange-rate statistics, including data via its bulk download and API tools.&lt;/td&gt;
&lt;td&gt;It is niche but valuable for systemic-risk research.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;&lt;a href="https://data.ecb.europa.eu/" rel="noopener noreferrer"&gt;&lt;strong&gt;ECB Data Portal&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The European Central Bank's data portal exposes euro-area statistics and official euro foreign exchange reference rates.&lt;/td&gt;
&lt;td&gt;It replaced the older Statistical Data Warehouse interface.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ec.europa.eu/eurostat/web/main/data/web-services" rel="noopener noreferrer"&gt;&lt;strong&gt;Eurostat API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Eurostat offers EU-wide economic and social statistics through web services.&lt;/td&gt;
&lt;td&gt;Handy for anything tied to European macro trends.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bankofengland.co.uk/boeapps/database/" rel="noopener noreferrer"&gt;&lt;strong&gt;Bank of England Database&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Bank of England publishes UK interest rates, gilt yields, and monetary statistics in its Statistical Interactive Database, with CSV and XML access.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bankofcanada.ca/valet/docs" rel="noopener noreferrer"&gt;&lt;strong&gt;Bank of Canada Valet API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Valet is the Bank of Canada's free API for exchange rates, interest rates, and other time series.&lt;/td&gt;
&lt;td&gt;It is simple and refreshingly easy to use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.stat-search.boj.or.jp/" rel="noopener noreferrer"&gt;&lt;strong&gt;Bank of Japan Time-Series Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Bank of Japan's statistics portal provides time-series data on rates, money supply, and prices.&lt;/td&gt;
&lt;td&gt;Check the current documentation for programmatic access options.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;&lt;a href="https://webstat.banque-france.fr/" rel="noopener noreferrer"&gt;&lt;strong&gt;Banque de France Webstat&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Banque de France publishes French and euro-area statistics through Webstat, including an API for series access.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fiscaldata.treasury.gov/api-documentation/" rel="noopener noreferrer"&gt;&lt;strong&gt;U.S. Treasury FiscalData API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The US Treasury's free API covers debt, interest rates, exchange rates, and federal finance data.&lt;/td&gt;
&lt;td&gt;No signup required for most endpoints.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Crypto Data APIs
&lt;/h2&gt;

&lt;p&gt;Crypto data is its own universe, with thousands of assets, hundreds of exchanges, and lots of ways for the numbers to disagree.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.coingecko.com/en/api" rel="noopener noreferrer"&gt;&lt;strong&gt;CoinGecko API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CoinGecko describes itself as an independent crypto data aggregator, and its API covers prices, market caps, exchange data, NFTs, and DeFi metrics for a huge range of coins.&lt;/td&gt;
&lt;td&gt;A free tier exists, with paid plans for higher limits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;&lt;a href="https://coinmarketcap.com/api/" rel="noopener noreferrer"&gt;&lt;strong&gt;CoinMarketCap API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CoinMarketCap offers rankings, quotes, and metadata for crypto assets and exchanges.&lt;/td&gt;
&lt;td&gt;It's the other big name next to CoinGecko, with a free basic plan.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.coindesk.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;CoinDesk Data (formerly CryptoCompare)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CryptoCompare's data business now operates under the CoinDesk Data brand.&lt;/td&gt;
&lt;td&gt;It provides real-time and historical prices, order books, and indices aimed at both developers and institutions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;&lt;a href="https://messari.io/api" rel="noopener noreferrer"&gt;&lt;strong&gt;Messari&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Messari combines market data with research, asset profiles, and on-chain fundamentals.&lt;/td&gt;
&lt;td&gt;A good fit for analysts who want context along with prices.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.kaiko.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Kaiko&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kaiko provides institutional-grade tick data, order books, and reference rates across many exchanges.&lt;/td&gt;
&lt;td&gt;It is targeted at funds, banks, and index providers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.coinapi.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;CoinAPI&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CoinAPI normalizes trades, quotes, and order books from a large number of crypto exchanges into one API, with REST, WebSocket, and FIX access.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.coincap.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;CoinCap API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CoinCap offers simple, real-time crypto prices and market data via REST and WebSocket.&lt;/td&gt;
&lt;td&gt;A friendly pick for demos and lightweight apps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;&lt;a href="https://glassnode.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Glassnode&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Glassnode is known for on-chain analytics such as active addresses, supply metrics, and market indicators.&lt;/td&gt;
&lt;td&gt;Its API is popular with analysts who trade on fundamentals of the chain itself.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.cdp.coinbase.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Coinbase Exchange and Advanced Trade API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Coinbase exposes market data and trading endpoints for its exchange.&lt;/td&gt;
&lt;td&gt;Useful when you only need prices and execution for assets listed there.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.kraken.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Kraken API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kraken provides public market data and authenticated trading through REST and WebSocket APIs.&lt;/td&gt;
&lt;td&gt;Public endpoints work without an account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.binance.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Binance API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Binance's public APIs cover spot and derivatives market data with very high liquidity coverage.&lt;/td&gt;
&lt;td&gt;Availability and rules vary by region, so check where your users are.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.gemini.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Gemini API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Gemini offers market data and trading APIs for its US-regulated exchange, with public endpoints for prices and order books.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bitmex.com/app/apiOverview" rel="noopener noreferrer"&gt;&lt;strong&gt;BitMEX API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;BitMEX provides market data and trading for crypto derivatives like perpetual swaps.&lt;/td&gt;
&lt;td&gt;It suits derivatives-focused traders and researchers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bitstamp.net/api/" rel="noopener noreferrer"&gt;&lt;strong&gt;Bitstamp API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;One of the longest-running exchanges, Bitstamp provides a clean public API for spot prices and order books.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Forex and Currency APIs
&lt;/h2&gt;

&lt;p&gt;Currency conversion looks easy until you need history, reliability, and a sensible rate limit. These APIs cover the spectrum from free to broker-grade.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;&lt;a href="https://openexchangerates.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Exchange Rates&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A long-running JSON API for exchange rates with a free plan and paid tiers for higher volume, more frequent updates, and more features.&lt;/td&gt;
&lt;td&gt;It is widely used in e-commerce and finance apps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fixer.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Fixer&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Another APILayer product, Fixer returns live and historical rates for a wide set of currencies, with a free plan to start.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;&lt;a href="https://currencylayer.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Currencylayer&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Also from APILayer, Currencylayer provides real-time and historical rates for many currencies with a free tier and paid upgrades.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.xe.com/xecurrencydata/" rel="noopener noreferrer"&gt;&lt;strong&gt;XE Currency Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;XE is a household name in currency conversion, and its data API serves commercial users.&lt;/td&gt;
&lt;td&gt;Pricing is paid.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.oanda.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;OANDA Exchange Rates API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;OANDA offers exchange-rate data and, for account holders, trading APIs.&lt;/td&gt;
&lt;td&gt;It is a regulated broker with a long history in FX.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;&lt;a href="https://1forge.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;1Forge&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1Forge focuses on real-time forex quotes with a free tier and paid plans.&lt;/td&gt;
&lt;td&gt;Check current availability and plans before committing, as smaller vendors change often.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.truefx.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;TrueFX&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TrueFX provides free tick-level interbank forex data after registration, which is handy for backtesting.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.exchangerate-api.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;ExchangeRate-API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A straightforward currency API with a free plan and simple pricing.&lt;/td&gt;
&lt;td&gt;Very quick to integrate.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;&lt;a href="https://frankfurter.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;Frankfurter&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A free, open-source exchange-rate API built on reference rates published by central banks, mainly the European Central Bank.&lt;/td&gt;
&lt;td&gt;No key required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.currencycloud.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Currencycloud&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Currencycloud, now part of Visa, offers cross-border payments and FX APIs.&lt;/td&gt;
&lt;td&gt;It suits fintechs that need to move money internationally.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Fixed Income, Derivatives and Exchange Data
&lt;/h2&gt;

&lt;p&gt;Bond and derivatives data tends to be more fragmented and more expensive. These are the exchanges, utilities, and platforms behind many feeds.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.cmegroup.com/market-data.html" rel="noopener noreferrer"&gt;&lt;strong&gt;CME Group Market Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CME Group offers real-time and historical futures and options data, including its DataMine historical archive.&lt;/td&gt;
&lt;td&gt;It is the primary source for CME-listed products.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.cboe.com/market_data_services/" rel="noopener noreferrer"&gt;&lt;strong&gt;Cboe Market Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cboe provides options, equities, and volatility index data through its market data services.&lt;/td&gt;
&lt;td&gt;The go-to source for VIX-related products.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.marketaxess.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;MarketAxess&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MarketAxess runs an electronic bond-trading platform and provides credit market data and analytics to subscribers.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tradeweb.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tradeweb&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tradeweb operates electronic markets for rates, credit, and derivatives, and provides market data to clients.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.dtcc.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;DTCC Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DTCC runs core clearing and settlement infrastructure and publishes data products, including public trade repository reports.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.finra.org/filing-reporting/trace" rel="noopener noreferrer"&gt;&lt;strong&gt;FINRA TRACE&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;FINRA's TRACE system collects US corporate bond trade reports and distributes the data through licensed feeds and public statistics.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;&lt;a href="https://emma.msrb.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;MSRB EMMA&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;EMMA is the official source for US municipal bond disclosures and trade data, offered by the Municipal Securities Rulemaking Board.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  News, Sentiment and Alternative Data APIs
&lt;/h2&gt;

&lt;p&gt;Headlines and sentiment are noisy by nature. The providers below range from free community sources to quant-grade feeds.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;&lt;a href="https://newsapi.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;NewsAPI.org&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A simple API for headlines and articles from many publishers.&lt;/td&gt;
&lt;td&gt;Good for prototypes, with limitations on free use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;&lt;a href="https://webz.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Webz.io (formerly Webhose)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Webz.io delivers structured news, blog, and forum data from across the open and dark web, aimed at monitoring and analytics teams.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aylien.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Aylien (now part of Quantexa)&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Aylien built news-intelligence and NLP APIs for entity extraction and sentiment, and is now part of Quantexa.&lt;/td&gt;
&lt;td&gt;Confirm current product availability before building on it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td&gt;&lt;a href="https://api.stocktwits.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;StockTwits API&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;StockTwits offers social sentiment from a community of retail traders.&lt;/td&gt;
&lt;td&gt;Useful as a signal, as long as you remember it reflects crowd mood rather than facts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.gdeltproject.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;GDELT Project&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;GDELT monitors global news and publishes free datasets and APIs for events, tone, and themes.&lt;/td&gt;
&lt;td&gt;A favorite of researchers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.ravenpack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;RavenPack&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;RavenPack turns news and text into structured analytics and sentiment for quant funds and risk teams.&lt;/td&gt;
&lt;td&gt;Enterprise pricing applies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.meltwater.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Meltwater&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Meltwater provides media monitoring and social listening with API access, mostly for marketing and communications teams.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td&gt;&lt;a href="https://professional.dowjones.com/factiva/" rel="noopener noreferrer"&gt;&lt;strong&gt;Dow Jones Factiva&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Factiva is a deep archive of global news and business content with enterprise APIs.&lt;/td&gt;
&lt;td&gt;Built for corporate and institutional research.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.benzinga.com/apis/" rel="noopener noreferrer"&gt;&lt;strong&gt;Benzinga APIs&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Benzinga provides real-time news, calendars, and market-moving headlines to traders and fintech apps.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Banking, Open Banking and Payments APIs
&lt;/h2&gt;

&lt;p&gt;Not exactly market data, but if your product touches users' money, you will meet these names quickly.&lt;/p&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;Provider&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Good to know&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td&gt;&lt;a href="https://plaid.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Plaid&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Plaid connects apps to users' bank accounts for balances, transactions, identity, and payments.&lt;/td&gt;
&lt;td&gt;It is the most recognized account-aggregation API in North America and also operates in parts of Europe.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;&lt;a href="https://truelayer.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;TrueLayer&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;TrueLayer offers open banking data and payment initiation across the UK and Europe.&lt;/td&gt;
&lt;td&gt;It is a staple for European fintechs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.yodlee.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Yodlee&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Yodlee, from Envestnet, has long provided account aggregation and financial data enrichment at scale.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tink.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tink&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tink is a European open banking platform, now owned by Visa, covering account data, payments, and money-management tools.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.finicity.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Finicity&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Finicity, part of Mastercard, provides account verification and financial data for lending and personal finance use cases in the US.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.mx.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;MX&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MX provides data aggregation and enrichment to banks and fintechs, with a focus on cleaner transaction data.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;&lt;a href="https://stripe.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Stripe&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Stripe is primarily a payments platform, but its APIs for payments, billing, and financial connections make it part of many fintech stacks.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.squareup.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Square Developer&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Square's APIs power payments, payouts, and commerce for businesses of all sizes.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.dwolla.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Dwolla&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dwolla offers an API for ACH bank-to-bank payments in the US, aimed at platforms that move money between accounts.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gocardless.com/bank-account-data/" rel="noopener noreferrer"&gt;&lt;strong&gt;GoCardless Bank Account Data&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;GoCardless provides open banking account data across Europe and the UK through a developer-friendly API.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wise.com/platform" rel="noopener noreferrer"&gt;&lt;strong&gt;Wise Platform&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Wise Platform lets businesses embed international transfers and multi-currency accounts through its APIs.&lt;/td&gt;
&lt;td&gt;A practical option when your product needs cross-border payouts with transparent FX.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.bbvaapimarket.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;BBVA API Market&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;BBVA's API marketplace exposes banking services such as accounts and payments to partners.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.openbanking.org.uk/" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Banking UK&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Not a data vendor itself, but the standards body behind UK open banking.&lt;/td&gt;
&lt;td&gt;Its directory and specifications are essential reading if you build there.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Platforms we left out (and why)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Why it's not here&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IEX Cloud&lt;/td&gt;
&lt;td&gt;Retired all products on August 31, 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polygon.io (old name)&lt;/td&gt;
&lt;td&gt;Still alive, now called Massive, so it's listed that way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nomics&lt;/td&gt;
&lt;td&gt;We couldn't confirm it still serves a public API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Finance&lt;/td&gt;
&lt;td&gt;No official public API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sentieo&lt;/td&gt;
&lt;td&gt;Folded into AlphaSense, which has its own entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Venmo / Cash App&lt;/td&gt;
&lt;td&gt;No public financial-data APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Made-up providers&lt;/td&gt;
&lt;td&gt;If a vendor can't be found on the real web, it doesn't belong here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Before you commit
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Do this&lt;/th&gt;
&lt;th&gt;Because&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compare two vendors&lt;/td&gt;
&lt;td&gt;Small differences in standardizing fundamentals can change a ratio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read the terms&lt;/td&gt;
&lt;td&gt;Personal use, internal use and public display are priced differently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache what you can&lt;/td&gt;
&lt;td&gt;Lower bill and fewer outages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check the live pricing page&lt;/td&gt;
&lt;td&gt;Plans change, and no guide can replace the real page&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;
  What's the best free financial data API?
  &lt;br&gt;
For prototypes, Alpha Vantage, Finnhub and Twelve Data are common starting points, and roic.ai documents a free tier with no credit card. Free plans are rate-limited, so check the limits against your use case.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Which API is best for fundamentals?
  &lt;br&gt;
Look for standardized statements and pre-computed ratios. roic.ai, Financial Modeling Prep, Intrinio and FactSet are all built around fundamentals, at very different price points.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  What's the best API for real-time stock data?
  &lt;br&gt;
Massive (formerly Polygon.io), Databento, Alpaca and Finnhub are popular for real-time US data. Confirm whether you're getting consolidated, exchange-licensed or delayed data.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Is there an official Yahoo Finance API?
  &lt;br&gt;
No. The popular yfinance library scrapes Yahoo pages, which is fine for learning but risky in production.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Where can I get SEC filings through an API?
  &lt;br&gt;
SEC EDGAR has free APIs. SEC-API.io and AlphaSense add search and parsing on top.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Which API is best for crypto data?
  &lt;br&gt;
CoinGecko and CoinMarketCap cover broad market data, Kaiko and CoinAPI suit institutional needs, and Glassnode specializes in on-chain metrics.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Can AI assistants use financial data APIs?
  &lt;br&gt;
Yes. Several providers now offer Model Context Protocol (MCP) servers so tools like Claude, ChatGPT and Cursor can query data directly. roic.ai and Alpha Vantage both document MCP support.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Can I make investment decisions from this data?
  &lt;br&gt;
A data API only delivers data. It isn't advice, and data can be wrong or delayed. Verify important figures against primary sources.&lt;br&gt;


&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where we'd start
&lt;/h2&gt;

&lt;p&gt;There's no single winner, because "best" depends on what you're building. Prototype with a free key, use official sources for macro data, and pay for exchange-grade feeds only when your product truly needs them.&lt;/p&gt;

&lt;p&gt;If your project is built on company fundamentals, we'd begin with &lt;a href="https://www.roic.ai/api" rel="noopener noreferrer"&gt;roic.ai&lt;/a&gt;. It returns standardized statements, ready-made ratios, valuation multiples and earnings transcripts through one REST API, and plugs into AI assistants through MCP.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.roic.ai/dashboard" rel="noopener noreferrer"&gt;Get a free roic.ai API key →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Found this useful?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;❤️ &lt;strong&gt;Drop a reaction&lt;/strong&gt; so more devs find it&lt;/li&gt;
&lt;li&gt;🔖 &lt;strong&gt;Save it&lt;/strong&gt; for your next project&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Tell us in the comments:&lt;/strong&gt; which financial data API are you using right now, and why did you pick it?&lt;/li&gt;
&lt;li&gt;➕ &lt;strong&gt;Follow&lt;/strong&gt; for more developer guides&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>programming</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Are We Becoming Better Developers, or Just Faster at Producing Code?</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Sat, 17 Oct 2026 10:43:36 +0000</pubDate>
      <link>https://dev.to/thebitforge/are-we-becoming-better-developers-or-just-faster-at-producing-code-h4b</link>
      <guid>https://dev.to/thebitforge/are-we-becoming-better-developers-or-just-faster-at-producing-code-h4b</guid>
      <description>&lt;p&gt;Friday afternoon. A ticket lands in your queue: new endpoint, some validation, a small migration. The kind of task that used to eat half your day.&lt;/p&gt;

&lt;p&gt;You describe it to your AI assistant, skim the diff, run the tests, ship it. Twenty minutes, done.&lt;/p&gt;

&lt;p&gt;Three months later that endpoint breaks under some load pattern nobody planned for. You open the file and you don't quite recognize it. You wrote it, technically. You accepted it, tested it, merged it. But you never built a real model of how it works, because the part that would have forced you to think it through got handled for you.&lt;/p&gt;

&lt;p&gt;That raises a question: if AI writes more of our code, are we still learning how that code actually works, or just getting faster at shipping things we don't fully understand?&lt;/p&gt;

&lt;h2&gt;
  
  
  The productivity studies don't agree, and the disagreement is the useful part
&lt;/h2&gt;

&lt;p&gt;In 2023, Microsoft, GitHub, and MIT Sloan ran a &lt;a href="https://arxiv.org/abs/2302.06590" rel="noopener noreferrer"&gt;randomized trial&lt;/a&gt; where developers wrote a standardized HTTP server in JavaScript. The Copilot group finished 55.8% faster, and more of them finished at all, 78% versus 70%, though that completion-rate gap wasn't statistically significant on its own. It measured speed on a fairly contained task, not whether the resulting code held up over time.&lt;/p&gt;

&lt;p&gt;Two years later, &lt;a href="https://arxiv.org/abs/2507.09089" rel="noopener noreferrer"&gt;METR&lt;/a&gt; tested something closer to real engineering work. They recruited sixteen experienced open source developers and watched them complete 246 tasks in their own large, familiar repositories, some with AI access and some without. The result ran the other direction: developers using AI took 19% longer. Before starting, they'd predicted AI would speed them up. Afterward, they still believed it had, estimating a roughly 20% improvement that the data didn't support.&lt;/p&gt;

&lt;p&gt;At first glance these look contradictory. But the studies tested different kinds of work. A contained task with an unfamiliar tool is where AI assistance tends to show up well. A codebase someone already carries in their head, built over years, is a much harder place for a generic tool to add value, and an easier place for review and correction overhead to eat whatever time it saves. The studies tell us something different about productivity in different settings. METR's result is the one worth sitting with: developers expected AI to save them time, and the measured result went the other way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quiz that tested what developers actually learned
&lt;/h2&gt;

&lt;p&gt;A more direct test of the real question came from Anthropic, in a study of 52 developers, mostly junior, learning an unfamiliar Python library called Trio. One group had an AI assistant during the coding tasks. The other coded by hand. Afterward, everyone took the same quiz, no AI allowed, covering debugging, code reading, and conceptual understanding. It's a small study of people learning something new, not a representative sample of senior engineers working on production systems, but the results are worth examining.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.anthropic.com/research/AI-assistance-coding-skills" rel="noopener noreferrer"&gt;AI-assisted group averaged 50% on that quiz, versus 67% for the hand-coding group&lt;/a&gt;, a gap of 17 percentage points. The biggest difference between the groups showed up specifically on debugging questions. There's another important detail, though: the AI group only finished about two minutes faster on average, a difference too small to call statistically meaningful. They didn't even get much speed in exchange for the gap in understanding.&lt;/p&gt;

&lt;p&gt;Looking back at screen recordings, the researchers sorted participants into six observational patterns of how people actually used the assistant. Three patterns, built around handing the task over and accepting what came back, averaged under 40% on the quiz. Three other patterns, where people asked why something worked or requested explanations alongside the code, scored between 65% and 86%. The researchers are careful that this is a correlation found after the fact, not proof that a given pattern of use caused the score. Still, the association is hard to ignore: people who stayed cognitively engaged with the assistant tended to retain more than people who didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shows up later, in actual codebases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality" rel="noopener noreferrer"&gt;GitClear&lt;/a&gt; analyzed roughly 153 million lines of changed code from 2020 through 2023 and projected that code churn, meaning lines reverted or rewritten within two weeks of being written, would roughly double by 2024 compared with its 2021 baseline. Copy-pasted code was also rising relative to properly refactored code. GitClear shows that churn increased during the years AI tools became common, but that doesn't prove AI caused it, and GitHub has pushed back publicly on that reading. One possible explanation is that developers are merging code before they've fully understood it, though the data alone can't establish that.&lt;/p&gt;

&lt;p&gt;On security specifically, &lt;a href="https://arxiv.org/abs/2211.03622" rel="noopener noreferrer"&gt;Stanford researchers&lt;/a&gt; found that developers with access to an AI coding assistant wrote measurably less secure code than a control group, and were more confident their code was secure. The tools have changed since that 2022 to 2023 experiment, so its results shouldn't be treated as a verdict on today's assistants. But it highlights a risk worth considering: developers can be confident in code they haven't fully evaluated.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://survey.stackoverflow.co/2025/" rel="noopener noreferrer"&gt;2025 Stack Overflow survey&lt;/a&gt;, built on more than 49,000 responses, found 84% of developers either using AI tools already or planning to, a figure that mixes current users with people who haven't started yet. Among respondents overall, 46% said they didn't trust the accuracy of AI output, up from 31% the year before, and 66% named "almost right, but not quite" answers as their top frustration with the tools. Of those who answered the frustrations question, 45% said debugging AI-generated code was more time-consuming than expected. That's self-reported experience, not a controlled measurement of actual debugging time, but it lines up with the other findings here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the tool genuinely helps
&lt;/h2&gt;

&lt;p&gt;The Copilot study's speed gains were real, and some people in the Anthropic study using the exact same tool on the exact same task learned just as much as the control group. AI tends to help most with the parts of the job that are mechanical once you already understand them: boilerplate, syntax you've half forgotten, turning a plan you've already worked out into code, explaining an unfamiliar error faster than a search engine would. It's also useful as a second opinion, something to push back against your own design before committing to it. None of this says AI damages learning by default. It says learning depends on what a developer does while the tool is open, not just whether it's open.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rate limiting: two ways to use AI
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg688s4n5n5ddwozx8k8p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg688s4n5n5ddwozx8k8p.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Picture two developers given the same task: add rate limiting to an API with an AI assistant available to both. This is a made-up scenario to keep the point concrete, not a documented incident.&lt;/p&gt;

&lt;p&gt;The first developer asks for an implementation, gets a working solution using a sliding-window counter backed by Redis, confirms the tests pass, and ships it. Weeks later, under a burst of traffic, the Redis connection pool starts timing out. They're trying to understand the retry logic and connection-pool behavior while the service is degraded, without knowing whether the problem is in their implementation, their Redis configuration, or both.&lt;/p&gt;

&lt;p&gt;The second developer asks the same initial question, then follows up. Why this approach over an alternative. What happens if Redis briefly drops. They try implementing a small piece by hand first, compare it against what the assistant produced, and only merge once they can explain why the retry logic is structured the way it is. The task takes longer. When the same Redis issue shows up later, they already have a working model of the failure, because they built one on purpose while it was still possible to.&lt;/p&gt;

&lt;p&gt;Neither developer is permanently stuck this way. The first could still learn the retry logic properly before anything breaks, and plenty of developers do exactly that. What separates them isn't talent or diligence in some abstract sense. It's that one of them paid a small cost upfront, and the other is likely paying a larger one later, probably at a worse time.&lt;/p&gt;
&lt;h2&gt;
  
  
  A short list of things worth trying
&lt;/h2&gt;

&lt;p&gt;Sketch your own approach before asking the assistant for one, even roughly. Ask for the reasoning behind a suggestion, not only the code. Review generated code like you're the one debugging it alone later, because you probably will be. Write tests that check actual behavior rather than confirming a demo ran once. When something breaks, spend a few minutes forming your own guess before asking the AI to fix it. Try explaining a piece of merged code out loud before you consider the task finished. The Anthropic findings offer a reason to take these habits seriously: the people who asked questions and worked to understand the code generally scored better than those who just let AI do the work.&lt;/p&gt;
&lt;h2&gt;
  
  
  The real variable
&lt;/h2&gt;

&lt;p&gt;If AI saves you an hour, use some of that time to actually understand what it produced. If you just move to the next ticket, you might finish more work today without being any better prepared to debug it tomorrow.&lt;/p&gt;

&lt;p&gt;Pick one piece of AI-assisted code you shipped this month. Could you walk a teammate through why it's built the way it is, without reopening the chat?&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__3581035"&gt;
    &lt;a href="/thebitforge" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3581035%2F7a4e3e11-052c-4b61-9f45-e3f421e69147.png" alt="thebitforge image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/thebitforge"&gt;TheBitForge&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/thebitforge"&gt;Founder @thebitforge.dev • Software &amp;amp; AI Product Agency • 181K+ readers &amp;amp; 7K+ followers • We turn ideas into digital products people 💙 to use | visit us also on insta @thebitforge.dev&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>DEV Community Doesn't Feel Like the Same Community Anymore</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Fri, 16 Oct 2026 15:14:16 +0000</pubDate>
      <link>https://dev.to/thebitforge/dev-community-doesnt-feel-like-the-same-community-anymore-d60</link>
      <guid>https://dev.to/thebitforge/dev-community-doesnt-feel-like-the-same-community-anymore-d60</guid>
      <description>&lt;p&gt;I joined DEV Community in 2024, and honestly, it used to feel like a genuinely good place for developers.&lt;/p&gt;

&lt;p&gt;People published articles, readers discovered new writers, discussions happened, and even smaller creators had a chance to get noticed. It wasn't just about publishing content and hoping someone would find it. There was a real sense of community.&lt;/p&gt;

&lt;p&gt;Now, I'm not sure what has changed, but something definitely feels different.&lt;/p&gt;

&lt;p&gt;And I know I'm not the only person who feels this way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. DEV Support: Does It Actually Work?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start with support.&lt;/p&gt;

&lt;p&gt;What is the point of having a support system if users can send multiple emails and still receive no response?&lt;/p&gt;

&lt;p&gt;I'm not talking about expecting an instant reply to every message. I'm talking about receiving no meaningful response at all, even when users are dealing with actual account or platform issues.&lt;/p&gt;

&lt;p&gt;Support is supposed to help users resolve problems, not leave them wondering whether anyone has even read their messages.&lt;/p&gt;

&lt;p&gt;At this point, I genuinely question how useful DEV's support system is when you need it most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A Username Change That Turned Into a Profile Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recently, I changed my username from &lt;code&gt;thebitforge&lt;/code&gt; to &lt;code&gt;thebitforge_dev&lt;/code&gt;, then changed it back to &lt;code&gt;thebitforge&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since then, neither profile URL has been working as expected.&lt;/p&gt;

&lt;p&gt;Opening &lt;code&gt;dev.to/thebitforge&lt;/code&gt; redirects me to &lt;code&gt;dev.to/thebitforge_dev&lt;/code&gt;, and the URLs keep behaving inconsistently. I can't reliably access my profile through either address.&lt;/p&gt;

&lt;p&gt;Maybe this is a routing issue, a username migration bug, or something else entirely. I don't know. That's precisely why support exists.&lt;/p&gt;

&lt;p&gt;I've experienced other issues before, too, and getting a response has been a problem.&lt;/p&gt;

&lt;p&gt;How are users supposed to resolve platform issues when the official support channel provides no meaningful help?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Where Has Article Discovery Gone?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is another major concern.&lt;/p&gt;

&lt;p&gt;I remember when publishing an article on DEV felt like an opportunity to start a conversation. People discovered posts, left comments, shared experiences, and engaged with writers they hadn't followed before.&lt;/p&gt;

&lt;p&gt;Now, getting an article in front of readers feels much harder.&lt;/p&gt;

&lt;p&gt;My articles don't seem to receive the same visibility they used to, and I've discussed this with other users who have expressed similar concerns about declining traffic and engagement.&lt;/p&gt;

&lt;p&gt;Of course, traffic fluctuates. Algorithms change, competition increases, and not every article will perform well.&lt;/p&gt;

&lt;p&gt;But when multiple writers start noticing the same pattern, I think it's reasonable to ask questions.&lt;/p&gt;

&lt;p&gt;Have there been changes to article distribution? Has the recommendation system changed? Is the platform doing enough to help readers discover new writers?&lt;/p&gt;

&lt;p&gt;I don't know the answers, and that's part of the problem. From a writer's perspective, it's difficult to understand what's happening.&lt;/p&gt;

&lt;p&gt;A community where people can publish but struggle to reach readers risks losing the very discussions that make it valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. AI Moderation and New Account Suspensions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is probably one of my biggest concerns.&lt;/p&gt;

&lt;p&gt;On three occasions, I helped friends create DEV accounts. They signed up using Google, added their names, usernames, bios, tech stacks, and interests to complete their profiles, and their accounts were suspended within one or two seconds of finishing.&lt;/p&gt;

&lt;p&gt;These were the experiences I personally witnessed. I cannot claim to know exactly what triggered the suspensions or whether an automated system was responsible.&lt;/p&gt;

&lt;p&gt;But if legitimate new users can be suspended almost immediately while completing ordinary profile information, something deserves closer examination.&lt;/p&gt;

&lt;p&gt;If automated moderation is involved, how reliably does it distinguish suspicious activity from normal onboarding?&lt;/p&gt;

&lt;p&gt;And when an account is suspended, is there an accessible way to understand why and appeal the decision?&lt;/p&gt;

&lt;p&gt;Automation can help platforms operate at scale. But automation without effective review and support can turn a simple signup into a frustrating experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. What Happened to the Community Feel?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The DEV Community I remember from 2024 felt more active and interactive.&lt;/p&gt;

&lt;p&gt;Writers had opportunities to get discovered. Readers participated in discussions. Publishing an article felt like joining a conversation rather than dropping a link into an endless feed.&lt;/p&gt;

&lt;p&gt;I still believe DEV has good people and that its core idea is valuable. I'm not writing this because I want to see the platform fail.&lt;/p&gt;

&lt;p&gt;I'm writing this because I remember when it felt better to participate.&lt;/p&gt;

&lt;p&gt;I don't know which platform updates, ranking changes, or moderation decisions may have contributed to what I'm experiencing. Without transparent information, I won't pretend to know the cause.&lt;/p&gt;

&lt;p&gt;But I do think users should be able to raise these concerns without their experiences being dismissed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DEV, a few honest questions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is getting meaningful support so difficult for users experiencing platform issues?&lt;/li&gt;
&lt;li&gt;What happens when username changes leave profile URLs behaving inconsistently?&lt;/li&gt;
&lt;li&gt;Have article discovery and distribution changed, and can writers get a clearer explanation of how their work reaches readers?&lt;/li&gt;
&lt;li&gt;How can new users appeal suspensions that appear to happen almost immediately after signup?&lt;/li&gt;
&lt;li&gt;What is being done to preserve the discussions and discoverability that make a developer community worth participating in?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not claiming that DEV has become useless for everyone. I'm sharing what I've experienced and what I've heard from other writers I've spoken with.&lt;/p&gt;

&lt;p&gt;But here's the uncomfortable question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If developers cannot reliably get support, new users struggle to keep their accounts, and writers feel they are losing the opportunity to be discovered, what exactly is being done to maintain the community experience that made DEV valuable in the first place?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A community isn't just a publishing platform. It's the people, the conversations, the trust, and the opportunity to be heard.&lt;/p&gt;

&lt;p&gt;I hope DEV hasn't forgotten that.&lt;/p&gt;

&lt;p&gt;I'd like to bring these concerns to the attention of &lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/peter"&gt;@peter&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/jess"&gt;@jess&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/sloan"&gt;@sloan&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/thepracticaldev"&gt;@thepracticaldev&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/launches"&gt;@launches&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/noahbrinker"&gt;@noahbrinker&lt;/a&gt; &lt;a class="mentioned-user" href="https://dev.to/heyitsjem"&gt;@heyitsjem&lt;/a&gt;  and the DEV Community team. I'd genuinely appreciate your response.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devjournal</category>
      <category>devto</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What I Look for Before Trusting an AI App Builder With a Real Project</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Fri, 16 Oct 2026 06:26:24 +0000</pubDate>
      <link>https://dev.to/thebitforge/what-i-look-for-before-trusting-an-ai-app-builder-with-a-real-project-4h27</link>
      <guid>https://dev.to/thebitforge/what-i-look-for-before-trusting-an-ai-app-builder-with-a-real-project-4h27</guid>
      <description>&lt;h1&gt;
  
  
  What I Look for Before Trusting an AI App Builder With a Real Project
&lt;/h1&gt;

&lt;p&gt;AI app builders can now generate a working database, authentication flow, and deployed URL from a natural-language prompt. But a convincing demo is only the beginning: what happens when real users, permissions, and persistent data enter the picture?&lt;/p&gt;

&lt;p&gt;I went looking for a concrete answer by digging into &lt;a href="https://floot.com" rel="noopener noreferrer"&gt;Floot&lt;/a&gt;, a YC-backed AI app builder that plugs into Claude, ChatGPT, and Cursor as an MCP connector, since it's one of the more recent entrants making a specific architectural claim: that bundling the whole stack (backend, database, hosting, auth) into one AI-native framework produces more reliable output than tools that bolt AI onto existing dev services.&lt;/p&gt;

&lt;p&gt;I haven't built a production app with Floot myself, so I'm not going to pretend otherwise. What I can offer is a framework: the specific things I'd want answered, with sources, before handing any AI app builder, Floot or otherwise, a real project. If you've used Floot or a competitor for something beyond a prototype, I'd genuinely like to hear where this framework holds up and where it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Floot's workflow actually works
&lt;/h2&gt;

&lt;p&gt;Worth establishing first, since the architecture is the whole pitch, and it's worth getting precise about which architecture, because Floot actually ships two.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2z4oqzu6x1e9mnns1xug.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2z4oqzu6x1e9mnns1xug.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The one most of the current marketing leads with is an &lt;a href="https://floot.com/docs/getting-started/how-floot-works" rel="noopener noreferrer"&gt;MCP (Model Context Protocol) connector&lt;/a&gt;: instead of a separate web app, you add Floot to Claude, ChatGPT, Cursor, or another MCP client, and build from inside that chat. Floot's own documentation is specific about who does what here: &lt;em&gt;your assistant&lt;/em&gt; creates the project, writes the files, provisions the database, runs the app, reads its own errors, and publishes, each as a direct tool call against your project. Floot's role in this path is the infrastructure underneath (a managed Postgres database, auth, file storage, hosting), not a second AI model reviewing the first one's work. Whatever model you're already paying for (Claude, GPT) is the one doing the interpreting and writing, but the development feedback loop involves more than the model reviewing its own output.&lt;/p&gt;

&lt;p&gt;That's a meaningfully different claim than the one I originally saw repeated across older coverage of Floot, which describes a three-pass system: one AI interprets the request, a second writes the code, and a first or third reviews and fixes it. That description is real, but it traces back to Floot's original standalone product, the in-app editor with its own built-in AI agent, which Floot still offers as a separate path alongside the connector. If you're building through the MCP connector, which is the model this article is mostly about, that multi-pass AI review isn't the mechanism in play. However, Floot says it does run development checks in the background and feeds their results back to the assistant.&lt;/p&gt;

&lt;p&gt;That distinction matters for how much scrutiny to apply. Even without a second AI model reviewing the first one's work, Floot says it type-checks code in the background after each batch of edits, checks backend code for frontend imports, and sends preview compile errors, build errors, and runtime logs back to the assistant. So the feedback loop isn't just the model catching its own mistakes; it also gets signals from actual development tools. That's an important distinction, although how reliably this catches deeper issues beyond compilation and runtime errors is still something I'd want to test on a real project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six things I'd actually test
&lt;/h2&gt;

&lt;p&gt;This is the part I think is missing from most AI-builder coverage: a list of claims to verify, not a verdict. If you're evaluating Floot (or Bolt, Lovable, Replit, Base44) for something real, these are the specific things I'd check before trusting the output, not just the marketing page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What to test&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User isolation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A high-impact failure mode to test for: create two accounts and check whether either can access the other's data. It won't show up unless you actually try it with two test accounts; a single-account demo can't reveal it either way.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth edge cases&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What happens when a logged-out user hits a page that should require login? Does the generated app enforce that server-side, or only hide the UI element client-side (which doesn't actually protect anything)?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data persistence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does data survive a refresh, a logout/login cycle, a browser restart? Sounds basic, but it's a real gap category in early-stage generated backends.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Error handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What does the app do when required input is missing or malformed? Does it fail gracefully or expose something it shouldn't?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment from a second machine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can someone other than you open the published URL and complete the core workflow, cold?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Export, for real&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the exported project actually build on its own, or does it fail on references to platform-managed services?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is worth unpacking, because it's where the gap between "you can export" and "you have a runnable app" actually lives, and it's where Floot's own &lt;a href="https://floot.com/docs/projects/self-hosting" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; is unusually candid for a product page.&lt;/p&gt;

&lt;p&gt;Here's what's explicitly documented, directly: you can export both code (via a "Get Code" option, paid plans) and your database (a standard PostgreSQL dump, any plan). The docs also state that some built-in services get injected during Floot's build process and are &lt;em&gt;not&lt;/em&gt; included in the export, and that any reference to them left in your exported code "will fail to resolve," which the docs themselves describe as a hard build break, not a minor inconvenience.&lt;/p&gt;

&lt;p&gt;Here's what I'm inferring from that, rather than what's stated outright: that in practice, export isn't a one-click escape hatch so much as a migration task, since you'd need to replace those managed-service references before the exported project builds on its own. Floot's documentation does recommend doing that migration with your AI assistant's help &lt;em&gt;before&lt;/em&gt; you export, which supports the inference, but the actual scope of that work (how many references, how much rewriting) will vary by project and isn't something the docs quantify.&lt;/p&gt;

&lt;p&gt;That's a reasonable trade-off for the convenience of a managed stack. But exporting source code and running an application independently are two different milestones, and developers should evaluate them separately, a distinction that's easy to miss unless you read the docs past the pricing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this still comes down to judgment, not tooling
&lt;/h2&gt;

&lt;p&gt;A few things I don't think any amount of reading documentation will resolve, and where I'd want direct experience before forming an opinion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How good is the self-correction loop, really?&lt;/strong&gt; The connector flow combines the assistant's own debugging with feedback from Floot's development tooling, including type checks, compile errors, build errors, and runtime logs. That's more than the model simply reviewing its own output. What I'd still want to understand is how reliably this catches deeper issues, particularly authorization mistakes, data isolation problems, and other bugs that don't necessarily produce an error during development. Whether this holds up across a representative range of app complexity, not just the CRUD-app demos that tend to get shown off, is an empirical question I'd want to investigate by testing a real project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security posture.&lt;/strong&gt; I couldn't locate a publicly available, independent security audit of Floot's database or auth layer, which isn't proof one doesn't exist, just a gap in what's publicly findable. One &lt;a href="https://www.g2.com/products/floot/pricing" rel="noopener noreferrer"&gt;G2 reviewer&lt;/a&gt; using the product said directly they weren't fully confident how secure Floot's databases were. That's a single anecdotal account, not evidence of an actual flaw, but it's a more candid data point than anything on the pricing page, and worth weighing accordingly, not dismissing or inflating.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance under real load.&lt;/strong&gt; Hosting is included and scales with usage-based allowances rather than hard caps, per the pricing page, but I couldn't find a publicly available independent benchmark for how a Floot-built app behaves under sustained traffic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is a reason to write the category off. It's a reason to treat "the AI built it" as the start of your evaluation, not the end of it, the same way you'd treat a junior engineer's first pass at a feature: promising, worth reviewing, not worth shipping unexamined.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual question for discussion
&lt;/h2&gt;

&lt;p&gt;If you've taken an AI app builder, Floot or otherwise, past the demo and into something with real users: what broke first? Was it a permissions bug, a performance ceiling, a debugging dead end where the AI couldn't fix what it had generated, or something else entirely? And for anyone who's exported a project off one of these platforms: how much rework did it actually take to get it running independently?&lt;/p&gt;

&lt;p&gt;I'd rather build out the second half of this (the actual test matrix above, run against a real project) as a follow-up than speculate further without evidence. If that's useful to people here, let me know what you'd want tested first.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;I'm planning to actually build something real on Floot soon and come back with the results, the six tests above, run for real, with whatever breaks along the way included. If that follow-up would be useful, say so in the comments and I'll prioritize it.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ex2e2ao4odcidyngnf2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ex2e2ao4odcidyngnf2.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2092289051886072030-989" src="https://platform.twitter.com/embed/Tweet.html?id=2092289051886072030"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2092289051886072030-989');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2092289051886072030&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Build Your First MCP Server: Step-by-Step Guide for Developers (2026)</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Fri, 02 Oct 2026 19:50:55 +0000</pubDate>
      <link>https://dev.to/thebitforge/how-to-build-your-first-mcp-server-step-by-step-guide-for-developers-2026-1n25</link>
      <guid>https://dev.to/thebitforge/how-to-build-your-first-mcp-server-step-by-step-guide-for-developers-2026-1n25</guid>
      <description>&lt;h2&gt;
  
  
  READ HERE:
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.topblogs.online/blog/build-your-first-mcp-server" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fplain-eeur-prod-public.komododecks.com%2F202610%2F02%2Fu3Zf6L9fBoIetwveDeHS%2Fimage.png" height="350" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.topblogs.online/blog/build-your-first-mcp-server" rel="noopener noreferrer" class="c-link"&gt;
            How to Build Your First MCP Server: Step-by-Step Guide for Developers (2026) - TopBlogs
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Build a working MCP server with the current 2026 SDKs, test it in the MCP Inspector, and connect it to Claude Code. Includes mistakes other developers hit.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.topblogs.online%2Ficon%3F0e9eb26cf9512256" width="32" height="32"&gt;
          topblogs.online
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;em&gt;Last updated: October 2026&lt;/em&gt;

&lt;p&gt;If you followed an MCP tutorial last year and the code no longer matches the official docs, your setup is probably fine. The protocol shipped its largest revision on July 28, 2026, and it changed how servers are written. A lot of older guides still teach the previous version.&lt;/p&gt;

&lt;p&gt;This guide builds a small MCP server from scratch with the current SDKs. You will end up with two tools that you can test in the MCP Inspector and connect to Claude Code. If Node.js is already installed, the basic server can be running in roughly fifteen minutes. Allow longer if you are setting up the environment or Claude Code for the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How this guide was put together:&lt;/strong&gt; the implementation follows the current MCP documentation and SDK examples. The troubleshooting section also draws on reports from developers who have built MCP servers in practice. Those reports are credited where they appear and listed at the end.&lt;/p&gt;
&lt;h2&gt;
  
  
  What an MCP server actually does
&lt;/h2&gt;

&lt;p&gt;An MCP server is a program that gives an AI application access to tools, and optionally to data and prompt templates, through one standard interface. The AI application is the client. It reads your list of tools and passes it to the model. When the model decides it needs one, the client sends a &lt;code&gt;tools/call&lt;/code&gt; request, your server does the work, and the result goes back. The model never talks to your server directly.&lt;/p&gt;

&lt;p&gt;Every tool has a name, a description, and an input schema. The model uses the description to decide whether your tool fits the task. A vague description leads to poor tool selection, so spend real time on it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What changed in 2026, and why older tutorials break
&lt;/h2&gt;

&lt;p&gt;The current protocol revision is &lt;code&gt;2026-07-28&lt;/code&gt;. Its headline change is a stateless protocol core. According to the official release announcement, the &lt;code&gt;initialize&lt;/code&gt; handshake and the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; header were retired, and each request now carries its own protocol version and client details.&lt;/p&gt;

&lt;p&gt;This affects you in two ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SDK package layout changed.&lt;/strong&gt; In the TypeScript SDK, v2 replaces the single &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; package with separate packages, including &lt;code&gt;@modelcontextprotocol/server&lt;/code&gt; and &lt;code&gt;@modelcontextprotocol/client&lt;/code&gt;. In the Python SDK, v2 renamed &lt;code&gt;FastMCP&lt;/code&gt; to &lt;code&gt;MCPServer&lt;/code&gt;. If a tutorial imports from &lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; or &lt;code&gt;mcp.server.fastmcp&lt;/code&gt;, it is using the older SDK API. Check which protocol revision the tutorial supports before following it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State moves into your tools.&lt;/strong&gt; A stateless protocol core does not force your application to be stateless. It means the modern protocol no longer relies on a transport-level session to carry state between requests. If your server must carry something across calls, the maintainers recommend returning an explicit handle from a tool, such as a job ID, and letting the model pass it back as an argument. The remote hosting section below shows an example.&lt;/p&gt;
&lt;h2&gt;
  
  
  What we are building
&lt;/h2&gt;

&lt;p&gt;A server called &lt;code&gt;blog-helper&lt;/code&gt; with two tools. &lt;code&gt;reading-time&lt;/code&gt; estimates how long a text takes to read. &lt;code&gt;make-slug&lt;/code&gt; turns a post title into a URL slug.&lt;/p&gt;

&lt;p&gt;These are toy tools on purpose. They need no API keys and no network access, and they cover the two things every tool does: take structured input and return text. If something fails, the cause is in your MCP setup and not in a third-party service.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1: Set up the project
&lt;/h2&gt;

&lt;p&gt;You need Node.js 22.19 or later. The TypeScript SDK supports Node.js 20 and up, but the MCP Inspector used in Step 3 requires Node.js 22.19.0 or newer, so installing that version once covers the whole guide. The SDK ships ES modules only, so the project must be set to &lt;code&gt;type: module&lt;/code&gt;. The &lt;code&gt;tsx&lt;/code&gt; package runs TypeScript directly, so there is no build step.&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;mkdir &lt;/span&gt;blog-helper &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;blog-helper
npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm pkg &lt;span class="nb"&gt;set type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;module
npm &lt;span class="nb"&gt;install&lt;/span&gt; @modelcontextprotocol/server zod tsx
&lt;span class="nb"&gt;mkdir &lt;/span&gt;src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Write the server
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;src/index.ts&lt;/code&gt; and paste in the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;McpServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@modelcontextprotocol/server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;serveStdio&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@modelcontextprotocol/server/stdio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kd"&gt;as &lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;zod/v4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;McpServer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;McpServer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blog-helper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;reading-time&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Estimate how many minutes a piece of text takes to read. Use it for blog posts and articles.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;min&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="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The full text to measure&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="na"&gt;wordsPerMinute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&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="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Reading speed. Defaults to 220.&lt;/span&gt;&lt;span class="dl"&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="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wordsPerMinute&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+/&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;minutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&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="nx"&gt;words&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wordsPerMinute&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;220&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="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;words&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; words, about &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; min read`&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="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;make-slug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Turn a post title into a clean, lowercase URL slug.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;inputSchema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;min&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="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;The post title&lt;/span&gt;&lt;span class="dl"&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="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;()&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NFKD&lt;/span&gt;&lt;span class="dl"&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;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[^\w\s&lt;/span&gt;&lt;span class="sr"&gt;-&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&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;trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[\s&lt;/span&gt;&lt;span class="sr"&gt;_-&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&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="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;slug&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;serveStdio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blog-helper MCP server running on stdio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three details deserve a closer look.&lt;/p&gt;

&lt;p&gt;The Zod schema in &lt;code&gt;inputSchema&lt;/code&gt; is the only schema you write. The SDK uses it to describe the tool's input to the client and to reject invalid arguments before your handler runs, which is why neither handler contains manual validation.&lt;/p&gt;

&lt;p&gt;The server is built inside a &lt;code&gt;createServer&lt;/code&gt; function because &lt;code&gt;serveStdio&lt;/code&gt; calls it to create the instance that serves the connection. Keep that function lightweight: construct the server and register its tools there, and avoid slow network calls or expensive setup before the connection starts.&lt;/p&gt;

&lt;p&gt;The last line logs with &lt;code&gt;console.error&lt;/code&gt; on purpose. On a stdio server, stdout carries the protocol messages, so diagnostic output should go to stderr instead. A stray &lt;code&gt;console.log&lt;/code&gt; writes non-protocol data to stdout and can corrupt the JSON-RPC stream. Several developers have reported running into this, and their accounts appear later in the article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Run it and test it in the Inspector
&lt;/h2&gt;

&lt;p&gt;Start the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx tsx src/index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It prints the banner and then sits idle. That is expected, because a stdio server waits on stdin until a client starts talking to it.&lt;/p&gt;

&lt;p&gt;To call the tools, use the MCP Inspector, a local web app that launches your command and connects to it over stdio.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @modelcontextprotocol/inspector npx tsx src/index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command prints a URL containing a one-time token for opening the Inspector's web interface. That is an access token for the Inspector, not the &lt;code&gt;Mcp-Session-Id&lt;/code&gt; that older protocol revisions used. Open the URL in your browser, click Connect, open the Tools tab, choose &lt;code&gt;make-slug&lt;/code&gt;, and enter a title. Then call &lt;code&gt;reading-time&lt;/code&gt; with an empty string. The schema requires at least one character, so the call should be rejected before your handler runs. That rejection is a quick way to see MCP input validation in action.&lt;/p&gt;

&lt;p&gt;For reference, the code above should produce results like these for valid input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make-slug      "My First MCP Server in 2026"  -&amp;gt;  my-first-mcp-server-in-2026
reading-time   "Hello world"                 -&amp;gt;  2 words, about 1 min read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The developer behind the DEV Community post "How I Built My First MCP Server for Claude Code" (yureki_lab) wrote that they spent the first few hours debugging by asking Claude questions and judging whether the answers looked right. Moving to the Inspector gave them a direct view of what the server returned, with no model in between. It is worth testing the server on its own before connecting any client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Connect it to Claude Code
&lt;/h2&gt;

&lt;p&gt;Registering a local stdio server takes one command. Everything after the double dash is the command Claude Code runs to launch your server. Use an absolute path to the entry file so it works from any folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add blog-helper &lt;span class="nt"&gt;--&lt;/span&gt; npx tsx /full/path/to/blog-helper/src/index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run &lt;code&gt;claude mcp list&lt;/code&gt; to confirm the server shows as connected. If it fails, check the path first. On Windows, write the path in the form your shell expects.&lt;/p&gt;

&lt;p&gt;With the server connected, ask Claude for a slug, for example: "What would be a good URL slug for 'My First MCP Server in 2026'?" It should call your &lt;code&gt;make-slug&lt;/code&gt; tool and use the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same server in Python
&lt;/h2&gt;

&lt;p&gt;If you work in Python, the v2 SDK builds a server from decorated functions. You need Python 3.10 or later. Set up the project with &lt;code&gt;uv&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv init blog-helper &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;blog-helper
uv add &lt;span class="s2"&gt;"mcp[cli]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create &lt;code&gt;server.py&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;from&lt;/span&gt; &lt;span class="n"&gt;mcp.server.mcpserver&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPServer&lt;/span&gt;

&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blog-helper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@mcp.tool&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;reading_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&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;words_per_minute&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;220&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;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Estimate how many minutes a piece of text takes to read.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;minutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&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="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;words_per_minute&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&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;words&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; words, about &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;minutes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; min read&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;__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;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stdio&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;Type hints become the input schema, and the docstring becomes the tool description. Python v2 is a major rework of the SDK, so check its migration guide if an example here behaves differently on your version. &lt;code&gt;pip install mcp&lt;/code&gt; now installs the 2.x line, so if you maintain older code and are not ready to migrate, keep a &lt;code&gt;&amp;lt;2&lt;/code&gt; upper bound on your requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What other developers ran into
&lt;/h2&gt;

&lt;p&gt;The official tutorials show the happy path. The reports below come from developers who built, tested, or shipped MCP servers, and each one is credited to its author.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why stdout breaks stdio servers
&lt;/h3&gt;

&lt;p&gt;Several developers have reported the same problem. yureki_lab, who built a server so Claude Code could query an internal service catalog, wrote that a single stray &lt;code&gt;console.log&lt;/code&gt; cost about 40 minutes and produced a cryptic parse error. brianmello, whose server grew from a weekend project to roughly 2,300 npm downloads, called stdout the first surprise and added that the stray output can come from a dependency deep in your tree, not only from your own code. Both ended up sending every diagnostic message to stderr.&lt;/p&gt;

&lt;p&gt;The official MCP debugging documentation gives the same rule for local servers and notes that the host application captures what you write to stderr. On Windows, Claude Desktop writes its logs under &lt;code&gt;%APPDATA%\Claude\logs&lt;/code&gt;, which is a good first place to look when a connection fails.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why relative paths cause confusing failures
&lt;/h3&gt;

&lt;p&gt;Jaypee's troubleshooting guide to MCP connection errors points out that relative paths in a server config resolve against the client's working directory, not your server's. A server that works from your terminal can therefore fail inside Claude Desktop, and the fix is to use absolute paths.&lt;/p&gt;

&lt;p&gt;The same guide lists a few other traps. A server can connect successfully yet expose zero tools if its input schemas are malformed. A server that needs an API key often fails at the first tool call and not at connect time. And a failed &lt;code&gt;npx&lt;/code&gt; download looks like any other connection error, so run the server command by hand in a terminal before blaming the client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Designing tools around user intent
&lt;/h3&gt;

&lt;p&gt;The team behind thunderbit-mcp (author handle ethan_thunderbit) wrote that the first temptation is to wrap every endpoint of an existing API as a tool. Their field guide argues for fewer, more predictable tools, and it recommends adding negative guidance to descriptions, meaning a line that tells the model when not to use a tool. They also describe stdio as the calmest first transport, since users install the package and add a config entry.&lt;/p&gt;

&lt;p&gt;brianmello gave related advice in one line: write tool descriptions like prompts, because the model reads them as prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making errors useful to agents
&lt;/h3&gt;

&lt;p&gt;parkerrrrr observed that when a tool throws, the agent often sees only a generic internal error and cannot tell an authentication failure from a bad argument or an upstream outage. Catching errors in your handler and returning a clear message with &lt;code&gt;isError: true&lt;/code&gt; lets the model see what went wrong and react sensibly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication on remote servers
&lt;/h3&gt;

&lt;p&gt;The same author warned that an HTTP MCP server with authentication switched off is exactly the kind of default that gets found and abused. If you move beyond stdio, require a bearer token or OAuth, and make the server reject requests when no token is configured.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrating to the 2026-07-28 spec
&lt;/h3&gt;

&lt;p&gt;krlz, writing on DEV Community about the new revision, expects the biggest breakage to come from elicitation, meaning a server asking the user a question mid-call. Because the back-channel is gone, code that relied on it must be rewritten around the new multi round-trip pattern.&lt;/p&gt;

&lt;p&gt;The official release announcement includes comments from adopters. Supabase's head of product said the new pattern lets its tools confirm with the user before acting, for example before creating a project that costs money. Manufact reported that moving its mcp-use framework to the new SDK cut package size by about 83% and made it about 25% faster, thanks to the client and server split. Honeycomb said agents already make nearly 20% of its monthly interactive queries. These are vendor-reported figures, so treat them as signals about where the ecosystem is heading and not as independent benchmarks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Going from local to remote
&lt;/h2&gt;

&lt;p&gt;A stdio server runs on your own machine and is started by the app that uses it. To offer one endpoint that many people connect to, you serve the same server over HTTP instead.&lt;/p&gt;

&lt;p&gt;The stateless protocol core makes this much easier. For clients that use the 2026-07-28 revision, requests no longer depend on an &lt;code&gt;Mcp-Session-Id&lt;/code&gt;, so any request can land on any server instance behind an ordinary round-robin load balancer. Older protocol versions still have session behavior, so if your deployment also serves older clients, plan for that.&lt;/p&gt;

&lt;p&gt;Say a tool starts a long export. Have it return a job ID, and add a second tool that accepts the ID and reports progress. The ID lives in the model's context, so it does not matter which machine answers the next call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security basics before you share anything
&lt;/h2&gt;

&lt;p&gt;A stateless protocol core is not automatically a safe one. If your server touches files, databases, or accounts, build a few habits in from the start.&lt;/p&gt;

&lt;p&gt;OWASP's MCP security guidance recommends running local servers in a sandbox such as a container, applying least privilege per server and per tool, and validating inputs and outputs at the server layer. Tool descriptions and tool outputs both become part of what the model reads, so treat them as untrusted input and not as instructions to follow. A model can be steered by text hidden inside either one.&lt;/p&gt;

&lt;p&gt;If your server calls other APIs on a user's behalf, do not forward the token you received from the client. The MCP security best practices describe this "token passthrough" as an anti-pattern, and the authorization guidance says the server must not pass through the token it received. The upstream API should get a token issued for it, because a server that accepts tokens meant for another service can be abused.&lt;/p&gt;

&lt;p&gt;Also ask for human confirmation before anything destructive, such as deleting data or moving money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does this only work with Claude?&lt;/strong&gt;&lt;br&gt;
No. MCP is an open standard, and clients such as VS Code and Cursor support it as well, so the same server can serve several tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript or Python for a first server?&lt;/strong&gt;&lt;br&gt;
Both have current v2 SDKs that support the 2026-07-28 specification, so the choice comes down to your stack. This guide's TypeScript path needs Node.js 22.19 or later, while the Python path needs Python 3.10 or later. The TypeScript SDK also publishes adapters for Express, Fastify, and Hono, which helps if you later want to host the server inside an existing web app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How likely is the spec to break my server again?&lt;/strong&gt;&lt;br&gt;
The MCP project now documents a formal deprecation policy with a twelve-month minimum window for protocol changes, so removals come with a long notice period. SDK major versions, like the v1 to v2 jump, can still require code changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go from here
&lt;/h2&gt;

&lt;p&gt;Replace the two toy tools with something you actually need: a query against your own database, a search over your notes, or a check on your site's status.&lt;/p&gt;

&lt;p&gt;For a first real implementation, keep the server read-only. That limits the damage while you learn how the model chooses and calls your tools, and you can add write access once its behavior looks predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;Official documentation and specification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model Context Protocol Blog, "The 2026-07-28 Specification" (David Soria Parra and Den Delimarsky, July 28, 2026), including the adopter comments from Supabase, Manufact, and Honeycomb&lt;/li&gt;
&lt;li&gt;Model Context Protocol, specification 2026-07-28 and its versioning page&lt;/li&gt;
&lt;li&gt;Model Context Protocol, "Security best practices" and authorization security considerations&lt;/li&gt;
&lt;li&gt;Model Context Protocol, debugging documentation&lt;/li&gt;
&lt;li&gt;Model Context Protocol, MCP Inspector documentation (Node.js 22.19.0 requirement)&lt;/li&gt;
&lt;li&gt;Model Context Protocol TypeScript SDK, README and "Build your first server" tutorial (GitHub)&lt;/li&gt;
&lt;li&gt;Model Context Protocol Python SDK, README and v1 to v2 migration guide&lt;/li&gt;
&lt;li&gt;Claude Code documentation, "Connect Claude Code to tools via MCP"&lt;/li&gt;
&lt;li&gt;OWASP, "MCP Security Cheat Sheet"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developer experience reports (DEV Community):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How I Built My First MCP Server for Claude Code: 5 Lessons Learned" (author handle: yureki_lab)&lt;/li&gt;
&lt;li&gt;"Building an MCP server in production: lessons from 2,300 npm downloads" (author handle: brianmello)&lt;/li&gt;
&lt;li&gt;"The parts of building an MCP server that the tutorials skip" (author handle: parkerrrrr)&lt;/li&gt;
&lt;li&gt;"Building an MCP server: lessons from thunderbit-mcp" (author handle: ethan_thunderbit)&lt;/li&gt;
&lt;li&gt;"Debugging MCP Server Connection Issues: 7 Common Errors and Fixes" (author: Jaypee)&lt;/li&gt;
&lt;li&gt;"MCP Went Stateless: What the 2026-07-28 Spec Actually Changes" (author handle: krlz)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Do Keyword Research for Free: A Step-by-Step Guide for Beginners</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:05:02 +0000</pubDate>
      <link>https://dev.to/thebitforge/how-to-do-keyword-research-for-free-a-step-by-step-guide-for-beginners-3ap5</link>
      <guid>https://dev.to/thebitforge/how-to-do-keyword-research-for-free-a-step-by-step-guide-for-beginners-3ap5</guid>
      <description>&lt;p&gt;Most people pick blog topics the same way. They think of something they know about, write it up, hit publish, and wait. Then nothing happens, and they decide the writing must be the problem.&lt;/p&gt;

&lt;p&gt;Sometimes it is. But a lot of the time, nobody was searching for that topic, or the people who were wanted something different from what the post gave them. Keyword research is just the habit of checking this before you spend a whole weekend on a draft.&lt;/p&gt;

&lt;p&gt;You don't need a paid tool for it. Ahrefs and Semrush are good products, and if you ever outgrow the free options you'll know without being told. Until then, Google hands out most of what a beginner needs, and a few small tools fill the gaps.&lt;/p&gt;

&lt;p&gt;Below is the order I'd use them in. One hypothetical example runs through every step: a small blog about making coffee at home, and a post on cold brew you're thinking of writing. Alongside it, I've pulled in real stories from other people and companies who did this kind of research, with the source named each time. Those are their results, told as they told them, so treat the numbers as their claims and not as a guarantee for your own site.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you're actually looking for
&lt;/h2&gt;

&lt;p&gt;A keyword is whatever someone types into a search box. Sometimes it's a single word. More often it's a messy half-question. "Cold brew" is a keyword. So is "how long does homemade cold brew last in the fridge."&lt;/p&gt;

&lt;p&gt;When I look at a possible keyword, I ask myself three things. Are people searching for it? Could a site like mine realistically compete? And would the person searching be happy to land on the page I'd write?&lt;/p&gt;

&lt;p&gt;Beginners skip that last one all the time. Someone typing "buy cold brew maker" wants a shop, not your 2,000-word essay on steeping time. Marcus Sheridan, the pool company owner who turned blogging into a business, makes the same point in his talks, as summarized by the Spiderworking blog. A post like "5 fun games to play in your swimming pool" might bring visitors, but they may have no plans to buy a pool. A search like "best pool providers in Richmond Virginia" comes from someone who is shopping. Same subject, very different reader.&lt;/p&gt;

&lt;p&gt;Every keyword number you'll see in any tool is an estimate, even in the expensive ones. Use the numbers to compare one idea against another. Don't read them as a promise of traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Start with what's already in your head
&lt;/h2&gt;

&lt;p&gt;Before you open any tool, make a plain list of 15 or 20 topics. Not keywords, just topics. What do readers ask you? What confused you when you were starting out? What did you google last month?&lt;/p&gt;

&lt;p&gt;For the coffee blog, that list might be: cold brew ratios, best beans for cold brew, mason jar versus pitcher, why cold brew turns bitter, how long it keeps, concentrate versus ready-to-drink.&lt;/p&gt;

&lt;p&gt;Then go and see how real people phrase these things. Search your topic on Reddit and skim the titles. Read YouTube comments under popular videos. Check Quora. You're hunting for wording, because people don't write "optimal steeping duration." They write "why is my cold brew so bitter??"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How this worked for River Pools.&lt;/strong&gt; The best-known example of starting from customer questions is River Pools and Spas. After the 2008 crash hit his business, Marcus Sheridan sat down and listed every question buyers had ever asked him about fiberglass pools, then wrote an answer to each one. According to PRNEWS's coverage of his Content Marketing World keynote, the first article was "How Much Does a Fiberglass Pool Cost?", a question he says nobody in the industry was answering openly. PRNEWS reports that he credits that one article with $150,000 in sales, and that he tells other businesses to turn their top 100 customer questions into 100 posts. In a later podcast interview with Find Your Yellow Tux, he described writing those answers late at night, one at a time, and said the site eventually became the most trafficked swimming pool website in the world. Those figures are his own, so read them as his account. The method is the useful part: he started from real questions, not from a keyword tool.&lt;/p&gt;

&lt;p&gt;Starting here matters more than it sounds. If you begin with a tool, you'll chase the same suggestions everyone else is chasing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Let Google finish your sentences
&lt;/h2&gt;

&lt;p&gt;Open Google in a private window so your own search history doesn't bend the results. Type your seed topic and stop before you hit enter. The suggestions that drop down can show you phrases people commonly search for. They're not search volume data, but they're free ideas, and they're phrased the way real people talk.&lt;/p&gt;

&lt;p&gt;Now play with it. Type "cold brew how" and see what appears. Then "cold brew why," "cold brew vs," "cold brew for." Try each letter of the alphabet after the seed, too. It's tedious and it works.&lt;/p&gt;

&lt;p&gt;Next, search the phrase properly and look at two spots on the results page. The "People also ask" box is one. Click a question and it expands and often adds new ones below it. The "Related searches" list at the very bottom is the other.&lt;/p&gt;

&lt;p&gt;You can automate a lot of this. AnswerThePublic and AlsoAsked both turn a seed keyword into a map of questions, and both have free usage that's capped, so check what you get before you plan around them.&lt;/p&gt;

&lt;p&gt;Copy everything worth keeping into a spreadsheet. Don't judge anything yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Get a rough sense of volume with Keyword Planner
&lt;/h2&gt;

&lt;p&gt;Keyword Planner is Google's own tool, so it's one of the most direct free sources of Google's own keyword estimates. It lives inside Google Ads, which sounds like a trap. It isn't, as long as you're careful.&lt;/p&gt;

&lt;p&gt;The usual route goes like this. Sign in to Google Ads, and when it pushes you toward creating a campaign, look for the option to switch to Expert Mode and then to create an account without a campaign. Depending on your country and account, Google may ask for billing details before setup finishes. You aren't charged for research, but don't launch a campaign by accident. Google moves these buttons around, so if your screen looks different, hunt for the same options rather than giving up.&lt;/p&gt;

&lt;p&gt;Once you're in, open Tools, then Planning, then Keyword Planner, and choose "Discover new keywords." Type in your seeds. Set the location and language to match your real readers, not just wherever you happen to live. Those numbers can be very different from country to country.&lt;/p&gt;

&lt;p&gt;There's a catch. Without active ad spend, Google tends to show volume as wide ranges, like 1K to 10K, instead of exact figures. The SEO Engine blog tested the free tier against four paid tools across 47 keywords and reached the same conclusion. The ranges are real, and they limit how precisely you can compare competitors. It's annoying. It's still useful, because it tells you whether a keyword lives in the hundreds or the tens of thousands, and that's often all a beginner needs.&lt;/p&gt;

&lt;p&gt;Keep in mind that the tool was built for advertisers, so its suggestions lean commercial. The CPC column shows what advertisers pay per click. It can be a clue that advertisers see commercial value in a query, but it isn't a direct measure of what the searcher wants, so don't read it as "these people are ready to buy."&lt;/p&gt;

&lt;p&gt;If you want a second set of numbers, the Keyword Surfer Chrome extension shows rough volumes on the Google results page, and Ahrefs has a free keyword generator with limited results. When the tools disagree, and they will, treat every figure as a direction and skip the hunt for the one true number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check whether interest is rising or fading
&lt;/h2&gt;

&lt;p&gt;A keyword with decent volume can still be a bad bet if fewer people search it every year. Google Trends catches that.&lt;/p&gt;

&lt;p&gt;Type your keyword in and set the range to five years. Trends doesn't show search volume. It shows relative interest on a scale of 0 to 100, which is fine, because you're looking at the shape of the line, not the number.&lt;/p&gt;

&lt;p&gt;Is it climbing, flat, or sliding? Does it spike at the same time every year? Check the chart yourself before you build a publishing plan around a guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two coffee examples worth knowing.&lt;/strong&gt; A QuestionDB guide on using Trends draws the line between a recurring pattern and a fad with two drinks. Searches for hot chocolate recipes jump reliably every winter. Dalgona coffee, the whipped coffee that took over social media in 2020, peaked and then faded fast. If you were planning a post around each, the first is a topic you can update and republish every year. The second is a bet that may already be over.&lt;/p&gt;

&lt;p&gt;Once you know a topic is seasonal, timing matters. The UK agency Pod Digital gives a simple rule: if a keyword peaks in June, publish in April, so Google has time to crawl and index your page before demand arrives. Search Engine Land's guide to SEO seasonality makes a similar point, that you want to be visible before traffic peaks, not chasing it afterward. One caution from the same guides: seasonal terms can get crowded when the peak arrives, so check who's already ranking.&lt;/p&gt;

&lt;p&gt;Trends also lets you compare terms side by side. If you can't decide between "cold brew concentrate" and "cold brew ratio," put both in and look at which one has more life in it.&lt;/p&gt;

&lt;p&gt;Small or very specific keywords sometimes show "not enough data." That doesn't mean nobody searches them. It just means Trends can't say.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Look at the competition with your own eyes
&lt;/h2&gt;

&lt;p&gt;Paid tools give you a difficulty score. Free tools mostly don't, and those scores are rough guesses anyway. A quick manual check tells you a lot.&lt;/p&gt;

&lt;p&gt;Search your keyword and study page one. Ask yourself a few things.&lt;/p&gt;

&lt;p&gt;Who is ranking? If it's mostly huge publishers and big brands, you'll probably struggle for a while. Forum threads or small personal blogs in the results can be a sign that the page isn't fully locked up by major sites. That's worth investigating, not a green light. You still have to compare how relevant, thorough, fresh and well-linked those pages are next to what you could produce.&lt;/p&gt;

&lt;p&gt;What kind of pages are they? This is the intent check. If page one is all product listings, a how-to guide won't fit. If it's all long guides, a thin 400-word post won't compete. Nullstacks, an SEO agency blog, describes the mistake as writing from the keyword down instead of from the results page up. The keyword tells you the topic, and the results page tells you the shape of page Google expects to show.&lt;/p&gt;

&lt;p&gt;How old and how good is it? Outdated or shallow results can be an opening, though not a guarantee.&lt;/p&gt;

&lt;p&gt;Write a quick note in your sheet: easy, medium, or hard. You're allowed to be wrong. You'll get better at this fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Mine your own data in Search Console
&lt;/h2&gt;

&lt;p&gt;If your site has been live for a while, Google Search Console is probably the best free keyword tool you have, because the data is yours. It shows real searches that made your pages appear on Google.&lt;/p&gt;

&lt;p&gt;Verify your site, open the Performance report, and look at the Queries tab. Sort by impressions. Queries where you're already getting impressions but few clicks, or where you appear somewhere around positions 8 to 20, are worth a closer look. Google's own Search Console Help explains why to treat position carefully. It's an average across all the searches where you appeared, so it can differ from what you see when you search the phrase yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A story from an agency.&lt;/strong&gt; In a collection of Search Console success stories on Grit Daily, the team behind SERPpro describes opening its Performance report and finding that people were reaching the site through queries like "white label link building services" and "white label SEO partnerships." Those were more specific than the keyword the site had been targeting. The team built a separate page for each, because the intent behind each phrase was a little different, and says most of the new pages were ranking first or second within a week. Another contributor in the same piece describes starting by filtering for queries on page two, positions 11 to 20, with decent impressions and almost no clicks. Both are self-reported results, so don't expect the same speed. The lesson is the habit: your own query data often shows what people already think your site is about.&lt;/p&gt;

&lt;p&gt;If your site is brand new, this report will be empty or close to it. That's normal. Verify the site now so the data starts collecting, do steps 1 to 5 in the meantime, and come back in a month or two.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Choose, then write it down
&lt;/h2&gt;

&lt;p&gt;Your sheet is probably messy by now. Keep the columns simple: the keyword, what the searcher really wants, the rough volume range, how crowded page one looked, and a status (idea, drafting, published). Fancy sheets don't get used.&lt;/p&gt;

&lt;p&gt;Then pick using three questions. Is the intent clear? Does page one look beatable? Do you actually know enough to write something better than what's there?&lt;/p&gt;

&lt;p&gt;If your site is new, lean toward long, specific phrases. Ahrefs makes this case with the example of someone launching a cryptocurrency blog. The popular, high-volume keywords are tempting, but a brand-new site has almost no chance of ranking for them soon. Longer, more specific phrases give even a new site a shot at the top ten, and ranking for one of them often brings visits from related searches too. For the coffee blog, skip "cold brew" and go for "how long does cold brew last in the fridge." Fewer people search it, but fewer sites are fighting for it.&lt;/p&gt;

&lt;p&gt;A small-blogger version of the same lesson comes from the MostlyBlogging site. Its author says that many of her earliest posts used a single generic word as the keyword, and that she wished she had known about long-tail keywords when she started. She went back and updated the old posts once she did.&lt;/p&gt;

&lt;p&gt;Each post gets one main keyword. If you cover the topic thoroughly, you'll naturally use many related terms without forcing them in. A keyword repeated awkwardly every third sentence reads like exactly what it is. Google Search Central's guidance on creating helpful, people-first content is worth reading once in full.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes that waste the most time
&lt;/h2&gt;

&lt;p&gt;Chasing the biggest number is the classic one. A keyword with 50,000 monthly searches sounds great until you see who owns page one. A keyword with 300 searches that you could actually rank for can send you more traffic than the big one ever will.&lt;/p&gt;

&lt;p&gt;Ignoring intent comes next. Volume means nothing if your page doesn't match what people want when they click. The River Pools story is the reverse of this mistake: its most valuable posts targeted questions from people close to buying.&lt;/p&gt;

&lt;p&gt;Then there's treating estimates as facts. Two tools can give you very different numbers for the same keyword, and both are guessing. If you catch yourself agonizing over 1,200 versus 1,900, stop. Those two keywords are basically the same size.&lt;/p&gt;

&lt;p&gt;Doing research once and never returning is quieter but just as costly. Search habits drift and new questions appear, so a short revisit every few months is plenty.&lt;/p&gt;

&lt;p&gt;And writing for the tool instead of the reader. If a post reads oddly because you forced a phrase in, cut the phrase.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long this takes
&lt;/h2&gt;

&lt;p&gt;For a first pass on one topic area, give yourself an afternoon. Maybe two hours if you already know the subject well. After a few rounds it drops to under an hour, because you stop second-guessing every step.&lt;/p&gt;

&lt;p&gt;It also gets faster to read results pages. After you've looked at enough of them, you start noticing mismatches, like a query that clearly wants a how-to while most of the top results are product pages, without opening every link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions people ask
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I do keyword research without knowing search volume?&lt;/strong&gt;&lt;br&gt;
Yes. Autocomplete, People Also Ask, Reddit threads and Search Console all show you what people care about without a number attached. Marcus Sheridan's whole approach started with customer questions, not volume data. Volume helps you compare ideas. It isn't required to find them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I target keywords that show zero or very low volume?&lt;/strong&gt;&lt;br&gt;
Sometimes, yes. Tools often show low numbers for specific, newer, or conversational searches that real people do type. If the topic fits your site and you can answer it well, a low reported number alone isn't a reason to skip it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I choose between two keywords with the same intent?&lt;/strong&gt;&lt;br&gt;
Look at both results pages. Pick the one where the top pages feel weaker or more dated, or where you know something the current pages don't cover. If they look equal, write about the one you can explain better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Google Keyword Planner really free?&lt;/strong&gt;&lt;br&gt;
You don't pay to use it, but you need a Google Ads account, and without ad spend you usually see ranges instead of exact numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a website to start?&lt;/strong&gt;&lt;br&gt;
Steps 1 to 5 don't need one. Only Search Console does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AI-assisted writing a problem for search?&lt;/strong&gt;&lt;br&gt;
Google's published guidance on AI-generated content says the focus is on quality and helpfulness, not on how the content was produced.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sources for the stories and facts above
&lt;/h2&gt;

&lt;p&gt;The River Pools and Spas story comes from PRNEWS's coverage of Marcus Sheridan's Content Marketing World keynote and from his interview on the Find Your Yellow Tux podcast. The intent example comes from the Spiderworking blog's summary of his talk. The Keyword Planner range findings come from The SEO Engine blog. The Trends examples come from QuestionDB's guide to Google Trends for keyword research, Pod Digital, and Search Engine Land's guide to SEO seasonality. The Search Console story comes from Grit Daily's collection of Google Search Console success stories, and the explanation of average position comes from Google's Search Console Help. The long-tail examples come from Ahrefs and the MostlyBlogging site, and the results-page point comes from the Nullstacks blog. Google Search Central's helpful-content and AI-content guidance is referenced in the final sections. Figures and outcomes are as reported by those sources and may not match your own results.&lt;/p&gt;
&lt;h2&gt;
  
  
  READ HERE:
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.topblogs.online/blog/how-do-keywords-research" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fplain-eeur-prod-public.komododecks.com%2F202609%2F29%2FnylnYfYw9tCvySyw5pzJ%2Fimage.png" height="350" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.topblogs.online/blog/how-do-keywords-research" rel="noopener noreferrer" class="c-link"&gt;
            How to Do Keyword Research for Free: A Step-by-Step Guide for Beginners - TopBlogs
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn keyword research for free with Google Search Console, Keyword Planner, Trends and autocomplete. A simple process for beginners, with real stories from other sites.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.topblogs.online%2Ficon%3F0e9eb26cf9512256" width="32" height="32"&gt;
          topblogs.online
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creem.io for Pakistani Developers: A Practical Integration Guide (2026)</title>
      <dc:creator>TheBitForge</dc:creator>
      <pubDate>Mon, 28 Sep 2026 14:09:08 +0000</pubDate>
      <link>https://dev.to/thebitforge/creemio-for-pakistani-developers-a-practical-integration-guide-2026-1dpc</link>
      <guid>https://dev.to/thebitforge/creemio-for-pakistani-developers-a-practical-integration-guide-2026-1dpc</guid>
      <description>&lt;h2&gt;
  
  
  READ HERE
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.topblogs.online/blog/creem-io-pakistan-integration-guide" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fplain-eeur-prod-public.komododecks.com%2F202609%2F28%2FAvxywyjeSVswyObY5WSf%2Fimage.png" height="350" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.topblogs.online/blog/creem-io-pakistan-integration-guide" rel="noopener noreferrer" class="c-link"&gt;
            Creem.io in Pakistan: Payouts, Fees &amp;amp; Next.js Integration - TopBlogs
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Does Creem.io work in Pakistan? Learn about payouts, fees, restrictions, Merchant of Record, and how to integrate Creem with Next.js and webhooks.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.topblogs.online%2Ficon%3F0e9eb26cf9512256" width="32" height="32"&gt;
          topblogs.online
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Picture this. You've spent four months on a small SaaS tool. It works, your friends say it's good, and a stranger in Germany has just asked where they can pay for it. You open Stripe, start the signup, and Pakistan isn't in the country list.&lt;/p&gt;

&lt;p&gt;That moment is where a lot of Pakistani developers stall. Some give up. Some pay for a US LLC they don't really want. Some send customers a Payoneer link and hope for the best.&lt;/p&gt;

&lt;p&gt;Creem.io is one of the newer platforms trying to fix that gap, and it does list Pakistan as a supported country. But "supported" hides a few details that decide whether it works for you. This guide walks through those details first, then builds a full integration with real code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last checked in September 2026. Payment rules change quickly, so confirm anything money-related on Creem's own docs before you commit. This article is independent and isn't sponsored by Creem.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Creem actually does
&lt;/h2&gt;

&lt;p&gt;Creem is what the industry calls a Merchant of Record. The term sounds heavier than it is.&lt;/p&gt;

&lt;p&gt;Think of a shop that sells your product for you. When a customer in France buys, the shop is the one legally selling to them. It charges the card, works out the French VAT, sends the invoice, and deals with the bank if the customer disputes the charge. Then it pays you what's left after its cut. With a normal payment processor like Stripe, you are the seller, so all of that lands on you.&lt;/p&gt;

&lt;p&gt;Creem is built by Armitage Labs OU, an Estonian company, and it targets software and digital goods. The API covers products, hosted checkout pages, customers, subscriptions, discount codes, and license keys. If you sell a SaaS plan, an extension, a template pack, or an ebook, you're the intended customer.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, does it work in Pakistan?
&lt;/h2&gt;

&lt;p&gt;Yes. Pakistan is on Creem's list of supported merchant countries, and buyers in Pakistan can purchase from you too, since Pakistan isn't on the unsupported list.&lt;/p&gt;

&lt;p&gt;Now the catch. On that list, Pakistan carries a double asterisk. The docs say countries with that mark may face restrictions from Creem's bank transfer partner, for example only personal bank accounts being accepted, or business transfers being unavailable.&lt;/p&gt;

&lt;p&gt;The partner is Wise, and Wise's own help page for PKR transfers is blunt. It says you can send PKR to personal bank accounts in Pakistan, that you can't send to a business account, and it warns against a couple of account types, namely Meezan Bank Express and Allied Bank Express accounts, which reject these transfers.&lt;/p&gt;

&lt;p&gt;Put those two facts together and you get a fairly clear picture.&lt;/p&gt;

&lt;p&gt;If you're a freelancer or solo founder, onboarding as an individual with a personal PKR account in your own name is the path most likely to go smoothly. The name on the bank account has to match the name on your identity verification, because a mismatch is one of the documented reasons a payout bounces back.&lt;/p&gt;

&lt;p&gt;If you run a registered company and want the money to land in a company account, don't assume it works. Email Creem support first and ask directly. It's a five-minute question that can save you weeks.&lt;/p&gt;

&lt;p&gt;There's also a backup route. Creem pays out in USDC on the Polygon network for a 2% fee. If your bank keeps rejecting transfers, that's your escape hatch, though you'd need a wallet and a way to turn USDC into rupees that you trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can sell, and what will get you turned away
&lt;/h2&gt;

&lt;p&gt;This part surprises people, so read it before you spend a weekend on integration.&lt;/p&gt;

&lt;p&gt;Creem is for digital products. Its account review rules say services of any kind aren't accepted, and the examples they give include marketing, design, web development and consulting. So if your plan is to collect payment for client projects, Creem isn't the tool. That's a real limit for the many Pakistani developers who earn through freelancing.&lt;/p&gt;

&lt;p&gt;Generative AI products, such as text-to-image or text-to-video tools, sit on a restricted list. Restricted doesn't mean banned. It means extra checks, and they'll ask about your previous payment processor, your refund rate, and why you're moving.&lt;/p&gt;

&lt;p&gt;One more thing. Be honest about what you sell. Creem can ask for test access to your product and may make a small test purchase during onboarding. Sellers who hide things tend to get their accounts closed, and closed accounts with money inside are a miserable problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs, in actual numbers
&lt;/h2&gt;

&lt;p&gt;The headline rate is 3.9% plus $0.40 per successful transaction, with no monthly fee. On a $29 sale with no tax added on top, that's about $1.53 gone to the platform.&lt;/p&gt;

&lt;p&gt;Some features cost extra. Revenue splits and the affiliate system each add 2%, and abandoned-cart recovery adds 5% on the recovered sale. If you don't turn those on, they don't touch you.&lt;/p&gt;

&lt;p&gt;The number that matters most for someone in Pakistan is the payout fee, which is $7 or 1% of the payout, whichever is bigger. Run it on a few amounts and the trap becomes obvious.&lt;/p&gt;

&lt;p&gt;Withdraw $100 and you lose $7, which is 7% of your money. Withdraw $700 and 1% comes to exactly $7, so that's the break-even. Withdraw $2,000 and the fee is $20, or a clean 1%.&lt;/p&gt;

&lt;p&gt;So don't withdraw just because the 15th is coming. Let the balance build and take it out in bigger lumps. The minimum to request a payout is $50, and payouts run on the 1st and the 15th of each month.&lt;/p&gt;

&lt;p&gt;Two timing details are easy to miss. New payments can be held for 7 to 12 days for risk review, which means a sale you make on the 12th usually won't be ready for the 15th. And if your bank account currency differs from the currency you charged in, the bank partner applies its own conversion fee, which Creem says it doesn't control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I'd be cautious
&lt;/h2&gt;

&lt;p&gt;A competitor's comparison post criticizes Creem's extra fees and says checkout supports only USD and EUR. That source sells a rival product, so treat it with salt, but the currency point is easy to verify yourself in the dashboard before you price anything.&lt;/p&gt;

&lt;p&gt;There's also a small inconsistency worth knowing about. Creem's pricing page says automatic tax collection covers 50+ countries, while its homepage talks about compliance across 190+ countries. They may be describing different things, but if one particular market matters to you, ask support whether it's covered.&lt;/p&gt;

&lt;p&gt;Trustpilot reviews lean positive on support and documentation, with some complaints about individual merchants' billing. That's normal for any payments company. Just don't rely on marketing pages alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the integration
&lt;/h2&gt;

&lt;p&gt;I'll use Next.js and the official TypeScript SDK because that's what most people reach for. Creem also has a REST API, a Better Auth plugin, and a Convex component if your stack looks different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create your account and a test product
&lt;/h3&gt;

&lt;p&gt;Sign up at creem.io, finish verification, then flip the Test Mode toggle at the bottom of the left sidebar. Everything in test mode is walled off from real money, which is exactly what you want while you're making mistakes.&lt;/p&gt;

&lt;p&gt;Open the Products tab and create your first product. Set the name, the price, and whether it's one-time or recurring. Prices are stored in cents, so 1000 means $10.00. Choose a tax category (SaaS, digital goods, or ebooks) and a tax mode, inclusive or exclusive. Copy the product ID that starts with &lt;code&gt;prod_&lt;/code&gt;. Then head to the Developers section and copy your API key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up the environment
&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;creem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env.local&lt;/span&gt;
&lt;span class="nv"&gt;CREEM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_test_api_key
&lt;span class="nv"&gt;CREEM_WEBHOOK_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whsec_your_webhook_secret
&lt;span class="nv"&gt;CREEM_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;test
&lt;/span&gt;&lt;span class="nv"&gt;NEXT_PUBLIC_APP_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API key belongs on the server only. Don't put it in browser code and don't commit it to Git. Test and live modes use different keys and different base URLs, &lt;code&gt;https://test-api.creem.io&lt;/code&gt; for testing and &lt;code&gt;https://api.creem.io&lt;/code&gt; for production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create the client
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// lib/creem.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Creem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;creem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Creem&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CREEM_API_KEY&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="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CREEM_ENV&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;as const&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;When you leave &lt;code&gt;server&lt;/code&gt; out, the SDK talks to production. This setup only forces test mode when you haven't said you're in production, which is a safer default than the reverse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a checkout session
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/api/checkout/route.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/lib/creem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;)&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;request&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkouts&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="nx"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;successUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_APP_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/success`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;userId&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="nx"&gt;NextResponse&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="na"&gt;checkoutUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkoutUrl&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Checkout error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not create checkout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&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;p&gt;That &lt;code&gt;metadata&lt;/code&gt; line is easy to skip and painful to regret. Put your own user ID in it. When the webhook fires later, the same metadata comes back, so you know exactly which account in your database just paid.&lt;/p&gt;

&lt;p&gt;On the front end, call the route and send the browser to the URL it returns.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;buy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/checkout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prod_YOUR_PRODUCT_ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;checkoutUrl&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&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="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;checkoutUrl&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;
  
  
  Handle webhooks
&lt;/h3&gt;

&lt;p&gt;This is the part that actually decides whether your app gets paid correctly.&lt;/p&gt;

&lt;p&gt;Don't unlock anything just because someone reached your success page. Anyone can type that URL into a browser. The webhook is the only trustworthy signal that money moved.&lt;/p&gt;

&lt;p&gt;Creem signs each webhook. The signature arrives in the &lt;code&gt;creem-signature&lt;/code&gt; header, and it's an HMAC-SHA256 of the raw request body using your webhook secret. That's why you read the body as raw text before doing anything else with it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/api/webhooks/creem/route.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;constructWebhookEventEntity&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;creem/webhooks&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rawBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;constructWebhookEventEntity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CREEM_WEBHOOK_SECRET&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="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;event&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="nx"&gt;NextResponse&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="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid signature&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// The same event can arrive more than once, so skip repeats.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eventId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="kd"&gt;as &lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;hasProcessed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eventId&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="nx"&gt;NextResponse&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="na"&gt;received&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eventType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;checkout.completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="c1"&gt;// Unlock the one-time purchase for this user.&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subscription.paid&lt;/span&gt;&lt;span class="dl"&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;// Activate or renew access for the paid period.&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subscription.past_due&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subscription.unpaid&lt;/span&gt;&lt;span class="dl"&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;// Show a payment-recovery message and restrict access per your policy.&lt;/span&gt;
      &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subscription.canceled&lt;/span&gt;&lt;span class="dl"&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;// Revoke access.&lt;/span&gt;
      &lt;span class="k"&gt;break&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="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;markProcessed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eventId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&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="na"&gt;received&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;&lt;code&gt;hasProcessed&lt;/code&gt; and &lt;code&gt;markProcessed&lt;/code&gt; are stand-ins for your own database. A table with the event ID as a unique column is plenty.&lt;/p&gt;

&lt;p&gt;A few details about how Creem behaves. Answer with HTTP 200 when you've handled an event. If you don't, Creem tries again, five attempts in total, after 30 seconds, 5 minutes, 30 minutes and 6 hours, and it stops after 24 hours. Its docs suggest using &lt;code&gt;subscription.paid&lt;/code&gt; to switch on access and keeping &lt;code&gt;subscription.active&lt;/code&gt; for syncing. Creem also doesn't publish fixed IP addresses for webhooks, so an IP allowlist won't protect you. The signature check is your protection.&lt;/p&gt;

&lt;p&gt;If you'd rather skip the SDK helper, you can verify the signature by hand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;crypto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isValidSignature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createHmac&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sha256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rawBody&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;expected&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timingSafeEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&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;
  
  
  Test it locally
&lt;/h3&gt;

&lt;p&gt;Creem needs a public HTTPS address to reach. While you're developing, the Creem CLI can forward events straight to your machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;creem listen &lt;span class="nt"&gt;--forward-to&lt;/span&gt; http://localhost:3000/api/webhooks/creem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer a tunnel like ngrok, register that URL under Developers and then Webhooks in the dashboard. Add your production URL separately once you deploy.&lt;/p&gt;

&lt;p&gt;In test mode, the card &lt;code&gt;4111 1111 1111 1111&lt;/code&gt; gives you a successful payment with any future expiry and any CVC. The card &lt;code&gt;4507 9900 0000 0028&lt;/code&gt; simulates a decline, and &lt;code&gt;4507 9900 0000 0010&lt;/code&gt; simulates insufficient funds. Try the failing cards on purpose. Subscriptions especially tend to break in the unhappy paths, not the happy one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go live
&lt;/h3&gt;

&lt;p&gt;Before you switch, walk through this once.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run every flow in test mode: a purchase, a failed payment, a cancellation, a refund.&lt;/li&gt;
&lt;li&gt;Swap in your live API key and drop the test server setting.&lt;/li&gt;
&lt;li&gt;Recreate your products in live mode, because test products don't carry over.&lt;/li&gt;
&lt;li&gt;Register your production webhook URL and copy the live webhook secret.&lt;/li&gt;
&lt;li&gt;Add your payout account and finish identity verification.&lt;/li&gt;
&lt;li&gt;Watch your first handful of real transactions closely.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Getting paid in Pakistan
&lt;/h2&gt;

&lt;p&gt;Set up your payout account long before you need it. For a bank payout, expect to give your full name and your IBAN, which is what Wise asks for on PKR transfers. Use a personal account in your own name, and stay away from the Express account types mentioned earlier.&lt;/p&gt;

&lt;p&gt;If a payout fails and the money returns to your balance, it's usually one of three things. The bank details are wrong. The account can't receive international payments. Or the account holder's name doesn't match the identity you verified with. Check those before opening a support ticket, because you'll likely find the answer yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes that tend to bite
&lt;/h2&gt;

&lt;p&gt;A few come up again and again with payment integrations, and Creem is no exception.&lt;/p&gt;

&lt;p&gt;Granting access from the success page is the big one. It feels fine in testing and then someone shares the URL. Use the webhook.&lt;/p&gt;

&lt;p&gt;Parsing the request body before verifying the signature is another. Once a framework re-serializes the JSON, the bytes change and the signature check fails for no obvious reason. Read the raw text first.&lt;/p&gt;

&lt;p&gt;Mixing environments causes the strangest errors. A test key pointed at the production endpoint, or the other way round, fails in ways that look like bugs in your own code. Check your environment variables before you start debugging logic.&lt;/p&gt;

&lt;p&gt;And then there's the small, quiet one. Withdrawing $60 because you're impatient and losing $7 of it. Wait a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your own taxes
&lt;/h2&gt;

&lt;p&gt;Creem, as Merchant of Record, handles sales tax and VAT on what your customers buy. It doesn't handle your income tax in Pakistan. Those are separate worlds.&lt;/p&gt;

&lt;p&gt;Each payout comes with a reverse invoice, which is useful paperwork, so download and keep them along with your bank credit records. How foreign income is taxed for freelancers and software exporters in Pakistan has its own rules and they change over time. Talk to a qualified accountant instead of trusting a blog post, this one included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should use it
&lt;/h2&gt;

&lt;p&gt;Creem makes sense if you sell a SaaS product, browser extension, template pack, ebook or licensed software, if a personal bank account in your own name works for you, and if you'd rather not learn how to file taxes in a dozen jurisdictions.&lt;/p&gt;

&lt;p&gt;It's the wrong tool if most of your income is client work, if you need money to land in a business account, if you need to be paid more often than twice a month, or if your product sits in a restricted category.&lt;/p&gt;

&lt;p&gt;Whichever way you lean, test with something small. List a cheap product, complete one real sale, and follow that money all the way into your bank account before you build anything bigger on top. Watching your own first payout arrive will tell you more than any review, including this one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Creem available in Pakistan?&lt;/strong&gt;&lt;br&gt;
Yes. Pakistan is on the supported merchant country list, with a note that bank partner restrictions may affect payouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can customers in Pakistan buy from a Creem checkout?&lt;/strong&gt;&lt;br&gt;
Purchases are accepted from every country except those on Creem's unsupported list, and Pakistan isn't on it. Which payment methods appear depends on the buyer's location, the product type, the price and the device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a registered company?&lt;/strong&gt;&lt;br&gt;
No. Creem accepts individual sellers, who go through standard identity checks. Individuals need a payout account in the same name as their verified identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the money reach me?&lt;/strong&gt;&lt;br&gt;
Through a local bank transfer handled by Creem's bank partner, or through USDC on Polygon. Payouts run on the 1st and 15th of each month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the minimum payout?&lt;/strong&gt;&lt;br&gt;
Your balance has to reach $50 or 50 EUR before you can request a withdrawal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I collect payment for freelance projects with it?&lt;/strong&gt;&lt;br&gt;
No. Services such as consulting, design and web development aren't accepted. Creem is designed for digital products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it work with Next.js?&lt;/strong&gt;&lt;br&gt;
Yes. There's an official TypeScript SDK and a dedicated Next.js adapter, plus a Better Auth plugin and a Convex component.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and last checked
&lt;/h2&gt;

&lt;p&gt;Everything factual above was checked in September 2026 against these official pages: Creem's Supported Countries, Payouts, Quickstart, Test Mode and Webhooks documentation, its Pricing page, Terms of Service and Account Reviews policy, and Wise's help article on PKR transfers. Rules on all of these can change, so double-check current details before you make decisions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: This article is general information, not financial, legal or tax advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>sass</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
