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.
Works with
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:
Fetches 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:
Restart Cursor to activate find-craft-beer-restaurants. Access via /find-craft-beer-restaurants in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
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
0
total installs
0
this week
0
upvotes
Run in your terminal
0
installs
0
this week
—
stars
| 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."
}
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
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.
doordash.com/extract-menu-5uzqvc
happycow.net/search-vegan-ei6wpc
opentable.com/check-availability-f2fwrm
spinach.guide/create-vegan-itinerary-6ztwyn
resy.com/check-availability-v27zl8
wolt.com/wolt-search-5m1plq
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