Browse 1000+ Public APIs

8 Best Free News APIs for Developers in 2026

a month ago

Building a news aggregator, content curation tool, or media monitoring app? News APIs let you access articles from thousands of sources worldwide. This guide compares the best free news APIs for developers in 2026.

Quick Comparison Table

Provider Free Tier Rate Limit Sources Best For
NewsAPI 100 req/day Dev only 80,000+ Development
GNews 100 req/day 10/min 60,000+ Simple projects
Currents API 600 req/day - 14,000+ Global news
TheNewsAPI 100 req/day - 50,000+ Multi-language
Mediastack 500 req/mo - 7,500+ Budget apps
Newscatcher 1000 req/mo 1/sec 70,000+ Research
Google News RSS Unlimited - Google RSS integration
Bing News Search 3 req/sec 1000/mo Bing Microsoft users

1. NewsAPI

NewsAPI is the most popular news API with access to over 80,000 news sources and blogs.

Free Tier:

  • 100 requests/day
  • Development use only
  • Headlines and everything endpoints
  • 1 month historical data

Key Features:

  • 80,000+ sources
  • Headlines and full search
  • Source filtering
  • Language support (14 languages)
  • Country filtering
  • Category filtering

JavaScript Example:

const axios = require('axios');

const NEWS_API_KEY = process.env.NEWS_API_KEY;

async function getTopHeadlines(options = {}) {
  const {
    country = 'us',
    category = null,
    sources = null,
    q = null,
    pageSize = 10
  } = options;

  const response = await axios.get('https://newsapi.org/v2/top-headlines', {
    params: {
      apiKey: NEWS_API_KEY,
      country: sources ? undefined : country, // Can't use with sources
      category,
      sources,
      q,
      pageSize
    }
  });

  return response.data.articles.map(article => ({
    title: article.title,
    description: article.description,
    url: article.url,
    image: article.urlToImage,
    publishedAt: article.publishedAt,
    source: article.source.name,
    author: article.author
  }));
}

// Get US tech headlines
const techNews = await getTopHeadlines({
  country: 'us',
  category: 'technology'
});

console.log(techNews);

Search Everything:

async function searchNews(query, options = {}) {
  const {
    from = null,
    to = null,
    language = 'en',
    sortBy = 'publishedAt', // relevancy, popularity, publishedAt
    pageSize = 10
  } = options;

  const response = await axios.get('https://newsapi.org/v2/everything', {
    params: {
      apiKey: NEWS_API_KEY,
      q: query,
      from,
      to,
      language,
      sortBy,
      pageSize
    }
  });

  return response.data;
}

// Search for AI news from the last week
const aiNews = await searchNews('artificial intelligence', {
  from: '2026-01-26',
  sortBy: 'popularity'
});

Get Sources:

async function getSources(category = null, language = 'en', country = null) {
  const response = await axios.get('https://newsapi.org/v2/sources', {
    params: {
      apiKey: NEWS_API_KEY,
      category,
      language,
      country
    }
  });

  return response.data.sources;
}

// Get tech sources
const techSources = await getSources('technology', 'en', 'us');

Note: Free tier is for development only. Production use requires a paid plan.

Best For: Development and prototyping news apps.

Get API Key →


2. GNews API

GNews provides access to Google News articles with a simple API.

Free Tier:

  • 100 requests/day
  • 10 requests/minute
  • Top headlines and search
  • 10 articles per request

Key Features:

  • Google News data
  • Simple API
  • Multi-language (40+)
  • Topic filtering
  • Country filtering
  • Date filtering

JavaScript Example:

const GNEWS_API_KEY = process.env.GNEWS_API_KEY;

async function getGNewsHeadlines(options = {}) {
  const {
    topic = 'general', // world, nation, business, technology, entertainment, sports, science, health
    country = 'us',
    language = 'en',
    max = 10
  } = options;

  const response = await axios.get('https://gnews.io/api/v4/top-headlines', {
    params: {
      apikey: GNEWS_API_KEY,
      topic,
      country,
      lang: language,
      max
    }
  });

  return response.data.articles;
}

// Get technology headlines
const techNews = await getGNewsHeadlines({ topic: 'technology' });

Search Articles:

