# News API

> Search the news with News API: articles from more than 150,000 publishers and blogs, live breaking headlines by country, category or masthead, and the publisher directory behind them. Search by keyword, phrase, website or date range, follow a subject over a rolling window for a scheduled workflow, count how much is being written about it, see which publishers are covering it, and compare several topics side by side.

App · News · 8 actions. Web page: https://docs.lodol.com/docs/integrations/news-api

## Actions

### Compare topics

Compare how much is being written about several subjects (two to five of them) over the same window, ranked, each with its share of the combined coverage and its newest headline. Use it for share of voice against competitors, or to see which of your product lines the press is picking up.

**Inputs**

- Topics (`topics`, list, required): The subjects to compare: between 2 and 5. Each one is searched separately and costs one request.
- How far back (`window`, text): How recent an article has to be, counted back from the moment the step runs; so a workflow on a schedule keeps looking at fresh news instead of a fixed date. Note that the free Developer plan adds articles 24 hours after they are published, so windows shorter than a day come back empty on that plan. One of: `1h` (Last hour), `6h` (Last 6 hours), `12h` (Last 12 hours), `24h` (Last 24 hours), `2d` (Last 2 days), `3d` (Last 3 days), `7d` (Last 7 days), `14d` (Last 14 days), `30d` (Last 30 days). Default: `24h`.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.

**Outputs**

- `from_date` (text): The start of the window, in UTC, as sent to News API
- `language` (text): The language filter that was applied
- `leading_topic` (text): The most covered topic
- `requests_used` (number): How many News API requests this step spent: one per topic
- `to_date` (text): The end of the window, in UTC, as sent to News API
- `topic_count` (number): How many topics were compared
- `topics` (list): The topics, most covered first
- `total_results` (number): The combined article count across the topics
- `window` (text): The window that was asked for
- `window_label` (text): That window in words

**Example output**

```json
{
  "from_date": "2026-08-18T10:00:00",
  "language": "en",
  "leading_topic": "semiconductors",
  "requests_used": 2,
  "to_date": "2026-08-19T10:00:00",
  "topic_count": 2,
  "topics": [
    {
      "newest_published_at": "2026-08-19T09:12:00Z",
      "newest_source_name": "Reuters",
      "newest_title": "Chip makers post record quarter as AI demand holds",
      "newest_url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "share_percent": 62.0,
      "topic": "semiconductors",
      "total_results": 62
    },
    {
      "newest_published_at": "2026-08-19T06:02:00Z",
      "newest_source_name": "Nature",
      "newest_title": "Lab reports longer qubit coherence times",
      "newest_url": "https://www.nature.com/articles/qubit-coherence",
      "share_percent": 38.0,
      "topic": "quantum computing",
      "total_results": 38
    }
  ],
  "total_results": 100,
  "window": "24h",
  "window_label": "Last 24 hours"
}
```

### Count articles

Count how many articles mention a subject in the window you choose, and return the newest one. It costs a single request whether the answer is three articles or thirty thousand, so it is the cheap check to branch a workflow on: alert someone when coverage of your brand spikes, or skip the rest of the run when there is nothing new.

**Inputs**

- Search for (`query`, text, required): Keywords or a phrase to search for. Put a phrase in double quotes for an exact match ("climate summit"), prefix a word with + to require it or - to exclude it, and combine terms with AND, OR and NOT.
- How far back (`window`, text): How recent an article has to be, counted back from the moment the step runs; so a workflow on a schedule keeps looking at fresh news instead of a fixed date. Note that the free Developer plan adds articles 24 hours after they are published, so windows shorter than a day come back empty on that plan. One of: `1h` (Last hour), `6h` (Last 6 hours), `12h` (Last 12 hours), `24h` (Last 24 hours), `2d` (Last 2 days), `3d` (Last 3 days), `7d` (Last 7 days), `14d` (Last 14 days), `30d` (Last 30 days). Default: `24h`.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.
- Publishers (`sources`, list): Optional. Only include articles from these publishers. The list comes from your connection; at most 20 can be chosen.

**Outputs**

- `from_date` (text): The start of the window, in UTC, as sent to News API
- `has_articles` (true/false): True when at least one article matches
- `language` (text): The language filter that was applied
- `newest_article` (object): The most recent matching article
- `query` (text): The topic that ran
- `removed_count` (number): How many withdrawn articles were left out
- `sources` (text): The publisher filter that was applied
- `to_date` (text): The end of the window, in UTC, as sent to News API
- `total_results` (number): How many articles match
- `window` (text): The window that was asked for
- `window_label` (text): That window in words

**Example output**

```json
{
  "from_date": "2026-08-18T10:00:00",
  "has_articles": true,
  "language": "en",
  "newest_article": {
    "author": "Jane Okafor",
    "content": "Semiconductor revenue rose sharply again last quarter as orders for data-centre accelerators continued to outstrip supply",
    "content_chars_remaining": 2317,
    "content_truncated": true,
    "description": "Revenue across the sector rose 18% year on year, with data-centre orders leading the way.",
    "domain": "reuters.com",
    "published_at": "2026-08-19T09:12:00Z",
    "source_id": "reuters",
    "source_name": "Reuters",
    "title": "Chip makers post record quarter as AI demand holds",
    "url": "https://www.reuters.com/technology/chip-makers-record-quarter",
    "url_to_image": "https://www.reuters.com/resizer/chips.jpg"
  },
  "query": "semiconductors",
  "removed_count": 0,
  "sources": null,
  "to_date": "2026-08-19T10:00:00",
  "total_results": 62,
  "window": "24h",
  "window_label": "Last 24 hours"
}
```

### Get headlines by source

Get the live headlines from publishers you choose: one masthead or a shortlist of up to 20. Pick them from the dropdown, which is filled from News API's own list of publishers for your connection. This is how to follow a country other than the United States, or a handful of trade titles, rather than the whole news cycle.

**Inputs**

- Publishers (`sources`, list, required): The publishers to take headlines from; pick at least one, and at most 20. The list comes from your connection.
- Keyword (`query`, text): Optional. Only keep headlines that mention this word or phrase.
- Results per page (`page_size`, number): How many articles to return, from 1 to 100. From 1 to 100.
- Page (`page`, number): Which page of results to return. Page 1 is the first. Use it with 'Results per page' to walk through a large set of matches. At least 1. Default: `1`.

**Outputs**

- `article_count` (number): How many articles this page actually returned
- `articles` (list): The articles on this page, withdrawn ones left out
- `has_more` (true/false): True when another page of matches is available
- `page` (number): The page that was returned
- `page_size` (number): How many were asked for
- `query` (text): The keyword filter that was applied
- `removed_count` (number): How many withdrawn '[Removed]' articles were dropped from this page
- `source_count` (number): How many publishers were asked for
- `sources` (text): The publisher ids that were asked for
- `total_results` (number): How many articles match in total, across all pages

**Example output**

```json
{
  "article_count": 2,
  "articles": [
    {
      "author": "Jane Okafor",
      "content": "Semiconductor revenue rose sharply again last quarter as orders for data-centre accelerators continued to outstrip supply",
      "content_chars_remaining": 2317,
      "content_truncated": true,
      "description": "Revenue across the sector rose 18% year on year, with data-centre orders leading the way.",
      "domain": "reuters.com",
      "published_at": "2026-08-19T09:12:00Z",
      "source_id": "reuters",
      "source_name": "Reuters",
      "title": "Chip makers post record quarter as AI demand holds",
      "url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "url_to_image": "https://www.reuters.com/resizer/chips.jpg"
    },
    {
      "author": "Tom Reilly",
      "content": "The review will report next spring, the regulator said",
      "content_chars_remaining": 1180,
      "content_truncated": true,
      "description": "The inquiry will look at exit fees and data transfer costs.",
      "domain": "bbc.co.uk",
      "published_at": "2026-08-19T07:45:00Z",
      "source_id": "bbc-news",
      "source_name": "BBC News",
      "title": "Regulators open review of cloud computing contracts",
      "url": "https://www.bbc.co.uk/news/business-68123456",
      "url_to_image": "https://ichef.bbci.co.uk/news/1024/cloud.jpg"
    }
  ],
  "has_more": true,
  "page": 1,
  "page_size": 20,
  "query": null,
  "removed_count": 1,
  "source_count": 2,
  "sources": "bbc-news,reuters",
  "total_results": 384
}
```

### Get top headlines

Get the live breaking headlines for a country, for a section of the news such as business or sport, or for a keyword. News API publishes headlines by country for the United States; for anywhere else, use List sources to find that country's publishers and then Get headlines by source.

**Inputs**

- Country (`country`, text): Optional. The country to get headlines for. News API documents the United States here; other countries are reachable through List sources and Get headlines by source. One of: `us` (United States).
- Category (`category`, text): Optional. Only include headlines from this section of the news. One of: `business`, `entertainment`, `general`, `health`, `science`, `sports`, `technology`.
- Keyword (`query`, text): Optional. Only keep headlines that mention this word or phrase.
- Results per page (`page_size`, number): How many articles to return, from 1 to 100. From 1 to 100.
- Page (`page`, number): Which page of results to return. Page 1 is the first. Use it with 'Results per page' to walk through a large set of matches. At least 1. Default: `1`.

**Outputs**

- `article_count` (number): How many articles this page actually returned
- `articles` (list): The articles on this page, withdrawn ones left out
- `category` (text): The category code that was asked for
- `category_label` (text): That category's name
- `country` (text): The country code that was asked for
- `country_label` (text): That country's name
- `has_more` (true/false): True when another page of matches is available
- `page` (number): The page that was returned
- `page_size` (number): How many were asked for
- `query` (text): The keyword filter that was applied
- `removed_count` (number): How many withdrawn '[Removed]' articles were dropped from this page
- `total_results` (number): How many articles match in total, across all pages

**Example output**

```json
{
  "article_count": 2,
  "articles": [
    {
      "author": "Jane Okafor",
      "content": "Semiconductor revenue rose sharply again last quarter as orders for data-centre accelerators continued to outstrip supply",
      "content_chars_remaining": 2317,
      "content_truncated": true,
      "description": "Revenue across the sector rose 18% year on year, with data-centre orders leading the way.",
      "domain": "reuters.com",
      "published_at": "2026-08-19T09:12:00Z",
      "source_id": "reuters",
      "source_name": "Reuters",
      "title": "Chip makers post record quarter as AI demand holds",
      "url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "url_to_image": "https://www.reuters.com/resizer/chips.jpg"
    },
    {
      "author": "Tom Reilly",
      "content": "The review will report next spring, the regulator said",
      "content_chars_remaining": 1180,
      "content_truncated": true,
      "description": "The inquiry will look at exit fees and data transfer costs.",
      "domain": "bbc.co.uk",
      "published_at": "2026-08-19T07:45:00Z",
      "source_id": "bbc-news",
      "source_name": "BBC News",
      "title": "Regulators open review of cloud computing contracts",
      "url": "https://www.bbc.co.uk/news/business-68123456",
      "url_to_image": "https://ichef.bbci.co.uk/news/1024/cloud.jpg"
    }
  ],
  "category": "business",
  "category_label": "Business",
  "country": "us",
  "country_label": "United States",
  "has_more": true,
  "page": 1,
  "page_size": 20,
  "query": null,
  "removed_count": 1,
  "total_results": 384
}
```

### Get top sources for a topic

Find out who is covering a subject, not just what has been written: the publishers writing about it most in the window you choose, ranked, each with its share of the coverage and its most recent article. Use it to build a press list, to see where a story is landing, or to pick the publishers to filter a later search down to.

**Inputs**

- Search for (`query`, text, required): Keywords or a phrase to search for. Put a phrase in double quotes for an exact match ("climate summit"), prefix a word with + to require it or - to exclude it, and combine terms with AND, OR and NOT.
- How far back (`window`, text): How recent an article has to be, counted back from the moment the step runs; so a workflow on a schedule keeps looking at fresh news instead of a fixed date. Note that the free Developer plan adds articles 24 hours after they are published, so windows shorter than a day come back empty on that plan. One of: `1h` (Last hour), `6h` (Last 6 hours), `12h` (Last 12 hours), `24h` (Last 24 hours), `2d` (Last 2 days), `3d` (Last 3 days), `7d` (Last 7 days), `14d` (Last 14 days), `30d` (Last 30 days). Default: `24h`.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.
- How many publishers (`max_sources`, number): How many publishers to return, most active first, from 1 to 20. From 1 to 20. Default: `10`.

