Those of you who craft steam badges probably know and use https://www.steamtradematcher.com/ site.
Unfortunately, this site can't now work well, because of new changes in Steam rate limits. You have to wait to sync your inventory, then you have to wait in a queue to make matching, and then results are also a bit outdated, because bot inventories are cached. Still great tool, but not as useful as before.
Also some of you may know that ASF, popular tool to farm cards, also have an official plugin that implements alternative to STM, and public list of bots, involved in this process: https://asf.justarchi.net/STM - but while you may easily setup your account as automatic bot and enroll in listing - you can't actually match without paying money to Archi - for the same reason as above - steam rate limits are too low, so Archi maintains a pool of proxies for matching to work, this feature can't be free anymore.
So, since when I made this script, you have a third alternative - this script can use api of ASF public listing to match your badges with all available bots! Be warned though, that you can still get temporary inventory ban for trading with bots with huge inventories (but matching process itself is safe).


Pros:

  1. Unlike majority of tools after steam rate limits update, it works!
  2. It's free!
  3. You don't need ASF, just an userscript in your browser. Perfect if you only want to find matches occasionally, not all the time.
  4. Unlike STM, it's executed on your PC, so it will always work (may be unstable though if steam is under heavy load)
  5. You send all trades yourself, so everything is under your control.
  6. You only trade with bots, so your trades will be confirmed almost instantly (if everything is okay)
    7. It supports STM's userscript, if you use it - cards will be added to trade automatically (If you use this script - I recommend to apply patch by Nimmy).
  7. Automatically adds cards to trade offer, can auto-send it too.

Cons:

  1. Only works with ASF listing. You can't find matches with your friends or other users, you still need STM for this.
  2. EXTREMELY slow. May take an hour or even more to scan all bots.
  3. For now it lacks many some of STM features.

You can install this script from GREASYFORK


Consider this a permanent beta version, it's very raw and may contain bugs. So, please, check every trade before sending and report bugs and suggestions.

If you want to participate in development - script is now also available on github, feel free to send issues and pull requests there!

Future plans (re-ordered):

  1. Fix trades with too many items causing an error!
  2. For now script works only with regular cards. I plan to add foil cards matching too
  3. Add an option to match cards for already completed badges too.
  4. Add whitelist of matched apps, to make it possible to match only a couple of needed badges without wasting time on the rest.
  5. Add link to bot's profile under bot's name DONE!
  6. Add some configuration options (from suggestion - order in which bots processed, including random)
  7. Maybe add blacklists or other ways to limit which bots should be scanned. (probably as part of configuration)
  8. Make better filter window (relevant to people with a lot of games to match) ADDED SCROLL, THANKS ngoclong19 !
  9. Maybe add filtering by game, same as STM
  10. Add stop button
  11. "select all" and "select none" option for the filters
  12. Progressive timeout increase on errors
  13. Cache number of cards in a badge LOST RELEVANCE
  14. Match emoticons and backgrounds too. NOT GOING TO HAPPEN
  15. ??? your suggestions. (LOL, I have too much TODO already, fat chance!)

Hopefully it will be useful to someone.

Changelog

v0.1 2020-06-05 - First release
v0.2 2020-06-08 - changed an appid detecting logic to avoid false matches. changed getPartner to bigint (faster)
v0.3 2020-06-09 - Now script don't stop on 403 error, just tries next bot. Also added indicator for bots with matchEverything=1.
v1.0 2020-06-13 - Added filters; Removed delay between requests; Some improvements & Fixes
v1.1 2020-06-15 - Added stop button; fixed incorrect behavior upon restart
v1.2 2020-06-16 - added "all", "none", "invert" to filters; further improved error handling; code style improved
v1.3 2020-06-17 - updated for compatibility with greasemonkey; fixed check for "no cards to match", now script don't scan bots in this case.
v1.4 2020-06-21 - fixed matching logic, now finds more matches; improved compatibility with greasemonkey and old browsers
v2.1 2022-12-13 - Completely re-worked script that works with new steam rate limits. Also, uses new ASF STM backend endpoint!
v2.3 2022-12-14 - Fixed some bugs, added display of total number of items in bot's inventory.
v2.4 2022-12-16 - Fixed a lot of different issues, script should now work more stable.
v2.5 2022-12-16 - More fixes
v2.7 2022-12-18 - Greatly improved fetching of card classids. Added caching of bots list to reduce load on ASF backend.
v2.8 2022-12-22 - Fixed a bug that prevented functioning during sale.
v2.9 2023-01-23 - ASF backend api update
v2.10 2023-04-21 - Scroll added to filter window, results sorted by game name, Thanks to ngoclong19 for PR!
v3.3 2023-07-06 - Major update! Integrated (modified) STM helper script, added configuration, added blacklist, fixed bugs.

