FreePackages
An ASF plugin for finding and redeeming free Steam games
Install / Use
/learn @Citrinate/FreePackagesREADME
Free Packages Plugin for ArchiSteamFarm
Introduction
This plugin finds free packages on Steam and adds them to your account.
This plugin works by listening for changes to Steam's PICS. The plugin can discover new packages as they're released, but is limited due to PICS not showing all old changes. As a result, the plugin can only discover packages that have changed recently, usually in the last ~12 hours. To ensure that some of the more popular free packages aren't missed, the plugin also monitors certain free games subreddits (using ASFinfo).
Installation
- Download the .zip file from the latest release
- Locate the
pluginsfolder inside your ASF folder. Create a new folder here and unpack the downloaded .zip file to that folder. - (Re)start ASF, you should get a message indicating that the plugin loaded successfully.
[!NOTE] This plugin is only tested to work with ASF-generic. It may or may not work with other ASF variants, but feel free to report any issues you may encounter.
Quick Start Guide
All configuration is added to your existing BotName.json files found in the config folder inside your ASF folder. Add the following lines to BotName.json to enable package redemption for that specific bot:
"EnableFreePackages": true,
"PauseFreePackagesWhilePlaying": true,
The plugin will redeem everything except for demos and playtests by default. Filters may be used to add custom restrictions. If you don't want all free packages, here's a generally useful filter you can add to BotName.json to tell the plugin to only redeem:
- Limited-time only free games, and games that increase the games counter on your profile
- Games with trading cards
- Free DLC for your already owned games
"FreePackagesFilters": [{
"NoCostOnly": true,
},{
"Categories": [29],
},{
"Types": ["DLC"],
"IgnoredTypes": ["Game", "Application"],
}],
If you'd like to redeem absolutely everything, adding this filter to BotName.json tells the plugin to include demos and playtests (note: only 1 bot can be configured to join playtests):
"FreePackagesFilters": [{
"IgnoredTypes": [],
"PlaytestMode": 3,
}],
After you're done editing your config files, (re)start ASF and use the !qsa command to see what the plugin is doing for your bots.
Read on for detailed usage information.
Usage
Enabling the plugin
You can enable the plugin per individual bot by adding EnableFreePackages to that bot's config file:
"EnableFreePackages": true,
Pausing package activations while playing a game
Under certain conditions, activating a free package while playing a game on Steam can cause the game to temporarily freeze. You can prevent the plugin from activating packages while you're in-game by adding PauseFreePackagesWhilePlaying to your individual bot's config file. It's recommended you use this for any account you play games on:
"PauseFreePackagesWhilePlaying": true,
[!NOTE] This applies when your account is playing a game outside of ASF, and does not apply when ASF is idling a game. Your library being locked through Family Sharing will also prevent package activation. You likely don't want to enable this if you run idle games 24/7, or your library is otherwise almost always in use, or you only run ASF rarely.
Changing the package limit
A maximum of 30 packages can be activated per 1.5 hours. By default, this plugin will use at most 25 of those activations and will resume where it left off if it's ever interrupted. You can control this limit by adding FreePackagesLimit to your individual bot's config files of uint type:
"FreePackagesLimit": 25,
[!NOTE] The default is intentionally made lower than the actual limit to allow for you the ability to manually redeem packages without having to fight with the plugin.
Enabling package filters
By default, the plugin will attempt to activate all free non-demo and non-playtest packages. You can control what kinds of packages are activated by adding FreePackagesFilters to your individual bot's config files with the following structure:
"FreePackagesFilters": [{
"Types": [],
"Tags": [],
"Categories": [],
"Languages": [],
"Systems": [],
"MinReviewScore": 0,
"MaxDaysOld": 0,
"IgnoredContentDescriptors": [],
"IgnoredTypes": ["Demo"],
"IgnoredTags": [],
"IgnoredCategories": [],
"IgnoredAppIDs": [],
"RequireAllTags": false,
"RequireAllCategories": false,
"ImportStoreFilters": false,
"WishlistOnly": false,
"IgnoreFreeWeekends": false,
"NoCostOnly": false,
"PlaytestMode": 0,
}],
[!NOTE] Packages already queued for activation are not affected by changes made to
FreePackagesFilters. If your queue is filled with unwanted packages, then you can use theclearfreepackagesqueuecommand to remove them.
All filter options are explained below:
Types
HashSet<string> type with default value of []. Packages must contain an app with one of the TypeNames specified here or they will not be added to your account. You can leave this empty to allow for all types. The available TypeNames for filtering are: "Game", "Application", "Tool", "Demo", "DLC", "Music", "Video"
Tags
HashSet<uint> type with default value of []. Packages must contain an app with at least one of these TagIDs or they will not be added to your account. You can leave this empty to allow for all tags. A list of tags can be found here. The TagID will be at the end of the URL. For example, the TagID for the Indie tag is 492.
[!NOTE] The "Profile Features Limited" tag presented by SteamDB is not a real tag that Steam uses. This plugin does not detect whether or not an app has limited profile features.
Categories
HashSet<uint> type with default value of []. Packages must contain an app with at least one of these CategoryIDs or they will not be added to your account. You can leave this empty to allow for all categories.
Category ID | Description --- | --- 1 | Multi-player 2 | Single-player 6 | Mods (require HL2) 7 | Mods (require HL1) 8 | Valve Anti-Cheat enabled 9 | Co-op 10 | Game demo 12 | HDR available 13 | Captions available 14 | Commentary available 15 | Stats 16 | Includes Source SDK 17 | Includes level editor 18 | Partial Controller Support 19 | Mods 20 | MMO 21 | Downloadable Content 22 | Steam Achievements 23 | Steam Cloud 24 | Shared/Split Screen 25 | Steam Leaderboards 27 | Cross-Platform Multiplayer 28 | Full controller support 29 | Steam Trading Cards 30 | Steam Workshop 32 | Steam Turn Notifications 33 | Native Steam Controller 35 | In-App Purchases 36 | Online PvP 37 | Shared/Split Screen PvP 38 | Online Co-op 39 | Shared/Split Screen Co-op 40 | SteamVR Collectibles 41 | Remote Play on Phone 42 | Remote Play on Tablet 43 | Remote Play on TV 44 | Remote Play Together 45 | Cloud Gaming 46 | Cloud Gaming (NVIDIA) 47 | LAN PvP 48 | LAN Co-op 49 | PvP 50 | Additional High-Quality Audio 51 | Steam China Workshop 52 | Tracked Controller Support 53 | VR Supported 54 | VR Only 55 | PS4 Controller Support 56 | PS4 Controller BT Support 57 | PS5 Controller BT Support 58 | PS5 Controller BT Support 59 | Steam Input API Supported 60 | Controller Preferred
</details>Languages
HashSet<string> type with default value of []. Packages must contain an app with support for at least one of these LanguageIDs or they will not be added to your account. You can leave this empty to allow for all languages.
Language ID | Language
--- | ---
"afrikaans" | Afrikaans
"albanian" | Albanian
"amharic" | Amharic
"arabic" | Arabic
"armenian" | Armenian
"assamese" | Assamese
"azerbaijani" | Azerbaijani
"bangla" | Bangla
"basque" | Basque
"belarusian" | Belarusian
"bosnian" | Bosnian
"bulgarian" | Bulgarian
"catalan" | Catalan
"cherokee" | Cherokee
"croatian" | Croatian
"czech" | Czech
"danish" | Danish
"dari" | Dari
"dutch" | Dutch
"english" | English
"estonian" | Estonian
"filipino" | Filipino
"finnish" | Finnish
"french" | French
"galician" | Galician
"georgian" | Georgian
"german" | German
"greek" | Greek
"gujarati" | Gujarati
"hausa" | Hausa
"hebrew" | Hebrew
"hindi" | Hindi
"hungarian" | Hungarian
"icelandic" | Icelandic
"igbo" | Igbo
"irish" | Irish
"italian" | Italian
"japanese" | Japanese
"kannada" | Kannada
"kazakh" | Kazakh
"khmer" | Khmer
"kinyarwanda" | Kinyarwanda
"konkani" | Konkani
"koreana" | Korean
"kyrgyz" | Kyrgyz
"kiche" | K'iche'
"latvian" | Latvian
"lithuanian" | Lithuanian
"luxembourgish" | Luxembourgish
"macedonian" | Macedonian
"malay" | Malay
"malayalam" | Malayalam
"maltese" | Maltese
"maori" | Maori
"marathi" | Marathi
"mongolian" | Mongolian
"nepali" | Nepal
Related Skills
node-connect
337.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
