# Untappd Scraper (`automation-lab/untappd-scraper`) Actor

🍺 Scrape public Untappd beer, brewery, rating, style, ABV/IBU, and recent check-in review data from search terms and beer URLs.

- **URL**: https://apify.com/automation-lab/untappd-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Untappd Scraper 🍺

Extract public Untappd beer, brewery, rating, and recent check-in data from search terms, beer detail URLs, and top-rated beer lists.

### What does Untappd Scraper do?

Untappd Scraper collects structured data from public Untappd pages.

It can save beer profile rows and recent public check-in or review rows in one clean dataset.

Use it to monitor beers, compare breweries, track styles, and export public beer intelligence.

### Who is it for?

Breweries use it to monitor competitor beers and public feedback.

Beverage marketers use it to understand styles, ratings, and user comments.

Distributors use it to shortlist popular beers and brewery signals.

Researchers use it to collect public beer trend data.

Data teams use it to feed dashboards and enrichment pipelines.

### Why use this actor?

It supports multiple input styles instead of only one beer URL.

It normalizes beer profile and check-in fields.

It runs with lightweight HTTP scraping, so small jobs are fast and affordable.

It includes optional proxy settings but does not spend proxy bandwidth by default.

### What data can you extract?

The actor can extract beer names, brewery names, styles, ABV, IBU, ratings, rating counts, total check-ins, unique user counts, monthly check-ins, descriptions, label images, recent check-in users, comments, ratings, timestamps, and check-in URLs.

### Data table

| Field | Description |
| --- | --- |
| entityType | `beer` or `checkin` |
| beerName | Public beer name |
| breweryName | Public brewery name |
| style | Beer style, such as IPA or Stout |
| abv | Alcohol by volume when visible |
| ibu | IBU when visible |
| rating | Public aggregate beer rating |
| ratingsCount | Number of ratings when visible |
| totalCheckins | Total check-ins on beer detail pages |
| monthlyCheckins | Recent monthly check-ins |
| comment | Public check-in comment text |
| checkinRating | Public user rating for a check-in |
| checkinTime | Public check-in timestamp |
| beerUrl | Canonical Untappd beer URL |

### How much does it cost to scrape Untappd beer data?

This actor uses pay-per-event pricing.

You pay a small start fee plus a per-item fee for each beer or check-in row saved.

Exact platform pricing is shown on the Apify Store page before you run the actor.

Keep `maxItems` low for test runs, then scale after confirming the output format.

### Input options

You can provide search terms such as `ipa`, `lager`, or a brewery name.

You can provide Untappd URLs for beer detail pages, search pages, or top-rated pages.

You can enable the top-rated page with `scrapeTopRated`.

You can control the total row count with `maxItems`.

You can control recent review depth with `maxCheckinsPerBeer`.

### Example input

```json
{
  "searchTerms": ["ipa"],
  "scrapeTopRated": false,
  "maxItems": 25,
  "maxCheckinsPerBeer": 3
}
````

### Example output

```json
{
  "entityType": "beer",
  "beerName": "IPA",
  "breweryName": "Lagunitas Brewing Company",
  "style": "IPA - American",
  "abv": 6.2,
  "ibu": 51,
  "rating": 3.687,
  "beerUrl": "https://untappd.com/b/lagunitas-brewing-company-ipa/4509",
  "scrapedAt": "2026-06-20T19:38:38.149Z"
}
```

### Recent check-in output

```json
{
  "entityType": "checkin",
  "beerName": "IPA",
  "breweryName": "Lagunitas Brewing Company",
  "userName": "Public user",
  "comment": "Public comment text when available",
  "checkinRating": 3.5,
  "checkinUrl": "https://untappd.com/user/example/checkin/123"
}
```

### How to run

Open the actor on Apify.

Enter search terms or Untappd URLs.

Set `maxItems` to a small value for the first run.

Set `maxCheckinsPerBeer` to 0 if you only need beer profile rows.

Start the run and export the dataset as JSON, CSV, Excel, or via API.

### Tips for better results

Use specific search terms such as brewery names or exact beer names.

Use direct beer URLs for the cleanest profile and check-in extraction.

Use top-rated mode for discovery workflows.

Keep review depth small when you only need aggregate beer metrics.

Use proxy settings only if your larger run gets throttled.

### Integrations

Send the dataset to Google Sheets for brewery tracking.

Send rows to BigQuery or Snowflake for analytics.

Use webhooks to refresh a BI dashboard after each run.

Use Apify API clients to schedule recurring beer market monitoring.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/untappd-scraper').call({
  searchTerms: ['ipa'],
  maxItems: 25,
  maxCheckinsPerBeer: 3
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/untappd-scraper').call(run_input={
    'searchTerms': ['ipa'],
    'maxItems': 25,
    'maxCheckinsPerBeer': 3,
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~untappd-scraper/runs?token=MY-APIFY-TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"searchTerms":["ipa"],"maxItems":25,"maxCheckinsPerBeer":3}'
```

### MCP integration

Use this actor from Claude Desktop or Claude Code through Apify MCP.

MCP tool URL:

```text
https://mcp.apify.com/?tools=automation-lab/untappd-scraper
```

Claude Code setup:

