How should I carry information from players in a lobby to a level on the server?

Well, the title may seem confusing but the situation is the following:
I’m connecting the players in a lobby (each in their own levels, without fully connecting to the host) and setting some stuff there (players’ characters, skins, etc) and then “Execute Console Command ‘open IP’”, which will reset all players variables.

I tried to use the PlayerState CopyProperties function but since it isn’t a ‘ServerTravel’, it doesn’t work.

What’d be the best way to carry this info from each Client in their own map when changing to the level on the Server?

Obs: using Blueprints but if the solution is in C++, that’s fine too.

Client data should be gathered by a middle man server (Hub, Backend) and passed to the game server per player on join.

I understand the concept of it, but I can’t think of any class that persists and is able to send data through this operation, the GameMode will change to a new one and the GameInstance should only hold info of the current player, I guess.

I don’t really want to make the players have to join the ‘Lobby’ Level on the server, instead I was doing everything inside a ‘MainMenu’ Level each on their own clients, only opening and joining the level on the server after the host presses ‘Begin’