async function searchGNews(query, options = {}) {
  const {
    country = null,
    language = 'en',
    from = null,
    to = null,
    sortBy = 'publishedAt', // publishedAt, relevance
    max = 10
  } = options;

  const response = await axios.get('https://gnews.io/api/v4/search', {
    params: {
      apikey: GNEWS_API_KEY,
      q: query,
      country,
      lang: language,
      from,
      to,
      sortby: sortBy,
      max
    }
  });

  return response.data.articles;
}

// Search for specific topic
const cryptoNews = await searchGNews('bitcoin cryptocurrency', {
  from: '2026-01-01',
  sortBy: 'relevance'
});

Best For: Simple news integrations with Google News data.

Get API Key →


3. Currents API

Currents API provides global news from over 14,000 sources in 78 languages.

Free Tier:

  • 600 requests/day
  • Latest news endpoint
  • Search endpoint
  • All features included

Key Features:

  • 14,000+ sources
  • 78 languages
  • Category filtering
  • Region filtering
  • Keyword search
  • No attribution required

JavaScript Example:

const CURRENTS_API_KEY = process.env.CURRENTS_API_KEY;

async function getCurrentsNews(options = {}) {
  const {
    keywords = null,
    language = 'en',
    country = null,
    category = null
  } = options;

  const response = await axios.get('https://api.currentsapi.services/v1/latest-news', {
    params: {
      apiKey: CURRENTS_API_KEY,
      keywords,
      language,
      country,
      category
    }
  });

  return response.data.news;
}

// Get latest news with keywords
const news = await getCurrentsNews({
  keywords: 'climate change',
  language: 'en',
  category: 'science'
});

Search Historical:

async function searchCurrentsNews(keywords, options = {}) {
  const {
    language = 'en',
    country = null,
    start_date = null,
    end_date = null
  } = options;

  const response = await axios.get('https://api.currentsapi.services/v1/search', {
    params: {
      apiKey: CURRENTS_API_KEY,
      keywords,
      language,
      country,
      start_date,
      end_date
    }
  });

  return response.data.news;
}

Best For: Global news coverage with generous free tier.

Get API Key →


4. TheNewsAPI

TheNewsAPI offers news from 50,000+ sources with excellent filtering options.

Free Tier:

  • 100 requests/day
  • All endpoints
  • 3 articles per request
  • 1 day historical data

Key Features:

  • 50,000+ sources
  • Multi-language support
  • Sentiment analysis
  • Similar articles
  • Entity extraction
  • Real-time updates

JavaScript Example:

const THE_NEWS_API_KEY = process.env.THE_NEWS_API_KEY;

async function getTheNewsAPIHeadlines(options = {}) {
  const {
    locale = 'us',
    language = 'en',
    categories = null, // business, entertainment, general, health, science, sports, tech
    limit = 3
  } = options;

  const response = await axios.get('https://api.thenewsapi.com/v1/news/top', {
    params: {
      api_token: THE_NEWS_API_KEY,
      locale,
      language,
      categories,
      limit
    }
  });

  return response.data.data;
}

// Get top headlines
const headlines = await getTheNewsAPIHeadlines({
  categories: 'tech,business'
});

Search with Entities:

async function searchWithEntities(query, options = {}) {
  const response = await axios.get('https://api.thenewsapi.com/v1/news/all', {
    params: {
      api_token: THE_NEWS_API_KEY,
      search: query,
      language: 'en',
      ...options
    }
  });

  return response.data.data.map(article => ({
    ...article,
    entities: article.entities, // People, organizations, locations mentioned
    sentiment: article.sentiment
  }));
}

Best For: News apps needing sentiment and entity data.

Get API Key →


5. Mediastack

Mediastack provides real-time news from 7,500+ sources worldwide.

Free Tier:

  • 500 requests/month
  • Live news only
  • Single country/source per request
  • Standard support

Key Features:

  • 7,500+ sources
  • 50+ countries
  • Category filtering
  • Keyword search
  • Date filtering
  • Source filtering

JavaScript Example:

const MEDIASTACK_API_KEY = process.env.MEDIASTACK_API_KEY;

async function getMediastackNews(options = {}) {
  const {
    keywords = null,
    countries = 'us',
    categories = null,
    languages = 'en',
    limit = 25
  } = options;

  const response = await axios.get('http://api.mediastack.com/v1/news', {
    params: {
      access_key: MEDIASTACK_API_KEY,
      keywords,
      countries,
      categories,
      languages,
      limit
    }
  });

  return response.data.data;
}

// Get US business news
const businessNews = await getMediastackNews({
  countries: 'us',
  categories: 'business',
  keywords: 'stocks'
});

Best For: Budget-friendly news integration.

Get API Key →


6. Newscatcher API

Newscatcher is designed for research and media monitoring with extensive filtering.

Free Tier:

  • 1000 requests/month
  • 1 request/second
  • Search and headlines
  • All features

Key Features:

  • 70,000+ sources
  • Advanced search operators
  • Clustering (similar articles)
  • Authors extraction
  • NLP enrichment
  • 100+ languages

JavaScript Example:

const NEWSCATCHER_API_KEY = process.env.NEWSCATCHER_API_KEY;

async function searchNewscatcher(query, options = {}) {
  const {
    lang = 'en',
    countries = null,
    topic = null,
    from = null,
    to = null,
    page_size = 10
  } = options;

  const response = await axios.get('https://api.newscatcherapi.com/v2/search', {
    params: {
      q: query,
      lang,
      countries,
      topic,
      from_,
      to_,
      page_size
    },
    headers: {
      'x-api-key': NEWSCATCHER_API_KEY
    }
  });

  return response.data.articles;
}

// Advanced search with operators
const news = await searchNewscatcher(
  '"artificial intelligence" AND (startup OR funding)',
  {
    lang: 'en',
    topic: 'tech',
    from: '2026-01-01'
  }
);

Get Latest Headlines:

async function getNewscatcherHeadlines(options = {}) {
  const {
    lang = 'en',
    countries = 'US',
    topic = 'tech'
  } = options;

  const response = await axios.get('https://api.newscatcherapi.com/v2/latest_headlines', {
    params: {
      lang,
      countries,
      topic
    },
    headers: {
      'x-api-key': NEWSCATCHER_API_KEY
    }
  });

  return response.data.articles;
}

Best For: Research and media monitoring applications.

Get API Key →


7. Google News RSS

Free access to Google News via RSS feeds. No API key required!

Free Tier:

  • Unlimited requests
  • No API key needed
  • RSS/Atom format
  • Topic and search feeds

JavaScript Example:

const Parser = require('rss-parser');
const parser = new Parser();

async function getGoogleNewsRSS(query = null, topic = null) {
  let url;

  if (query) {
    // Search URL
    url = `https://news.google.com/rss/search?q=${encodeURIComponent(query)}&hl=en-US&gl=US&ceid=US:en`;
  } else if (topic) {
    // Topic URL (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH)
    url = `https://news.google.com/rss/headlines/section/topic/${topic}?hl=en-US&gl=US&ceid=US:en`;
  } else {
    // Top stories
    url = 'https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en';
  }

  const feed = await parser.parseURL(url);

  return feed.items.map(item => ({
    title: item.title,
    link: item.link,
    pubDate: item.pubDate,
    source: item.source,
    content: item.content
  }));
}

// Get top stories
const topStories = await getGoogleNewsRSS();

// Get technology news
const techNews = await getGoogleNewsRSS(null, 'TECHNOLOGY');

// Search for specific topic
const aiNews = await getGoogleNewsRSS('artificial intelligence');

With Caching:

const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 300 }); // 5 minute cache

async function getCachedGoogleNews(query, topic) {
  const cacheKey = `gnews:${query || ''}:${topic || ''}`;

  let news = cache.get(cacheKey);
  if (news) return news;

  news = await getGoogleNewsRSS(query, topic);
  cache.set(cacheKey, news);

  return news;
}

Best For: Free unlimited access to Google News.

Google News →


8. Bing News Search API

Bing News Search is part of Microsoft's Cognitive Services with powerful search capabilities.

Free Tier:

  • 1000 transactions/month
  • 3 requests/second
  • All search features
  • Image thumbnails

Key Features:

  • Bing's news index
  • Trending topics
  • Category filtering
  • Image/video news
  • Freshness control
  • Market filtering

JavaScript Example:

const BING_API_KEY = process.env.BING_API_KEY;

async function searchBingNews(query, options = {}) {
  const {
    count = 10,
    mkt = 'en-US',
    freshness = null, // Day, Week, Month
    category = null
  } = options;

  const response = await axios.get('https://api.bing.microsoft.com/v7.0/news/search', {
    params: {
      q: query,
      count,
      mkt,
      freshness,
      category
    },
    headers: {
      'Ocp-Apim-Subscription-Key': BING_API_KEY
    }
  });

  return response.data.value;
}

