<?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: noozzzzz</title>
    <description>The latest articles on DEV Community by noozzzzz (@noozzzzz).</description>
    <link>https://dev.to/noozzzzz</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%2F4156028%2F6b7d7bdf-46c3-4de5-91aa-27cf35fdd94f.png</url>
      <title>DEV Community: noozzzzz</title>
      <link>https://dev.to/noozzzzz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/noozzzzz"/>
    <language>en</language>
    <item>
      <title>Your news app works on localhost and breaks on deploy. Here's what each news API's free tier actually allows</title>
      <dc:creator>noozzzzz</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:42:22 +0000</pubDate>
      <link>https://dev.to/noozzzzz/your-news-app-works-on-localhost-and-breaks-on-deploy-heres-what-each-news-apis-free-tier-308l</link>
      <guid>https://dev.to/noozzzzz/your-news-app-works-on-localhost-and-breaks-on-deploy-heres-what-each-news-apis-free-tier-308l</guid>
      <description>&lt;p&gt;You build a news widget, test it on &lt;code&gt;localhost&lt;/code&gt;, and it works. You deploy it, and NewsAPI answers with this:&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;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"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;"corsNotAllowed"&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;"Requests from the browser are not allowed on the Developer plan, except from localhost."&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;That isn't a bug. NewsAPI's free Developer plan is for development and testing only. Its pricing page says it may not be used in staging or production. Moving the call to your server doesn't change that. The first plan you can ship with is Business, at $449 a month.&lt;/p&gt;

&lt;p&gt;So before you pick a news API, it's worth reading the free tiers closely. Here's what each one says, from each provider's own pricing page, checked on 1 October 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The free tiers side by side
&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 requests&lt;/th&gt;
&lt;th&gt;For a live product?&lt;/th&gt;
&lt;th&gt;Delay&lt;/th&gt;
&lt;th&gt;Browser calls from your site&lt;/th&gt;
&lt;th&gt;First paid plan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://newsapi.org/pricing" rel="noopener noreferrer"&gt;NewsAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 a day&lt;/td&gt;
&lt;td&gt;No, development only&lt;/td&gt;
&lt;td&gt;24 hours&lt;/td&gt;
&lt;td&gt;Localhost only&lt;/td&gt;
&lt;td&gt;$449 a month (250,000 requests a month)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gnews.io/pricing" rel="noopener noreferrer"&gt;GNews&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 a day&lt;/td&gt;
&lt;td&gt;No, non-commercial development and testing only&lt;/td&gt;
&lt;td&gt;12 hours&lt;/td&gt;
&lt;td&gt;Localhost only&lt;/td&gt;
&lt;td&gt;€49.99 a month (1,000 a day)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.thenewsapi.com/pricing" rel="noopener noreferrer"&gt;TheNewsAPI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 a day&lt;/td&gt;
&lt;td&gt;No limit stated on its pricing page&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;td&gt;$19 a month (2,500 a day)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://mediastack.com/pricing" rel="noopener noreferrer"&gt;Mediastack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 a month&lt;/td&gt;
&lt;td&gt;Non-commercial only&lt;/td&gt;
&lt;td&gt;Delayed, length not stated&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;td&gt;$24.99 a month (10,000 a month)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://currentsapi.services/en/product/price" rel="noopener noreferrer"&gt;Currents&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;250 a day&lt;/td&gt;
&lt;td&gt;Prototypes, evaluation and small news features&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Not stated&lt;/td&gt;
&lt;td&gt;$69 a month (2,500 a day)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://noozra.com/api" rel="noopener noreferrer"&gt;Noozra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;100 a day&lt;/td&gt;
&lt;td&gt;Personal and non-commercial&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Any site&lt;/td&gt;
&lt;td&gt;$9 for 30 days (25,000 a day, commercial use)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few things stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Free" usually means "free to try".&lt;/strong&gt; NewsAPI and GNews limit the free tier to development and testing; Mediastack and Noozra limit it to non-commercial use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delays matter for news.&lt;/strong&gt; A 12- or 24-hour delay is fine for a demo and not for a "latest headlines" box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser calls are their own question.&lt;/strong&gt; If your frontend calls the API directly, check whether the free tier answers a deployed site at all. NewsAPI and GNews say theirs answers localhost only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which one fits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A side project or a prototype:&lt;/strong&gt; Currents gives the most free requests a day here (250). Currents, TheNewsAPI and Noozra have no delay on the free tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A frontend that calls the API directly:&lt;/strong&gt; pick one that answers a deployed site. Keep in mind that a key in page code can be read by anyone who opens the page, so for anything public, call the API from your own server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Something that earns money:&lt;/strong&gt; read the free tier's terms first, since most of the ones above rule it out. Then compare the paid plans by the requests they include, not only the price: they run from $9 for 30 days to $449 a month.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disclosure, and how to call ours
&lt;/h2&gt;

&lt;p&gt;I work on &lt;a href="https://noozra.com/api" rel="noopener noreferrer"&gt;Noozra&lt;/a&gt;, the last row in the table. It returns headlines and the publisher's own short descriptions from 70+ news sites as JSON, and every article links to the publisher's page. Coverage of one event from several outlets shares a &lt;code&gt;story_id&lt;/code&gt;, so you can list each story once instead of five copies of it.&lt;/p&gt;

&lt;p&gt;It needs a free key: make an account at &lt;a href="https://noozra.com/account/api" rel="noopener noreferrer"&gt;noozra.com/account/api&lt;/a&gt;, confirm your email address, and send the key as a header:&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;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://noozra.com/api/search?q=electric+cars&amp;amp;limit=10&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;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;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bearer nk_your_key&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;articles&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="k"&gt;for &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="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;articles&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;log&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;published_at&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;source&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;headline&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;url&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;There's an &lt;a href="https://noozra.com/api/openapi.json" rel="noopener noreferrer"&gt;OpenAPI spec&lt;/a&gt; if you'd rather generate a client, or point an AI agent at it.&lt;/p&gt;

&lt;p&gt;Whatever you pick, read the free tier's terms before you deploy, not after.&lt;/p&gt;

</description>
      <category>api</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
