web-search
brave/brave-search-skills
웹 검색에 사용합니다. 스니펫, URL, 썸네일이 포함된 순위별 검색 결과를 반환합니다. 최신성 필터, 세이프서치, 사용자 지정 순위를 위한 Goggles, 페이지 분할 기능을 지원합니다. 주요 검색 엔드포인트입니다.
...모든 것을 확장하십시오소개 web-search
web-search 스킬은 Brave 검색 엔진에 대한 프로그래밍 방식의 접근을 제공하여, 사용자가 온라인 검색을 수행하고 구조화된 결과를 가져올 수 있도록 합니다. 이 스킬은 스니펫, URL, 썸네일 및 메타데이터를 포함하는 순위별 검색 결과를 반환하도록 설계되어, 개발자와 애플리케이션이 웹 검색 기능을 워크플로우에 직접 통합할 수 있도록 지원합니다. SafeSearch, 최신성 필터, Goggles를 통한 사용자 지정 순위 지정과 같은 기능을 지원함으로써, 자동화 시스템 및 사용자 인터페이스에 적합한 구조화된 형식으로 웹에서 관련성이 높고 필터링된 정보를 신속하게 확보해야 하는 문제를 해결합니다.
이 스킬은 GET 및 POST HTTP 메서드를 모두 지원하므로, 간단한 쿼리부터 사용자 정의 결과 순위를 위한 Goggles 구성이 포함될 수 있는 복잡하고 긴 쿼리까지 유연하게 처리할 수 있습니다. 매개변수를 통해 국가, 언어, 결과 수, 콘텐츠 필터링, 날짜 범위뿐만 아니라 텍스트 서식, 맞춤법 검사, 리치 콜백과 같은 추가 기능을 포함하여 검색을 정밀하게 제어할 수 있습니다. 최신성 및 결과 필터링 옵션을 통해 사용자는 특정 기간이나 뉴스, 동영상, 토론 등 특정 결과 유형으로 검색 범위를 좁힐 수 있습니다. 인증은 API 키를 통해 관리되어 서비스에 대한 안전한 접근을 보장합니다.
Web-search 이 서비스는 검색 인터페이스, 데이터 추출 도구 또는 선별된 검색 결과에 대한 고속 액세스가 필요한 애플리케이션을 구축하는 개발자에게 이상적입니다. 대상 사용자로는 웹에서 구조화된 데이터가 필요한 검색 UI, 에이전트 또는 대시보드를 제작하는 개발자는 물론, 검색 기능을 활용하여 AI 파이프라인 및 연구 워크플로를 개선하는 시스템을 구축하는 개발자도 포함됩니다. 속도, 유연성, 구조화된 출력을 모두 갖춘 이 서비스는 관련 웹 정보를 신속하게 검색하는 것이 중요하면서도 결과의 표시 방식과 순위를 제어할 수 있어야 하는 애플리케이션에 특히 적합합니다.
자주 묻는 질문
web-search 스킬에 대한 요청을 어떻게 인증하나요?
`X-Subscription-Token:
최신성이나 콘텐츠 유형별로 결과를 필터링할 수 있나요?
네, 이 스킬은 지난 하루, 주, 월, 연도 등의 최신도 필터는 물론 사용자 지정 날짜 범위도 지원합니다. 뉴스, 동영상, 토론, FAQ 등의 결과 유형은 `result_filter` 매개변수를 사용하여 필터링할 수 있습니다.
검색 시 어떤 HTTP 메서드가 지원되나요?
GET 및 POST 메서드 모두 지원됩니다. 긴 쿼리나 복잡한 Goggles 구성을 사용할 때는 POST를 권장합니다.
web-search 에서 세이프서치(SafeSearch)를 사용할 수 있나요?
예, `safesearch` 매개변수를 `off`, `moderate` 또는 `strict`로 설정하여 성인 콘텐츠 필터링을 제어할 수 있습니다.
Goggles란 무엇이며 어떻게 작동하나요?
Goggles는 URL을 제공하거나 인라인 구성을 통해 검색 결과의 순위를 사용자 지정할 수 있는 기능입니다. 이를 통해 결과의 점수 산정 및 표시 방식을 세밀하게 제어할 수 있습니다.
Web 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/web/search?q=python+web+frameworks" \ -H "Accept: application/json" \ -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
With Parameters
curl -s "https://api.search.brave.com/res/v1/web/search" \ -H "Accept: application/json" \ -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \ -G \ --data-urlencode "q=rust programming tutorials" \ --data-urlencode "country=US" \ --data-urlencode "search_lang=en" \ --data-urlencode "count=10" \ --data-urlencode "safesearch=moderate" \ --data-urlencode "freshness=pm"
Endpoint
GET https://api.search.brave.com/res/v1/web/searchPOST https://api.search.brave.com/res/v1/web/search
Note: Both GET and POST methods are supported. POST is useful for long queries or complex Goggles.
Authentication: X-Subscription-Token: <API_KEY> header
Optional Headers:
Accept-Encoding: gzip— Enable gzip compression
When to Use Web Search
| Feature | Web Search (this) | LLM Context (llm-context) | Answers (answers) |
|---|---|---|---|
| Output | Structured results (links, snippets, metadata) | Pre-extracted page content for LLMs | End-to-end AI answers with citations |
| Result types | Web, news, videos, discussions, FAQ, infobox, locations, rich | Extracted text chunks, tables, code | Synthesized answer + source list |
| Unique features | Goggles, structured data (schemas), rich callbacks | Token budget control, threshold modes | Multi-iteration search, streaming, OpenAI SDK compatible |
| Speed | Fast (~0.5-1s) | Fast (<1s) | Slower (~30-180s) |
| Best for | Search UIs, data extraction, custom ranking | RAG pipelines, AI agents, grounding | Chat interfaces, thorough research |
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
q | string | Yes | - | Search query (1-400 chars, max 50 words) |
country | string | No | US | Search country (2-letter country code or ALL) |
search_lang | string | No | en | Language preference (2+ char language code) |
ui_lang | string | No | en-US | UI language (e.g., "en-US") |
count | int | No | 20 | Max results per page (1-20) |
offset | int | No | 0 | Page offset for pagination (0-9) |
safesearch | string | No | moderate | Adult content filter (off/moderate/strict) |
freshness | string | No | - | Time filter (pd/pw/pm/py or date range) |
text_decorations | bool | No | true | Include highlight markers |
spellcheck | bool | No | true | Auto-correct query |
result_filter | string | No | - | Filter result types (comma-separated) |
goggles | string | No | - | Custom ranking filter (URL or inline) |
extra_snippets | bool | No | - | Get up to 5 extra snippets per result |
operators | bool | No | true | Apply search operators |
units | string | No | - | Measurement units (metric/imperial) |
enable_rich_callback | bool | No | false | Enable rich 3rd party data callback |
include_fetch_metadata | bool | No | false | Include fetched_content_timestamp on results |
Freshness Values
| Value | Description |
|---|---|
pd | Past day (24 hours) |
pw | Past week (7 days) |
pm | Past month (31 days) |
py | Past year (365 days) |
YYYY-MM-DDtoYYYY-MM-DD | Custom date range |
Result Filter Values
Filter types: discussions, faq, infobox, news, query, videos, web, locations
# Only web and video resultscurl "...&result_filter=web,videos"
Location Headers (Optional)
For location-aware results, add these headers. Lat/Long is sufficient when coordinates are known — the other headers are only needed as a fallback when coordinates are unavailable.
| Header | Type | Description |
|---|---|---|
X-Loc-Lat | float | User latitude (-90.0 to 90.0) |
X-Loc-Long | float | User longitude (-180.0 to 180.0) |
X-Loc-Timezone | string | IANA timezone (e.g., "America/San_Francisco") |
X-Loc-City | string | City name |
X-Loc-State | string | State/region code (ISO 3166-2) |
X-Loc-State-Name | string | State/region full name (e.g., "California") |
X-Loc-Country | string | 2-letter country code |
X-Loc-Postal-Code | string | Postal code (e.g., "94105") |
Priority:
X-Loc-Lat+X-Loc-Longtake precedence. When provided, downstream services resolve the location directly from coordinates and the text-based headers (City, State, Country, Postal-Code) are not used for location resolution. Provide text-based headers only when you don't have coordinates. Sending both won't break anything — lat/long simply wins.
Response Format
Response Fields
| Field | Type | Description |
|---|---|---|
type | string | Always "search" |
query.original | string | The original search query |
query.altered | string? | Spellcheck-corrected query (if changed) |
query.cleaned | string? | Cleaned/normalized query |
query.spellcheck_off | bool? | Whether spellcheck was disabled |
query.more_results_available | bool | Whether more pages exist |
query.show_strict_warning | bool? | True if strict safesearch blocked adult results |
query.search_operators | object? | Applied search operators (applied, cleaned_query, sites) |
web.type | string | Always "search" |
web.results[].title | string | Page title |
web.results[].url | string | Page URL |
web.results[].description | string? | Snippet/description text |
web.results[].age | string? | Human-readable age (e.g., "2 days ago") |
web.results[].language | string? | Content language code |
web.results[].meta_url | object | URL components (scheme, netloc, hostname, path) |
web.results[].thumbnail | object? | Thumbnail (src, original) |
web.results[].thumbnail.original | string? | Original full-size image URL |
web.results[].thumbnail.logo | bool? | Whether the thumbnail is a logo |
web.results[].profile | object? | Publisher identity (name, url, long_name, img) |
web.results[].page_age | string? | ISO datetime of publication (e.g., "2025-04-12T14:22:41") |
web.results[].extra_snippets | list[str]? | Up to 5 additional excerpts |
web.results[].deep_results | object? | Additional links (buttons, links) from the page |
web.results[].schemas | list? | Raw schema.org structured data |
web.results[].product | object? | Product info and reviews |
web.results[].recipe | object? | Recipe details (ingredients, time, ratings) |
web.results[].article | object? | Article metadata (author, publisher, date) |
web.results[].book | object? | Book info (author, ISBN, rating) |
web.results[].software | object? | Software product info |
web.results[].rating | object? | Aggregate ratings |
web.results[].faq | object? | FAQ found on the page |
web.results[].movie | object? | Movie info (directors, actors, genre) |
web.results[].video | object? | Video metadata (duration, views, creator) |
web.results[].location | object? | Location/restaurant details |
web.results[].qa | object? | Question/answer info |
web.results[].creative_work | object? | Creative work data |
web.results[].music_recording | object? | Music/song data |
web.results[].organization | object? | Organization info |
web.results[].review | object? | Review data |
web.results[].content_type | string? | Content type classification |
web.results[].fetched_content_timestamp | int? | Fetch timestamp (with include_fetch_metadata=true) |
web.mutated_by_goggles | bool | Whether results were re-ranked by Goggles |
web.family_friendly | bool | Whether results are family-friendly |
mixed | object? | Preferred display order (see Mixed Response below) |
discussions.results[] | array? | Forum discussion clusters |
discussions.results[].data.forum_name | string? | Forum/community name |
discussions.results[].data.num_answers | int? | Number of answers/replies |
discussions.results[].data.question | string? | Discussion question |
discussions.results[].data.top_comment | string? | Top-voted comment excerpt |
faq.results[] | array? | FAQ entries |
news.results[] | array? | News articles |
videos.results[] | array? | Video results |
infobox.results[] | array? | Knowledge graph entries |
locations.results[] | array? | Local POI results |
rich.hint.vertical | string? | Rich result type |
rich.hint.callback_key | string? | Callback key for rich data |
JSON Example
{ "type": "search", "query": { "original": "python frameworks", "altered": "python web frameworks", "spellcheck_off": false, "more_results_available": true }, "web": { "type": "search", "results": [ { "title": "Top Python Web Frameworks", "url": "https://example.com/python-frameworks", "description": "A comprehensive guide to Python web frameworks...", "age": "2 days ago", "language": "en", "meta_url": { "scheme": "https", "netloc": "example.com", "hostname": "example.com", "path": "/python-frameworks" }, "thumbnail": { "src": "https://...", "original": "https://original-image-url.com/img.jpg" }, "extra_snippets": ["Additional excerpt 1...", "Additional excerpt 2..."] } ], "family_friendly": true }, "mixed": { "type": "mixed", "main": [ {"type": "web", "index": 0, "all": false}, {"type": "web", "index": 1, "all": false}, {"type": "videos", "all": true} ], "top": [], "side": [] }, "videos": { "...": "..." }, "news": { "...": "..." }, "rich": { "type": "rich", "hint": { "vertical": "weather", "callback_key": "<callback_key_hex>" } }}Mixed Response
The mixed object defines the preferred display order of results across types. It contains three arrays:
| Array | Purpose |
|---|---|
main | Primary result list (ordered sequence of results to display) |
top | Results to display above main results |
side | Results to display alongside main results (e.g., infobox) |
Each entry is a ResultReference with type (e.g., "web", "videos"), index (into the corresponding result array), and all (true to include all results of that type at this position).
Search Operators
| Operator | Syntax | Description |
|---|---|---|
| Site | site:example.com | Limit results to a specific domain |
| File extension | ext:pdf | Results with a specific file extension |
| File type | filetype:pdf | Results created in a specific file type |
| In title | intitle:python | Pages with term in the title |
| In body | inbody:tutorial | Pages with term in the body |
| In page | inpage:guide | Pages with term in title or body |
| Language | lang:es | Pages in a specific language (ISO 639-1) |
| Location | loc:us | Pages from a specific country (ISO 3166-1 alpha-2) |
| Include | +term | Force inclusion of a term |
| Exclude | -term | Exclude pages containing the term |
| Exact match | "exact phrase" | Match the exact phrase in order |
| AND | term1 AND term2 | Both terms required (uppercase) |
| OR / NOT | term1 OR term2, NOT term | Logical operators (uppercase) |
Set operators=false to disable operator parsing.
Goggles (Custom Ranking) — Unique to Brave
Goggles let you re-rank search results — boost trusted sources, suppress SEO spam, or build focused search scopes.
| Method | Example |
|---|---|
| Hosted | --data-urlencode "goggles=https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/rust_programming.goggle" |
| Inline | --data-urlencode 'goggles=$discard$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: $boost=N / $downrank=N (1–10), $discard, $site=example.com. Combine with commas: $site=example.com,boost=3. Separate rules with (%0A).
Allow list: $discard$site=docs.python.org$site=developer.mozilla.org — Block list: $discard,site=pinterest.com$discard,site=quora.com
Resources: Discover · Syntax · Quickstart
Rich Data Enrichments
For queries about weather, stocks, sports, currency, etc., use the rich callback workflow:
# 1. Search with rich callback enabledcurl -s "https://api.search.brave.com/res/v1/web/search?q=weather+san+francisco&enable_rich_callback=true" \ -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"# Response includes: "rich": {"hint": {"callback_key": "abc123...", "vertical": "weather"}}# 2. Get rich data with the callback keycurl -s "https://api.search.brave.com/res/v1/web/rich?callback_key=abc123..." \ -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
Supported Rich Types: Calculator, Definitions, Unit Conversion, Unix Timestamp, Package Tracker, Stock, Currency, Cryptocurrency, Weather, American Football, Baseball, Basketball, Cricket, Football/Soccer, Ice Hockey, Web3, Translator
Rich Callback Endpoint
GET https://api.search.brave.com/res/v1/web/rich
| Parameter | Type | Required | Description |
|---|---|---|---|
callback_key | string | Yes | Callback key from the web search rich.hint.callback_key field |
Use Cases
- General-purpose search integration: Richest result set (web, news, videos, discussions, FAQ, infobox, locations) in one call. For RAG/LLM grounding, prefer
llm-context. - Structured data extraction: Products, recipes, ratings, articles via
schemasand typed fields on results. - Custom search with Goggles: Unique to Brave. Boost/discard sites with inline rules or hosted Goggles for fully customized ranking.
Notes
- Pagination: Use
offset(0-9) withcountto page through results - Count: Max 20 for web search; actual results may be less than requested
web-search 설치
스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/brave/brave-search-skills/blob/main/skills/web-search/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
복사





집
