Quick answer: Steam sessions only work in standalone or packaged builds with Steam running, on two different Steam accounts. With App ID 480 your session is buried among other developers': raise MaxSearchResults and filter by a custom key. The create and find settings must agree (LAN, presence, lobbies), and host and client must run the same build. After creating, the host must open the map with ?listen.

Create Session succeeds, Find Sessions on the other machine returns an empty array, and there is no error anywhere. This is the most common wall in Unreal multiplayer with the Steam online subsystem, and it is almost always the test setup or one mismatched setting.

Step 1: confirm which online subsystem is running

Search the log for LogOnline. You want to see the Steam subsystem created. If it says NULL, sessions are LAN-only and will never be found over the internet. Common reasons:

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
bInitServerOnClient=true

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SteamSockets.SteamSocketsNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

The net driver line assumes the Steam Sockets plugin is enabled; older setups use OnlineSubsystemSteam.SteamNetDriver. Enable the Online Subsystem Steam plugin either way.

Step 2: test with two machines and two accounts

Steam cannot connect an account to itself, and two copies of the game on one PC share one Steam account. You need two computers (or a computer and a Steam Deck) logged into different Steam accounts. Both must download or run the same build.

Step 3: App ID 480 hides your session

Using Spacewar's App ID 480 for development means your session competes with every other developer doing the same. Find Sessions returns at most MaxSearchResults results, and many tutorials set it to 10 or 20, so your session is simply not in the first page. Raise it and tag your sessions so you can filter:

// Host
SessionSettings->Set(FName("GAME_ID"), FString("MyGame_v1"), EOnlineDataAdvertisementType::ViaOnlineServiceAndPing);

// Client
SessionSearch = MakeShared<FOnlineSessionSearch>();
SessionSearch->MaxSearchResults = 10000;
SessionSearch->bIsLanQuery = false;
SessionSearch->QuerySettings.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
// then keep only results whose GAME_ID matches

With your own App ID, this mostly goes away. Steam's lobby search also filters by region by default, so testers in different countries can fail to see each other even with your own ID.

Step 4: create and find settings must agree

Step 5: make sure the session really exists

Bind and log the result of OnCreateSessionComplete. A failed create (session name already in use from a previous attempt, subsystem not ready) is silent unless you check it. After a successful create, the host has to open the gameplay map as a listen server:

GetWorld()->ServerTravel("/Game/Maps/Arena?listen");

Without ?listen, clients may find the session but fail to join it. If you call Create Session again (rematch, returning to menu), destroy the old session first.

Blueprint projects

The built-in Create, Find and Join Session nodes expose only a few settings. Many Blueprint projects use the community Advanced Sessions plugin to set lobby, presence and extra settings without C++. Whichever you use, the rules above still apply.

Multiplayer bugs from the field

Matchmaking failures in the wild depend on regions, NAT, builds and accounts you cannot reproduce at your desk. Bugnet's Unreal SDK lets players report “could not join” from your UMG menu with recent log lines attached, which usually include the online subsystem's own messages about why the search or join failed.

Frequently asked questions

Why does Find Sessions return nothing in Unreal with Steam?

Common causes are testing in PIE, where Steam does not initialize, testing with one Steam account, too few MaxSearchResults on App ID 480, or mismatched LAN, presence and lobby settings between create and find.

Can I test Steam sessions on one computer?

Not reliably. Steam cannot connect an account to itself. Use two machines logged into different Steam accounts.

Why can clients find my session but not join it?

The host may not have opened the map as a listen server. Travel to the map with ?listen after the session is created.

Two machines, two Steam accounts, standalone builds. Test anything else and you are debugging your setup, not your code.