Open Brewery DB Scraper
Pricing
Pay per event
Open Brewery DB Scraper
Query the Open Brewery DB public API by city, state, country, postal code, brewery type, name, or lat/lng radius and get clean, typed brewery, cidery, and brewpub rows. No manual paging, no six-param juggling, no empty-vs-exhausted guesswork.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
🎯 What this scrapes
Open Brewery DB is a free, keyless, no-auth JSON API listing breweries, cideries, and brewpubs. It is genuinely useful — but its raw shape is not friendly to a one-off integration: results cap at 200 rows per page, there are six separate by_* filter params spread across list and search endpoints, and telling "this filter matched nothing" apart from "the page paging just ended early" requires a second call to a meta endpoint most integrators never discover.
This Actor collapses all of that into one input form. Pick a search mode — city, state, country, brewery type, name, postal code, or lat/lng distance — and it pages the API on your behalf, validates every record against a typed schema, and hands you back a clean dataset. It also tells the difference, in plain language, between "your filter matched zero breweries" and "the source ran out before your max results cap" — two very different outcomes that look identical if you only watch a row count.
🔥 What we handle for you
- 🔁 Automatic pagination — Open Brewery DB caps every request at 200 rows. We page through to your
maxResultslimit or until the source is exhausted, and merge the results transparently. - 🧱 Rate-limit-aware backoff — on
408/429/503responses we back off exponentially and honourRetry-Afterheaders, retrying up to 5 times before surfacing an error. - 🧊 Pydantic-validated rows — every record is typed at write time. A single malformed record is skipped and logged, never crashes the run.
- ✅ Honest empty results — a search mode that genuinely matches nothing finishes successfully with a status message naming the exact filter or query that came up empty — it is never confused with a broken run.
- 🌐 Proxy-ready — an optional Apify Proxy pass-through is available if your network needs it; the public API itself needs no authentication or rotation.
- 💰 Pay-Per-Event pricing — you pay only for records that land in your dataset, plus a small run warm-up fee.
💡 Use cases
- Hospitality lead-gen lists — pull every brewery, cidery, or brewpub in a city or state and load contact details straight into your outreach pipeline.
- Beverage distributor territory mapping — filter by state, city, or postal code to plan sales coverage and route planning.
- POS / CRM vendor onboarding — populate a venue database for a beverage-industry product without hand-rolling API paging.
- Craft-beer travel and tourism apps — build a location-searchable brewery directory using the lat/lng radius search mode.
- Market research — count and map brewery density by state, country, or brewery type (micro, brewpub, regional, etc.).
⚙️ How to use it
- Click Try for free — no credit card required.
- Pick a Search mode:
city,state,country,type,postal,name,dist, orall. - Fill in the matching field for that mode — e.g.
byCityforcitymode, or bothbyDistLat/byDistLngfordistmode. - Set Max results — the row cap across all pages.
- Click Start. Results stream into the dataset in real time.
- Export from Storage → Dataset as JSON, CSV, or Excel.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchMode | string | yes | all | city / state / country / type / postal / name / dist / all |
byCity | string | iff searchMode=city | — | City name |
byState | string | iff searchMode=state | — | State or province name |
byCountry | string | iff searchMode=country | — | Country name |
byPostal | string | iff searchMode=postal | — | Postal / ZIP code |
byType | string | iff searchMode=type | — | micro / nano / regional / brewpub / large / planning / bar / contract / proprietor / closed |
searchQuery | string | iff searchMode=name | — | Free-text brewery name search |
byDistLat | number | iff searchMode=dist | — | Latitude, -90..90 |
byDistLng | number | iff searchMode=dist | — | Longitude, -180..180 |
maxResults | integer | no | 500 | Row cap across all pages, 1-10 000 |
proxyConfiguration | object | no | {"useApifyProxy": false} | Optional Apify Proxy pass-through |
{"searchMode": "city","byCity": "San Diego","maxResults": 500,"proxyConfiguration": {"useApifyProxy": false}}
📤 Output
One row per brewery, cidery, or brewpub record.
{"id": "5128df48-79fc-4f0f-8b52-d06be54d0cec","name": "(405) Brewing Co","brewery_type": "micro","address_1": "1716 Topeka St","address_2": null,"address_3": null,"city": "Norman","state_province": "Oklahoma","postal_code": "73069-8224","country": "United States","longitude": -97.46818222,"latitude": 35.25738891,"phone": "4058160490","website_url": "http://www.405brewing.com","state": "Oklahoma","street": "1716 Topeka St"}
💰 Pricing
Pay-Per-Event — pay only for what lands in your dataset.
| Event | Price | Trigger |
|---|---|---|
| Actor start | $0.20 | Once per run |
| Result | $0.002 | Per brewery record written |
At 1,000 results: $0.20 + 1000 × $0.002 = $2.20.
🚧 Limitations
- Covers only what Open Brewery DB itself covers — it does not include venues the source doesn't track, and it carries no beer/menu/tap-list data, only venue records.
- Only the current record per
id— no historical/versioned data. - Free-text
byCountry/byStatevalues are passed through unmodified; a near-miss spelling can genuinely return zero rows (the status message will name exactly what was searched).
❓ FAQ
Does this need an API key? No — Open Brewery DB is a free, keyless public API, and this Actor is keyless too.
What happens if my filter matches nothing? The run finishes successfully with zero rows and a status message naming the exact filter or query that matched nothing. That is a valid outcome, not a failure.
Can I search by radius around a coordinate?
Yes — use searchMode: "dist" with byDistLat/byDistLng. Results come back in the source's distance-sorted order.
How current is the data? Rows reflect Open Brewery DB's live API response at run time; it is a community-maintained open-data project, updated on its own schedule.
🙋 Your feedback
Found a brewery-type edge case or a field that doesn't map cleanly? Open an issue on the Actor's Apify Store page or reach out via DevilScrapes on Apify — we read every report.