here is the script.
game.Players.PlayerAdded:Connect(function(player)
while true do
if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.userId, 4940518) then
if player.Backpack:FindFirstChild("Spinner") == nil and player.Character:FindFirstChild("Spinner") == nil then
print(player.Name .. " got an item!")
local b = game.Lighting:FindFirstChild("Spinner"):Clone()
b.Parent = player.Backpack
end
end
end
end)

2 comments
userId should be UserId. Plus, you shouldn't store items in Lighting. You should store items in ReplicatedStorage or ServerStorage. You also need some type of delay in your while loop. If not, it will crash. So add a wait under while true do.
you need to wait for the backpack, it won't necessarily be there as soon as the player joins the game