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.
plugins
folder inside your ASF folder.Note This plugin is only tested to work with ASF-generic. It may or may not work with other ASF variants.
You can enable the plugin per individual bot by adding EnableFreePackages
to that bot’s config file:
"EnableFreePackages": true,
A maximum of 50 packages can be activated per hour. By default, this plugin will use at most 40 of those hourly activations and will resume where it left off if it’s ever interrupted. You can control this limit by adding FreePackagesPerHour
to your individual bot’s config files of uint
type with default value of 40.
Note I don’t recommend raising this value. The default is 40 to let you manually redeem packages without having to fight with the plugin. It’s also not always possible for the plugin to tell when it’s being rate-limited, and so it’s best to avoid ever getting rate-limited.
By default, the plugin will attempt to activate all free packages. You can control what kinds of packages are activated by adding FreePackagesFilter
to your individual bot’s config files with the following structure:
"FreePackagesFilter": {
"ImportStoreFilters": false,
"Types": [],
"Tags": [],
"Categories": [],
"IgnoredTypes": [],
"IgnoredTags": [],
"IgnoredCategories": [],
"IgnoredContentDescriptors": [],
"IgnoredAppIDs": [],
"IgnoreFreeWeekends": false,
"MinReviewScore": 0,
},
All filter options are explained below:
bool
type with default value of false
. If set to true
, the plugin will use the ignored games, ignored tags, and ignored content descriptor settings you use on the Steam storefront, in addition to any other filters you define.
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
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. There is no way for this plugin to detect whether or not an app has limited profile features.
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 |
HashSet<string>
type with default value of []
. Packages containing apps with any of the TypeNames
specified here will not be added to your account. Refer to Types for more information about TypeNames
.
HashSet<uint>
type with default value of []
. Packages containing apps with any of these TagIDs
will not be added to your account. Refer to Tags for more information about TagIDs
.
HashSet<uint>
type with default value of []
. Packages containing apps with any of these CategoryIDs
will not be added to your account. Refer to Categories for more information about CategoryIDs
.
HashSet<uint>
type with default value of []
. Packages containing apps with any of the ContentDescriptorIDs
specified here will not be added to your account. Detailed information about content descriptors can be found here under “Mature Content Filtering”.
Descriptor ID | Description |
---|---|
1 | Some Nudity or Sexual Content |
2 | Frequent Violence or Gore |
3 | Adult Only Sexual Content |
4 | Frequent Nudity or Sexual Content |
5 | General Mature Content |
HashSet<uint>
type with default value of []
. Packages containing apps with any of these AppIDs
will not be added to your account.
bool
type with default value of false
. Free weekend packages will be ignored if set to true
.
uint
type with default value of 0
. Packages must contain an app with a ReviewScore
greater than or equal to this or they will not be added to your account. You can leave this blank or set it to 0
to allow for all values. A ReviewScore
is not the same as the percentage of positive reviews. This number ranges from 1 to 9. Refer to the list below for more information. This filter is not applied to demos as they can’t normally be reviewed.
Review Score | Description | # of Reviews | % of Positive Reviews |
---|---|---|---|
1 | Overwhelmingly Negative | 500+ | 0%-19% |
2 | Very Negative | 50-499 | 0%-19% |
3 | Negative | 1-49 | 0%-19% |
4 | Mostly Negative | 1-49 | 20%-39% |
5 | Mixed | 1-49 | 40%-69% |
6 | Mostly Positive | 1-49 | 70%-79% |
7 | Positive | 1-49 | 80%-100% |
8 | Very Positive | 50-499 | 80%-100% |
9 | Overwhelmingly Positive | 500+ | 80%-100% |
Command | Access | Description |
---|---|---|
queuestatus [Bots] |
Master |
Prints the status of the given bot’s packages queue |
queuelicense [Bots] <Licenses> |
Master |
Adds given licenses , explained here, to the given bot’s packages queue |
queuelicense^ [Bots] <Licenses> |
Master |
Adds given licenses , explained here, to the given bot’s packages queue using that bot’s package filters |
clearfreepackagesqueue [Bots] |
Master |
Removes everything from the given bot’s packages queue |
Command | Alias |
---|---|
queuestatus |
qstatus |
queuestatus asf |
qsa |
queuelicense |
queuelicence , qlicense , qlicence |
queuelicense^ |
queuelicence^ , qlicense^ , qlicence^ |
You can use the Free Packages Importer userscript to import packages from SteamDB’s free packages tool.
API | Method | Parameters | Description |
---|---|---|---|
/Api/FreePackages/{botName}/GetChangesSince |
GET |
changeNumber |
Request changes for apps and packages since a given change number |
/Api/FreePackages/{botName}/GetOwnedApps |
GET |
showNames |
Retrieves all apps owned by the given bot |
/Api/FreePackages/{botName}/GetOwnedPackages |
GET |
Retrieves all packages owned by the given bot | |
/Api/FreePackages/{botName}/GetProductInfo |
GET |
appIDs , packageIDs |
Request product information for a list of apps or packages |
/Api/FreePackages/{botNames}/QueueLicenses |
POST |
appIDs , packageIDs , useFilter |
Adds the given appIDs and packageIDs to the given bot’s package queue |
/Api/FreePackages/{botName}/RequestFreeAppLicense |
GET |
appIDs |
Request a free license for given appIDs |
/Api/FreePackages/{botName}/RequestFreeSubLicense |
GET |
subID |
Request a free license for given subID |