Service APIs
Search for points of interest within a geographic area from our index of over 200 million places
Overview
Place search enables geographic discovery of points of interest (POIs) within a specified area. With access to over 200 million indexed places worldwide, you can search for businesses, landmarks, restaurants, and more — using either geographic coordinates or a location name.
Key Features
200M+ Places
Access our comprehensive global index of over 200 million points of interest
Geographic Search
Search within a customizable radius up to 20km from any coordinate or location name
Rich POI Data
Get detailed information including ratings, hours, contact info, and photos
Explore Mode
Search for general points of interest in an area without a specific query
Place Search is part of Search plan. Subscribe to use this feature.
API Reference
Place Search API Documentation
View the complete API reference, including endpoints, parameters, and example requests
Use Cases
Place Search is perfect for:
- Location-Based Apps: Build apps that help users discover nearby places
- Travel & Tourism: Find attractions, restaurants, and hotels in any destination
- Business Directories: Create local business listings and discovery features
- Mapping Applications: Populate maps with relevant points of interest
- Geofenced Recommendations: Suggest places based on user location
Basic Usage
Make a request to the Place Search endpoint with coordinates and an optional query:
curl "https://api.search.brave.com/res/v1/local/place_search?latitude=37.7749&longitude=-122.4194&q=coffee+shops&radius=1000" \
-H "X-Subscription-Token: <YOUR_API_KEY>"You can also use a location name instead of coordinates:
curl "https://api.search.brave.com/res/v1/local/place_search?location=san+francisco+ca+united+states&q=coffee+shops&radius=1000" \
-H "X-Subscription-Token: <YOUR_API_KEY>"The response includes a list of matching POIs with detailed information:
{
"type": "locations",
"query": {
"original": "coffee shops",
"altered": null,
"spellcheck_off": false,
"show_strict_warning": false
},
"results": [
{
"type": "location_result",
"id": "loc4FNMQJNOOCVHEB7UBOLN354ZYIDIYJ3RPRETERRY=",
"title": "Blue Bottle Coffee",
"url": "https://bluebottlecoffee.com",
"provider_url": "https://yelp.com/biz/blue-bottle-coffee-sf",
"coordinates": [37.7825, -122.4095],
"postal_address": {
"type": "PostalAddress",
"displayAddress": "66 Mint St, San Francisco, CA 94103",
"streetAddress": "66 Mint St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103",
"country": "US"
},
"rating": {
"ratingValue": 4.5,
"bestRating": 5.0,
"reviewCount": 1250
},
"opening_hours": {
"current_day": [
{
"abbr_name": "Tue",
"full_name": "Tuesday",
"opens": "07:00",
"closes": "18:00"
}
]
},
"distance": {
"value": 0.3,
"units": "km"
},
"categories": ["Coffee & Tea", "Cafe"],
"price_range": "$$",
"thumbnail": {
"src": "https://example.com/thumb.jpg",
"original": "https://example.com/original.jpg"
},
"timezone": "America/Los_Angeles"
}
],
"location": {
"coordinates": [37.7749, -122.4194],
"name": "San Francisco",
"country": "US"
}
}Request Parameters
Location (required — one of two options)
You must provide either coordinates (latitude + longitude) or a location string. Omitting both returns a 422 error.
| Parameter | Type | Description |
|---|---|---|
latitude | float | Latitude of the search center (-90.0 to +90.0). Required with longitude if location is not provided. |
longitude | float | Longitude of the search center (-180.0 to +180.0). Required with latitude if location is not provided. |
location | string | Location name, alternative to coordinates. For US locations use the form city state country (e.g., san francisco ca united states). For non-US locations use city country (e.g., tokyo japan). Case-insensitive, no commas needed. Multilingual supported. |
Search (optional)
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | — | Search query for finding specific POIs (e.g., coffee shops, pizza) |
radius | float | 10000 | Search radius in meters (0 to 20,000) |
count | int | 20 | Number of results to return (1 to 50) |
Locale and Preferences
| Parameter | Type | Default | Description |
|---|---|---|---|
country | string | US | Two-letter country code (ISO 3166-1 alpha-2) |
search_lang | string | en | Search language (2+ character language code) |
ui_lang | string | en-US | UI language for the response (locale code) |
units | string | metric | Measurement units: metric or imperial |
safesearch | string | strict | Safe search level: off, moderate, or strict |
spellcheck | bool | true | Whether to apply spellcheck to the query |
Location String Format
When using the location parameter instead of coordinates, follow these conventions:
| Region | Format | Example |
|---|---|---|
| United States | city state country | san francisco ca united states |
| Other countries | city country | tokyo japan |
| Multilingual | native or English name | nueva york or new york |
No commas or special characters are needed, and capitalization does not matter. English or the most popular language for the target city generally works best.
Explore Mode
If q is not provided, the endpoint returns general points of interest in the specified area, making it ideal for discovery-focused applications:
curl "https://api.search.brave.com/res/v1/local/place_search?latitude=40.7128&longitude=-74.0060&radius=2000&count=10" \
-H "X-Subscription-Token: <YOUR_API_KEY>"Fetching Additional POI Details
Each POI in the response includes an id field that you can use to fetch additional information. These IDs work with the same endpoints used for locations returned from Web Search:
Detailed POI Information
Use the /local/pois endpoint to get comprehensive details including photos, reviews, and profiles:
curl "https://api.search.brave.com/res/v1/local/pois?ids=loc4FNMQJNOOCVHEB7UBOLN354ZYIDIYJ3RPRETERRY=" \
-H "X-Subscription-Token: <YOUR_API_KEY>"AI-Generated Descriptions
Use the /local/descriptions endpoint to get AI-generated descriptions for locations:
curl "https://api.search.brave.com/res/v1/local/descriptions?ids=loc4FNMQJNOOCVHEB7UBOLN354ZYIDIYJ3RPRETERRY=" \
-H "X-Subscription-Token: <YOUR_API_KEY>"You can request details for up to 20 POIs in a single request by providing multiple ids parameters.
POI IDs are interchangeable: The same POI IDs work whether they come from Web Search location results or Place Search results. This allows you to build unified experiences that combine query-based and geographic discovery.
POI IDs are ephemeral and expire after approximately 8 hours. Do not store them for later use.
Response Fields
Top-Level Fields
| Field | Type | Description |
|---|---|---|
type | string | Always "locations" |
query | object | Query information including original and spell-corrected forms |
query.original | string | The original query that was requested |
query.altered | string? | The spell-corrected query, if spellcheck was applied. null if no correction was made |
query.spellcheck_off | bool? | Whether spellcheck was disabled for this query |
query.show_strict_warning | bool? | Whether strict safesearch filtered results |
results | array | List of LocationResult objects |
location | object | Resolved location information |
location.coordinates | [float, float] | Latitude and longitude of the resolved search center |
location.name | string | Resolved location name (e.g., "San Francisco") |
location.country | string | Two-letter country code (e.g., "US") |
LocationResult Fields
Each location result includes comprehensive information about the POI:
| Field | Type | Description |
|---|---|---|
type | string | Always "location_result" |
id | string | Temporary identifier for fetching additional details (valid ~8 hours) |
title | string | Name of the location |
url | string | Canonical URL |
provider_url | string | Provider page URL |
description | string | Short description |
coordinates | [float, float] | Latitude and longitude |
postal_address | object | Address with displayAddress, streetAddress, addressLocality, addressRegion, postalCode, country |
opening_hours | object | Business hours with current_day and days arrays |
contact | object | Contact info with telephone and email |
rating | object | Ratings with ratingValue, bestRating, reviewCount |
price_range | string | Price classification (e.g., "$$") |
distance | object | Distance from search center with value and units |
categories | array | Category classifications |
serves_cuisine | array | Cuisine types (for restaurants) |
thumbnail | object | Primary image with src and original |
pictures | object | Additional photos |
profiles | array | External profiles (name, url, long_name, img) |
timezone | string | IANA timezone identifier (e.g., "America/Los_Angeles") |
Example: Building a Nearby Places Feature
Here’s how you might implement a “places nearby” feature:
import requests
API_KEY = "<YOUR_API_KEY>"
BASE_URL = "https://api.search.brave.com/res/v1"
def find_nearby_places(lat, lng, query="", radius=5000):
"""Search for POIs near a location."""
params = {
"q": query,
"latitude": lat,
"longitude": lng,
"radius": radius,
"count": 20
}
response = requests.get(
f"{BASE_URL}/local/place_search",
params=params,
headers={"X-Subscription-Token": API_KEY}
)
return response.json()
def find_places_by_name(location, query="", country="US"):
"""Search for POIs using a location name instead of coordinates."""
params = {
"q": query,
"location": location,
"country": country,
"count": 20
}
response = requests.get(
f"{BASE_URL}/local/place_search",
params=params,
headers={"X-Subscription-Token": API_KEY}
)
return response.json()
def get_poi_details(poi_ids):
"""Fetch detailed information for POIs."""
response = requests.get(
f"{BASE_URL}/local/pois",
params=[("ids", pid) for pid in poi_ids],
headers={"X-Subscription-Token": API_KEY}
)
return response.json()
def get_poi_descriptions(poi_ids):
"""Fetch AI-generated descriptions for POIs."""
response = requests.get(
f"{BASE_URL}/local/descriptions",
params=[("ids", pid) for pid in poi_ids],
headers={"X-Subscription-Token": API_KEY}
)
return response.json()
# Find coffee shops near San Francisco using coordinates
places = find_nearby_places(37.7749, -122.4194, query="coffee")
# Or find museums in Paris using a location name
places = find_places_by_name("paris france", query="museums", country="FR")
# Get IDs from results
poi_ids = [p["id"] for p in places.get("results", []) if p.get("id")]
# Fetch additional details and descriptions
if poi_ids:
details = get_poi_details(poi_ids[:20])
descriptions = get_poi_descriptions(poi_ids[:20])Rate Limits and Billing
Place Search requests are billed separately from Web Search. Check your subscription dashboard for current limits and usage.
Changelog
- 2026-01-15 Add Place Search endpoint for geographic POI discovery.