# Untappd Scraper \[💰$0.06/1K] | Beer Data | ABV | Reviews (`ahmed_jasarevic/untappd-scraper`) Actor

Extract Untappd beer data without an API key: style, ABV, IBU, ratings and check-in counts, plus a searchable world beer catalog and recent check-in reviews. $0.06 per 1K beers.

- **URL**: https://apify.com/ahmed\_jasarevic/untappd-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / 1,000 beers

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Untappd Scraper — Beer Data, Ratings & Check-In Reviews

Extract structured data from **Untappd.com** — the world's largest beer social network — without an API key. Search by keyword (beer, brewery, style), scrape individual **beer pages by URL or ID**, or scrape a complete **brewery catalog** (brewery profile + full beer list). Collect beer metadata (style, ABV, IBU, ratings, check-in counts) plus recent **public check-in reviews** (rating, comment, user, venue, date) in two clean datasets. The cheapest beer-data actor on the Store at **$0.00004 per beer row** and **$0.000001 per review row**.

### Main Use Cases

- **Beer market research** — ABV, IBU, style and rating benchmarks by brewery, style or country.
- **Craft beer trend analysis** — ratings and check-in velocity for new releases and breweries.
- **Brewery catalog building** — full brewery catalogs (profile + beer list) for menus, databases and apps.
- **Pub & tap-list analytics for venues** — recent check-ins with venue context per beer.
- **Competitive intelligence for drinks distributors** — what's trending where.

### How It Works

The actor uses Untappd's **public pages** (plain scraping of beer, brewery and activity pages — no login, no token). You point it at search terms, beer URLs/IDs and/or brewery URLs/IDs, and it walks each target: search results pages, brewery profile + beer lists, and per-beer **activity pages** (up to 10 per beer) for recent public reviews. Beer metadata rows and activity (review) rows are collected in parallel, each capped independently, and written to two separate datasets.

### Search Beer Ratings & Reviews Without the Untappd API

Untappd's official API v4 (api.untappd.com) requires **registration for client credentials**, enforces a tight **~100 calls/hour per client**, and its public endpoints are **rate-limited and restricted** — venue-level and trending data are not reliably available to standard keys. This actor needs no token and no key: give it search terms, beer URLs, brewery URLs, or all three, and get clean JSON rows for beers, breweries and their recent check-ins.

### Build a Searchable Beer Catalog From Brewery Pages

Pass **brewery URLs** (e.g. `https://untappd.com/brewery/18099`) or **brewery IDs** and the actor scrapes the brewery profile plus its **full beer list** — the fastest way to assemble a complete catalog for one brewery, or reference a list of breweries to cover an entire segment.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `searchTerms` | array | No | — | Beer, brewery, or style keywords to search (e.g. `Pliny the Elder`, `Russian River`, `IPA`). |
| `beerUrls` | array | No | `[]` | Public beer page URLs, e.g. `https://untappd.com/b/pliny-the-elder-18099`. |
| `beerIds` | array | No | `[]` | Numeric beer IDs, e.g. `18099`. |
| `breweryUrls` | array | No | `[]` | Public brewery page URLs — brewery catalog mode (profile + full beer list). |
| `breweryIds` | array | No | `[]` | Numeric brewery IDs, e.g. `18099`. |
| `maxBeerRows` | integer | No | `10` | Max beer/brewery metadata rows to save. `0` = reviews only. Max 10,000. |
| `maxActivityRows` | integer | No | `50` | Max review (drinking-activity) rows across all beers. `0` = beer metadata only. Max 10,000. |
| `reviewsPerBeer` | integer | No | `10` | Max recent reviews per beer (spreads your review budget across beers; paginates up to 10 activity pages). 1–50. |
| `proxy` | object | No | Apify proxy off | Residential proxies recommended for big runs. |

### Example Input

```json
{
  "searchTerms": ["Pliny the Elder", "Cantillon"],
  "breweryUrls": ["https://untappd.com/brewery/18099"],
  "maxBeerRows": 100,
  "maxActivityRows": 500,
  "reviewsPerBeer": 10
}
```

### Example Output (beer metadata row — default dataset)

```json
{
  "beer": "Pliny the Elder",
  "brewery": "Russian River Brewing Company",
  "style": "Double IPA",
  "abv": 8.0,
  "ibu": 100,
  "rating": 4.51,
  "rating90day": 4.5,
  "checkInCount": 734176,
  "uniqueUsers": 125823,
  "breweryCountry": "United States",
  "breweryState": "California",
  "breweryCity": "Santa Rosa",
  "breweryUrl": "https://untappd.com/RussianRiverBrewing",
  "beerUrl": "https://untappd.com/b/pliny-the-elder-russian-river-brewing-company/1598"
}
```

