Find Nearby
A location-based discovery skill sourced from Hermes Agent that finds restaurants, cafes, bars, pharmacies, and other places near any location. Uses OpenStreetMap (free, no API keys). Works with coordinates from location pins, addresses, cities, zip codes, or landmarks. Perfect for finding healthy dining options when traveling or meal planning.
88Trust High
by NousResearchproductivitybeginnerv1.0.0updated Mar 15, 2026
12.5kTotal Runs
93.2%Success Rate
4.6kInstalls
88Trust Score
Tags
#location#maps#nearby#places#restaurants#local#osm#geolocation
Required Tools
bashweb_fetchjson_parseInputs
| Name | Type | Description | Req |
|---|---|---|---|
| location | text | Location: coordinates "lat,lon", address "123 Main St", city "Austin", zip "90210", or landmark "Times Square". | yes |
| place_type | text | Place type: restaurant, cafe, bar, pharmacy, supermarket, etc. Defaults to restaurant. | -- |
| radius | number | Search radius in meters. Default: 1500 (1.5km). | -- |
| limit | number | Max results. Default: 15. | -- |
Outputs
| Name | Type | Description | Req |
|---|---|---|---|
| places | json | Array of place objects: { name, distance, address, type, lat, lon, directions_url } | yes |
Compatible Skills
SKILL.md
---
name: find-nearby
description: Find nearby places (restaurants, cafes, pharmacies, etc.) using OpenStreetMap. Works with coordinates, addresses, or zip codes. No API keys needed.
---
# Find Nearby — Local Place Discovery
Find restaurants, cafes, bars, pharmacies, and other places near any location using OpenStreetMap (free, no API keys).
## Quick Start
### By Coordinates
```bash
# Search for restaurants near coordinates
curl "https://nominatim.openstreetmap.org/search?q=restaurant&format=json&lat=40.7128&lon=-74.0060&radius=1500"
# Using Overpass API
curl -X POST https://overpass-api.de/api/interpreter -d '[out:json];
node["amenity"="restaurant"](around:1500,40.7128,-74.0060);
out;'
```
### By Address/Place Name
```bash
# Geocode address first
curl "https://nominatim.openstreetmap.org/search?q=Times+Square,New+York&format=json&limit=1"
# Then search nearby
# (use lat/lon from geocode result)
```
## Place Types
Common amenity types:
| Type | Description |
|------|-------------|
| restaurant | Full-service restaurants |
| cafe | Coffee shops, cafes |
| bar | Bars and pubs |
| fast_food | Fast food restaurants |
| pharmacy | Drugstores |
| hospital | Medical facilities |
| bank | Banks and ATMs |
| supermarket | Grocery stores |
| convenience | Convenience stores |
| fuel | Gas stations |
| parking | Parking lots |
| hotel | Hotels |
## Overpass API Query
```bash
# Restaurants within radius
curl -X POST https://overpass-api.de/api/interpreter -d '[out:json];
(
node["amenity"="restaurant"](around:RADIUS,LAT,LON);
way["amenity"="restaurant"](around:RADIUS,LAT,LON);
relation["amenity"="restaurant"](around:RADIUS,LAT,LON);
);
out center;
>;
out skel qt;'
```
Replace:
- RADIUS: meters (e.g., 1500)
- LAT: latitude (e.g., 40.7128)
- LON: longitude (e.g., -74.0060)
## Output Format
```json
{
"places": [
{
"name": "Joe's Restaurant",
"distance": 450,
"address": "123 Main St, New York, NY",
"type": "restaurant",
"lat": 40.7123,
"lon": -74.0055,
"directions_url": "https://www.google.com/maps/dir/?api=1&destination=40.7123,-74.0055"
}
]
}
```
## Location Input Formats
| Format | Example |
|--------|---------|
| Coordinates | "40.7128,-74.0060" |
| Address | "123 Main St, New York" |
| City | "Austin" |
| Zip Code | "90210" |
| Landmark | "Times Square" |
| Airport Code | "JFK" |
## Python Script
```python
#!/usr/bin/env python3
import requests
import json
import sys
def find_nearby(lat, lon, place_type="restaurant", radius=1500, limit=15):
overpass_query = f'''
[out:json];
(
node["amenity"="{place_type}"](around:{radius},{lat},{lon});
way["amenity"="{place_type}"](around:{radius},{lat},{lon});
);
out center {limit};
'''
response = requests.post(
'https://overpass-api.de/api/interpreter',
data=overpass_query
)
data = response.json()
places = []
for element in data['elements']:
if 'tags' in element:
lat_val = element.get('lat') or element.get('center', {}).get('lat')
lon_val = element.get('lon') or element.get('center', {}).get('lon')
place = {
"name": element['tags'].get('name', 'Unknown'),
"type": place_type,
"lat": lat_val,
"lon": lon_val,
"address": element['tags'].get('addr:street', ''),
"directions_url": f"https://www.google.com/maps/dir/?api=1&destination={lat_val},{lon_val}"
}
places.append(place)
return {"places": places}
if __name__ == "__main__":
# Parse arguments and run
pass
```
## Error Handling
- Coordinates out of range: Validate lat (-90 to 90) and lon (-180 to 180)
- No results: Suggest widening radius or different place type
- API rate limits: Cache results, retry with backoff
- Geocoding failures: Try alternative address formats
## Integration
Perfect for:
- Finding restaurants while traveling
- Locating pharmacies near you
- Discovering cafes in new neighborhoods
- Planning routes with stops
- Finding healthy dining options