The placeid will only return if you’re actually able to join the friend from the website as well. Meaning that their Who can join me? privacy settings have to be set to either option which would let you see what game they’re playing and letting you follow them into a game.
This is the reason why some games which have a “friends online” tab in-game only show that they’re Playing a game without any specific game name at times.
I can help with this one! The API reference on this method is actually wrong. I’ve ran into this issue myself earlier this month. Read this post to get up to scratch with how to use the method: TeleportService:GetPlayerInstanceAsync() issue - #4 by TsjipTsjip
That seems right. This method can only determine whether or not someone is in a place within the calling script’s universe as far as I know. (This is also the only existing restriction if I am correct.) Otherwise it will simply throw a HTTP 400 (…) on the primary result. You can use this message to determine if someone is in another game, or someone is not in-game at all seeing as the messages are different, though I see no use case for this.