
roblox-monetization
Robux monetization - developer products with idempotent ProcessReceipt, passes, subscriptions, rewarded video ads, personalized shops, regional pricing and trade arbitrage, paid random item policy (PolicyService), commerce products, private servers, Roblox Plus, refunds, age checks and the US 18+ rate. Use when adding purchases, shops, game passes, subscriptions, ads, or loot boxes, or debugging lost/duplicated purchases.
- Installs
- 435
- Last 24h
- +23
- Trending rank
- #5222
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/el4cteo/roblox-skills --skill roblox-monetization- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads roblox-monetization automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Roblox monetization
Product types
| Type | Buy | Use for | Grant via |
|---|---|---|---|
| Developer product | Repeatedly | Currency, consumables, boosts, revives | MarketplaceService.ProcessReceipt (server) |
| Pass | Once, permanent | VIP, permanent perks, extra slots | UserOwnsGamePassAsync check on join + purchase-finished event |
| Subscription | Monthly, revocable | Recurring perks (daily currency, VIP) | GetUserSubscriptionStatusAsync + UserSubscriptionStatusChanged |
| Rewarded video ad | Free (watch ad) | Small rewards (≈3–10 Robux value) | Developer product granted through ProcessReceipt |
| Commerce product | Real money (physical goods) | Merch with bundled digital benefits | CommerceService; digital benefits via ProcessReceipt |
| Private server | Monthly | Paid private servers | Configured in Creator Dashboard |
All granting happens on the server. Never grant from client events like
PromptProductPurchaseFinished — clients can fake them.
Developer products: ProcessReceipt
Rules:
- Exactly one server script sets
MarketplaceService.ProcessReceipt. - Return
PurchaseGrantedonly after the grant is persisted. Otherwise returnNotProcessedYet; Roblox retries later (including on the player's next join) with the samePurchaseId. - Handlers must be idempotent: record handled
PurchaseIds in the player's saved data so a retry never grants twice. - Receipts arrive for players who may not be loaded yet or may have left: wait for their data, or
return
NotProcessedYet.
--!strict
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
type PlayerData = { coins: number, purchaseIds: { string } }
type ReceiptInfo = {
PlayerId: number,
ProductId: number,
PurchaseId: string,
CurrencySpent: number,
CurrencyType: Enum.CurrencyType,
PlaceIdWherePurchased: number,
}
local MAX_REMEMBERED_PURCHASES = 100
-- Provided by your data layer (ProfileStore profile.Data, etc.).
local function getLoadedData(_player: Player): PlayerData?
return nil
end
local function saveNow(_player: Player): boolean
return true
end
local PRODUCTS: { [number]: (Player, PlayerData) -> () } = {
[1234567] = function(_player, data) -- 100 coins
data.coins += 100
end,
}
local function processReceipt(receipt: ReceiptInfo): Enum.ProductPurchaseDecision
local player = Players:GetPlayerByUserId(receipt.PlayerId)
if not player then
return Enum.ProductPurchaseDecision.NotProcessedYet -- granted on their next visit
end
local data = getLoadedData(player)
local deadline = os.clock() + 20
while not data and player.Parent == Players and os.clock() < deadline do
task.wait(0.5)
data = getLoadedData(player)
end
if not data then
return Enum.ProductPurchaseDecision.NotProcessedYet
end
if table.find(data.purchaseIds, receipt.PurchaseId) then
return Enum.ProductPurchaseDecision.PurchaseGranted -- already granted earlier
end
local handler = PRODUCTS[receipt.ProductId]
if not handler then
warn(`No handler for product {receipt.ProductId}`)
return Enum.ProductPurchaseDecision.NotProcessedYet
end
local ok, err = pcall(handler, player, data)
if not ok then
warn(`Grant failed for {receipt.PurchaseId}: {err}`)
return Enum.ProductPurchaseDecision.NotProcessedYet
end
table.insert(data.purchaseIds, receipt.PurchaseId)
while #data.purchaseIds > MAX_REMEMBERED_PURCHASES do
table.remove(data.purchaseIds, 1)
end
if not saveNow(player) then
return Enum.ProductPurchaseDecision.NotProcessedYet -- the idempotency list prevents a double grant
end
return Enum.ProductPurchaseDecision.PurchaseGranted
end
MarketplaceService.ProcessReceipt = processReceipt :: any
With ProfileStore, "persisted" means waiting until the PurchaseId appears in profile.LastSavedData
(or calling profile:Save() and waiting); see ProfileStore's developer products guide.
Prompt from the client (UI) — the server still grants:
MarketplaceService:PromptProductPurchase(Players.LocalPlayer, productId).
Passes
--!strict
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local VIP_PASS_ID = 987654
local function grantVip(player: Player)
player:SetAttribute("VIP", true) -- apply perks from one place
end
local function checkPass(player: Player)
local ok, owns = pcall(MarketplaceService.UserOwnsGamePassAsync, MarketplaceService, player.UserId, VIP_PASS_ID)
if ok and owns then
grantVip(player)
end
end
Players.PlayerAdded:Connect(checkPass)
for _, player in Players:GetPlayers() do
task.spawn(checkPass, player)
end
-- Fires on the server too; re-verify ownership rather than trusting `purchased` alone.
MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, passId, purchased)
if purchased and passId == VIP_PASS_ID then
checkPass(player)
end
end)
UserOwnsGamePassAsync results are cached per server; the purchase-finished handler covers in-session buys.
Subscriptions
- Check with
MarketplaceService:GetUserSubscriptionStatusAsync(player, "EXP-...")→{ IsSubscribed, IsRenewing }on join and onPlayers.UserSubscriptionStatusChanged(player, subscriptionId). - Benefits must be revocable: when
IsSubscribedis false, remove perks you persisted. - Prompt with
MarketplaceService:PromptSubscriptionPurchase(player, subscriptionId). - Replacing a pass with a subscription: keep honoring existing pass owners, take the pass off sale.
Shops that sell
- Personalize order with
MarketplaceService:RankProductsAsync(identifiers)(call once on join — strict rate limit) and "Top picks" withRecommendTopProductsAsync({ Enum.InfoType.Product, Enum.InfoType.GamePass })(needs a sale in the last 28 days; call intask.spawn). - Show live prices from
GetProductInfoAsync(id, Enum.InfoType.Product)/GetDeveloperProductsAsync()— never hardcode Robux prices: managed pricing (regional pricing + price optimization) shows different users different prices.receipt.CurrencySpenthas what the user actually paid. - Contextual offers (revive on death, boost when stuck) outperform static menus. Also list items in the game's Shop tab in Creator Hub.
- Open the Roblox Shop overlay from your own buttons, NPCs, or zones with
MarketplaceService:OpenShop(player). - Listed passes and developer products can also be sold outside the game (Home, search, after Robux
purchases); the player joins with the item already bought. Developer products qualify only with a correct
ProcessReceipt— Creator Hub → Monetization → Shop flags products that need a fix.
Refunds and chargebacks
Refunded passes (and avatar items) lose ownership automatically — re-check ownership instead of caching it
forever. Developer product grants live in your data, so revoke them yourself: subscribe to the
Transaction Refunded webhook (covers developer products, passes, private servers, Paid Access) and
match it by the transaction/receipt ID in the payload (see roblox-open-cloud). Keep handled PurchaseIds
with what each granted so a refund can be reversed.
Compliance
- Paid random items (loot boxes, gacha, spins bought with Robux or Robux-bought currency): disclose
odds before purchase, and check
PolicyService:GetPolicyInfoForPlayerAsync(player):ArePaidRandomItemsRestricted→ offer a free earnable path, a disclosed fixed sequence, or direct purchase.IsPaidItemTradingAllowed→ disable trading of paid items when false.
- Regional pricing arbitrage: gate gifting/trading of purchased items using
MarketplaceService:GetUsersPriceLevelsAsync(userIds)(1–1000, % of global price); fetch at join, don't cache across sessions. - Rewarded video rewards must be developer products, not random, and must not harm the player's character while the ad plays.
- Respect age/region restrictions returned by
PolicyServicefor ads, social links, and trading.
Rewarded video ads, commerce products, Premium/Roblox Plus hooks, US 18+ DevEx rate and age checks: references/ads-and-extras.md.
Related skills
roblox-data-stores (persisting grants), roblox-security (economy exploits), roblox-ui (shop UI),
roblox-analytics-liveops (economy events, funnels, experiments).
FAQ
What does the roblox-monetization skill do?
Robux monetization - developer products with idempotent ProcessReceipt, passes, subscriptions, rewarded video ads, personalized shops, regional pricing and trade arbitrage, paid random item policy (PolicyService), commerce products, private servers, Roblox Plus, refunds, age checks and the US 18+ rate. Use when adding purchases, shops, game passes, subscriptions, ads, or loot boxes, or debugging lost/duplicated purchases.
How do I install roblox-monetization?
Run npx skills add https://github.com/el4cteo/roblox-skills --skill roblox-monetization in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/roblox-monetization/ (personal) or .claude/skills/roblox-monetization/ (project).
Which AI agents can use roblox-monetization?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is roblox-monetization safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains roblox-monetization?
It is published by el4cteo in el4cteo/roblox-skills. It has 435 recorded installs.
More from el4cteo/roblox-skills
roblox-world-building
el4cteo/roblox-skills
Building worlds with code - parts, models and pivots, materials, Lighting (LightingStyle, Atmosphere, post-processing), day/night, Terrain API, in-game CSG and destruction (GeometryService Subtract/Union/Fragment), ProceduralModel, EditableMesh/EditableImage, particles/beams/trails/highlights. Use when creating maps, environments, lighting, destructible objects, procedural levels, or visual effects.
roblox-ui
el4cteo/roblox-skills
Responsive cross-platform UI - ScreenGui and safe areas (ScreenInsets), Scale vs Offset, UIListLayout flex/UIFlexItem, constraints, StyleSheets/tokens/themes, RichText, gamepad/touch navigation, UIDragDetector, CanvasGroup, tweens, BillboardGui/SurfaceGui, React-lua/Fusion/Vide. Use when building HUDs, menus, shops, inventories, or fixing UI that breaks on mobile, console, or other screen sizes.
roblox-testing
el4cteo/roblox-skills
Open the skill to read its SKILL.md instructions.
roblox-performance
el4cteo/roblox-skills
Open the skill to read its SKILL.md instructions.
roblox-code-review
el4cteo/roblox-skills
Review Roblox/Luau code for exploits, data loss, memory leaks, performance problems, lifecycle bugs, policy issues, and deprecated or superseded APIs, using a severity-ranked checklist and the full 2026 deprecation map. Use when reviewing a PR or script, auditing a game before launch, modernizing legacy code, or asked what is wrong with some Roblox code.
Popular marketing & seo skills
reddit-automation
flowkit-labs/skills
Find Reddit threads where people are genuinely asking for what you offer, then draft short, genuinely helpful replies — disclosing your affiliation honestly and naming your product only when it truly answers the question. Two moves: discovery — scan the right subreddits for real needs (recommendation asks, expressed pain, competitor mentions) and rank the few threads where you can actually help; drafting — write from real experience, respect each community's self-promo rules, and keep a human in the loop to review and post. This markets on Reddit the honest way: contribute value, disclose who you are, never astroturf. Distilled from the playbook behind doany.ai's Reddit agent. Triggers on "find reddit opportunities", "reddit marketing", "reddit automation", "reply on reddit for my product", "reddit community engagement", "reddit lead gen", or any ask to turn Reddit threads into genuine, disclosed marketing replies.
twitter-automation
101-skills/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
twitter-automation
magentosh/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
twitter-automation
qu-skills/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
product-launch-video
heygen-com/hyperframes
Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.
twitter-automation
skills-shell/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet