<?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: Statistics of the World</title>
    <description>The latest articles on DEV Community by Statistics of the World (@sotwdata).</description>
    <link>https://dev.to/sotwdata</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3850211%2F20f49eac-920f-492b-bf0f-05f116e193ba.png</url>
      <title>DEV Community: Statistics of the World</title>
      <link>https://dev.to/sotwdata</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sotwdata"/>
    <language>en</language>
    <item>
      <title>I built a free salary lookup tool for the Canadian federal government</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Mon, 13 Apr 2026 02:24:44 +0000</pubDate>
      <link>https://dev.to/sotwdata/i-built-a-free-salary-lookup-tool-for-the-canadian-federal-government-1ghp</link>
      <guid>https://dev.to/sotwdata/i-built-a-free-salary-lookup-tool-for-the-canadian-federal-government-1ghp</guid>
      <description>&lt;p&gt;The Canadian federal government employs over 300,000 people across 60+ classification groups. Every salary is public, set by Treasury Board collective agreements. But finding the actual numbers has always been painful: they're buried in dozens of separate PDF documents scattered across government websites.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://fedpay.ca" rel="noopener noreferrer"&gt;FedPay.ca&lt;/a&gt; to fix that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;You pick a classification group (like IT for tech, EC for economists, AS for admin) and a level, and it shows you the full pay scale with step by step rates, biweekly pay, and historical salary data going back to previous collective agreements.&lt;/p&gt;

&lt;p&gt;It also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://fedpay.ca/take-home" rel="noopener noreferrer"&gt;take home pay calculator&lt;/a&gt; that shows net pay after federal tax, provincial tax, CPP, EI, and pension deductions&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://fedpay.ca/compare" rel="noopener noreferrer"&gt;classification comparison tool&lt;/a&gt; for comparing pay across different groups&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://fedpay.ca/jobs" rel="noopener noreferrer"&gt;Job title pages&lt;/a&gt; that map real world titles like "software developer" or "policy analyst" to their federal classification codes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next.js with static export (no server needed)&lt;/li&gt;
&lt;li&gt;Deployed on Cloudflare Pages (free tier, auto deploys from GitHub)&lt;/li&gt;
&lt;li&gt;All salary data compiled from Treasury Board collective agreements into a single TypeScript data file&lt;/li&gt;
&lt;li&gt;SEO optimized with structured data (Occupation schema), dynamic OG images, and 700+ statically generated pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I work in the Canadian public policy space and got tired of digging through PDFs every time someone asked "what does an IT-03 make?" The official government site lists rates of pay but they are organized by collective agreement rather than by classification, which makes comparison really difficult.&lt;/p&gt;

&lt;p&gt;The site now gets about 15,000 to 20,000 monthly pageviews from Google, mostly from people searching things like "EC-05 salary" or "government of canada IT salary."&lt;/p&gt;

&lt;h2&gt;
  
  
  Some interesting salary facts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The lowest paid permanent federal position is CR-01 at $41,947/year&lt;/li&gt;
&lt;li&gt;The highest is MD-MSP (medical specialist) at $266,454&lt;/li&gt;
&lt;li&gt;Average across all employees is roughly $85,000&lt;/li&gt;
&lt;li&gt;IT developers (IT-02) earn $85,854 to $105,080&lt;/li&gt;
&lt;li&gt;Government lawyers have a wild salary band: LP-02 ranges from $130,178 to $206,388&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have questions about the tech stack, the data pipeline, or how I approached the SEO, happy to answer in the comments.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="https://fedpay.ca" rel="noopener noreferrer"&gt;fedpay.ca&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>opensource</category>
      <category>career</category>
    </item>
    <item>
      <title>Visualizing Global Inflation With JavaScript — From API to Chart in 30 Minutes</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Sun, 12 Apr 2026 17:28:12 +0000</pubDate>
      <link>https://dev.to/sotwdata/visualizing-global-inflation-with-javascript-from-api-to-chart-in-30-minutes-8d3</link>
      <guid>https://dev.to/sotwdata/visualizing-global-inflation-with-javascript-from-api-to-chart-in-30-minutes-8d3</guid>
      <description>&lt;p&gt;Inflation has been the headline economic story of the last few years. I wanted to build a quick visualization showing which countries have the highest and lowest inflation right now — and how it compares to the global average.&lt;/p&gt;

&lt;p&gt;Here's a minimal approach using vanilla JavaScript and Chart.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting the Data
&lt;/h2&gt;

&lt;p&gt;I needed inflation rates for every country, sorted from highest to lowest. The IMF publishes this in their World Economic Outlook, but parsing their SDMX-JSON format is... not fun.&lt;/p&gt;

&lt;p&gt;Instead, I used &lt;a href="https://statisticsoftheworld.com/api-docs" rel="noopener noreferrer"&gt;Statistics of the World's ranking endpoint&lt;/a&gt; which returns pre-sorted data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&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;getInflationData&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="s1"&gt;https://statisticsoftheworld.com/api/v2/ranking/inflation-rate&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;data&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="c1"&gt;// data is already sorted highest to lowest&lt;/span&gt;
  &lt;span class="c1"&gt;// Each item: { country: "Venezuela", countryId: "VEN", value: 350.2, year: 2026 }&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&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;No API key needed for basic requests. The data comes back clean — no null values mixed in, no weird country code mapping needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Visualization
&lt;/h2&gt;

&lt;p&gt;I wanted three views:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Top 10 highest inflation (the crisis countries)&lt;/li&gt;
&lt;li&gt;Bottom 10 lowest (deflation or near-zero)&lt;/li&gt;
&lt;li&gt;Distribution histogram&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Top/Bottom 10 Bar Chart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"inflationChart"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"800"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/chart.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&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;render&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;data&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;getInflationData&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;top10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&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;bottom10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&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="nf"&gt;reverse&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;combined&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;top10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;bottom10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Chart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inflationChart&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;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;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;datasets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Inflation Rate (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;year&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="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
          &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#ef4444&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
          &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#f59e0b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
          &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#22c55e&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="s1"&gt;#3b82f6&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="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;indexAxis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&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="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Inflation: Highest &amp;amp; Lowest Countries&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="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Context: Global Average Line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;data&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="c1"&gt;// Add as annotation&lt;/span&gt;
&lt;span class="nl"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;annotation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;avgLine&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;line&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;xMin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;xMax&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#6366f1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;borderWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&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="s2"&gt;`World Avg: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&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="s2"&gt;%`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;display&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="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;h2&gt;
  
  
  What the Data Shows (2026)
&lt;/h2&gt;

&lt;p&gt;Running this with live data reveals some interesting patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hyperinflation&lt;/strong&gt; is concentrated in a handful of countries (Venezuela, Zimbabwe, Sudan, Argentina) where currency crises and political instability dominate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deflation&lt;/strong&gt; is hitting some export-dependent economies, particularly in East Asia, as the US tariff regime reshuffles global trade flows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "2% club"&lt;/strong&gt; (countries near central bank targets) is smaller than you'd think — most countries are either well above or below target&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The global average&lt;/strong&gt; is misleadingly high because it's skewed by outliers — the median is a much better measure of "typical" inflation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Going Further
&lt;/h2&gt;

&lt;p&gt;A few extensions if you want to make this more useful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical comparison&lt;/strong&gt;: The API also provides time-series data, so you can show how a country's inflation evolved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;history&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="s1"&gt;https://statisticsoftheworld.com/api/v2/history?indicator=inflation-rate&amp;amp;country=ARG&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns yearly inflation for Argentina going back 20+ years&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Regional breakdown&lt;/strong&gt;: Color-code by continent to see patterns — Sub-Saharan Africa and South America have systematically higher inflation than East Asia and Northern Europe.&lt;/p&gt;

&lt;p&gt;You can explore the full interactive version at &lt;a href="https://statisticsoftheworld.com/inflation-by-country" rel="noopener noreferrer"&gt;statisticsoftheworld.com/inflation-by-country&lt;/a&gt; — it shows all 218 countries with sortable tables and per-country drill-downs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;Full source for this visualization is under 100 lines. The hardest part of data visualization is usually getting clean data — once you have a sorted array of &lt;code&gt;{country, value}&lt;/code&gt; objects, the charting is straightforward.&lt;/p&gt;




&lt;p&gt;What economic data are you visualizing? I'd love to see what people build with this.&lt;/p&gt;

</description>
      <category>api</category>
    </item>
    <item>
      <title>Building a Country Comparison Dashboard with Next.js and Free Data</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Sun, 12 Apr 2026 17:27:03 +0000</pubDate>
      <link>https://dev.to/sotwdata/building-a-country-comparison-dashboard-with-nextjs-and-free-data-2cia</link>
      <guid>https://dev.to/sotwdata/building-a-country-comparison-dashboard-with-nextjs-and-free-data-2cia</guid>
      <description>&lt;p&gt;I wanted to build a simple dashboard that lets you compare any two countries side-by-side — GDP, population, inflation, the works. The hard part wasn't the UI. It was getting clean data without stitching together five different APIs.&lt;/p&gt;

&lt;p&gt;Here's how I built it in about two hours using Next.js App Router and free economic data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 14+&lt;/strong&gt; (App Router, Server Components)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free economic data API&lt;/strong&gt; for country statistics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No database needed — we're fetching live data on each request and caching with Next.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Fetching Country Data
&lt;/h2&gt;

&lt;p&gt;The annoying thing about economic data is that it's scattered. GDP comes from the IMF, population from the World Bank, health data from the WHO — and they all use different country codes.&lt;/p&gt;

&lt;p&gt;I used &lt;a href="https://statisticsoftheworld.com/api-docs" rel="noopener noreferrer"&gt;Statistics of the World's API&lt;/a&gt; because it normalizes all of these into one endpoint with consistent ISO-3 codes. No auth needed for basic use.&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;// lib/data.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://statisticsoftheworld.com/api/v2&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;getCountryData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;countryId&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;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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/country/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;countryId&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="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;86400&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Cache for 24 hours&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;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="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;getRanking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;indicator&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;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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/ranking/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indicator&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="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;86400&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;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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: The Comparison Page
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/compare/[slug]/page.tsx&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;getCountryData&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;@/lib/data&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;default&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;ComparePage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
  &lt;span class="nx"&gt;params&lt;/span&gt; 
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nl"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;slug&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="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;country1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;country2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;params&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="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-vs-&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data2&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="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nf"&gt;getCountryData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;country1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;getCountryData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;country2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max-w-4xl mx-auto p-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-3xl font-bold mb-8&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;vs&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grid grid-cols-3 gap-4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-right font-mono&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-center text-gray-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;GDP&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;font-mono&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-right font-mono&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;population&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-center text-gray-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Population&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;font-mono&lt;/span&gt;&lt;span class="dl"&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="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;population&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-right font-mono&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inflation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;%&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-center text-gray-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Inflation&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;font-mono&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;data2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inflation&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;%&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;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;h2&gt;
  
  
  Step 3: Making It SEO-Friendly
&lt;/h2&gt;

&lt;p&gt;Since this is a server component, the HTML is rendered on the server — Google sees the full data. I added &lt;code&gt;generateMetadata&lt;/code&gt; for dynamic titles:&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;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;generateMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&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;c1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;params&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="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-vs-&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d2&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="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nf"&gt;getCountryData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;getCountryData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&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;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; vs &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; — Economy Comparison`&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="s2"&gt;`Compare &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (GDP: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;) vs &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (GDP: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;fmt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;). Population, inflation, unemployment, and more.`&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;h2&gt;
  
  
  Step 4: Static Paths for Popular Comparisons
&lt;/h2&gt;

&lt;p&gt;Pre-render the most searched comparisons:&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;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStaticParams&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;united-states-vs-china&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="s1"&gt;united-states-vs-india&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="s1"&gt;china-vs-japan&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="s1"&gt;germany-vs-france&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="s1"&gt;united-kingdom-vs-france&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;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;A clean comparison dashboard that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loads instantly (server-rendered, cached)&lt;/li&gt;
&lt;li&gt;Works with any two countries (218 total)&lt;/li&gt;
&lt;li&gt;Has proper SEO metadata&lt;/li&gt;
&lt;li&gt;Cost $0 in API fees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full comparison is more polished than what I showed here — you can see a live example at &lt;a href="https://statisticsoftheworld.com/compare/united-states-vs-china" rel="noopener noreferrer"&gt;statisticsoftheworld.com/compare/united-states-vs-china&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server Components are perfect for data dashboards&lt;/strong&gt; — no client-side loading spinners, no layout shift, great for SEO&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching is your friend&lt;/strong&gt; — economic data doesn't change hourly, so &lt;code&gt;revalidate: 86400&lt;/code&gt; keeps things fast&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One normalized API beats three raw ones&lt;/strong&gt; — I spent more time on the UI than on data fetching, which is how it should be&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;What are you building with country data? I'm always interested in what people use this kind of data for.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 Free APIs for Global Economic Data in 2026</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Sun, 12 Apr 2026 17:26:03 +0000</pubDate>
      <link>https://dev.to/sotwdata/5-free-apis-for-global-economic-data-in-2026-21b9</link>
      <guid>https://dev.to/sotwdata/5-free-apis-for-global-economic-data-in-2026-21b9</guid>
      <description>&lt;p&gt;If you've ever built a dashboard, data visualization, or research tool that needed country-level economic data, you've probably hit the same wall I did: the data exists, but it's scattered across a dozen different sources, each with its own authentication system, country code format, and response structure.&lt;/p&gt;

&lt;p&gt;In this post I'll cover the five free APIs I've found most useful for global economic data, when to use each, and how to get started quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Sourcing Economic Data
&lt;/h2&gt;

&lt;p&gt;The gold-standard sources are the IMF, World Bank, WHO, and OECD — but each has its own API quirks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;World Bank&lt;/strong&gt; uses ISO-2 country codes (&lt;code&gt;US&lt;/code&gt;) in some endpoints and ISO-3 (&lt;code&gt;USA&lt;/code&gt;) in others&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMF&lt;/strong&gt; uses its own internal country codes alongside ISO standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WHO&lt;/strong&gt; has yet another set of country identifiers&lt;/li&gt;
&lt;li&gt;Each API updates on different schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a project that needs GDP + population + life expectancy across 50 countries, you're looking at 3 API clients, 3 authentication flows (or none, but different rate limits), and an afternoon of data normalization code.&lt;/p&gt;

&lt;p&gt;Let's look at the options.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. World Bank Indicators API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Development indicators, long historical series, academic citations&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://datahelpdesk.worldbank.org/knowledgebase/articles/889392" rel="noopener noreferrer"&gt;https://datahelpdesk.worldbank.org/knowledgebase/articles/889392&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The World Bank's API is probably the most commonly used for cross-country data. It has 16,000+ indicators, 200+ countries, and many series going back to 1960. No auth required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get US GDP (current USD) from 2000 to 2024&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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="s1"&gt;https://api.worldbank.org/v2/country/US/indicator/NY.GDP.MKTP.CD?format=json&amp;amp;date=2000:2024&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Authoritative, huge indicator coverage, excellent for social/development data&lt;br&gt;
&lt;strong&gt;Weaknesses:&lt;/strong&gt; No "get all indicators for a country" endpoint, response structure is verbose, rate limits not well-documented&lt;/p&gt;


&lt;h2&gt;
  
  
  2. IMF Data API (SDMX-JSON)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Macroeconomic forecasts, fiscal data, financial statistics&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://datahelp.imf.org/knowledgebase/articles/667681" rel="noopener noreferrer"&gt;https://datahelp.imf.org/knowledgebase/articles/667681&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The IMF's WEO (World Economic Outlook) data is the standard for consistent cross-country GDP, inflation, and fiscal comparisons. The API uses SDMX-JSON format which takes some getting used to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get GDP data from IMF WEO&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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="s1"&gt;https://www.imf.org/external/datamapper/api/v1/NGDP_RPCH?periods=2020,2021,2022,2023,2024&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;data&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// data.values.NGDP_RPCH.USA[2024] = GDP growth rate for US&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Best for macro forecasts and projections, consistent methodology across countries&lt;br&gt;
&lt;strong&gt;Weaknesses:&lt;/strong&gt; Complex query structure, SDMX format is unusual, steeper learning curve&lt;/p&gt;


&lt;h2&gt;
  
  
  3. FRED (Federal Reserve Economic Data)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; US economic data, interest rates, monetary policy data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://fred.stlouisfed.org/docs/api/fred/" rel="noopener noreferrer"&gt;https://fred.stlouisfed.org/docs/api/fred/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need US-specific data, FRED is unbeatable — 800,000+ time series from 100+ sources. Requires a free API key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_key_here&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;response&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="s2"&gt;`https://api.stlouisfed.org/fred/series/observations?series_id=GDPC1&amp;amp;api_key=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;file_type=json`&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;observations&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Massive US coverage, excellent documentation, well-maintained Python/JS libraries&lt;br&gt;
&lt;strong&gt;Weaknesses:&lt;/strong&gt; Primarily US-focused; for international data you need to supplement with other sources&lt;/p&gt;


&lt;h2&gt;
  
  
  4. Statistics of the World API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Cross-country comparisons, dashboards, apps needing multiple indicators from one endpoint&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://statisticsoftheworld.com/api-docs" rel="noopener noreferrer"&gt;https://statisticsoftheworld.com/api-docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is an aggregator API that normalizes data from IMF, World Bank, WHO, FRED, and UN into a single consistent format. 440+ indicators across 218 countries.&lt;/p&gt;

&lt;p&gt;The key advantage: instead of writing three API clients, you make one request and get consistent data back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get all available indicators for the US&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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="s1"&gt;https://statisticsoftheworld.com/api/v2/country/USA&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;data&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// data.gdp, data.population, data.inflation, data.life_expectancy...&lt;/span&gt;
&lt;span class="c1"&gt;// All in one response, consistent ISO-3 codes, consistent time format&lt;/span&gt;

&lt;span class="c1"&gt;// Compare two countries&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;comparison&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="s1"&gt;https://statisticsoftheworld.com/api/v2/compare?countries=USA,CHN,DEU&amp;amp;indicators=gdp,inflation&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;No auth for 100 req/day, free API key for 1,000/day. I've found this particularly useful for quick prototyping — you can have a country comparison working in an hour rather than spending that hour on data normalization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Single endpoint, no auth for basic use, consistent country codes and time formats, covers most macro indicators&lt;br&gt;
&lt;strong&gt;Weaknesses:&lt;/strong&gt; Not a primary source (data traces back to IMF/World Bank, so cite those for academic work), not as deep for niche indicators&lt;/p&gt;


&lt;h2&gt;
  
  
  5. OECD API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Detailed analysis of OECD member countries — education, labor, tax, environmental data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://data.oecd.org/api/sdmx-json-documentation/" rel="noopener noreferrer"&gt;https://data.oecd.org/api/sdmx-json-documentation/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The OECD API is the best source for detailed data on the 38 OECD members. Uses SDMX-JSON format (same as IMF).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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="s1"&gt;https://stats.oecd.org/sdmx-json/data/QNA/AUS+AUT+BEL.GDP+B1_GE.CUR+VOBARSA.Q/all?startTime=2020-Q1&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;data&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strengths:&lt;/strong&gt; Very detailed for OECD countries, especially education, labor market, and tax data&lt;br&gt;
&lt;strong&gt;Weaknesses:&lt;/strong&gt; Complex query construction, OECD-only (no developing countries), SDMX format&lt;/p&gt;




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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Recommended API&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;US-focused analysis&lt;/td&gt;
&lt;td&gt;FRED&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development/social indicators&lt;/td&gt;
&lt;td&gt;World Bank WDI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-country macro, forecasts&lt;/td&gt;
&lt;td&gt;IMF WEO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OECD members, detailed labor/education&lt;/td&gt;
&lt;td&gt;OECD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dashboard / app (multi-country, multi-indicator)&lt;/td&gt;
&lt;td&gt;Statistics of the World&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Academic citations&lt;/td&gt;
&lt;td&gt;World Bank or IMF directly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For building apps, my typical pattern is to prototype with Statistics of the World's API first (it's fast to get running), then switch to direct World Bank or IMF queries once I know exactly which indicators I need and need to cite primary sources.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Start: Country Comparison in 10 Lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&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;compareCountries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;country1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;country2&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="s2"&gt;`https://statisticsoftheworld.com/api/v2/compare?countries=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;country1&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;country2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;indicators=gdp,gdp_per_capita,inflation,population`&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;data&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`GDP &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;country1&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;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;country1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLocaleString&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`GDP &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;country2&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;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;country2&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;gdp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLocaleString&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="c1"&gt;// etc.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;compareCountries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USA&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="s1"&gt;CHN&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;What are you building with economic data? Drop it in the comments — always curious what people are using this for.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>5 Free APIs for Global Economic Data in 2026 (No API Key Needed)</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Fri, 10 Apr 2026 00:13:15 +0000</pubDate>
      <link>https://dev.to/sotwdata/5-free-apis-for-global-economic-data-in-2026-no-api-key-needed-1ocf</link>
      <guid>https://dev.to/sotwdata/5-free-apis-for-global-economic-data-in-2026-no-api-key-needed-1ocf</guid>
      <description>&lt;p&gt;If you're building anything that needs country-level economic data — a dashboard, a research tool, a data viz project — you've probably discovered that finding the right API is harder than it should be.&lt;/p&gt;

&lt;p&gt;I spent way too long evaluating options for a recent project, so here's my honest ranking of the best free options in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. FRED (Federal Reserve Economic Data)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; US economic data&lt;br&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://fred.stlouisfed.org" rel="noopener noreferrer"&gt;fred.stlouisfed.org&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; API key (free, instant)&lt;/p&gt;

&lt;p&gt;If you only need US data, stop here. FRED has 800,000+ time series covering everything from GDP to mortgage rates to the price of eggs. The API is well-documented, returns JSON, and the rate limits are generous.&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.stlouisfed.org/fred/series/observations?series_id=GDP&amp;amp;api_key=YOUR_KEY&amp;amp;file_type=json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; US-only. If you need to compare the US to, say, Germany or India, you'll need another source.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. World Bank API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; International development indicators&lt;br&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://data.worldbank.org" rel="noopener noreferrer"&gt;data.worldbank.org&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; None required&lt;/p&gt;

&lt;p&gt;The World Bank's API covers 300+ indicators across 200+ countries — health, education, environment, infrastructure. No API key needed.&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.worldbank.org/v2/country/USA/indicator/NY.GDP.MKTP.CD?format=json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; The query syntax is clunky (you need to know indicator codes like &lt;code&gt;NY.GDP.MKTP.CD&lt;/code&gt;), and the response format has some quirks. Also, the data updates slowly — often 1-2 years behind.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Statistics of the World API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Cross-country comparisons with data from multiple sources&lt;br&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://statisticsoftheworld.com/api-docs" rel="noopener noreferrer"&gt;statisticsoftheworld.com/api-docs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; None for basic use (100 req/day)&lt;/p&gt;

&lt;p&gt;This one's newer but I've been using it a lot. It aggregates data from IMF, World Bank, WHO, and FRED into a single normalized API — so you don't have to stitch together four different data formats.&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://statisticsoftheworld.com/api/v2/country/USA"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns all 440+ indicators for a country in one call. Also has endpoints for rankings, comparisons, and historical data. Free API keys available for 1,000 req/day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; Doesn't have real-time financial data (stock prices, forex). For that, you'd need a dedicated market data API.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. IMF World Economic Outlook
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; GDP, inflation, unemployment, government debt projections&lt;br&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://www.imf.org/external/datamapper" rel="noopener noreferrer"&gt;imf.org/external/datamapper&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; None&lt;/p&gt;

&lt;p&gt;The IMF's WEO database is the gold standard for macroeconomic projections. Published twice a year (April and October) with data for 190+ countries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; No proper REST API — you're mostly downloading Excel/CSV files or scraping their datamapper tool. That's why aggregators that pull from IMF are useful.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. REST Countries
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Country metadata (flags, currencies, languages, borders)&lt;br&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://restcountries.com" rel="noopener noreferrer"&gt;restcountries.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Auth:&lt;/strong&gt; None&lt;/p&gt;

&lt;p&gt;Not economic data per se, but incredibly useful as a companion API. Need a country's flag, currency code, or neighboring countries? This is the quickest option.&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://restcountries.com/v3.1/name/japan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Limitation:&lt;/strong&gt; No economic indicators — just metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Comparison
&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;Countries&lt;/th&gt;
&lt;th&gt;Indicators&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;th&gt;Real-time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FRED&lt;/td&gt;
&lt;td&gt;US only&lt;/td&gt;
&lt;td&gt;800K+&lt;/td&gt;
&lt;td&gt;API key&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;World Bank&lt;/td&gt;
&lt;td&gt;200+&lt;/td&gt;
&lt;td&gt;300+&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Statistics of the World&lt;/td&gt;
&lt;td&gt;218&lt;/td&gt;
&lt;td&gt;440+&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IMF WEO&lt;/td&gt;
&lt;td&gt;190+&lt;/td&gt;
&lt;td&gt;~40&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;REST Countries&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;0 (metadata)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  My Recommendation
&lt;/h2&gt;

&lt;p&gt;For most projects, I'd use &lt;strong&gt;FRED&lt;/strong&gt; for US-specific data and &lt;strong&gt;Statistics of the World&lt;/strong&gt; for international comparisons (since it aggregates IMF + World Bank + WHO into one API). If you need raw World Bank data with full granularity, hit the World Bank API directly.&lt;/p&gt;

&lt;p&gt;The real bottleneck with economic data isn't finding APIs — it's normalizing data across sources that use different country codes, time formats, and update schedules. That's where aggregators save you hours of glue code.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What APIs do you use for economic data? Drop a comment — always looking for new sources.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>data</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Free API for Global Economic Data — GDP, Population, Inflation for 218 Countries</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Sun, 05 Apr 2026 17:15:38 +0000</pubDate>
      <link>https://dev.to/sotwdata/free-api-for-global-economic-data-gdp-population-inflation-for-218-countries-41b8</link>
      <guid>https://dev.to/sotwdata/free-api-for-global-economic-data-gdp-population-inflation-for-218-countries-41b8</guid>
      <description>&lt;p&gt;I built a free REST API that provides economic data for every country in the world. No API key required for basic usage. Here's how it works and why I built it.&lt;/p&gt;

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

&lt;p&gt;If you've ever tried to get GDP, population, or inflation data programmatically, you know the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;World Bank API&lt;/strong&gt; — works, but complex query syntax and XML responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMF API&lt;/strong&gt; — even more complex, poorly documented&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trading Economics&lt;/strong&gt; — paywalled ($50+/month)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FRED&lt;/strong&gt; — great for US data, but limited international coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a single endpoint that returns clean JSON for any country, any indicator, with zero authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Base URL:&lt;/strong&gt; &lt;code&gt;https://statisticsoftheworld.com/api/v2&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Get all indicators for a country
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://statisticsoftheworld.com/api/v2/country/USA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns GDP, population, inflation, unemployment, government debt, life expectancy, and 440+ more indicators — all in one call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get one indicator for all countries (rankings)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://statisticsoftheworld.com/api/v2/indicator/IMF.NGDPD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns GDP for all 218 countries, sorted by value. Perfect for building rankings or visualizations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Historical data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://statisticsoftheworld.com/api/v2/history?indicator&lt;span class="o"&gt;=&lt;/span&gt;IMF.NGDPD&amp;amp;country&lt;span class="o"&gt;=&lt;/span&gt;USA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns yearly GDP data for the US going back to 1980.&lt;/p&gt;

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

&lt;p&gt;All data comes from official international organizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IMF World Economic Outlook&lt;/strong&gt; — GDP, inflation, unemployment, government debt (193 countries)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;World Bank WDI&lt;/strong&gt; — 300+ development indicators (health, education, environment)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WHO&lt;/strong&gt; — Health indicators (life expectancy, mortality rates)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FRED&lt;/strong&gt; — US economic time series&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;United Nations&lt;/strong&gt; — Population, trade statistics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data is updated weekly as new releases become available.&lt;/p&gt;

&lt;h2&gt;
  
  
  No Auth, No Limits (almost)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No API key required&lt;/strong&gt; for up to 100 requests/day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free API key&lt;/strong&gt; available for 1,000 requests/day (just sign up)&lt;/li&gt;
&lt;li&gt;All responses are JSON&lt;/li&gt;
&lt;li&gt;CORS enabled — works directly from the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📊 Build data dashboards&lt;/li&gt;
&lt;li&gt;📈 Economic research and analysis&lt;/li&gt;
&lt;li&gt;🗺️ Country comparison tools&lt;/li&gt;
&lt;li&gt;📱 Mobile apps with global economic data&lt;/li&gt;
&lt;li&gt;🤖 Feed LLMs with structured economic context&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API Docs:&lt;/strong&gt; &lt;a href="https://statisticsoftheworld.com/api-docs" rel="noopener noreferrer"&gt;statisticsoftheworld.com/api-docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive site:&lt;/strong&gt; &lt;a href="https://statisticsoftheworld.com" rel="noopener noreferrer"&gt;statisticsoftheworld.com&lt;/a&gt; — browse 218 countries with charts, rankings, and comparisons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example:&lt;/strong&gt; &lt;a href="https://statisticsoftheworld.com/us-economy" rel="noopener noreferrer"&gt;US Economic Data&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full site includes interactive charts, country comparisons, ranking tables, and a 2026 economic snapshot report — all free.&lt;/p&gt;

&lt;p&gt;Would love feedback from anyone working with economic data. What indicators or features would be most useful for your projects?&lt;/p&gt;

</description>
      <category>api</category>
    </item>
    <item>
      <title>I built a free alternative to Bloomberg's data API with 490+ economic indicators</title>
      <dc:creator>Statistics of the World</dc:creator>
      <pubDate>Mon, 30 Mar 2026 00:09:01 +0000</pubDate>
      <link>https://dev.to/sotwdata/i-built-a-free-alternative-to-bloombergs-data-api-with-490-economic-indicators-27nb</link>
      <guid>https://dev.to/sotwdata/i-built-a-free-alternative-to-bloombergs-data-api-with-490-economic-indicators-27nb</guid>
      <description>&lt;p&gt;I'm an economist who got tired of paying for Bloomberg Terminal access just to look up GDP data. So I built &lt;a href="https://statisticsoftheworld.com" rel="noopener noreferrer"&gt;Statistics of the World&lt;/a&gt; — a free platform with 490+ economic indicators for 218 countries, with a free REST API.&lt;/p&gt;

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

&lt;p&gt;If you've ever tried to programmatically access global economic data, you know the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bloomberg Terminal&lt;/strong&gt;: $24,000/year&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refinitiv/LSEG&lt;/strong&gt;: $22,000/year&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FRED API&lt;/strong&gt;: Free but US-only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;World Bank API&lt;/strong&gt;: Free but slow, limited indicators, XML responses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMF API&lt;/strong&gt;: Exists but documentation is... an experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted one place where I could &lt;code&gt;curl&lt;/code&gt; GDP, inflation, trade data, stock prices, and commodity prices — for any country — without paying thousands or parsing XML.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://statisticsoftheworld.com" rel="noopener noreferrer"&gt;Statistics of the World&lt;/a&gt; aggregates data from 6 sources into a single REST API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IMF&lt;/strong&gt; — World Economic Outlook, International Financial Statistics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;World Bank&lt;/strong&gt; — World Development Indicators (490+ indicators)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FRED&lt;/strong&gt; — US economic data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yahoo Finance&lt;/strong&gt; — Real-time stock quotes, commodities, crypto&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECB&lt;/strong&gt; — Exchange rates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alpha Vantage&lt;/strong&gt; — Market data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick API Examples
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# GDP for all countries&lt;/span&gt;
curl https://statisticsoftheworld.com/api/v2/indicators/NY.GDP.MKTP.CD

&lt;span class="c"&gt;# All indicators for Canada&lt;/span&gt;
curl https://statisticsoftheworld.com/api/v2/countries/CAN

&lt;span class="c"&gt;# Live market quotes&lt;/span&gt;
curl https://statisticsoftheworld.com/api/v2/markets/quotes

&lt;span class="c"&gt;# Search for any indicator&lt;/span&gt;
curl https://statisticsoftheworld.com/api/v2/search?q&lt;span class="o"&gt;=&lt;/span&gt;unemployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The free tier gives you 100 requests/day — enough for most research and side projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; with React 19&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; (PostgreSQL) for the database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python ETL pipeline&lt;/strong&gt; — 49 cron jobs pulling data from all sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coolify&lt;/strong&gt; on a $5.59/mo Hetzner VPS (replaced $45/mo Vercel + GitHub Actions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe&lt;/strong&gt; for paid API tiers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Beyond the API
&lt;/h2&gt;

&lt;p&gt;The site also has interactive features that I haven't seen elsewhere in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Heatmap&lt;/strong&gt;: Compare any indicator across all countries visually&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scatter plots&lt;/strong&gt;: Plot any two indicators against each other (GDP vs. life expectancy, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Country comparisons&lt;/strong&gt;: Side-by-side economic profiles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economic calendar&lt;/strong&gt;: Upcoming data releases with AI-powered actuals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credit ratings&lt;/strong&gt;: Sovereign ratings from all major agencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prediction markets&lt;/strong&gt;: Polymarket integration for economic events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP endpoint&lt;/strong&gt;: For AI agents that need economic context&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I'm working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Historical time series charts per country&lt;/li&gt;
&lt;li&gt;Webhook alerts when indicators update&lt;/li&gt;
&lt;li&gt;An OpenAPI spec for better developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work with economic data, I'd love feedback. The API is free, no credit card required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;: &lt;a href="https://statisticsoftheworld.com" rel="noopener noreferrer"&gt;statisticsoftheworld.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;API docs&lt;/strong&gt;: &lt;a href="https://statisticsoftheworld.com/ai" rel="noopener noreferrer"&gt;statisticsoftheworld.com/ai&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/dregon03/statisticsoftheworld" rel="noopener noreferrer"&gt;github.com/dregon03/statisticsoftheworld&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>showdev</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
