Untappd Beer Reviews Scraper avatar

Untappd Beer Reviews Scraper

Pricing

from $0.48 / 1,000 item extracteds

Go to Apify Store
Untappd Beer Reviews Scraper

Untappd Beer Reviews Scraper

Extract recent public Untappd beer reviews and check-ins from supplied beer URLs, with ratings, comments, authors, timestamps and stable IDs for recurring beverage reputation analysis.

Pricing

from $0.48 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Collect recent public Untappd reviews for selected beers as one structured row per check-in. Breweries, beverage analysts, and research teams can refresh ratings and tasting comments for reputation analysis, then compare snapshots in their own spreadsheet or data pipeline.

Supply canonical beer page URLs. The Actor reads the anonymous public feed and returns stable check-in IDs, beer and brewery names, public author information, ratings, optional comments, UTC timestamps, and canonical links. It does not retrieve full history or private activity.

Who is it for?

Breweries can collect observed public feedback for their beers. Beverage researchers can compare ratings and comments across a selected catalog. Data teams can append timestamped snapshots to existing analysis workflows without treating a recent feed as historical completeness.

Why use this Actor?

  • Join recurring snapshots by stable check-in ID instead of matching text.
  • Keep unrated check-ins and comments without inventing missing values.
  • Receive one flat review row, rather than a beer-level summary containing nested activity.
  • Cap unique records globally across your selected beers.
  • Detect upstream failures through honest failed-run status, not a successful empty challenge page.

The public feed is a recent window, not an archive. Scheduling more frequently can reduce gaps but cannot guarantee complete capture.

Getting started

  1. Open the input editor.
  2. Paste one or more canonical Untappd beer URLs into Beer page URLs.
  3. Set Maximum review records per run if needed.
  4. Start the Actor and wait for a successful finish.
  5. Open the Reviews dataset and export JSON, CSV, Excel, or another supported Apify format.

Example input:

{
"beerUrls": [
"https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499"
],
"maxItems": 100
}

Input parameters

FieldBehavior
beerUrlsRequired array of 1–10 canonical HTTPS untappd.com/b/<slug>/<numeric-id> strings. No queries, fragments, login URLs, brewery URLs, or search routes.
maxItemsGlobal unique check-in cap; integer 1–200, default 100. Zero and unlimited are unsupported.

URLs are processed sequentially in input order. Duplicate canonical URLs, including a trailing-slash variant, are fetched only once. Check-in IDs are deduplicated globally. Once the record or billing limit is reached, later URLs are not fetched. Fewer records may be available than requested.

There are no search filters, keyword matching, historical date ranges, or stored cross-run state. Unknown input fields are rejected rather than ignored. US residential HTTP routing is automatic; users do not need to supply proxy credentials.

Untappd reviews output

FieldMeaning
checkinIdStable check-in identifier, stored as a string.
beerIdBeer identifier from the supplied URL.
beerNameBeer name on the check-in.
breweryNamePublic brewery name, or null.
authorNamePublic display name.
authorHandlePublic handle from the check-in link.
ratingNumeric score from 0 to 5, or null when absent.
commentPublic tasting/review text, or null when absent.
timestampSource check-in timestamp normalized to UTC ISO 8601.
checkinUrlCanonical public check-in URL.
beerUrlBeer link exposed on the record.
sourceUrlSupplied beer page used to collect the row.
scrapedAtUTC extraction timestamp.

A check-in need not contain text or a rating. Missing values stay null; zero ratings are not treated as missing. The Actor excludes unrelated beer entries rather than assigning them to the requested beer.

Example output

This illustrates the tested record structure with anonymized author and check-in identifiers:

{
"checkinId": "1234567890",
"beerId": "4499",
"beerName": "Pliny the Elder",
"breweryName": "Russian River Brewing Company",
"authorName": "Example Reviewer",
"authorHandle": "exampleuser",
"rating": 4.75,
"comment": null,
"timestamp": "2026-10-26T05:18:15.000Z",
"checkinUrl": "https://untappd.com/user/exampleuser/checkin/1234567890",
"beerUrl": "https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499",
"sourceUrl": "https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499",
"scrapedAt": "2026-10-26T06:00:00.000Z"
}

The default dataset contains the review records. The output tab also links to SUMMARY, a per-run JSON record with page, request, response-byte, and saved-record counts.

Coverage and limits

Only the initial recent anonymous public feed is collected. The number of visible check-ins varies by beer and source behavior; a tested page exposed 20 target-beer records. There is no pagination beyond that public snapshot, no full-history guarantee, and no access to login-only or private data.

Each unique beer requires a page request even when maxItems is small. The Actor does not download images or other browser assets. It uses at most three fresh residential identities per page, then stops with an error if the source still rejects access. A successful small snapshot does not establish universal access to every beer.

How much does it cost to collect Untappd beer reviews?

The Actor uses pay-per-event pricing: a $0.02 one-time start charge plus a charge for each unique public review saved. Empty pages, rejected rows, and duplicates have no review-event charge. The start charge may still apply when a requested beer fails upstream.

Apify spend tierPrice per review
FREE$0.00092
BRONZE$0.0008
SILVER$0.000624
GOLD$0.00048
PLATINUM$0.00048
DIAMOND$0.00048

For BRONZE, 1 saved review is approximately $0.0208, 20 reviews $0.036, and 100 reviews across multiple beers $0.10, including one start charge. FREE examples are $0.02092, $0.0384 and $0.112 respectively. These are event-price estimates, not guaranteed invoices; actual source volume and spending caps determine how many records are saved. Spend tiers follow Apify's qualifying monthly Store spend, not this Actor's record volume. Platform usage by this Actor is included in its event price. A higher record limit cannot force the source to expose additional reviews. Use Apify's run spending cap for additional billing control.

Integrations and recurring analysis

Schedule runs in Apify for recurring snapshots. Append records to Google Sheets, a database, or your warehouse, and deduplicate on checkinId. Group by beer and time to study observed ratings and comments. Preserve scrapedAt to distinguish collection time from the check-in timestamp.

Use Make, Zapier, n8n, webhooks, or the Apify API to fetch a successful run's dataset. Store long-term history downstream: this Actor does not maintain an archive, compare snapshots, or send sentiment/change alerts. Review source coverage before interpreting missing rows as deleted reviews.

API examples

Use an Apify token from an environment variable. Keep tokens out of shared URLs and source control.

cURL

curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
'https://api.apify.com/v2/acts/automation-lab~untappd-beer-reviews/runs' \
-d '{"beerUrls":["https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499"],"maxItems":100}'

Retain the returned run ID. Read /v2/actor-runs/RUN_ID until terminal with bounded backoff, then fetch /v2/datasets/DATASET_ID/items using its defaultDatasetId. Do not start a second run merely to check the first.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/untappd-beer-reviews').call({
beerUrls: ['https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499'],
maxItems: 100,
});
if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 100 });
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/untappd-beer-reviews').call(run_input={
'beerUrls': ['https://untappd.com/b/russian-river-brewing-company-pliny-the-elder/4499'],
'maxItems': 100,
})
if run['status'] != 'SUCCEEDED':
raise RuntimeError(f"Run {run['id']}: {run['status']}")
print(client.dataset(run['defaultDatasetId']).list_items(limit=100).items)

MCP use

Select this Actor explicitly in your MCP client:

claude mcp add --transport http apify \
'https://mcp.apify.com?tools=automation-lab/untappd-beer-reviews'

For Claude Desktop, Cursor, or VS Code with an HTTP-capable MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/untappd-beer-reviews"
}
}
}

Configure authentication using your client's Apify support. Discover actual tool names and input schemas with tools/list. Actor selection also includes run and storage tools; it does not expose exactly one tool. A private or not-yet-published Actor may not be discoverable.

Example prompt: “Collect up to 20 recent public check-ins for this canonical beer URL, then show ratings and comments with links. Do not infer full historical coverage.”

Start once and retain the run ID, status, and storage IDs. They are metadata, not result rows. If still running, check the same run with 2, 4, then 8-second delays capped at 10 seconds and a 120-second total deadline. Set client request timeouts above the selected server wait plus transport margin. Recover the known run after a timeout instead of restarting; if the ID is unknown, report uncertainty. At deadline, report pending with the run ID and stop. Failed-run rows are partial.

After success, read bounded dataset pages: for example 20 source rows per page, at most 100 rows or 64 KiB of serialized result content admitted to model context, whichever comes first. Enforce bytes host-side before model injection; disclose omitted or oversized content. If your client cannot intercept responses, do not claim a hard byte guarantee. Track source offsets, report truncation and the continuation offset, and keep full exports outside model context. Discovery caching and token savings depend on the client; no numerical savings are promised.

FAQ and troubleshooting

The run fails with a feed/challenge error. The source could not provide recognizable public records within the bounded attempts. Verify the URL in an anonymous browser. Do not interpret a challenge as “no reviews.”

The run returns fewer rows than maxItems. This cap is not a target. The source exposes only a recent window. Multiple URLs may overlap, and stable IDs are deduplicated.

One beer works and another fails. A later error makes the whole run FAILED; any already saved rows are partial. Inspect the log before using them as a complete snapshot. Correct malformed or unavailable URLs instead of scheduling blind repeats.

Can I search by beer name or collect brewery history? No. Supply canonical beer page URLs. Search, full history, private feeds, and authenticated APIs are outside this product's scope.

Legality and responsible use

Collect only public data you are entitled to process. Respect applicable law, source terms, privacy obligations, and downstream retention requirements. Public visibility does not grant unrestricted reuse rights. This Actor is independent of Untappd and is not an official Untappd API.

Data handling and diagnostic privacy

No AI models process user inputs or review records. Apify supplies compute, storage and residential proxy transport, paid by us through the event price. Public author names and handles appear only in the requested review output, not the request logs. Source pages are parsed in memory; no cookies or raw HTML are stored by the Actor. Your Apify account's storage-retention settings control datasets, run input, summaries and logs; delete these through Console or API when no longer needed. Downstream exports have their own retention. Ask through the Actor's Issues tab for bugs, questions, or data-handling help.

Failed operations send sanitized diagnostic input, exceptions, and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. Do not put secrets or private content in beer URLs.

This is a standalone recent-review specialist. No unpublished Untappd Actor is recommended as a supported integration. For broader analyses, combine its flat dataset with your own licensed product catalog and retain provenance for each source.