View attached image.
3 years ago*

Comment has been collapsed.

Error getting card data for 2243720, please report this!

Thanks for script, may prove useful :)

1 year ago
Permalink

Comment has been collapsed.

Thank you for the report, should be fixed in version 2.8

1 year ago
Permalink

Comment has been collapsed.

Thanks. Looks like its working fine :)

Porting this to ASF as plugin so it could be run automatically in background would be awesome.

1 year ago
Permalink

Comment has been collapsed.

Porting this to ASF as plugin so it could be run automatically in background would be awesome.

Technically impossible. Trick here is that script does not send trade offers, YOU do. And to send trade offer - you have to fetch bot inventory, and this can leave you blocked. That can happen even when you send trades manually (that's why script now outputs number of items in bot inventory when listing matches) after finding matches with this script, but that's not my problem now))) Writing a plugin that can leave you blocked from accessing inventories (even your own)? Well, that's not very great, you can as well just use old version of ASF with pretty much same result.
If it was possible - I would not have to write a plugin, since Archi would already implement it in mainline ASF. If you want automatic matching in background - it's available as paid feature in ASF now.

1 year ago
Permalink

Comment has been collapsed.

Great script! Quick question:
Mine gets stuck on "Fetching bot 1 of 345 (badge 173 of 173)", it was working before (stopped working 3-4 days ago).

Any suggestion? Thanks

1 year ago
Permalink

Comment has been collapsed.

Open browser console (just right click anywhere on page and select "inspect", then switch to console tab) and see if there are any errors. Tell me if you've got something there.

1 year ago
Permalink

Comment has been collapsed.

Thanks for the detailed instructions. Yes, here is what it gave me:

Unchecked runtime.lastError: The message port closed before a response was received.
steamcommunity.com/:1 Unchecked runtime.lastError: The message port closed before a response was received.
steamcommunity.com/:1 Unchecked runtime.lastError: The message port closed before a response was received.
steamcommunity.com/:1 Unchecked runtime.lastError: The message port closed before a response was received.
Page.js:88 Augmented Steam v2.4.0 https://augmentedsteam.com
FeatureManager.js:43 Feature loading complete, 6 successfully loaded, 0 failed to load, 0 didn't load due to dependency errors
prototype-1.7.js?v=.55t44gwuwgvw:1944 Uncaught TypeError: Cannot read properties of undefined (reading 'removeChild')
at remove (prototype-1.7.js?v=.55t44gwuwgvw:1944:24)
at HTMLSpanElement._methodized [as remove] (prototype-1.7.js?v=.55t44gwuwgvw:439:23)
at addMatchRow (userscript.html?name=ASF%2520STM.user.js&id=fd7df023-8336-4ca9-88d9-98c71a766a49:365:29)
at compareCards (userscript.html?name=ASF%2520STM.user.js&id=fd7df023-8336-4ca9-88d9-98c71a766a49:598:13)
at GetCards (userscript.html?name=ASF%2520STM.user.js&id=fd7df023-8336-4ca9-88d9-98c71a766a49:771:13)
at Proxy.<anonymous> (userscript.html?name=ASF%2520STM.user.js&id=fd7df023-8336-4ca9-88d9-98c71a766a49:671:33)
at St (<anonymous>:9:89)
at t.<computed> (<anonymous>:58:214)
at St (<anonymous>:9:89)
at r (<anonymous>:22:484

1 year ago
Permalink

Comment has been collapsed.

Interesting. I understand at what point error happens, but no idea what causes that. May I ask what browser are you using?

1 year ago
Permalink

Comment has been collapsed.

Thanks again.
I'm using Google Chrome, latest updates, W10.

No problem :) It was great when it worked

1 year ago
Permalink

Comment has been collapsed.

I have used this for years. More recently I notice that using this frequently causes Steam timeout ban. Using a VPN fixes this but I also find that it gets stuck at the creating trade level.

1 year ago
Permalink

Comment has been collapsed.

Steam changed rate limits, now you can get ban even by simply trying to send trade to user with too big inventory. I made new version of script, that does not requests inventories, so new version does not trigger ban anymore. How to send actual trade is entirely out of scope of my script, but pro tip - chose bots with as few items as possible.

1 year ago
Permalink

Comment has been collapsed.

I realize the challenges and appreciate your efforts. Thanks for the tips.

UPDATE. Installed and re-installed V2.8 in OP. Reinitiated browser. Now the script does not appear to do anything with or without VPN. Downgrading to 2.7 gets it working again although with issues. I'm using the latest version of Chrome. V2.7 gets stuck on initiating trades. Uninstalled and reinstalled v2.8. Eventually was able to successfully make a trade. ISTM that Steam istself was having issues during some of this which likely affected.

Currently this is working reasonably well. it takes forever to load but then it appears that it can reasonably complete multiple trades.

Thank you for your efforts

1 year ago*
Permalink

Comment has been collapsed.

Check if you still have this installed. 2.8 installed and runs without any problems on my latest version of Chrome

1 year ago
Permalink

Comment has been collapsed.

The German language version? I confirm that I do not have this installed.

1 year ago
Permalink

Comment has been collapsed.

What are you talking about? xD
You should check if you have another script installed called "Updated ASF STM", made by iBreakEverything. It is based on the original "ASF STM" by Ryzhehvost and worked better than the original.

If you have the script by iBreakEverything installed and then install the updated version of the original script by Ryzhehvost - also called ASF STM - it will not work.
And the new updated script by Ryzhehvost - ASF STM - now works far better than the script by iBreakEverything, which is still called "Updated ASF STM".

Yeah... Keeping the same name for modified stuff is not always the best idea (I am looking at you, iBreakEverything).

1 year ago*
Permalink

Comment has been collapsed.

What are you talking about? xD

I'm just trying to figure out what your point was. You linked to a Greasy fork page that appears to be in German. I note that it states that Greasy fork is also available in English. I thought the issue was multiple language versions rather than another script.

https://greasyfork.org/de/scripts/421997-updated-asf-stm

You should check if you have another script installed called "Updated ASF STM", made by iBreakEverything.

I don't

If you have the script by iBreakEverything installed and then install the updated version of the original script by Ryzhehvost - also called ASF STM - it will not work.

Thanks. That wasn't the issue and I got it working.

1 year ago
Permalink

Comment has been collapsed.

I got it working

Great to hear

1 year ago
Permalink

Comment has been collapsed.

Works great! Using badges for matching is kinda galaxy-brained, well done.

Though I have to wonder if this is even a preferable system for Valve. Instead of hundreds of inventory calls, I'm now fetching thousands of badge pages lol

11 months ago
Permalink

Comment has been collapsed.

Well, it's their own fault to be honest. The inventory call limitations are ridiculous..

11 months ago
Permalink

Comment has been collapsed.

STM continues to have difficulties and rarely produces positive trades. This script produces positives trades when working. Much appreciation for the tool. Thank you

My only negative comment is that it is so slow. This is solved by running it during downtime.

I notice that this script appears to run through all listed bots in the same repeated order as indicated by the link below. Is this changeable? Botalog1cal always scans first. Why? On their profile they appear to brag that over 600 profiles have been blocked from trading with the bot. Why do these profiles have to wait to scan this bot's inventory? Can it be set to skip or skip during progress? Another example would be profiles that are set to only trade with profiles they have invited. why should every other profile wait for the script to scan their inventory when trading is not even possible with them?

The ability to ignore certain bots on the list would speed up the scan process, which currently appears to be the only negative of this script.

Many thanks

https://asf.justarchi.net/STM

11 months ago
Permalink

Comment has been collapsed.

i made a fork a while ago and added a blacklist, filters for cards, caching, rate limit, api update and should still work (but it uses inventory api and not badge pages)
https://github.com/iBreakEverything/Updated-ASF-STM

11 months ago*
Permalink

Comment has been collapsed.

If it still uses inventory api - it's only good for getting a temporary inventory ban really fast, nothing else. It's not your fault of course, I switched to parsing badge pages not because it was fun and I had too much free time, but because without it script become useless.

9 months ago
Permalink

Comment has been collapsed.

not triggering a ban, i set up delays according to the api limits

on another note, sending a manual trade to someone with a large inventory will trigger a temporary inventory ban, so steam really messed it up big time (you may want to add a button to insta-send the trade request so it wont open a trade window, like i did)

9 months ago
Permalink

Comment has been collapsed.

It's even tempting to prove you're wrong (because I perfectly well know that you are; I tried even with HUGE delays, and still result was always the same, it was just a matter of how many bots I can match to before getting blocked. And I've checked your script today and know that delays there is not even nearly enough), but I'm not willing to be blocked from inventory during summer sale.

you may want to add a button to insta-send the trade request so it wont open a trade window, like i did

No, obviously I will not want that. To "insta-send trade" you need to load inventory first. No other way. And this is no different than manually sending trade in any way. It worked fine for you on old version of the script, where you loaded inventory just to find matches, but it does not makes any sense with a new script.

9 months ago
Permalink

Comment has been collapsed.

works fine if you don't send a trade right away or you don't use insta-send

right, the insta-send needs inventory to get item target id or something, but a part of it will be loaded when you open a trade window

View attached image.
View attached image.
9 months ago
Permalink

Comment has been collapsed.

Ah, right, you limited bots to less than 10% of their number, and you call it "works". Great success, indeed. Also, on your screenshot it's just tenth bot - will it still work on bot 45?

9 months ago
Permalink

Comment has been collapsed.

i can scan all bots, but most of them don't have many cards, so it's not worth it
Fetching bot 24 of 45 with 278 requests now

9 months ago
Permalink

Comment has been collapsed.

Wait, still? My bot already finished scanning all 600+ bots.

9 months ago
Permalink

Comment has been collapsed.

neat, maybe i will add insta-send to your script, cause this new api delays sucks

9 months ago
Permalink

Comment has been collapsed.

Well, it's was a funny thing to say, but there is a catch.
Old script, that was a base for your script, had O(1) complexity - i.e. no matter how many badges you need to match, it's always took the same time, that time only depends on number of bots and size of their inventories.
And new script has O(n) complexity - the more badges,that need matches, you have - the longer it will take. It' on the other hand, don't care how big inventories bots has - matching with a bot that only have 2 cards takes same time as matching with a bot that has 200000.
So yes, my script finished much faster now, but that's because I already matched and crafted all my badges but one, so it's the fastest possible case.If you need to match 100 badges - your script will be much faster.
I, actually, wanted to use fetching badges long before steam changed inventory rate limits, but back then idea was to select fastest algorithm on per bot basis - basically something like (pseudocode)

if (botInventorySize/ItemsPerRequest > numberOfBadgesToMatch) {
  matchUsingBadgePages();
} else {
  matchUsingInventory();
}

Idea was nice, it would have made matching faster, but it was A LOT of changes, and I never had time for it, so I only switched to badge method when inventory method stopped working, and of course then it was already exclusive method of matching.

9 months ago
Permalink

Comment has been collapsed.

nice ideea, ill try to implement it and see if the script will be faster

9 months ago
Permalink

Comment has been collapsed.

Honestly - I do not recommend. Now that I implemented matching by badge pages, I know how many troubles has to be resolved. If using inventories were still a viable alternative - I would gladly keep it, and forget about all those hacks. But your call - you always can use my script as a reference, so it will be a little bit easier for you.

9 months ago
Permalink

Comment has been collapsed.

the trade window uses

https://steamcommunity.com/tradeoffer/new/partnerinventory/?sessionid=<sessionid>&partner=<partner64id?&appid=753&contextid=6[&start=<2000n>]
https://steamcommunity.com/id/<yourid>/inventory/json/753/6/?trading=1[&start=<2000
n>]

not sure if this is on the same inventory api or not, but insta-send can be automated easily, because if you open a trade window you will get those request anyway, the plus is that you make the inventory request only once for multiple trades this way

9 months ago
Permalink

Comment has been collapsed.

Also, keep in mind that your version still contain bugs that I fixed in 3.3 version of my script. It can result in invalid matches. Seems to only happen rarely, since nobody reported it all this time, but it's still there. If you still use your fork - I recommend you to review my latest release and cherry-pick at least bug fixes.

9 months ago
Permalink

Comment has been collapsed.

i also got some bugged matches (no duplicates)

9 months ago
Permalink

Comment has been collapsed.

Dunno how you do this. I just decided to give a try to your script, and got this on the very first bot. Curiosity killed the cat.

View attached image.
View attached image.
9 months ago
Permalink

Comment has been collapsed.

oops, i forgot to update the script on github, my bad

9 months ago
Permalink

Comment has been collapsed.

View attached image.
9 months ago
Permalink

Comment has been collapsed.

i got rate limited after using your script, in the trade offer window
not a good ideea to send a trade offer to someone with huge inventories

after 35 requests in less than 30 seconds i was banned, see image

View attached image.
9 months ago
Permalink

Comment has been collapsed.

That's exactly why I show items number next to bot name, and that's why there is a setting in configuration to limit maximum inventory size of bots to match. This rate limit is not result of the script, it's a result of using steam's native trade window.

9 months ago
Permalink

Comment has been collapsed.

Yeah a blacklist would be nice. There are bots with so many items you can never trade with them before the inventory load limits kick in and you end up rate limited for a long time.

11 months ago
Permalink

Comment has been collapsed.

Error getting card data for 597110, please report this!

This is a recurring error

9 months ago
Permalink

Comment has been collapsed.

TY, new ver coming SOON™

9 months ago
Permalink

Comment has been collapsed.

I just released a major update for this userscript. Changes include, but not limited to:

  1. STM trade helper integrated in scirpt, and modified to rely on name/image of card instead of classid. - this should fix all of those annoying "Error getting card data" errors. May also result in a new kind of errors, yay!
  2. Added configuration dialog. Yes, long awaited configuration is here! You can configure quite a lot of things
  3. Added blacklist for bots. Don't like one particular bot? Blacklist it, and script will never again bother to match towards it.
  4. Switched to localized card names to avoid problems with trade helper not finding items. It may also be more convenient to users - now cards show names in the same language as rest of your steam!
  5. Fixed some very old (but probably rare, since never was reported) bugs in matching algorithm.
  6. Script now ignores bots that have private profile (but wasn't kicked from listing yet) - it used to end up in stop of scan, now script just continues.

Etc, etc, etc.
Since there is a lot of changes - any bug reports/suggestions are welcome (but don't expect fast action - I'm pretty busy recently).

9 months ago
Permalink

Comment has been collapsed.

I've installed it and will try it out. So far, so good. will provide any feedback that might be helpful. I'm looking forward to changes #2 and #3.

Thank you

9 months ago
Permalink

Comment has been collapsed.

In all honesty, since STM broke, I can't imagine trading without your script. So a huge "Thank you!" for your work!

9 months ago
Permalink

Comment has been collapsed.

You're welcome! Glad you like it!

9 months ago
Permalink

Comment has been collapsed.

I got 401 errors with very big trade offers from Steam community URLs. Don't have an accurate count, but it was originally 80+ cards and it worked with about a dozen less. Might not have anything to do with this script.

9 months ago
Permalink

Comment has been collapsed.

Hmm. Interesting. Maybe I exceed the limit on URL length with huge trades. I need to think about another way to transfer parameters between main part of script and STM trade helper part... Thank you for report, it's really valuable feedback!

9 months ago
Permalink

Comment has been collapsed.

That's my suspicion too. Too long URL and it gets truncated and causes an error.

I foolishly didn't copy the errors from console, but have to do that if I get it again. Same error code, but the first time the URL in the response was much shorter and with later 2-3 attempts with few less cards each time it was longer untl it worked. This would suggest the trade URL got truncated and weirdness followed.

9 months ago
Permalink

Comment has been collapsed.

Got it gain. I think the limit might be 4000 characters. 3952 character URL was fine, but I had two before that were over 4000 (4137 and 4280) and gave 401 errors.

9 months ago
Permalink

Comment has been collapsed.

Hello! I'm testing a new version that should deal with URL length limitation for big trade offers. If you are interested - you can get new version here https://github.com/Rudokhvist/ASF-STM/pull/23 and test if it solves your issue.

5 months ago
Permalink

Comment has been collapsed.

Thanks, I thought I replied to this, but I guess not.

I have not had the issue after last messages so can't test the situation right now. Perhaps winter sale puts a ton of cards on the move again.

But, I have been running the new version (I hope, I just copy-pasted the source code) yesterday and today and everything is working just fine.

5 months ago
Permalink

Comment has been collapsed.

If it's working fine with regular trades - that's already great feedback, thank you!
Also, when I will release it, don't forget to manually update it from greasyfork, or you won't get future automatic updates!

5 months ago
Permalink

Comment has been collapsed.

Narrowed it down to be likely 4096 characters, which makes sense (4 kb).

9 months ago*
Permalink

Comment has been collapsed.

That's actually strange, I expected it to be 2kb. Thank you for your research! I will probably try to pass parameters via localStorage, just thinking now how to make sure that all leftovers removed.

9 months ago
Permalink

Comment has been collapsed.

I have installed your script and after hours of scanning.. this is the result

View attached image.
9 months ago
Permalink

Comment has been collapsed.

Well, what can I say - there is no guarantee that some bot will have a match for you. It happens if you only have cards from rare games. I'm in the same situation right now.

9 months ago
Permalink

Comment has been collapsed.

So it's not an error, it just not found any matches. Thanks, I will keep using STM since there it finds matches still. But like 1 or 2 badges, I was hoping for more. When there is a sale, I find bots on STM with 30 or more cards to match for my badges :)
Again, thank you for the script, I will give it another try during a sale, maybe there will be more.

9 months ago
Permalink

Comment has been collapsed.

That's actually a bit surprising that STM found a match for you (I usually have quite the opposite situation), but it's quite possible, since STM search not only on bots, but on regular users that registered there. I actually use both when I have to deal with some rare cards.

9 months ago
Permalink

Comment has been collapsed.

Man, I can't believe I never heard of this before. This is much faster and much more reliable than STM, even more so now that STM is pretty much dead. Thanks for the very useful userscript!

4 months ago
Permalink

Comment has been collapsed.

Well, what can I say - I'm trying to bump it from time to time, but also try to not be annoying with it. Glad it's useful for you!

4 months ago
Permalink

Comment has been collapsed.

Thank you for posting this! Since SteamTradeMatcher doesn't seem to work for me anymore, this is the next best thing, even if 'tis slower!

4 months ago
Permalink

Comment has been collapsed.

Sign in through Steam to add a comment.