**Outputs**

- `from_date` (text): The start of the window, in UTC, as sent to News API
- `language` (text): The language filter that was applied
- `query` (text): The topic that ran
- `removed_count` (number): How many withdrawn articles were left out
- `sampled_articles` (number): How many articles the ranking was built from
- `source_count` (number): How many publishers appeared in the sample
- `sources` (list): The publishers covering it, most active first
- `to_date` (text): The end of the window, in UTC, as sent to News API
- `total_results` (number): How many articles match in total
- `window` (text): The window that was asked for
- `window_label` (text): That window in words

**Example output**

```json
{
  "from_date": "2026-08-12T10:00:00",
  "language": "en",
  "query": "semiconductors",
  "removed_count": 0,
  "sampled_articles": 100,
  "source_count": 31,
  "sources": [
    {
      "article_count": 14,
      "domain": "reuters.com",
      "latest_published_at": "2026-08-19T09:12:00Z",
      "latest_title": "Chip makers post record quarter as AI demand holds",
      "latest_url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "share_percent": 14.0,
      "source_id": "reuters",
      "source_name": "Reuters"
    },
    {
      "article_count": 9,
      "domain": "bbc.co.uk",
      "latest_published_at": "2026-08-19T07:45:00Z",
      "latest_title": "Regulators open review of cloud computing contracts",
      "latest_url": "https://www.bbc.co.uk/news/business-68123456",
      "share_percent": 9.0,
      "source_id": "bbc-news",
      "source_name": "BBC News"
    }
  ],
  "to_date": "2026-08-19T10:00:00",
  "total_results": 384,
  "window": "7d",
  "window_label": "Last 7 days"
}
```

### List sources

List the publishers News API carries headlines from, with each one's id, description, homepage, category, language and country. Filter by any of those to find, say, every Spanish business title. The ids this returns are what Get headlines by source and the Publishers field take.

**Inputs**

- Category (`category`, text): Optional. Only include headlines from this section of the news. One of: `business`, `entertainment`, `general`, `health`, `science`, `sports`, `technology`.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.
- Country (`country`, text): Optional. Only include publishers based in this country. One of: `ae` (United Arab Emirates), `ar` (Argentina), `at` (Austria), `au` (Australia), `be` (Belgium), `bg` (Bulgaria), `br` (Brazil), `ca` (Canada), `ch` (Switzerland), `cn` (China), and 44 more.

**Outputs**

- `category` (text): The category filter that was applied
- `country` (text): The country filter that was applied
- `language` (text): The language filter that was applied
- `source_count` (number): How many publishers matched
- `source_ids` (list): Just the ids, ready to pass to Get headlines by source
- `sources` (list): The publishers that match the filters

**Example output**

```json
{
  "category": "general",
  "country": "gb",
  "language": "en",
  "source_count": 1,
  "source_ids": [
    "bbc-news"
  ],
  "sources": [
    {
      "category": "general",
      "category_label": "General",
      "country": "gb",
      "country_label": "United Kingdom",
      "description": "Use BBC News for up-to-the-minute news, breaking news, video, audio and feature stories.",
      "domain": "bbc.co.uk",
      "id": "bbc-news",
      "language": "en",
      "language_label": "English",
      "name": "BBC News",
      "url": "https://www.bbc.co.uk/news"
    }
  ]
}
```

### Search articles

Search news articles from more than 150,000 publishers and blogs, with every filter News API offers: keywords, which part of the article to match them in, publishers, websites to include or leave out, a published-between window, language and ordering. Withdrawn articles are dropped and the article text is cleaned up for you.

**Inputs**

