Untappd Beer Review Scraper avatar

Untappd Beer Review Scraper

Pricing

from $0.04 / 1,000 saved beers

Go to Apify Store
Untappd Beer Review Scraper

Untappd Beer Review Scraper

Collect public beer profiles from Untappd top-rated lists, beer or brewery URLs, beer IDs, and search terms. Save ratings, ABV, IBU, brewery details, source URLs, and visible public check-ins in one dataset row per beer. Missing scalar fields stay null.

Pricing

from $0.04 / 1,000 saved beers

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

8 days ago

Last modified

Share

🍺 Untappd beer review data for brewery research

Breweries, beer distributors, market researchers, and bar or bottle-shop teams can collect public Untappd beer profiles in one structured Apify dataset. Each saved row contains beer identity, brewery details, ratings, ABV, IBU, check-in totals, source links, and visible public check-ins when Untappd shows them. This gives you structured beer data for research, review monitoring, and planning without copying fields from public pages by hand.

This Untappd scraper is useful for brewery research, beer market analysis, review monitoring, bar or bottle-shop planning, content research, and repeatable beer datasets.

📊 Beer profiles and visible check-ins

Each dataset row is one public beer. A row can include its name, Untappd links, brewery, style, ABV, IBU, rating, rating count, total check-ins, description, label image, and source rank. Public check-ins are nested in the checkins array, so beer details and check-in context stay together.

The output is built around beer rows, not separate check-in rows. That keeps exports easy to join with beer metadata while still giving you recent public check-in context when Untappd exposes it.

Public source data

The Actor keeps values grounded in what Untappd shows. Missing scalar values are returned as null, and checkins is an empty array when no public check-ins are shown. The Actor does not promise a complete historical check-in archive for every beer.

🚀 Collect public Untappd beer data

  1. Leave targets empty for top-rated discovery, or add public beer URLs, brewery URLs, beer IDs, and search terms.
  2. Set beerStyle when you want to narrow top-rated discovery to a public Untappd style.
  3. Set maxRecords to the number of beer rows you want. Leave it empty to collect all available rows until the source is exhausted.
  4. Start the Actor and open the dataset in Apify Console.

For a quick first run, use one target or a small maxRecords value such as 25. After you review the row shape, add more targets or raise the limit.

⚙️ Input

Input fields

FieldTypeWhat it does
targetsarray of stringsMix public beer URLs, brewery URLs, beer IDs, and search terms. Leave it empty for top-rated beer discovery.
beerStylestringNarrows top-rated discovery to a public Untappd beer style, such as IPA - Imperial / Double.
maxRecordsintegerOptional limit for saved beer rows across all targets. Leave it empty to collect all available rows until the source is exhausted.

Target examples

  • Beer URL such as https://untappd.com/b/the-alchemist-heady-topper/4691
  • Brewery URL such as https://untappd.com/w/sierra-nevada-brewing-co/1142
  • Beer ID such as 4691
  • Search term such as Pliny the Elder

Example input

This is the public input from a successful default-input run:

{
"targets": [
"https://untappd.com/b/the-alchemist-heady-topper/4691",
"https://untappd.com/w/sierra-nevada-brewing-co/1142",
"Pliny the Elder",
"Bud Light",
"Guinness Draught"
],
"beerStyle": "",
"maxRecords": 100
}

You can submit up to 1,000 target entries in one run.

🧾 Output

Beer row fields

FieldTypeWhat it does
beerIdstringStable Untappd ID for the beer.
beerUrlstringPublic Untappd page for the beer.
beerNamestringBeer name shown on Untappd.
breweryNamestring or nullBrewery name shown on Untappd, when available.
breweryUrlstring or nullPublic Untappd page for the brewery, when available.
beerStylestring or nullBeer style shown on Untappd, when available.
abvPercentnumber or nullAlcohol by volume as a percent, when available.
ibuinteger or nullBitterness value in IBU, when available.
globalRatingnumber or nullUntappd beer rating from 0 to 5, when available.
ratingCountinteger or nullNumber of ratings used for the beer rating, when available.
totalCheckinsinteger or nullTotal check-ins as a whole number, when available.
totalCheckinsTextstring or nullCheck-in count as shown by Untappd, including text such as K, M, or +.
descriptionstring or nullPublic beer description from Untappd, when available.
imageUrlstring or nullPublic URL for the beer label image, when available.
sourceRankinteger or nullPosition in a top-rated, search, or brewery list. It is null for direct beer targets.
checkinsarray of objectsPublic check-ins found for the beer. It is empty when none are shown.
checkins[].checkinIdstringStable Untappd ID for the check-in.
checkins[].checkinUrlstringPublic Untappd page for the check-in.
checkins[].checkinDatestring or nullDate or time shown for the check-in, when available.
checkins[].userNamestring or nullUser name shown for the check-in, when available.
checkins[].userSlugstring or nullUntappd user name slug, when available.
checkins[].userProfileUrlstring or nullPublic Untappd page for the user, when available.
checkins[].userAvatarUrlstring or nullPublic URL for the user's avatar, when available.
checkins[].ratingnumber or nullCheck-in rating from 0 to 5, when available.
checkins[].commentstring or nullPublic text in the check-in, when available.
checkins[].servingStylestring or nullServing style such as Draft, Can, or Bottle, when available.
checkins[].venueNamestring or nullVenue name on the check-in, when available.
checkins[].venueUrlstring or nullPublic Untappd page for the venue, when available.
checkins[].purchasedFromstring or nullPlace where the beer was bought, when shown.
checkins[].photoUrlsarray of stringsPublic photo URLs attached to the check-in.

Example beer row

This genuine row from a successful current-beta run is shortened. It keeps one real public check-in and uses the JSON string "..." to mark the omitted check-ins.

{
"beerId": "6674918",
"beerUrl": "https://untappd.com/b/sierra-nevada-brewing-co-hoptimum-2026/6674918",
"beerName": "Hoptimum (2026)",
"breweryName": "Sierra Nevada Brewing Co.",
"breweryUrl": "https://untappd.com/SierraNevada",
"beerStyle": "IPA - Triple",
"abvPercent": 11,
"ibu": 75,
"globalRating": 4.1375,
"ratingCount": 1484,
"totalCheckins": 1860,
"totalCheckinsText": "1,860",
"description": "Fancy seeing me here! After all, the place can hardly hold 11% — I’m scraping the rafters. Makes for a good view, and it’s clear when a room needs what I’ve got in spades: fruity, dank, and devilishly hoppy flavor. Your night is looking up. Savor it and don’t blink because I like to vanish in a puff of lupulin dust. Show Less",
"imageUrl": "https://assets.untappd.com/site/beer_logos/beer-11810_1c68a_sm.jpeg",
"sourceRank": 4,
"checkins": [
{
"checkinId": "1593590563",
"checkinUrl": "https://untappd.com/user/cdyde/checkin/1593590563",
"checkinDate": "Wed, 12 Aug 2026 23:34:02 +0000",
"userName": "Chris Yde",
"userSlug": "cdyde",
"userProfileUrl": "https://untappd.com/user/cdyde",
"userAvatarUrl": "https://assets.untappd.com/profile/73b9a41deefd0a0d0f08e6b7f1f5a893_100x100.jpg",
"rating": 4,
"comment": null,
"servingStyle": "Taster",
"venueName": "Lowes Foods #214 - Morehead City",
"venueUrl": "https://untappd.com/v/lowes-foods-214-morehead-city/2721997",
"purchasedFrom": "Lowes Foods #214 - Morehead City",
"photoUrls": [
"https://images.untp.beer/crop?width=640&height=640&stripmeta=true&url=https://untappd.s3.amazonaws.com/photos/2026_08_12/f7935f691c9b4669af97d8a12f36cf70_c_1593590563_raw.jpg"
]
},
"..."
]
}

💳 Pricing

Saved beer

The Actor uses pay-per-event pricing and charges for each public beer saved to the dataset. The tiered price is $0.000075 to $0.000018 per saved beer across Apify plans. Visible public check-ins stay inside that beer row and are not charged as separate rows.

Start with a small maxRecords value if you want to review a small dataset first.

🔌 Integrations

Apify workflow

Open the dataset in Apify Console, read it through the Apify API, schedule repeat runs, or use webhooks and available Apify integrations. You can export the dataset in the formats offered by Apify.

You can export results as JSON, CSV, Excel, XML, RSS, or HTML when those formats are offered by Apify.

❓ FAQ

Do I need an Untappd account or API key?

No. The Actor reads public Untappd pages and does not ask for an Untappd account, cookies, passwords, login details, or an API key. It does not scrape private, friends-only, logged-in-only, or account-specific data.

What happens when I leave targets empty?

The Actor uses top-rated beer discovery. Add beerStyle if you want to narrow that discovery to a public Untappd style, such as IPA - Imperial / Double, Stout - Imperial / Double, or Sour - Fruited.

Can I mix beer URLs, brewery URLs, beer IDs, and search terms?

Yes. Add them together in targets. The Actor uses each value to find public beer data.

Are check-ins separate dataset rows?

No. The dataset saves one row per beer. Visible public check-ins are nested in the checkins array inside that beer row.

Why is a field null or a check-ins list empty?

Untappd may not show every field on every public page. The Actor keeps available values, uses null for missing scalar values, and uses an empty array when no check-ins are shown.

Can I collect beers from a brewery page?

Yes. Add a public Untappd brewery URL to targets. The Actor discovers public beer links from that page and saves beer rows until it reaches your limit or the source is exhausted.

Does this return every historical check-in for a beer?

No. It returns the visible public check-ins that Untappd exposes on the collected beer page. It does not promise a complete historical archive.

Why can a run return fewer beers than my limit?

Public source pages may show fewer beers, omit fields, or expose no usable data. The Actor saves available beer rows and does not guarantee a result count.

How can I keep a first run small?

Set maxRecords to a small positive number such as 25, then review the dataset before raising the limit or adding more targets.

📝 Changelog

v0.1

  • Simplified the input form.
  • Included visible public check-ins by default.
  • Lowered saved-beer pricing.

v0.0

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré