All skills
brave avatar

/local-pois

@62793e0 official

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

Use this Skill: https://skilld.dev/gh/brave/brave-search-skills/local-pois

This session only. Nothing lands on disk.

SKILL.md

≈58 tokens always: the name and description. ≈1.9k when used: this file.

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 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 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: <API_KEY> 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

local-place-search returns POI IDs directly. They also 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: SKILL.md on GitHub

2 warnings16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides a standard API specification for retrieving local business information via the Brave Search API. It follows secure practices by using environment variables for authentication and communicates only with verified vendor-owned infrastructure. No security threats or malicious behaviors were identified.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: MEDIUM · 1 issue

  • Runlayer7mo

    1/1 file flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 62793e0. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Activeupdated 2 months ago
  • API
  • brave-search
  • local-search
  • poi
  • business-data
  • locations
  • ratings
  • hours

README badge

README badge for brave/brave-search-skills/local-pois

Fetches detailed business information (ratings, hours, contact, address) for local POI IDs obtained from Brave's web search with result_filter=locations. Supports up to 20 POI IDs per request and optional location headers for distance calculations.

Generated from the current SKILL.md.

How do I get the POI IDs this endpoint requires?
Call the web-search endpoint with `result_filter=locations` to retrieve POI IDs from `locations.results[].id`. IDs are ephemeral and expire after approximately 8 hours.
How many POI IDs can I query at once?
The endpoint accepts 1 to 20 IDs per request.
Do I need to provide my location to get distance calculations?
No. Location is optional. Pass latitude and longitude via the `X-Loc-Lat` and `X-Loc-Long` headers if you want distance from the user's location included in the response.
What fields are guaranteed to be present in the response?
Title, URL, and postal address are typically present. Many fields like phone, email, rating, opening hours, and cuisine type are optional and may not be available for all POIs depending on the data provider.
Does this work with all business types?
Yes. The endpoint returns details for any POI type—restaurants, shops, offices, landmarks—as long as you provide valid IDs from a web search with `result_filter=locations`.

Generated from the current SKILL.md. These answers refresh after source changes.