AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Local Pois

skill-brave-brave-search-skills-local-pois · by brave

USE FOR getting local business/POI details. Requires POI IDs obtained from web-search (with result_filter=locations). Returns full business information including ratings, hours, contact info. Max 20 IDs.

— No reviews yet
0 installs
29 views
0.0% view→install

Install

$ agentstack add skill-brave-brave-search-skills-local-pois

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • ✓ Prompt-injection patterns
  • ✓ Secret / credential exfiltration
  • ✓ Dangerous shell & filesystem operations
  • ✓ Untrusted network calls
  • ✓ Known-malicious package signatures

What it can access

  • ● Network access Used
  • ✓ Filesystem access No
  • ✓ Shell / process execution No
  • ✓ Environment & secrets No
  • ✓ Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-brave-brave-search-skills-local-pois)

Reliability & compatibility

✓ Security review passed
0 installs to date
— no reviews yet
● 3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Local Pois? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Local POIs (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 web search. > > 1. Call web-search with result_filter=locations to get POI IDs from locations.results[].id > 2. Pass those IDs to this endpoint to get full business details

Quick Start (cURL)

Get POI Details

curl -s "https://api.search.brave.com/res/v1/local/pois" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA="

Multiple POIs with Location Headers

curl -s "https://api.search.brave.com/res/v1/local/pois" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -H "X-Loc-Lat: 37.7749" \
  -H "X-Loc-Long: -122.4194" \
  -G \
  --data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
  --data-urlencode "ids=loc4HTAVTJKP4RBEBZCEMBI3NG26YD4II4PATIHPDYI=" \
  --data-urlencode "units=imperial"

Note: POI IDs are opaque strings returned in web search locations.results[].id. IDs are ephemeral and expire after ~8 hours. The example IDs above are for illustration — fetch fresh IDs via web-search with result_filter=locations. Use --data-urlencode since IDs may contain =.

Endpoint

GET https://api.search.brave.com/res/v1/local/pois

Authentication: X-Subscription-Token: header

Parameters

| Parameter | Type | Required | Default | Description | |--|--|--|--|--| | ids | string[] | Yes | — | POI IDs from web search results (1-20) | | search_lang | string | No | en | Language preference (2+ char language code) | | ui_lang | string | No | en-US | UI language (locale code, e.g., "en-US") | | units | string | No | null | metric (km) or imperial (miles) |

Location Headers (Optional)

For distance calculation from user location:

| Header | Type | Range | Description | |--|--|--|--| | X-Loc-Lat | float | -90.0 to 90.0 | User latitude | | X-Loc-Long | float | -180.0 to 180.0 | User longitude |

Response Fields

The response has type: "local_pois" and a results array of LocationResult objects:

| Field | Type | Description | |--|--|--| | title | string | Business/POI name | | url | string | Canonical URL for the location | | provider_url | string | Provider page URL | | type | string | Always "location_result" | | id | string | POI identifier (opaque string, valid ~8 hours) | | description | string? | Short description | | postal_address.type | string | Always "PostalAddress" | | postal_address.displayAddress | string | Formatted display address | | postal_address.streetAddress | string? | Street address | | postal_address.addressLocality | string? | City | | postal_address.addressRegion | string? | State/region | | postal_address.postalCode | string? | Postal/ZIP code | | postal_address.country | string? | Country code | | contact.telephone | string? | Phone number | | contact.email | string? | Email address | | rating.ratingValue | float? | Average rating (≥0) | | rating.bestRating | float? | Max possible rating | | rating.reviewCount | int? | Number of reviews | | rating.profile.name | string? | Rating provider name | | rating.profile.url | string? | Rating provider URL | | opening_hours.current_day | object[]? | Today's hours (abbr_name, full_name, opens, closes) | | opening_hours.days | object[][]? | Hours for each day of the week (same structure) | | coordinates | [float, float]? | [latitude, longitude] tuple | | distance.value | float? | Distance from user location | | distance.units | string? | Distance unit (km or miles) | | categories | string[] | Business categories (default []) | | price_range | string? | Price indicator ($, $$, $$$, $$$$) | | serves_cuisine | string[]? | Cuisine types (restaurants) | | thumbnail.src | string? | Thumbnail image URL | | thumbnail.original | string? | Original image URL | | profiles | object[]? | External profiles (name, url, long_name, img) | | reviews.reviews_in_foreign_language | bool | Whether reviews in a foreign language are available | | pictures.results | object[]? | Photo thumbnails | | action | object? | Action to take — has type (string) and url (string) | | results | object[]? | Related web results (LocationWebResult with meta_url) | | timezone | string? | IANA timezone (e.g., America/Los_Angeles) | | timezone_offset | int? | UTC timezone offset |

Example Response

{
  "type": "local_pois",
  "results": [
    {
      "type": "location_result",
      "title": "Park Mediterranean Grill",
      "url": "https://yelp.com/biz/park-mediterranean-grill-sf",
      "provider_url": "https://yelp.com/biz/park-mediterranean-grill-sf",
      "id": "loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=",
      "postal_address": {
        "type": "PostalAddress",
        "displayAddress": "123 Main St, San Francisco, CA 94102",
        "streetAddress": "123 Main St",
        "addressLocality": "San Francisco",
        "addressRegion": "CA",
        "postalCode": "94102",
        "country": "US"
      },
      "contact": { "telephone": "+1 415-555-0123" },
      "thumbnail": {
        "src": "https://example.com/thumb.jpg",
        "original": "https://example.com/original.jpg"
      },
      "rating": {
        "ratingValue": 4.5,
        "bestRating": 5.0,
        "reviewCount": 234,
      },
      "opening_hours": {
        "current_day": [
          { "abbr_name": "Mon", "full_name": "Monday", "opens": "07:00", "closes": "21:00" }
        ]
      },
      "coordinates": [37.7749, -122.4194],
      "distance": { "value": 0.3, "units": "miles" },
      "categories": ["Mediterranean", "Greek"],
      "price_range": "$$",
      "serves_cuisine": ["Mediterranean", "Greek"],
      "timezone": "America/Los_Angeles"
    }
  ]
}

Getting POI IDs

POI IDs come from the Web Search API (web-search) with result_filter=locations:

# 1. Search for local businesses
curl -s "https://api.search.brave.com/res/v1/web/search?q=coffee+shops+near+me&result_filter=locations" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -H "X-Loc-Lat: 37.7749" \
  -H "X-Loc-Long: -122.4194"

# 2. Extract POI IDs from locations.results[].id
# 3. Use those IDs with this endpoint

Use Cases

  • Local business lookup: Retrieve full details (hours, contact, address) for POIs surfaced in web search
  • Restaurant discovery pipeline: Search for restaurants, fetch POI details, filter by cuisine/rating/price_range
  • Business hours checker: Get opening_hours for a business to determine if currently open
  • Location-aware application: Combine with location headers to get distance calculations for nearby POIs

Notes

  • ID format: Opaque strings (use --data-urlencode for cURL)
  • Units: metric or imperial for distance measurement preference
  • Max IDs: Up to 20 IDs per request

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.