// Search news
const news = await searchBingNews('electric vehicles', {
  freshness: 'Week',
  count: 20
});

Get Trending Topics:

async function getTrendingTopics(market = 'en-US') {
  const response = await axios.get('https://api.bing.microsoft.com/v7.0/news/trendingtopics', {
    params: { mkt: market },
    headers: {
      'Ocp-Apim-Subscription-Key': BING_API_KEY
    }
  });

  return response.data.value;
}

Best For: Microsoft ecosystem integration.

Get API Key →


Building a News Aggregator API

Complete example combining multiple sources:

const express = require('express');
const NodeCache = require('node-cache');

const app = express();
const cache = new NodeCache({ stdTTL: 300 });

// Unified news interface
async function fetchFromSource(source, query, options) {
  switch (source) {
    case 'newsapi':
      return fetchNewsAPI(query, options);
    case 'gnews':
      return fetchGNews(query, options);
    case 'google':
      return fetchGoogleRSS(query, options);
    default:
      throw new Error('Unknown source');
  }
}

// Aggregate from multiple sources
async function aggregateNews(query, sources = ['google', 'gnews']) {
  const cacheKey = `agg:${query}:${sources.join(',')}`;

  let cached = cache.get(cacheKey);
  if (cached) return cached;

  const results = await Promise.allSettled(
    sources.map(source => fetchFromSource(source, query, {}))
  );

  // Combine and deduplicate
  const allArticles = results
    .filter(r => r.status === 'fulfilled')
    .flatMap(r => r.value);

  // Remove duplicates by title similarity
  const unique = deduplicateArticles(allArticles);

  // Sort by date
  unique.sort((a, b) => new Date(b.publishedAt) - new Date(a.publishedAt));

  cache.set(cacheKey, unique);
  return unique;
}

// Simple deduplication
function deduplicateArticles(articles) {
  const seen = new Set();
  return articles.filter(article => {
    const key = article.title.toLowerCase().slice(0, 50);
    if (seen.has(key)) return false;
    seen.add(key);
    return true;
  });
}

// API endpoints
app.get('/api/news/search', async (req, res) => {
  try {
    const { q, sources } = req.query;
    const news = await aggregateNews(q, sources?.split(','));
    res.json({ articles: news });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.get('/api/news/headlines', async (req, res) => {
  try {
    const { category } = req.query;
    const news = await aggregateNews(category || 'top news');
    res.json({ articles: news.slice(0, 20) });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.listen(3000);

Choosing the Right News API

Need Recommended
Development/prototyping NewsAPI
Unlimited free access Google News RSS
Global coverage Currents API
Simple integration GNews
Research/monitoring Newscatcher
Budget-friendly Mediastack
Microsoft ecosystem Bing News
Sentiment analysis TheNewsAPI

Best Practices

1. Implement Caching

News doesn't change every second. Cache responses:

const cache = new NodeCache({ stdTTL: 300 }); // 5 minutes

async function getCachedNews(key, fetcher) {
  let data = cache.get(key);
  if (!data) {
    data = await fetcher();
    cache.set(key, data);
  }
  return data;
}

2. Handle Rate Limits

const Bottleneck = require('bottleneck');

const limiter = new Bottleneck({
  reservoir: 100, // 100 requests
  reservoirRefreshAmount: 100,
  reservoirRefreshInterval: 24 * 60 * 60 * 1000, // per day
  maxConcurrent: 1,
  minTime: 100 // 100ms between requests
});

const rateLimitedFetch = limiter.wrap(fetchNews);

3. Fallback Sources

async function getNewsWithFallback(query) {
  const sources = ['newsapi', 'gnews', 'google'];

  for (const source of sources) {
    try {
      return await fetchFromSource(source, query);
    } catch (error) {
      console.log(`${source} failed, trying next...`);
    }
  }

  throw new Error('All news sources failed');
}

Conclusion

For development, NewsAPI offers the best features but restricts production use. Google News RSS is completely free with unlimited access. For production apps, GNews or Currents API provide good free tiers with reasonable limits.

Consider combining multiple sources for better coverage and reliability.

Related Resources: