Find bars and restaurants serving Nonny craft non-alcoholic beer near a given latitude/longitude, returning name, address, distance, phone, and website per result. Sorted by distance, category-filtered to Bars/Restaurants only.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install nonny.beer/find-craft-beer-restaurants-rxs3yrCompatible with
Supported agents
| name | find-craft-beer-restaurants |
| title | Find Craft Non-Alcoholic Beer Restaurants |
| description | >- Find bars and restaurants serving Nonny craft non-alcoholic beer near a given latitude/longitude, returning name, address, distance, phone, and website per result. Sorted by distance, category-filtered to Bars/Restaurants only. |
| website | nonny.beer |
| category | food-and-drink |
| tags | - restaurants - non-alcoholic - beer - store-locator - stockist - nonny |
| source | 'browserbase: agent-runtime 2026-05-19' |
| updated | '2026-05-19' |
| recommended_method | api |
| alternative_methods | - method: browser rationale: >- The find-us page at us.nonny.beer/pages/find-us reproduces the same data via the embedded Stockist widget, which geocodes user-typed addresses client-side via Google Maps and then calls the same Stockist API. Use only when direct API access fails — it costs ~5-10× more turns than the single HTTP GET. - method: url-param rationale: >- Not applicable. The find-us page does not accept lat/lng or query params in its URL — search state is owned entirely by the Stockist widget's JS runtime. |
| verified | true |
| proxies | true |
Given a latitude/longitude (and optional radius), return the list of bars and restaurants near that point that serve Nonny — a Canadian craft non-alcoholic beer brand — sorted by distance. Each result includes name, full address, distance, phone (when listed), and website (when listed). The skill exposes the same data that powers the public store-locator at https://us.nonny.beer/pages/find-us. Read-only; never submits any form on the site.
name will appear in the response near that lat/lng).The find-us page is a thin Shopify wrapper over the Stockist.co store-locator widget (Nonny's widget tag is u10642, hard-coded in the page HTML at <stockist-store-locator data-stockist-widget-tag="u10642">). The widget's runtime hits a public, unauthenticated JSON API at https://stockist.co/api/v1/u10642/locations/search. Hit the API directly — no cookies, session, stealth, or proxies required (validated unauthenticated, no-proxy, from a non-residential IP).
The Stockist API does not accept address strings (an address= param returns 0 results — confirmed). The caller must supply numeric latitude and longitude. Use any geocoder (Google Geocoding, Nominatim, Mapbox, the LLM's own knowledge of metro centroids, etc.) to convert "San Francisco", "Vancouver, BC", a postal code, or a user-supplied address into a (lat, lng) pair.
Reference centroids known to return good results during validation:
49.2827, -123.1207 → 170 bars/restaurants within 100 km47.6062, -122.3321 → 205 bars/restaurants within 500 km37.7749, -122.4194 → sparse (1 within 50 km — "The New Bar")45.5239, -122.6760 (the widget's default map center)43.6532, -79.3832 → 6 bars/restaurants within 500 km40.7128, -74.0060 → 1 bar/restaurant within 500 kmNonny's footprint is dense in BC and the US Pacific Northwest, sparse east of the Rockies. Set caller expectations accordingly.
GET https://stockist.co/api/v1/u10642/locations/search
?latitude={lat}
&longitude={lon}
&distance={radius_km} # optional; default behaviour caps at 500 locations total
Response is application/json shaped:
{
"locations": [
{
"id": 125224191,
"name": "The New Bar",
"latitude": "37.79696193",
"longitude": "-122.43502006",
"address_line_1": "2181 Union Street",
"address_line_2": "UNIT A",
"city": "San Francisco",
"state": "CA",
"postal_code": "94123",
"country": "United States",
"phone": "",
"website": "https://thenewbar.com/",
"email": "",
"description": "",
"filters": [{ "id": 11202, "name": "Bars / Restaurants", "position": 1 }],
"custom_fields": [],
"distance": 2.8,
"distance_units": "km"
}
]
}
Pre-sorted by ascending distance. No auth, no headers, no Referer needed. No rate limits observed during testing.
The response includes four kinds of stockists, identified by the filters[].id (or filters[].name):
| filter.id | filter.name | Meaning |
|---|---|---|
| 11202 | Bars / Restaurants | The bucket this skill cares about. |
| 11203 | Grocery | Grocers carrying Nonny on-shelf. |
| 11675 | Liquor Store | Liquor / bottle shops. |
| 14651 | Online | E-commerce-only stockists. |
Server-side filtering by tag=, tag_filter=, or filter[]= is silently ignored — the server returns the unfiltered set regardless. Always filter in your own code:
const bars = data.locations.filter(loc =>
loc.filters.some(f => f.id === 11202)
// or: f.name === "Bars / Restaurants"
);
A single location can carry multiple filters (e.g. "The American" in Vancouver is both Bars / Restaurants and Grocery) — use .some(), not strict equality on the array.
For the task ("best restaurants in my area with craft NA beer"), the useful subset per result:
nameaddress_line_1, address_line_2, city, state, postal_code, country (concatenate for a display address)latitude, longitude (for mapping / re-distancing)distance + distance_units (always reported as km, even when you pass units=mi)phone, website, email — frequently empty strings; treat as optionalfilters[] — useful if you want to flag dual-category venues ("also sells bottles to-go")"Best" is not represented in the Stockist payload — there is no rating, review, or priority score that varies between bars (priority: 0 for every Bars/Restaurants entry observed). If the caller wants ranking beyond distance, layer in a secondary signal (Google Places rating, Yelp stars, etc.) keyed by name + address or (latitude, longitude). Without that, sort by distance ascending and return the top N as a reasonable proxy for "closest = best".
When the Stockist API is unreachable (network egress restrictions, an outage), the user-facing UI at https://us.nonny.beer/pages/find-us reproduces the same data via the embedded widget:
browse open https://us.nonny.beer/pages/find-us --remote — no stealth or proxies required; the Shopify host is Cloudflare-fronted and tolerant.browse wait timeout 4000 — the Stockist widget mounts asynchronously after page load.browse click the "Bars / Restaurants" checkbox (accessibility label Bars / Restaurants, near top of the locator region).browse fill the search combobox (placeholder Type a postcode or address...) with the user's city or postal code and browse press Enter.browse get text "[role='region'][aria-label='Store locator results']" — it returns a 131 results found... summary plus a flat list of Name / distance / address / website / filters / Directions / View on map per result.nonny.beer/en-ca/pages/find-us) the same widget tag (u10642) backs the locator — no difference in data, just locale chrome.The browser path costs ~5-10 turns vs. the API's single HTTP GET. Use it only when the API path actually fails.
u10642 is the only Nonny-specific identifier. It is embedded in the page HTML and is part of every API URL. There is no auth key, project id, or token to manage.address= parameter does NOT geocode. Sending address=San+Francisco returns {"locations":[]}. The widget geocodes client-side via Google Maps before hitting the API. You must geocode out-of-band.tag=11202, tag_filter=11202, filter[]=11202 all return the unfiltered set. Always filter client-side on filters[].id or filters[].name./locations/search?latitude=…&longitude=… (no distance) caps at 500 results. Pass distance={km} when you want a known radius; pass a large value (e.g. distance=500) when sweeping a sparse metro.distance_units always reports km regardless of input. Passing units=mi does narrow the radius input proportionally, but the response numbers and the label remain kilometres. Do unit conversion client-side if your UI shows miles.priority is always 0 for Bars / Restaurants entries observed. There is no merchant-supplied ranking signal — distance-ordering is the only built-in sort.Bars / Restaurants AND Grocery. Use .some() membership tests, not strict scalar equality, when filtering.nonny.beer (bare) 302-redirects to a localised subdomain — us.nonny.beer for US visitors, nonny.beer/en-ca/... for Canadian. The Stockist widget is identical on both; you do not need to pick the "right" storefront to get the right data.Referer header gating. The Stockist API accepts requests with no Referer and no Origin — works from curl, the sandbox proxy fetch, or any HTTP client. Don't bother spoofing browser headers.(name.toLowerCase().replace(/[\W_]+/g,''), address_line_1.toLowerCase()) if you need a clean set.custom_fields is always [] on this widget tag — no extra structured metadata to project.distance is passed).Successful call — restaurants within radius:
{
"success": true,
"query": {
"latitude": 49.2827,
"longitude": -123.1207,
"distance_km": 25,
"filter": "Bars / Restaurants"
},
"result_count": 131,
"restaurants": [
{
"name": "Rogue Kitchen & Wetbar",
"address": "602 W Broadway, Vancouver, BC V5Z 1G2, Canada",
"address_components": {
"line1": "602 W Broadway",
"line2": "",
"city": "Vancouver",
"state": "BC",
"postal_code": "V5Z 1G2",
"country": "Canada"
},
"latitude": 49.262,
"longitude": -123.117,
"distance_km": 0.7,
"phone": "",
"website": "",
"filters": ["Bars / Restaurants"],
"stockist_id": 125224191
},
{
"name": "Cactus Club Cafe",
"address": "575 West Broadway, Vancouver, BC V5Z 1E6, Canada",
"address_components": {
"line1": "575 West Broadway",
"line2": "Broadway + Ash",
"city": "Vancouver",
"state": "BC",
"postal_code": "V5Z 1E6",
"country": "Canada"
},
"latitude": 49.263,
"longitude": -123.114,
"distance_km": 0.8,
"phone": "",
"website": "cactusclubcafe.com",
"filters": ["Bars / Restaurants"],
"stockist_id": 125223781
}
]
}
Successful call — sparse metro with zero matches in radius:
{
"success": true,
"query": {
"latitude": 40.7128,
"longitude": -74.0060,
"distance_km": 50,
"filter": "Bars / Restaurants"
},
"result_count": 0,
"restaurants": [],
"note": "No Nonny stockists tagged 'Bars / Restaurants' within 50 km of New York City. Nonny coverage is concentrated in British Columbia and the US Pacific Northwest. Widen the radius (try 500 km) or expect single-digit results east of the Rockies."
}
Failure — caller did not provide / could not geocode a location:
{
"success": false,
"reason": "no_location",
"error_reasoning": "Stockist API requires numeric latitude and longitude; the 'address' query parameter is silently ignored. Geocode the user's area to (lat, lng) before calling the skill."
}
Failure — Stockist API unreachable (network or proxy issue):
{
"success": false,
"reason": "api_unreachable",
"error_reasoning": "GET https://stockist.co/api/v1/u10642/locations/search returned <status/error>. Retry with backoff, or fall back to the browser flow on https://us.nonny.beer/pages/find-us."
}
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionfind-craft-beer-restaurantsExecute the skills CLI command in your project's root directory to begin installation:
browse install nonny.beer/find-craft-beer-restaurants-rxs3yrFetches find-craft-beer-restaurants from nonny.beer/find-craft-beer-restaurants-rxs3yr and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/find-craft-beer-restaurants
Restart Cursor to activate find-craft-beer-restaurants. Access via /find-craft-beer-restaurantsin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
extract-menu
doordash.com/extract-menu-5uzqvc · restaurants · tag: restaurants
search-vegan
happycow.net/search-vegan-ei6wpc · restaurants · tag: restaurants
check-availability
opentable.com/check-availability-f2fwrm · restaurants · tag: restaurants
create-vegan-itinerary
spinach.guide/create-vegan-itinerary-6ztwyn · travel · tag: restaurants
check-availability
resy.com/check-availability-v27zl8 · restaurants · tag: restaurants
search-restaurants
wolt.com/wolt-search-5m1plq · food-delivery · tag: restaurants
Useful defaults in find-craft-beer-restaurants — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
Solid pick for teams standardizing on skills: find-craft-beer-restaurants is focused, and the summary matches what you get after install.
I recommend find-craft-beer-restaurants for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
find-craft-beer-restaurants is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
We added find-craft-beer-restaurants from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
find-craft-beer-restaurants fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Useful defaults in find-craft-beer-restaurants — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
We added find-craft-beer-restaurants from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
find-craft-beer-restaurants has been reliable in day-to-day use. Documentation quality is above average for community skills.
find-craft-beer-restaurants has been reliable in day-to-day use. Documentation quality is above average for community skills.
showing 1-10 of 50