#### Activity (review) row — separate dataset

`userName`, `userBeerCount`, `beerName`, `beerStyle`, `beerAbv`, `beerIbu`, `beerRating`, `brewery`, `venue`, `venueCity`, `venueCountry`, `rating`, `checkinComment`, `checkinThumbnail`, `checkedInAgoInMinutes`, `checkinUrl`, `untappdWebUrl`.

### Track Ratings & Check-In Trends Over Time

Beer rows carry both the **lifetime rating** and a **90-day rating** plus check-in velocity (`checkInCount`, `uniqueUsers`) — schedule weekly or monthly runs per brewery or style to watch sentiment and momentum, all in one growing dataset.

### Integrations & Automation

- **Apify API** — feed beer/rating data into dashboards, menus, POS apps or market research.
- **Scheduling** — weekly brewery or style tracking, monthly catalog refreshes.
- **Export** — JSON, CSV, Excel, HTML.

*Recommended schedule:* weekly for trend monitoring; monthly for full catalog refreshes.

### Related Actors

- [Untappd Beer Review Scraper](https://apify.com/parseforge/untappd-beer-review-scraper) — user check-ins with search, brewery and venue endpoints.
- [Untappd Scraper – Beer Reviews & Checkins](https://apify.com/automation-lab/untappd-scraper) — search, user activity and beer-by-venue data.
- [Untappd Scraper – Beer Data](https://apify.com/lulzasaur/untappd-scraper) — Untappd beer, brewery, venue and check-in data.
- [Untappd Scraper (Tokenless)](https://apify.com/maximedupre/untappd-scraper) — official-API-free Untappd beer search with reviews.
- [Untappd Beer & Brewery Scraper](https://apify.com/crawlerbros/untappd-beer-brewery-scraper) — per-brewery beer info plus user reviews.

### FAQ

#### Why use this actor instead of the official Untappd API?

Untappd's official API v4 needs **client\_id/client\_secret registration**, caps usage at roughly **100 calls per hour per client**, and its public tier is rate-limited and restricted — venue lists, trending and several data points are simply unavailable to standard keys. This actor uses Untappd's public pages directly: no token, no key, no hourly cap, and cheaper per row than any keyed alternative.

#### What are alternatives to this actor / Untappd data?

- [maximedupre/untappd-scraper](https://apify.com/maximedupre/untappd-scraper) — tokenless search (from ~$0.000065/beer).
- [automation-lab/untappd-scraper](https://apify.com/automation-lab/untappd-scraper) — search/activity/venue (from ~$0.000074/result).
- [parseforge/untappd-beer-review-scraper](https://apify.com/parseforge/untappd-beer-review-scraper) — $0.008/result.
- [lulzasaur/untappd-scraper](https://apify.com/lulzasaur/untappd-scraper) — $0.01/result.

#### How can I get every beer from one brewery?

Use brewery mode: pass the brewery's public page URL or numeric ID in `breweryUrls`/`breweryIds` (e.g. `https://untappd.com/brewery/18099`) — the actor scrapes the brewery profile plus the full beer list as beer-metadata rows.

#### What is the best way to watch a brewery's new releases?

Run weekly with the brewery's URL/ID (or name as `searchTerms`) and read row ratings/check-in counts across runs — the 90-day rating (`rating90day`) highlights momentum shifts.

#### How do I get check-in reviews and venues?

Set `maxActivityRows` to your budget — recent check-ins (user, rating, comment, venue, city, country) land in the separate activity dataset, distributed across beers via `reviewsPerBeer`.

### SEO Keywords

untappd scraper, beer ratings data, untappd api alternative, beer review mining, brewery catalog data, abv ibu data, check-in count beer, craft beer trend analysis, untappd beer data, beer metadata api, drink menu database, tap list data, untappd checkins, beer style benchmark, untappd brewery data, tokenless untappd

### For AI Agents & LLM Apps

- **Purpose:** given `searchTerms`, beer URLs/IDs and/or brewery URLs/IDs, returns one row per beer with metadata (style, ABV, IBU, lifetime + 90-day ratings, check-in counts, brewery location) and one row per recent check-in review (user, rating, comment, venue, date) in a separate activity dataset.
- **Minimal input:**

```json
{ "searchTerms": ["Westvleteren 12"], "maxBeerRows": 25 }
```

- **Variant — direct beer lookup:**

```json
{ "beerIds": [18099], "maxActivityRows": 200, "reviewsPerBeer": 20 }
```

- **Variant — full brewery catalog:**

```json
{ "breweryUrls": ["https://untappd.com/brewery/18099"], "maxBeerRows": 200 }
```

- **Output field list (default dataset):** `beer`, `brewery`, `style`, `abv`, `ibu`, `rating`, `rating90day`, `checkInCount`, `uniqueUsers`, `breweryCountry`, `breweryState`, `breweryCity`, `breweryUrl`, `beerUrl`, `beerThumbnail`
- **Activity dataset field list:** `userName`, `userBeerCount`, `beerName`, `beerStyle`, `beerAbv`, `beerIbu`, `beerRating`, `brewery`, `venue`, `venueCity`, `venueCountry`, `rating`, `checkinComment`, `checkinThumbnail`, `checkedInAgoInMinutes`, `checkinUrl`, `untappdWebUrl`

Behaviors an agent should know:

- **Two datasets per run:** beer metadata rows and activity (review) rows are separate; the activity dataset only exists when `maxActivityRows > 0`.
- `maxBeerRows: 0` → beer metadata off (reviews only); `maxActivityRows: 0` → reviews off (metadata only). Both are independent caps.
- `reviewsPerBeer` spreads the review budget across beers — pagination walks up to 10 activity pages per beer.
- Modes stack: search terms + beer targets + brewery targets can all be combined in one run.
- **Proxy off by default** (`useApifyProxy: false`) — enable residential proxies for large runs (e.g. 10k beer rows, deep activity pagination).
- **Billing:** pay-per-event — `apify-default-dataset-item` $0.00004/beer row, `drinking-activity` $0.000001/review row, + Actor Start ~$0.00005.

### Legal & Compliance Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Untappd (Next Glass, Inc.). It accesses only publicly viewable beer and user-activity data at standard browsing volumes — no login bypass, no private accounts. Users are responsible for complying with Untappd's Terms of Service and applicable data-protection law. Review comments and ratings should be used for legitimate market research and analytics, with attribution to Untappd where published.

# Actor input Schema

## `searchTerms` (type: `array`):

Beer, brewery, or style keywords to search on Untappd (e.g. "Pliny the Elder", "Russian River", "IPA").

## `beerUrls` (type: `array`):

Public Untappd beer page URLs, e.g. https://untappd.com/b/pliny-the-elder-18099

## `beerIds` (type: `array`):

Numeric Untappd beer IDs, e.g. 18099

## `breweryUrls` (type: `array`):

Public Untappd brewery page URLs, e.g. https://untappd.com/brewery/18099 (brewery catalog mode — scrapes the brewery profile plus its full beer list).

## `breweryIds` (type: `array`):

Numeric Untappd brewery IDs, e.g. 18099

## `maxActivityRows` (type: `integer`):

How many drinking-activity / review rows to collect in total across all beers (rating, comment, user, venue, date). Set 0 for beer metadata only.

## `maxBeerRows` (type: `integer`):

How many beer / brewery profile rows to save (style, ABV, IBU, ratings, brewery catalog). Set 0 for reviews only.

## `reviewsPerBeer` (type: `integer`):

How many recent public reviews to take from each beer page. Used to spread your total review budget across beers (pagination walks up to 10 activity pages per beer).

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "searchTerms": [
    "Pliny the Elder"
  ],
  "beerUrls": [],
  "beerIds": [],
  "breweryUrls": [],
  "breweryIds": [],
  "maxActivityRows": 50,
  "maxBeerRows": 10,
  "reviewsPerBeer": 10,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `beers` (type: `string`):

No description

## `activity` (type: `string`):

No description

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "Pliny the Elder"
    ],
    "beerUrls": [],
    "beerIds": [],
    "breweryUrls": [],
    "breweryIds": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/untappd-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["Pliny the Elder"],
    "beerUrls": [],
    "beerIds": [],
    "breweryUrls": [],
    "breweryIds": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/untappd-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "Pliny the Elder"
  ],
  "beerUrls": [],
  "beerIds": [],
  "breweryUrls": [],
  "breweryIds": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/untappd-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/untappd-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lTDbtEPqQuuhKiPHM/builds/H5iuqMzfWNGVs7iYN/openapi.json
