Inside a frame. I saw no errors in playergui, i'm assuming you can't use localscripts only anymore for this kind of thing?

local player = game:GetService("Players").LocalPlayer;
local badgeService = game:GetService("BadgeService");

local badges = {
	["Quest3"] = 301120238; --Old Relic
	["Quest4"] = 301255750; --Clubhouse
	["Quest1"] = 301312711; --Sinister S
	["Quest2"] = 301313676; --Sinister T
	["Quest6"] = 301369069; --Werewolf
	["StarterQuest"] = 301496648; --Played
	["BonusQuest"] = 301550493; --Witch house
	["Quest7"] = 301977190; --Blizzaria the Frozen
	["Quest5"] = 302199109; --Scared Civilian
	["Quest9"] = 2124615500; --Dusekkar
	["Quest8"] = 2124615488;
};

local function updateText()
	local stuff = {}
	
	if #stuff ~= 0 then
		for i, remove in pairs(stuff) do
			table.remove(stuff, stuff[i])
		end
	end
	
	for _,v in pairs(script.Parent:GetChildren()) do
		if v:IsA("ImageLabel") then
			table.insert(stuff, v.Name)
		end
	end
	
	for _, update in pairs(stuff) do
		local success, hasBadge = pcall(function()
			return badgeService:UserHasBadgeAsync(player.UserId, badges[tostring(update)])
		end)
		
		if hasBadge then
			script.Parent[tostring(update)].Owned.Text = "Complete"
		else
			return
		end
	end
end

script.Parent.Parent:GetPropertyChangedSignal("Visible"):Connect(function()
	if script.Parent.Parent.Visible == true then
		updateText()
	else
		return
	end
end)