We have encountered a critical issue with MarketplaceService:GetProductInfo(productId, Enum.InfoType.Product) where it intermittently returns an empty table ({}) when called on developer products, yet pcall still evaluates the call as successful. This leads to broken behavior in our experience’s systems that rely on that data—most notably our UI and purchasing logic—because required fields such as PriceInRobux are completely missing.
Importantly, this is not a misuse of the API on our part. The retrieval logic we use is wrapped in a retry-based pcall as shown below:
function module:GetProductInfo(productId, productType)
local success, result
local retries = 0
repeat
if retries >= 1 then task.wait(0.5) end
retries += 1
success, result = pcall(marketplaceService.GetProductInfo, marketplaceService, productId, productType)
until success or retries > 5
if not success then warn("an error occurred when getting product info for "..productId..". error: "..tostring(result)) end
return success and result
end
We then handle the result like this:
local itemData = utilityModule:GetProductInfo(button.Name, Enum.InfoType.Product)
if not itemData then return end
if not itemData.PriceInRobux then
warn("didn't find PriceInRobux for product "..button.Name..": "..HttpService:JSONEncode(itemData))
return
end
Over the past few days, this has resulted in thousands of logs of the following form:
didn't find PriceInRobux for product X: []
Over the past 24 hours, we’ve received more than 10,000 warnings of this kind. This has severely affected our users’ ability to see prices or initiate purchases, degrading monetization and damaging user trust. In all these cases, the API returned {} with no PriceInRobux, Name, or any other fields, and yet the pcall result was true.
This bug does not affect other asset types like gamepasses—only developer products seem impacted. We also tested with Price Optimization both enabled and disabled, and the issue still occurs, which strongly suggests that feature is not the cause (although a possible link).
Expected behavior
If MarketplaceService:GetProductInfo fails to retrieve product information—particularly when returning an empty table—it should throw an error, causing pcall to return false. This allows the developer to handle the error properly (e.g., retry, fallback UI, etc.). Returning an empty table while still flagging success leads to silent system failures and incorrect assumptions that the product was fetched successfully.
A private message is associated with this bug report
