Counter-Strike 2

Counter-Strike 2

461 ratings
How to Auto-accept Steam Market Confirmations on the Steam Mobile App
By Citrinate
Quickly auto-confirm every market listing confirmation directly in the Steam Mobile App
   
Award
Favorite
Favorited
Unfavorite
This guide no longer works
See 2022 update below for more information
Summary
The confirmation screen on the Steam Mobile App is just a webpage. This guide will teach you how to use development tools to intercept and modify that webpage. By injecting a few lines of Javascript into the confirmation screen, we'll be able to effortlessly auto-confirm all of our market listings.

Update
The Steam Mobile App has improved since this guide was originally written, and it's now much easier to approve large amounts of market listings. For nearly all people, following this guide will be more of a hassle and take more time than just using the mobile app as intended.

This guide still exists for those who want to confirm seriously large numbers of market listings, and for whom using something like the Steam Desktop Authenticator is not an option. With this guide, everything stays on your phone, and the additional layer of security provided by the Steam Mobile App is not compromised.


2022 Update
The Steam Mobile App got a major update in 2022, and this guide no longer works as written on Android. This is due to changes in how Android handles the user certificates that, in this guide, allows HTTPS traffic to be altered. I'm not sure of the current state of the iOS app.

If it's at all possible to get things working again in new app, it will be through a process that's even more complicated than what's outlined below. I won't be updating this guide for the new app. For anyone wanting to go on that sort of adventure, here[httptoolkit.com] or here[github.com] might be good starting points.
Requirements
Fiddler[www.telerik.com]

