PluginBench
Skill
Official
Review
Audit score 70

news-search

brave/brave-search-skills

Search news articles with freshness filtering, SafeSearch, and custom ranking via Goggles.

What is news-search?

Access Brave's news search API to retrieve current and historical news articles with metadata like publication date, thumbnails, and source profiles. Use freshness filters (past day/week/month/year or custom date ranges), SafeSearch controls, and Goggles for custom result ranking—ideal for breaking news monitoring, research, and multilingual news discovery.

  • Search news articles by keyword with title, URL, description, age, and thumbnail metadata
  • Filter by freshness (past 24 hours, week, month, year, or custom date range)
  • Apply SafeSearch filtering (off/moderate/strict) to control adult content
  • Use Goggles to custom-rank results by boosting trusted sources or discarding unwanted ones
  • Support multilingual and multi-country searches with language and country parameters
  • Retrieve up to 50 results per request with pagination and optional extra snippets

How to install news-search

npx skills add https://github.com/brave/brave-search-skills --skill news-search
Prerequisites
  • Brave Search API key (get at https://api.search.brave.com)
  • Active Search plan subscription (https://api-dashboard.search.brave.com/app/subscriptions/subscribe)
  • HTTP client or SDK to call the REST endpoint
Claude Code
Cursor
Windsurf
Cline

How to use news-search

  1. 1.Obtain a Brave Search API key and set it as BRAVE_SEARCH_API_KEY environment variable
  2. 2.Call GET or POST to https://api.search.brave.com/res/v1/news/search with your query parameter
  3. 3.Pass X-Subscription-Token header with your API key for authentication
  4. 4.Optionally add freshness parameter (pd/pw/pm/py or YYYY-MM-DDtoYYYY-MM-DD) to filter by time
  5. 5.Optionally apply Goggles URL or inline rules to custom-rank results by source
  6. 6.Parse the JSON response to extract article title, URL, description, age, thumbnail, and profile data

Use cases

Good for
  • Monitor breaking news in real-time using 24-hour freshness filter for urgent topics
  • Build custom news feeds by applying Goggles rules to boost trusted outlets and suppress low-quality sources
  • Research historical news events by searching within specific date ranges
  • Create multilingual news aggregators combining country, language, and UI language parameters
  • Integrate news data into pipelines with fetch metadata timestamps for content freshness tracking
Who it's for
  • News aggregators and monitoring platforms
  • Researchers and journalists tracking stories over time
  • Content teams building custom news feeds
  • Data engineers building news pipelines
  • Developers creating multilingual news applications

news-search FAQ

What's the difference between GET and POST for the news search endpoint?

Both are supported. GET is simpler for basic queries, while POST is useful for long queries or complex Goggles rules that exceed URL length limits.

How do I create a custom news feed with Goggles?

Write Goggles rules (e.g., `$discard\n$site=example.com,boost=3`) to boost trusted sources or discard unwanted ones. Host on GitHub/GitLab with required headers, or pass inline rules directly in the goggles parameter.

Can I search news from specific countries or languages?

Yes. Use the country parameter (2-letter code or ALL) and search_lang parameter (2+ char language code) to target specific locales. ui_lang controls the UI language of the response.

What freshness options are available?

Use pd (past day), pw (past week), pm (past month), py (past year), or a custom date range in YYYY-MM-DDtoYYYY-MM-DD format.

Does the API support search operators like site: and exact phrases?

Yes. Use site:domain.com to limit results to a specific news outlet, "exact phrase" for exact matches, and -term to exclude terms. Operators are enabled by default; set operators=false to disable.

Full instructions (SKILL.md)

Source of truth, from brave/brave-search-skills.


name: news-search description: USE FOR news search. Returns news articles with title, URL, description, age, thumbnail, profile. Supports freshness and date range filtering, SafeSearch filter and Goggles for custom ranking.

News Search

Requires API Key: Get one at https://api.search.brave.com

Plan: Included in the Search plan. See https://api-dashboard.search.brave.com/app/subscriptions/subscribe

Quick Start (cURL)

Basic Search

curl -s "https://api.search.brave.com/res/v1/news/search?q=space+exploration" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

Recent News (Past 24 Hours)

curl -s "https://api.search.brave.com/res/v1/news/search" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=cybersecurity" \
  --data-urlencode "country=US" \
  --data-urlencode "freshness=pd" \
  --data-urlencode "count=20"

Date Range Filter

curl -s "https://api.search.brave.com/res/v1/news/search" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=climate summit" \
  --data-urlencode "freshness=2026-01-01to2026-01-31"

Endpoint

GET https://api.search.brave.com/res/v1/news/search
POST https://api.search.brave.com/res/v1/news/search

Authentication: X-Subscription-Token: <API_KEY> header

Note: Both GET and POST are supported. POST is useful for long queries or complex Goggles.

Parameters

ParameterTypeRequiredDefaultDescription
qstringYes-Search query (1-400 chars, max 50 words)
countrystringNoUSSearch country (2-letter country code or ALL)
search_langstringNoenLanguage preference (2+ char language code)
ui_langstringNoen-USUI language (e.g., "en-US")
countintNo20Number of results (1-50)
offsetintNo0Page offset (0-9)
safesearchstringNostrictAdult content filter (off/moderate/strict)
freshnessstringNo-Time filter (pd/pw/pm/py or date range)
spellcheckboolNotrueAuto-correct query
extra_snippetsboolNo-Up to 5 additional excerpts per result
gogglesstring or arrayNo-Custom ranking filter (URL or inline; repeat param for multiple)
operatorsboolNotrueApply search operators
include_fetch_metadataboolNofalseInclude fetch timestamps in results

Freshness Values

ValueDescription
pdPast day (24 hours) - ideal for breaking news
pwPast week (7 days)
pmPast month (31 days)
pyPast year (365 days)
YYYY-MM-DDtoYYYY-MM-DDCustom date range

Response Format

{
  "type": "news",
  "query": {
    "original": "space exploration"
  },
  "results": [
    {
      "type": "news_result",
      "title": "New Developments in Space Exploration",
      "url": "https://news.example.com/space-exploration",
      "description": "Recent missions have advanced our understanding of...",
      "age": "2 hours ago",
      "page_age": "2026-01-15T14:30:00",
      "page_fetched": "2026-01-15T15:00:00Z",
      "meta_url": {
        "scheme": "https",
        "netloc": "news.example.com",
        "hostname": "news.example.com",
        "favicon": "https://imgs.search.brave.com/favicon/news.example.com",
        "path": "/space-exploration"
      },
      "profile": {
        "name": "Example Outlet",
        "url": "https://news.example.com/space-exploration"
      },
      "thumbnail": {
        "src": "https://imgs.search.brave.com/..."
      }
    }
  ]
}

Response Fields

FieldTypeDescription
typestringAlways "news"
query.originalstringThe original search query
query.alteredstring?Spellcheck-corrected query (if changed)
query.cleanedstring?Cleaned/normalized query from spellchecker
query.spellcheck_offbool?Whether spellcheck was disabled
query.show_strict_warningbool?True if strict safesearch blocked results
query.search_operatorsobject?Applied search operators
query.search_operators.appliedboolWhether operators were applied
query.search_operators.cleaned_querystring?Query after operator processing
query.search_operators.siteslist[str]?Domains from site: operators
results[].typestringAlways "news_result"
results[].titlestringArticle title
results[].urlstringSource URL of the article
results[].descriptionstring?Article description/summary
results[].agestring?Human-readable age (e.g. "2 hours ago")
results[].page_agestring?Publication date from source (ISO datetime)
results[].page_fetchedstring?When page was last fetched (ISO datetime)
results[].fetched_content_timestampint?Fetch timestamp (only with include_fetch_metadata=true)
results[].meta_url.schemestring?URL protocol scheme
results[].meta_url.netlocstring?Network location
results[].meta_url.hostnamestring?Lowercased domain name
results[].meta_url.faviconstring?Favicon URL
results[].meta_url.pathstring?URL path
results[].thumbnail.srcstringServed thumbnail URL
results[].thumbnail.originalstring?Original thumbnail URL
results[].extra_snippetslist[str]?Up to 5 additional excerpts per result
results[].profile.namestring?Name of the site
results[].profile.urlstring?The original URL where the profile is available
results[].profile.long_namestring?The long name of the site
results[].profile.imgstring?The served image URL representing the profile

Goggles (Custom Ranking) — Unique to Brave

Goggles let you re-rank news results — boost trusted outlets or suppress unwanted sources.

MethodExample
Hosted--data-urlencode "goggles=https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/hacker_news.goggle"
Inline--data-urlencode 'goggles=$discard\n$site=example.com'

Hosted goggles must be on GitHub/GitLab, include ! name:, ! description:, ! author: headers, and be registered at https://search.brave.com/goggles/create. Inline rules need no registration.

Syntax: Rules start with $ + comma-separated options. Actions (pick one): discard, boost[=N], downrank[=N] — N is an integer 1–10. Site filter: site=DOMAIN. Example: $site=example.com,boost=3. Separate rules with \n (%0A).

Allow list: $discard\n$site=docs.python.org\n$site=developer.mozilla.org — Block list: $discard,site=pinterest.com\n$discard,site=quora.com

Resources: Discover · Syntax · Quickstart

Search Operators

Use search operators to refine results:

  • site:local-paper.com - Limit to specific news site
  • "exact phrase" - Match exact phrase
  • -exclude - Exclude term

Set operators=false to disable operator parsing.

Use Cases

  • Breaking news monitoring: Use freshness=pd for the most recent articles on a topic.
  • Custom news feeds with Goggles: Boost trusted sources and discard other sources — unique to Brave.
  • Historical news research: Use freshness=YYYY-MM-DDtoYYYY-MM-DD to find articles from specific time periods.
  • Multilingual news: Combine country, search_lang, and ui_lang for cross-locale results.
  • Data pipelines: Set include_fetch_metadata=true for fetched_content_timestamp on each result.

Notes

  • SafeSearch: Defaults to strict
  • Pagination: Use offset (0-9) with count
  • Extra snippets: Up to 5 additional excerpts when extra_snippets=true