```bash
claude mcp add apify-untappd "https://mcp.apify.com/?tools=automation-lab/untappd-scraper"
```

Claude Desktop MCP server config:

```json
{
  "mcpServers": {
    "apify-untappd": {
      "url": "https://mcp.apify.com/?tools=automation-lab/untappd-scraper"
    }
  }
}
```

Example prompts:

- Scrape public Untappd data for top IPA beers and summarize the highest rated breweries.
- Monitor this beer URL and extract recent public check-in comments.
- Build a CSV of beer names, styles, ABV, IBU, ratings, and brewery URLs.

### Proxy and anti-bot notes

The actor uses HTTP requests and browser-like headers.

Proxy is disabled by default for cost control.

If a large run is throttled, enable Apify Proxy and retry with a smaller item limit first.

### Legality

This actor extracts public web data only.

Respect Untappd terms, privacy rules, and applicable laws.

Do not use scraped data for spam, harassment, or decisions that require user consent.

### Troubleshooting

If you get zero items, check that your URL is a public Untappd beer, search, or top-rated page.

If a run is slow, lower `maxItems` or set `maxCheckinsPerBeer` to 0.

If a page is temporarily blocked, retry later or enable proxy settings with a conservative limit.

### FAQ

#### Can it scrape private accounts?

No. It only targets public Untappd pages.

#### Can it scrape brewery pages?

The first version focuses on beer details, search results, top-rated lists, and recent public check-ins. Brewery page expansion can be added later.

#### Does it return reviews?

It returns public recent check-in comments when they are visible on beer detail pages.

#### Does it need a browser?

No. Current public pages expose useful data in HTML, so the actor uses lightweight HTTP scraping.

### Related scrapers

Explore other Automation Lab actors for review scraping, product monitoring, and social/listing extraction:

- https://apify.com/automation-lab
- https://apify.com/automation-lab/google-maps-scraper
- https://apify.com/automation-lab/trustpilot-scraper

### Changelog

Initial version extracts public Untappd beer rows and recent check-in rows.

### Support

If you need a new input mode, output field, or higher-volume workflow, open an issue on the actor page.

### Output quality checklist

Rows include source URLs for traceability.

Beer and check-in rows include `entityType` so exports are easy to filter.

Numeric fields are parsed into numbers where possible.

Missing public values are returned as null or omitted.

### Cost control checklist

Start with `maxItems` between 10 and 25.

Set `maxCheckinsPerBeer` to 0 for beer-only runs.

Avoid proxy unless needed.

Scale gradually after reviewing your first dataset.

# Actor input Schema

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

Beer, brewery, or style keywords to search on Untappd.

## `startUrls` (type: `array`):

Public Untappd beer detail, search, or top-rated URLs to scrape.

## `scrapeTopRated` (type: `boolean`):

Include the public Untappd top-rated beers page.

## `maxItems` (type: `integer`):

Maximum total beer and check-in rows to save.

## `maxCheckinsPerBeer` (type: `integer`):

How many recent public check-ins/reviews to collect from each beer detail page. Set 0 for beer rows only.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy settings. Leave disabled unless Untappd throttles your run.

## Actor input object example

```json
{
  "searchTerms": [
    "ipa"
  ],
  "startUrls": [
    {
      "url": "https://untappd.com/beer/top_rated"
    }
  ],
  "scrapeTopRated": true,
  "maxItems": 20,
  "maxCheckinsPerBeer": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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": [
        "ipa"
    ],
    "startUrls": [
        {
            "url": "https://untappd.com/beer/top_rated"
        }
    ],
    "scrapeTopRated": true,
    "maxItems": 20,
    "maxCheckinsPerBeer": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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": ["ipa"],
    "startUrls": [{ "url": "https://untappd.com/beer/top_rated" }],
    "scrapeTopRated": True,
    "maxItems": 20,
    "maxCheckinsPerBeer": 3,
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "ipa"
  ],
  "startUrls": [
    {
      "url": "https://untappd.com/beer/top_rated"
    }
  ],
  "scrapeTopRated": true,
  "maxItems": 20,
  "maxCheckinsPerBeer": 3
}' |
apify call automation-lab/untappd-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/untappd-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Untappd Scraper",
        "description": "🍺 Scrape public Untappd beer, brewery, rating, style, ABV/IBU, and recent check-in review data from search terms and beer URLs.",
        "version": "0.1",
        "x-build-id": "pFoH3OVOeghUp2ZdC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~untappd-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-untappd-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~untappd-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-untappd-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~untappd-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-untappd-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Beer, brewery, or style keywords to search on Untappd.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Untappd URLs",
                        "type": "array",
                        "description": "Public Untappd beer detail, search, or top-rated URLs to scrape.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "scrapeTopRated": {
                        "title": "Scrape top-rated beers",
                        "type": "boolean",
                        "description": "Include the public Untappd top-rated beers page.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum output items",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum total beer and check-in rows to save.",
                        "default": 25
                    },
                    "maxCheckinsPerBeer": {
                        "title": "Recent check-ins per beer",
                        "minimum": 0,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many recent public check-ins/reviews to collect from each beer detail page. Set 0 for beer rows only.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy settings. Leave disabled unless Untappd throttles your run.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