Solution
  1. Download and Install Fiddler. Under "Tools > Fiddler Options > HTTPS" make sure the "Capture HTTPS CONNECTs" and "Decrypt HTTPS traffic" boxes are checked. Restart Fiddler after doing so.

  2. Configure Fiddler to act as a proxy for your phone and install the certificate: Android[docs.telerik.com] / iOS[docs.telerik.com] (These pages also contain information on how to undo all of this once we're done)

    For iOS 10.3 and later, after installing the FiddlerRoot certificate, you'll also need to go on your device to "Settings > General > About > Certificate Trust Settings" and manually enable full trust for the certificate.

  3. Go to "Rules > Customize Rules". Search for:
    static function OnBeforeResponse(oSession: Session) {

    Right after it paste the following, and then save:
    if(oSession.uriContains("/mobileconf/conf")) { oSession.utilSetResponseBody(oSession.GetResponseBodyAsString() + '<script type="text/javascript">$J(function(){var o=$J(".mobileconf_list_entry:not(:has(.playerAvatar))"),i=1500,t=!1,e=o.length,n=0,a=0,l=0,c=ShowBlockingWaitDialog("Auto-confirming Requests","0/"+e+" completed ("+a+" failed)");o.each(function(){var o=$J(this),t=o.data("confid"),f=o.data("key");l+=i,function(o){setTimeout(function(){c.Dismiss(),c=ShowBlockingWaitDialog("Auto-confirming Requests",o+"/"+e+" completed ("+a+" failed)"),SendMobileConfirmationOp("allow",t,f,function(o){RemoveConfirmationFromList(t)},function(o){a++})},l)}(++n)}),setTimeout(function(){c.Dismiss(),ShowAlertDialog("Auto-confirming Completed",n-a+" out of "+n+" items were successfully confirmed ("+a+" failed)","OK"),t&&location.reload()},l+i)});</script>'); }

  4. We're now done. When you open the Steam Mobile App on your phone and go to the confirmation screen, the script will run automatically. If you need to run the script multiple times, just hit the refresh icon.

  5. Once you've finished, refer to Step 2 on how to disable the proxy settings on your phone.

Uncompressed Code
If you'd like to tweak what the script does, you can make changes to the code below, compress it[jscompress.com], and then replace the underlined code in the steps above with your new compressed code.

You can auto-accept trade requests as well as market listings by replacing the line:
var items = $J(".mobileconf_list_entry:not(:has(.playerAvatar))");
with:
var items = $J(".mobileconf_list_entry");

$J(function() { var items = $J(".mobileconf_list_entry:not(:has(.playerAvatar))"); var delay_interval = 1500; // how long to wait between confirmations; 1000 = 1 second var auto_refresh = false; // set to true to auto-refresh after completion var num_items = items.length; var num = 0; var num_failed = 0; var delay = 0; var modal = ShowBlockingWaitDialog( "Auto-confirming Requests", "0/" + num_items + " completed (" + num_failed + " failed)" ); items.each(function() { var $this = $J(this); var confirmationID = $this.data("confid"); var confirmationKey = $this.data("key"); delay += delay_interval; (function(current_num) { setTimeout(function() { modal.Dismiss(); modal = ShowBlockingWaitDialog( "Auto-confirming Requests", current_num + "/" + num_items + " completed (" + num_failed + " failed)" ); SendMobileConfirmationOp("allow", confirmationID, confirmationKey, function(data) { RemoveConfirmationFromList(confirmationID); }, function(data) { num_failed++; } ); }, delay); })(++num); }); setTimeout(function() { modal.Dismiss(); ShowAlertDialog( "Auto-confirming Completed", (num - num_failed) + " out of " + num + " items were successfully confirmed (" + num_failed + " failed)", "OK" ); if(auto_refresh) { location.reload(); } }, delay + delay_interval); });

88 Comments
lightwo 8 Feb, 2023 @ 11:57am 
I mean, if the new app doesn't work, just downgrade it... :p

Still, this guide is mostly useful to study the system to make a new implementation out of, anyway.
Sanfordh 3 Feb, 2023 @ 8:31am 
Still works?
necasarY 5 Jun, 2022 @ 10:33am 
Hey, I used Fiddler classic and set it up as instructed but fiddler returns an error message whenever i load the confirmation page on my phone and afterwards the confirmation page is loaded as it would be without fiddler. How can i fix this error? https://imgur.com/2KFI4Tt https://imgur.com/Hxv5AUC
Bird up 5 Jun, 2022 @ 9:45am 
I set up Fiddler classic and was able to capture traffic on Android and navigate Chrome. But Steam and other apps won't work (confirmation screen is black). It seems to be related to some security layer that block user certificates. Is there any what to circumvent it? https://imgur.com/a/KujBDPJ
EtchJetty 27 Apr, 2022 @ 3:22pm 
To clarify from my last comment, the formatted code is this, including quotation marks:
'<script type="text/javascript">$J(function(){var o=$J(".mobileconf_list_entry:not(:has(.playerAvatar))"),i=1500,t=!1,e=o.length,n=0,a=0,l=0,c=ShowBlockingWaitDialog("Auto-confirming Requests","0/"+e+" completed ("+a+" failed)");o.each(function(){var o=$J(this),t=o.data("confid"),f=o.data("key");l+=i,function(o){setTimeout(function(){c.Dismiss(),c=ShowBlockingWaitDialog("Auto-confirming Requests",o+"/"+e+" completed ("+a+" failed)"),SendMobileConfirmationOp("allow",t,f,function(o){RemoveConfirmationFromList(t)},function(o){a++})},l)}(++n)}),setTimeout(function(){c.Dismiss(),ShowAlertDialog("Auto-confirming Completed",n-a+" out of "+n+" items were successfully confirmed ("+a+" failed)","OK"),t&&location.reload()},l+i)});</script>'
EtchJetty 27 Apr, 2022 @ 3:14pm 
Works perfect! To do this in Fiddler Everywhere (the new version of Fiddler) you can't use Fiddlerscript anymore, so you need to use the terrible tools they have to manually set a rule.
[code]if(oSession.uriContains("/mobileconf/conf")) {[/code]
means that you need to set the condition
"Url" "Contains" "/mobileconf/conf"
and then set the action to
"Update Response Body"
"Regular Expression" "$" and then for the last bit, copy/paste the formatted code.
downloador 3 19 Feb, 2022 @ 3:33pm 
Hi, this is no longer working, the code doesn't seem to run and my confirmation page is just black.
i put up listings like every other day and when i do, its at least 200 items. i HATE having to scroll and tap on each box to confirm it. is this guide the best option for me? all i want is an easier way to list over 200 items.
Moisturizing Sloppy Style 6 Aug, 2021 @ 4:25pm 
Hi there, So I followed your steps and appear to be getting body `0` when I refresh my confirmations, Fiddler is returning no response body, any idea what this may be?
0zinc 7 Jul, 2021 @ 8:41pm 
The compressed version of the tweaked script had the "+1500" as it's end. I didn't delete it, it was the compressor. Anyways, it's fixed now. I replaced the "(".mobileconf_list_entry:not(:has(.playerAvatar))")" with "(".mobileconf_list_entry")" in the compressed version (not uncompressed). https://pastebin.com/zCTkkhKx