- Search for (`query`, text): Keywords or a phrase to search for. Put a phrase in double quotes for an exact match ("climate summit"), prefix a word with + to require it or - to exclude it, and combine terms with AND, OR and NOT. Optional here: leave it empty to take everything published by the sources or domains you choose.
- Search in (`search_in`, list): Optional. Which parts of an article the keywords have to appear in. Leave empty to search all three, which is usually what you want; narrowing to the headline finds articles that are about the subject rather than ones that merely mention it. One or more of: `title` (Headline), `description` (Summary), `content` (Article text).
- Publishers (`sources`, list): Optional. Only include articles from these publishers. The list comes from your connection; at most 20 can be chosen.
- Only these websites (`domains`, list): Optional. Only include articles published on these websites. A full URL is fine; it is reduced to the domain for you.
- Never these websites (`exclude_domains`, list): Optional. Leave out articles published on these websites (useful for dropping aggregators and press-release wires from the results).
- Published after (`from_date`, date and time): Optional. Only include articles published at or after this moment. Times are converted to UTC for you. On the free Developer plan, articles go back one month.
- Published before (`to_date`, date and time): Optional. Only include articles published at or before this moment. Times are converted to UTC for you.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.
- Order results by (`sort_by`, text): How to order the articles. Newest first is the default; best match ranks the closest matches to your keywords first, and popular sources first favours the larger publishers. One of: `publishedAt` (Newest first), `relevancy` (Best match first), `popularity` (Popular sources first). Default: `publishedAt`.
- Results per page (`page_size`, number): How many articles to return, from 1 to 100. From 1 to 100.
- Page (`page`, number): Which page of results to return. Page 1 is the first. Use it with 'Results per page' to walk through a large set of matches. At least 1. Default: `1`.

**Outputs**

- `article_count` (number): How many articles this page actually returned
- `articles` (list): The articles on this page, withdrawn ones left out
- `from_date` (text): The earliest publication time asked for, in UTC
- `has_more` (true/false): True when another page of matches is available
- `language` (text): The language filter that was applied
- `page` (number): The page that was returned
- `page_size` (number): How many were asked for
- `query` (text): The search that ran
- `removed_count` (number): How many withdrawn '[Removed]' articles were dropped from this page
- `sort_by` (text): The ordering that was applied
- `to_date` (text): The latest publication time asked for, in UTC
- `total_results` (number): How many articles match in total, across all pages

**Example output**

```json
{
  "article_count": 2,
  "articles": [
    {
      "author": "Jane Okafor",
      "content": "Semiconductor revenue rose sharply again last quarter as orders for data-centre accelerators continued to outstrip supply",
      "content_chars_remaining": 2317,
      "content_truncated": true,
      "description": "Revenue across the sector rose 18% year on year, with data-centre orders leading the way.",
      "domain": "reuters.com",
      "published_at": "2026-08-19T09:12:00Z",
      "source_id": "reuters",
      "source_name": "Reuters",
      "title": "Chip makers post record quarter as AI demand holds",
      "url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "url_to_image": "https://www.reuters.com/resizer/chips.jpg"
    },
    {
      "author": "Tom Reilly",
      "content": "The review will report next spring, the regulator said",
      "content_chars_remaining": 1180,
      "content_truncated": true,
      "description": "The inquiry will look at exit fees and data transfer costs.",
      "domain": "bbc.co.uk",
      "published_at": "2026-08-19T07:45:00Z",
      "source_id": "bbc-news",
      "source_name": "BBC News",
      "title": "Regulators open review of cloud computing contracts",
      "url": "https://www.bbc.co.uk/news/business-68123456",
      "url_to_image": "https://ichef.bbci.co.uk/news/1024/cloud.jpg"
    }
  ],
  "from_date": "2026-08-12T00:00:00",
  "has_more": true,
  "language": "en",
  "page": 1,
  "page_size": 20,
  "query": "semiconductors",
  "removed_count": 1,
  "sort_by": "publishedAt",
  "to_date": "2026-08-19T00:00:00",
  "total_results": 384
}
```

### Search recent articles

Search articles published within a window that moves with the clock (the last 6 hours, the last day, the last week) counted back from the moment the step runs. This is the search to put on a schedule: a fixed date range would return the same articles on every run, while this one always looks at what is new.

**Inputs**

- Search for (`query`, text, required): Keywords or a phrase to search for. Put a phrase in double quotes for an exact match ("climate summit"), prefix a word with + to require it or - to exclude it, and combine terms with AND, OR and NOT.
- How far back (`window`, text): How recent an article has to be, counted back from the moment the step runs; so a workflow on a schedule keeps looking at fresh news instead of a fixed date. Note that the free Developer plan adds articles 24 hours after they are published, so windows shorter than a day come back empty on that plan. One of: `1h` (Last hour), `6h` (Last 6 hours), `12h` (Last 12 hours), `24h` (Last 24 hours), `2d` (Last 2 days), `3d` (Last 3 days), `7d` (Last 7 days), `14d` (Last 14 days), `30d` (Last 30 days). Default: `24h`.
- Language (`language`, text): Optional. Only include articles written in this language. One of: `ar` (Arabic), `de` (German), `en` (English), `es` (Spanish), `fr` (French), `he` (Hebrew), `it` (Italian), `nl` (Dutch), `no` (Norwegian), `pt` (Portuguese), and 4 more.
- Order results by (`sort_by`, text): How to order the articles. Newest first is the default; best match ranks the closest matches to your keywords first, and popular sources first favours the larger publishers. One of: `publishedAt` (Newest first), `relevancy` (Best match first), `popularity` (Popular sources first). Default: `publishedAt`.
- Results per page (`page_size`, number): How many articles to return, from 1 to 100. From 1 to 100.

**Outputs**

- `article_count` (number): How many articles this page actually returned
- `articles` (list): The articles on this page, withdrawn ones left out
- `from_date` (text): The start of the window, in UTC, as sent to News API
- `has_more` (true/false): True when another page of matches is available
- `language` (text): The language filter that was applied
- `page` (number): The page that was returned
- `page_size` (number): How many were asked for
- `query` (text): The search that ran
- `removed_count` (number): How many withdrawn '[Removed]' articles were dropped from this page
- `sort_by` (text): The ordering that was applied
- `to_date` (text): The end of the window, in UTC, as sent to News API
- `total_results` (number): How many articles match in total, across all pages
- `window` (text): The window that was asked for
- `window_label` (text): That window in words

**Example output**

```json
{
  "article_count": 2,
  "articles": [
    {
      "author": "Jane Okafor",
      "content": "Semiconductor revenue rose sharply again last quarter as orders for data-centre accelerators continued to outstrip supply",
      "content_chars_remaining": 2317,
      "content_truncated": true,
      "description": "Revenue across the sector rose 18% year on year, with data-centre orders leading the way.",
      "domain": "reuters.com",
      "published_at": "2026-08-19T09:12:00Z",
      "source_id": "reuters",
      "source_name": "Reuters",
      "title": "Chip makers post record quarter as AI demand holds",
      "url": "https://www.reuters.com/technology/chip-makers-record-quarter",
      "url_to_image": "https://www.reuters.com/resizer/chips.jpg"
    },
    {
      "author": "Tom Reilly",
      "content": "The review will report next spring, the regulator said",
      "content_chars_remaining": 1180,
      "content_truncated": true,
      "description": "The inquiry will look at exit fees and data transfer costs.",
      "domain": "bbc.co.uk",
      "published_at": "2026-08-19T07:45:00Z",
      "source_id": "bbc-news",
      "source_name": "BBC News",
      "title": "Regulators open review of cloud computing contracts",
      "url": "https://www.bbc.co.uk/news/business-68123456",
      "url_to_image": "https://ichef.bbci.co.uk/news/1024/cloud.jpg"
    }
  ],
  "from_date": "2026-08-18T10:00:00",
  "has_more": true,
  "language": "en",
  "page": 1,
  "page_size": 20,
  "query": "semiconductors",
  "removed_count": 1,
  "sort_by": "publishedAt",
  "to_date": "2026-08-19T10:00:00",
  "total_results": 384,
  "window": "24h",
  "window_label": "Last 24 hours"
}
```
