Self-hosted service
vogler/free-games-claimer avatar
vogler/free-games-claimer

free-games-claimer: Automated Epic, Prime Gaming and GOG Claims in a Container

Automatically claims free games and DLCs on the Epic Games Store, Amazon Prime Gaming and GOG.

4,237 stars287 forksJavaScriptAGPL-3.0

At a glance

What is it?
A Node.js and Playwright tool that logs into three storefronts and claims the current freebies on a schedule. Here is how the Docker path works, where it breaks, and who should skip it.
Who is it for?
Adopt it if you already run a home server or NAS with Docker, you want Epic, Prime Gaming and GOG freebies claimed without weekly reminders, and you accept that a captcha or a storefront redesign can stop a run. Skip it if you have no always-on machine, if you refuse to store storefront credentials in a container volume, or if you expect Steam support, since the repository ships a steam-games.js file but the README does not document it as a supported store.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 29 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The weekly freebie ritual this project replaces

Epic gives away games on a weekly rotation, Prime Gaming adds a batch each month, and GOG runs its own giveaways. Each one requires a logged-in session and a click on a claim button before a deadline. Miss the window and the game is gone, often permanently. The README frames the tool as something that "claims free games periodically" on those three stores, plus an experimental Unreal Engine asset path that shares the Epic login.

The target user is not a developer looking for a library. It is someone who already knows they will forget, and who has a machine that is on when they are not. The README's own suggestion is to run it in a virtual machine, on a server, or to wake a PC at night. That is the honest shape of the requirement: this is a scheduled job, not an interactive app. If your computer is off most of the day, the tool has nothing to run on, and the Docker path assumes a host that stays up.

It is also worth being clear about the scope. The repository is JavaScript, licensed AGPL-3.0-only, and the package version in package.json is 1.4.0 while the newest tagged release is v1.8. That mismatch is normal for repositories that tag releases without bumping the manifest, but it means you should read the release tag, not the version field, when you care about what changed.

Playwright, a virtual display and a persistent browser profile

Every script in the repository follows the same pattern: it starts an automated Firefox instance through Playwright, drives it to the storefront, and clicks through the claim flow. The dependency list names playwright-firefox, plus fingerprint-injector and puppeteer-extra-plugin-stealth, which are there to make the automated browser look less like an automated browser. The README states plainly that by default you will not see a browser open on your host system.

The interesting part is how you interact with it when you must. Inside Docker the browser runs against a virtual display, and the container exposes noVNC on port 6080 and a VNC server on port 5900. The docker-compose.yml comments label 5900 as "VNC server" and 6080 as "noVNC (browser-based VNC client)". So the flow is: the script opens Firefox inside the container, and you open a browser tab on your own machine to watch and click. That is how the first login works when prompts are not enough.

State lives in a Docker volume named fgc mounted at /fgc/data. The README says that volume holds the JSON files with claimed games, codes to redeem, and screenshots. The browser profile lives under BROWSER_DIR, default data/browser, which is what lets a second run skip the login. If you lose that volume, you lose the session and start over.

Docker setup and a first claim

The README calls Docker the easy option. Install Docker or podman, then run the published image. The default command runs all three store scripts in sequence, so this single line attempts Epic, Prime Gaming and GOG.

bash
docker run --rm -it -p 6080:6080 -v fgc:/fgc/data --pull=always ghcr.io/vogler/free-games-claimer

The README documents a caveat on this path: as of the issue it links (#183), the Docker run gives a captcha challenge for epic-games, and the recommendation is to run node epic-games without Docker until that is fixed. That is a real limitation, not a footnote, and it is the single most important thing to know before you build a routine around the container.

To claim on one store only, append the script name to override the default command. The README gives this example, and the same pattern works for gog or prime-gaming.

bash
docker run --rm -it -p 6080:6080 -v fgc:/fgc/data --pull=always ghcr.io/vogler/free-games-claimer node epic-games

If you prefer Compose, the repository ships a docker-compose.yml with the container named fgc, the image ghcr.io/vogler/free-games-claimer, port 6080 published, and the fgc volume mounted at /fgc/data. The VNC port 5900 is present but commented out, and the command and environment entries are commented so you can uncomment EMAIL or NOTIFY. Start it with docker compose up.

Without Docker, the README lists the steps: install Node.js, clone the repository and cd into it, run npm install, optionally pip install apprise for notifications, then run node epic-games, node prime-gaming or node gog.

bash
npm install
pip install apprise
node epic-games
node prime-gaming
node gog

Playwright downloads its Firefox during npm install, and if system libraries are missing the README points to sudo npx playwright install firefox --with-deps. On the first run for each store the scripts wait for you to log in, either through terminal prompts for email, password and a one-time code, or by pressing escape and logging in through the browser. Nothing is claimed until that login completes, and subsequent runs should reuse the stored profile.

Captchas, logins and the stores that fight back

The README is unusually candid about failure. It notes that the Docker path currently triggers a captcha for Epic, and it links an open issue. It also warns that if the script still waits after you are already logged in, you should restart it and open an issue. That sentence is the maintenance reality of the project in miniature: storefronts change their login and claim flows, and a scraper built on top of them breaks when they do.

There is a second class of failure that has nothing to do with code. Amazon Prime Gaming requires an active Prime subscription, and the tool claims the games attached to that account. If the subscription lapses, the script will still run and still log in, and there will be nothing to claim. The same applies to any account-level restriction: the tool automates a click, it does not create entitlement.

A third limitation is platform. The README states it works on Windows, macOS and Linux, and that Raspberry Pi 3, 4 and Zero 2 require a 64-bit OS such as Raspberry Pi OS or Ubuntu, because Raspbian is 32-bit and will not work. If your always-on box is an old 32-bit Pi, this is the wrong tool. The related searches include an Android query, and nothing in the documentation describes an Android build, so treat that as a question with no supported answer here.

How it differs from a browser extension or a reminder

The obvious alternative is a browser extension that adds a claim button or auto-clicks on the store page. The difference is architectural. An extension runs inside a browser you have open, on a machine you are using, and it stops when the tab closes. free-games-claimer runs a browser it controls, on a schedule, on a host that does not need you present. That is why the Docker image exists and why the README talks about servers and VMs. If you want a claim to happen while you sleep, the extension model cannot do it, and the container model can.

The other alternative is a reminder: a calendar entry or a notification that tells you to go claim the games yourself. That approach never stores credentials in a volume, never risks a captcha loop, and never breaks when a storefront changes its markup. It also fails exactly the way the project exists to prevent, which is that you ignore the reminder. The honest comparison is that free-games-claimer trades reliability for autonomy. You get claims without attention, and you accept that some weeks it will not work and you will not know unless you configured NOTIFY.

On notifications, the README lists NOTIFY and NOTIFY_TITLE as environment variables and points at Apprise, naming Pushover, Slack and Telegram as examples. That is the mechanism that closes the loop: without it, a failed run is silent.

Upgrades, the AGPL licence and what you are storing

Upgrades are cheap if you use the container. The README's run command includes --pull=always, so each start fetches the current image, and the data volume survives. For a source checkout the README gives git pull; npm install as the update step. The release history shows a long gap: v1.6 was tagged in December 2023, v1.7 in March 2025, and v1.8 in May 2025, with the last push to the repository on 2026-09-02. The repository is not archived. That cadence suggests bursts of work rather than steady releases, which matters if you depend on a fix for a broken storefront flow.

The licence is AGPL-3.0-only per package.json, and the LICENSE file sits at the repository root. The practical point for most readers is that this is a strong copyleft licence, and if you modify the code and offer it as a network service, the AGPL's terms differ from permissive licences. That is a description of the licence, not legal advice; if you plan to run a modified version for other people, read the licence text or ask someone qualified.

The other cost is what the volume holds. The README says the data directory contains claimed-game JSON, redeem codes and screenshots, and the browser profile under data/browser. That profile is a logged-in session for your store accounts. Treat the fgc volume as a credential store, and note that the README's VNC_PASSWORD option is empty by default, meaning no password, with the README itself flagging that with an exclamation. If port 6080 is reachable from anywhere but your own machine, anyone who finds it can watch and drive a logged-in browser.

Editorial conclusion

Adopt it if you already run a home server or NAS with Docker, you want Epic, Prime Gaming and GOG freebies claimed without weekly reminders, and you accept that a captcha or a storefront redesign can stop a run. Skip it if you have no always-on machine, if you refuse to store storefront credentials in a container volume, or if you expect Steam support, since the repository ships a steam-games.js file but the README does not document it as a supported store. Before relying on it, verify three things: that the noVNC endpoint at port 6080 opens, that the Docker volume fgc persists the data directory across restarts, and that you can complete a first login for each store, because nothing is claimed until that login succeeds.

Frequently asked questions

What is free-games-claimer and which stores does it support?

It is a JavaScript tool that claims free games periodically on the Epic Games Store, Amazon Prime Gaming and GOG, with an experimental Unreal Engine asset path that shares the Epic login. The README lists those three stores as the main targets.

How do I install free-games-claimer with Docker?

The README's easy option is to install Docker or podman and run the published image with port 6080 published and the fgc volume mounted at /fgc/data. The README notes that this path currently gives a captcha challenge for epic-games and suggests running node epic-games without Docker until that is fixed.

Is there a free-games-claimer alternative that does not need a server?

The documentation only describes this project's own approach, which assumes an always-on host such as a server, a VM or a PC you wake at night. A browser extension or a manual reminder is the other shape of solution, but the README does not compare the project to either.

Does free-games-claimer work on a Raspberry Pi?

The README states it works on Raspberry Pi 3, 4 and Zero 2 only with a 64-bit OS such as Raspberry Pi OS or Ubuntu, because Raspbian is 32-bit and will not work.

Where does free-games-claimer store my data and login session?

In the Docker volume fgc, mounted at /fgc/data, which the README says holds JSON files with claimed games, codes to redeem and screenshots. The browser profile lives under BROWSER_DIR, default data/browser, and is what lets later runs skip the login.

How do I get notified when free-games-claimer claims or fails?

Set the NOTIFY environment variable, optionally with NOTIFY_TITLE, using Apprise. The README names Pushover, Slack and Telegram as examples of the services Apprise can reach.

Official sources

  1. Issues
  2. License: AGPL-3.0
  3. README
  4. Releases
  5. vogler/free-games-claimer on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vogler-free-games-claimer.svg)](https://hysenlabs.com/projects/vogler-free-games-claimer)