local-descriptions — Claude Code skill: AI POI descriptions
Generates text summaries for points of interest using web search context. Use it to enrich local business directories, travel guides, and location-based apps with narrative descriptions.
npx skills add brave/brave-search-skills --skill local-descriptions -a claude-codeWhat local-descriptions does
The skill operates in a two-step flow: first, fetch POI IDs from local-place-search or web-search with result_filter=locations, then pass those IDs to local-descriptions for AI-generated markdown summaries. Each description runs 200–400 words in travel-guide style, covering what makes the location notable.
Descriptions are grounded in web search results rather than venue profiles, so coverage varies. Process up to 20 IDs per request. IDs remain valid for approximately 8 hours, so fresh results require a new search.
Needs a Brave Search API key (included in the Search plan). Output is always formatted markdown: ### headings, bullet lists, bold and italic — ready for documents and web pages without post-processing.
What it helps with
- Build a local business directory with AI-written descriptions
- Add narrative summaries to search results for destinations and venues
- Create travel guide content with structured POI descriptions
- Fill empty location cards with generated context
Example prompts for the agent
- Search for cafés in San Francisco, extract their IDs, and generate descriptions via local-descriptions
- I have 15 restaurant IDs from a search — generate markdown summaries for each
- Enrich attraction search results with AI-generated text through local-descriptions
How to install local-descriptions
1Skills CLI (Vercel)
npx skills add brave/brave-search-skills --skill local-descriptions -a claude-code2Manually: put the files in place
~/.claude/skills/local-descriptions/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/local-descriptions/
1Skills CLI (Vercel)
npx skills add brave/brave-search-skills --skill local-descriptions -a codex2Manually: put the files in place
.agents/skills/local-descriptions/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add brave/brave-search-skills --skill local-descriptions -a cursor2Manually: put the files in place
.cursor/skills/local-descriptions/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install brave/brave-search-skills local-descriptions2Manually: put the files in place
.github/skills/local-descriptions/SKILL.md1Skills CLI (Vercel)
npx skills add brave/brave-search-skills --skill local-descriptions -a gemini-cli2Platform CLI
gemini skills install https://github.com/brave/brave-search-skills --path skills/local-descriptionsManually: put the files in place
.devin/skills/local-descriptions/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add brave/brave-search-skills --skill local-descriptions -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about local-descriptions
How do I install local-descriptions for Claude Code?
Run npx skills add brave/brave-search-skills --skill local-descriptions -a claude-code, then load the configuration from ~/.claude/skills/local-descriptions/SKILL.md.
What does local-descriptions do?
It returns markdown descriptions of places—restaurants, museums, shops, and more—based on their POI IDs. Descriptions are AI-generated from web search context.
Where do I get POI IDs for local-descriptions?
IDs come from local-place-search or from web-search with result_filter=locations, found in locations.results[].id. IDs expire in roughly 8 hours.
Source text
SKILL.md · MIT
---
name: local-descriptions
description: USE FOR getting AI-generated POI text descriptions. Requires POI IDs from local-place-search, or from web-search with result_filter=locations. Returns markdown descriptions grounded in web search context. Max 20 IDs per request.
---
# Local Descriptions (Search API)
> **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
>
> **Two-step flow**: This endpoint requires POI IDs from a prior search.
>
> 1. Get POI IDs from `local-place-search`, or from `web-search` with `result_filter=locations` (`locations.results[].id`)
> 2. Pass those IDs to this endpoint to get AI-generated descriptions
## Quick Start (cURL)
### Get POI Description
```bash
curl -s "https://api.search.brave.com/res/v1/local/descriptions?ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA%3D" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
```
### Multiple POIs
```bash
curl -s "https://api.search.brave.com/res/v1/local/descriptions" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
--data-urlencode "ids=loc4HTAVTJKP4RBEBZCEMBI3NG26YD4II4PATIHPDYI="
```
**Note**: POI IDs are opaque strings returned in web search `locations.results[].id`. They are valid for approximately 8 hours. The example IDs above are for illustration — fetch fresh IDs via `web-search` with `result_filter=locations`.
## Endpoint
```http
GET https://api.search.brave.com/res/v1/local/descriptions
```
**Authentication**: `X-Subscription-Token: <API_KEY>` header
## Parameters
| Parameter | Type | Required | Default | Description |
|--|--|--|--|--|
| `ids` | string[] | **Yes** | — | POI IDs from web search `locations.results[].id` (1-20, repeated: `?ids=a&ids=b`) |
## Response Format
### Response Fields
| Field | Type | Description |
|--|--|--|
| `type` | string | Always `"local_descriptions"` |
| `results` | array | List of description objects (entries may be `null`) |
| `results[].type` | string | Always `"local_description"` |
| `results[].id` | string | POI identifier matching the request |
| `results[].description` | string? | AI-generated markdown description, or `null` if unavailable |
### Example Response
```json
{
"type": "local_descriptions",
"results": [
{
"type": "local_description",
"id": "loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=",
"description": "### Overview\nA cozy neighborhood cafe known for its **artisanal coffee**..."
}
]
}
```
## Getting POI IDs
`local-place-search` returns POI IDs directly. They also come from the **Web Search API** (`web-search`) with `result_filter=locations`:
```bash
# 1. Search for local businesses
curl -s "https://api.search.brave.com/res/v1/web/search?q=restaurants+san+francisco&result_filter=locations" \
-H "Accept: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
# 2. Extract POI IDs from locations.results[].id
# 3. Use those IDs with local/pois and local/descriptions
```
## Use Cases
- **Local business overview**: Pair with `local-pois` to get both structured data (hours, ratings) and narrative descriptions
- **Travel/tourism enrichment**: Add descriptive context to POIs for travel planning or destination guides
- **Search results augmentation**: Supplement web search results with AI-generated summaries of local businesses
## Notes
- **Always markdown**: Descriptions use `###` headings, bullet lists, **bold**/*italics* — always formatted as markdown
- **Travel-guide tone**: Typically 200-400 words covering what makes the POI notable
- **AI-generated**: Descriptions are AI-generated based on web search context, not sourced from business profiles
- **Availability**: Not all POIs have descriptions — `description` may be `null`
- **Max IDs**: Up to 20 IDs per request
© brave · MIT · brave/brave-search-skills