How to Create a Badge in Roblox and Award It With BadgeService

To create a Roblox badge, hover over your experience's thumbnail on the Creator Dashboard, click the ⋯ button, select Create Badge, then set a name, description, and a 512×512 icon. To award it in-game, call BadgeService:AwardBadgeAsync(userId, badgeId) from a server script, wrapped in pcall() .

THE SHORT ANSWER

To create a Roblox badge, hover over your experience's thumbnail on the Creator Dashboard, click the ⋯ button, select Create Badge, then set a name, description, and a 512×512 icon. To award it in-game, call BadgeService:AwardBadgeAsync(userId, badgeId) from a server script, wrapped in pcall() .

  • Badges are created from the Creator Dashboard by hovering over the experience's thumbnail, clicking the ⋯ button, selecting Create Badge, and setting a name, description, and icon.
  • Badge icons should be uploaded at 512×512 pixels, and the upload process trims and crops the image into a circular icon.
  • Creators can make up to 5 badges for free in a 24-hour period (GMT) for each experience they own.
  • Each badge created beyond the free 5 within the same 24-hour window costs 100 Robux.
  • BadgeService:AwardBadgeAsync(userId, badgeId) awards a badge to a user.
  • GetBadgeInfoAsync returns badge information including IsEnabled, and the official code sample checks IsEnabled before awarding a badge.
  • AwardBadgeAsync, GetBadgeInfoAsync, and UserHasBadgeAsync are yielding methods that can error, and the official code samples wrap them in pcall().
  • UserHasBadgeAsync(userId, badgeId) checks whether a given user already owns a specific badge.

How to Create a Badge in Roblox and Award It With BadgeService

To create a Roblox badge, hover over your experience's thumbnail on the Creator Dashboard, click the ⋯ button, select Create Badge, then set a name, description, and a 512×512 icon. To award it in-game, call BadgeService:AwardBadgeAsync(userId, badgeId) from a server script, wrapped in pcall().

That is the whole loop: create the badge on the dashboard, copy its ID, and wire up one server script. The details below cover the icon spec, the free-quota rules, and a safe awarding script you can paste in.

Step 1: Create the badge from the Creator Dashboard

  1. Go to the Creator Dashboard and find your experience.
  2. Hover over its thumbnail, click the button, and select Create Badge.
  3. Fill in the badge name and description. Write these for players — describe what the player actually did to earn it.
  4. Upload an icon and confirm.

After creation, copy the badge's badge ID. Your script needs this number.

Step 2: Get the icon right (512×512, circular crop)

Upload your icon at 512×512 pixels. The upload process trims and crops the image into a circular icon, so keep any critical details (text, faces, small symbols) away from the corners — they will be cut off. A centered subject with some padding survives the crop cleanly.

Step 3: Know the cost rules

You can create up to 5 badges for free in a 24-hour period (GMT) for each experience you own. Each additional badge created inside that same window costs 100 Robux. If you are batch-creating achievements for a new game, spreading creation across a few days keeps it free.

Step 4: Award the badge from a server script

Two safety habits taken straight from the official BadgeService reference and its code samples:

  • Check GetBadgeInfoAsync().IsEnabled before awarding — the official sample only awards when the badge is enabled.
  • Wrap AwardBadgeAsync, GetBadgeInfoAsync, and UserHasBadgeAsync in pcall() — all three yield and can error.
local BadgeService = game:GetService("BadgeService")

local BADGE_ID = 0000000 -- your badge ID here

local function awardBadge(player)
	-- Check the badge is enabled before awarding
	local infoOk, badgeInfo = pcall(function()
		return BadgeService:GetBadgeInfoAsync(BADGE_ID)
	end)
	if not infoOk or not badgeInfo.IsEnabled then
		return
	end

	-- Skip players who already own it
	local hasOk, hasBadge = pcall(function()
		return BadgeService:UserHasBadgeAsync(player.UserId, BADGE_ID)
	end)
	if not hasOk or hasBadge then
		return
	end

	local awardOk, result = pcall(function()
		return BadgeService:AwardBadgeAsync(player.UserId, BADGE_ID)
	end)
	if not awardOk then
		warn("Badge award failed: " .. tostring(result))
	end
end

Call awardBadge(player) wherever the achievement happens: on a touched part, after a boss kill, when a quest completes. Because everything is in pcall(), a temporary service outage will not crash your script — it just skips the award that time.

If you are still building out the rest of your experience, you can continue with practical Roblox help on Roblox How.

Why isn't my badge being awarded?

Start with the two checks the official reference builds into its own samples: confirm the badge is enabled by inspecting GetBadgeInfoAsync().IsEnabled, and confirm the badge ID in your script matches the one shown for your badge exactly. Because these calls yield and can error, wrap them in pcall() and log the error message — it usually names the problem directly.

How much does it cost to make a badge in Roblox?

Your first 5 badges per experience in any 24-hour window (measured in GMT) are free. Every badge beyond that fifth one, created inside the same window, costs 100 Robux. The allotment is per experience you own, so a second game gets its own free quota.

How do I avoid awarding the same badge twice?

Call UserHasBadgeAsync(userId, badgeId) first and return early if it comes back true — the example script above does exactly that, which also avoids a wasted award call for players who already own the badge.

What size should a Roblox badge icon be?

Upload it at 512×512 pixels. The upload process trims and crops the icon into a circle, so keep text and important details centered and away from the corners — anything near the edges gets cut off by the circular mask.

KEEP READING

More from this desk