Roblox Scraper: Games, Catalog, Users & Communities
Pricing
from $1.00 / 1,000 records
Roblox Scraper: Games, Catalog, Users & Communities
Scrape Roblox experiences, marketplace items, users and communities. Player counts, visits, likes, genre, creator, resale prices and price history, limited status, follower counts, community members and roles. Search, ids or pasted links, with incremental change tracking for scheduled runs.
Pricing
from $1.00 / 1,000 records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Roblox Scraper
Pull structured data out of Roblox (roblox.com) in one place: experiences with their live player counts, visits, likes and creator, marketplace items with resale prices and price history, player profiles with follower and connection counts, and communities with their roles and full member rosters. Give it a keyword, an id, or just paste links, and it returns clean, flat JSON rows you can load straight into a sheet, a warehouse, or a dashboard. Built-in incremental mode makes it a monitoring tool as well as a one-off extractor: schedule it daily and get back only what actually changed.
Why This Scraper?
- Five sources in one actor, not five separate tools: experiences, marketplace catalog, game passes, users and communities all return through the same dataset with a
kindcolumn. - Up to 40 fields per record, including the numbers people actually track: live players, total visits, likes and dislikes with a derived like ratio, favourites, lowest resale price, recent average price, 30 points of price history, total quantity for limited items, follower and connection counts, and community member counts by role.
- Six link shapes accepted verbatim. Paste an experience page, a marketplace item, a bundle, a game pass, a profile or a community and the actor works out what each one is. A listing link returns the whole result set, not just the first screen.
- Incremental change tracking built in. Every record is classified NEW, UPDATED, REAPPEARED, UNCHANGED or EXPIRED against the previous run of the same search, with the exact list of fields that moved.
- Resume a large pull from a previous run id without paying for rows you already have.
- Honest limits. A run that gets refused fails loudly instead of quietly reporting an empty result, so a scheduled job never silently returns nothing.
- Costs scale with what you keep. The base record set carries no surcharge; only the optional extra detail data does, and only for the records that actually received it.
Data You Get
Sample shape, values are illustrative placeholders, not from a live record.
Experiences (kind: "game")
| Field | Example |
|---|---|
recordId | game-00000001 |
id / universeId | 00000001 |
rootPlaceId | 00000002 |
url | https://www.roblox.com/games/00000002/Sample-Experience |
name | Sample Experience |
description | Full experience description text. |
creatorName / creatorType | Sample Studio / Group |
genre / genreL1 / genreL2 | All / RPG / Action RPG |
playing | 1000 |
visits | 10000000 |
maxPlayers | 20 |
favoritedCount | 500000 |
upVotes / downVotes / likeRatio | 900000 / 100000 / 0.9 |
createdAt / updatedAt | 2020-01-01T00:00:00.000Z |
iconUrl | https://tr.rbxcdn.com/00000000/512/512/Image/Png |
sampledServerCount | 100 |
sampledServerPlayers | 1200 |
avgServerFps / avgServerPing | 59.5 / 150.0 |
mediaImageCount / mediaVideoCount | 5 / 1 |
badges | [{ "id": 0, "name": "Sample Badge", "awardedCount": 1000 }] |
Marketplace items (kind: "catalogItem") and game passes (kind: "gamePass")
| Field | Example |
|---|---|
recordId | catalog-Asset-00000001 |
itemType | Asset (or Bundle) |
url | https://www.roblox.com/catalog/00000001/Sample-Item |
name / description | Sample Item / Item description text. |
categoryName / categoryGroup | Head Accessories / accessories |
creatorName / creatorType | Sample Creator / User |
price / lowestPrice / lowestResalePrice | 0 / 100000 / 100000 |
recentAveragePrice | 110000 |
salesCount / totalQuantity / numberRemaining | 1000 / 10000 / 0 |
favoriteCount | 100000 |
itemRestrictions | ["Limited"] |
isLimited / isLimitedUnique / isCollectible | true / false / true |
hasResellers / isOffSale | true / true |
priceHistory | [{ "date": "2026-01-01T00:00:00Z", "value": 110000 }] |
thumbnailUrl | https://tr.rbxcdn.com/00000000/420/420/Hat/Png |
Users (kind: "user")
| Field | Example |
|---|---|
recordId | user-00000001 |
url | https://www.roblox.com/users/00000001/profile |
name / displayName | SampleUser / Sample User |
description | Profile description text. |
createdAt | 2010-01-01T00:00:00.000Z |
hasVerifiedBadge / isBanned | false / false |
friendsCount / followersCount / followingCount | 50 / 100000 / 25 |
robloxBadges | ["Veteran", "Bricksmith"] |
createdExperiencesCount / createdExperiences | 2 / [{ "name": "Sample Experience", "placeVisits": 10000 }] |
avatarHeadshotUrl | https://tr.rbxcdn.com/00000000/150/150/AvatarHeadshot/Png |
Communities (kind: "group") and their members (kind: "groupMember")
| Field | Example |
|---|---|
recordId | group-00000001 / groupmember-00000001-00000002 |
url | https://www.roblox.com/groups/00000001/Sample-Community |
name / description | Sample Community / Community description text. |
memberCount | 1000000 |
ownerUsername / ownerDisplayName | SampleOwner / Sample Owner |
publicEntryAllowed | true |
shoutBody / shoutPoster | Sample announcement. / SampleOwner |
roleCount / roles | 5 / [{ "name": "Member", "rank": 1, "memberCount": 999000 }] |
groupExperiencesCount / groupExperiences | 3 / [{ "name": "Sample Experience", "placeVisits": 10000 }] |
groupName / roleName / roleRank (member rows) | Sample Community / Member / 1 |
Every record also carries kind, scrapedAt, and, in incremental mode, changeType, changedFields, firstSeenAt and lastSeenAt.
How to Use
Search experiences by keyword
{"mode": "games","gameQueries": ["tycoon", "obby"],"minPlaying": 500,"maxItems": 100,"fetchDetails": true}
Look up specific experiences by id or link
{"mode": "games","gameQueries": ["994732206","https://www.roblox.com/games/2753915549/Blox-Fruits"],"maxItems": 0}
Track limited items and their resale prices
{"mode": "catalog","catalogCategory": "accessories","catalogSalesType": "collectibles","catalogSortType": "priceHighToLow","minPrice": 1000,"fetchDetails": true,"maxItems": 200}
Pull a community and its member roster
{"mode": "groups","groupQueries": ["7", "https://www.roblox.com/communities/4199740/Example"],"fetchGroupMembers": true,"maxItems": 5000}
Paste any mix of links
{"mode": "url","urls": ["https://www.roblox.com/games/2753915549/Blox-Fruits","https://www.roblox.com/catalog/1365767/Valkyrie-Helm","https://www.roblox.com/users/156/profile","https://www.roblox.com/discover?Keyword=simulator"],"maxItems": 50}
Monitor the same search daily and get only the changes
{"mode": "catalog","catalogSalesType": "collectibles","incrementalMode": true,"stateKey": "limiteds-watch","emitExpired": true,"maxItems": 0}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | games | games, catalog, users, groups or url. The search fields of the other modes are ignored; the filter and sort fields below apply whichever mode you run. |
gameQueries | array | Keywords, experience ids, place ids or experience links. One search per entry. | |
catalogKeyword | string | Free-text marketplace search. Superseded by a pasted marketplace listing link, which carries its own keyword. | |
catalogCategory | select | all | all, accessories, clothing or avatarAnimations. Superseded by a pasted marketplace listing link, which carries its own category. |
userQueries | array | Usernames, user ids or profile links. | |
userKeyword | string | Return every profile in the player directory matching this text. | |
groupQueries | array | Community ids or community links. | |
fetchGroupMembers | boolean | false | Also return one row per community member with their role and rank. |
urls | array | Roblox links for URL mode, including the discover and catalog listing pages. | |
minPlaying | integer | Keep only experiences with at least this many players in game right now. Applies to every experience row, including one returned by a pasted link. | |
catalogSalesType | select | any | any, collectibles (limited and resellable) or premium. Applies to every marketplace search, including one built from a pasted marketplace listing link. |
catalogSortType | select | relevance | relevance, favorited, priceLowToHigh or priceHighToLow. Applies to every marketplace search, including one built from a pasted marketplace listing link. |
minPrice / maxPrice | integer | Robux price floor and ceiling for marketplace items. Applies to every marketplace search, including one built from a pasted marketplace listing link. | |
fetchDetails | boolean | true | Add the extra per record data. Billed as a detail enrichment surcharge. |
maxPages | integer | 0 | Result pages per search target. 0 means read until the source runs out. |
maxItems | integer | 20 | Total records across all searches. 0 means unlimited. |
resumeFromRunId | string | Continue a previous run or dataset without repeating rows already collected. | |
incrementalMode | boolean | false | Return only what changed since the last run of the same search. |
stateKey | string | Name an incremental monitoring campaign. | |
emitUnchanged | boolean | false | Also return, and bill, records that did not change. |
emitExpired | boolean | false | Also return, and bill, records that are no longer found. |
proxy | object | Apify proxy | Connection settings. The default works on every Apify plan. |
mcpConnectors | array | Optional MCP connectors to also receive the results. | |
notionParentPageUrl | string | Notion page under which item pages are created. | |
maxNotifyListings | integer | 50 | Cap on items sent to each connector. Does not affect the dataset. |
A note on incremental mode and live numbers
Two kinds of number behave very differently between two runs. Counters that grow, such as visits, favourites, member counts, follower counts and resale prices, are treated as real changes: if one of them moves, the record comes back as UPDATED with that field named in changedFields. Instantaneous gauges, specifically the live player count (playing) and the sampled live server statistics, are excluded from change detection, because they move every minute and would otherwise mark every record as changed on every run. Those fields are still returned with their current value on every row.
Output Example
Sample shape, values are illustrative placeholders, not from a live record.
{"kind": "game","recordId": "game-00000001","id": 1,"universeId": 1,"rootPlaceId": 2,"url": "https://www.roblox.com/games/00000002/Sample-Experience","name": "Sample Experience","description": "Full experience description text.","creatorId": 3,"creatorName": "Sample Studio","creatorType": "Group","creatorHasVerifiedBadge": true,"genre": "All","genreL1": "RPG","genreL2": "Action RPG","price": null,"playing": 1000,"visits": 10000000,"maxPlayers": 20,"favoritedCount": 500000,"upVotes": 900000,"downVotes": 100000,"likeRatio": 0.9,"createdAt": "2020-01-01T00:00:00.000Z","updatedAt": "2026-01-01T00:00:00.000Z","copyingAllowed": false,"createVipServersAllowed": true,"universeAvatarType": "MorphToR15","isContentRestricted": false,"iconUrl": "https://tr.rbxcdn.com/00000000/512/512/Image/Png","sampledServerCount": 100,"sampledServerPlayers": 1200,"avgServerFps": 59.5,"avgServerPing": 150.0,"mediaImageCount": 5,"mediaVideoCount": 1,"badges": [{ "id": 0, "name": "Sample Badge", "awardedCount": 1000, "winRatePercentage": 0.1 }],"changeType": "UPDATED","changedFields": ["visits", "favoritedCount"],"firstSeenAt": "2026-01-01T00:00:00.000Z","lastSeenAt": "2026-01-02T00:00:00.000Z","scrapedAt": "2026-01-02T00:00:00.000Z"}
Send results into your apps (MCP connectors)
Results can optionally be piped into the apps you already use through Model Context Protocol connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in mcpConnectors. For Notion, also set notionParentPageUrl and each item becomes a page under it. Other connectors receive a best effort write.
The connector receives a condensed, human readable summary per item: a title plus the key fields flattened to plain text, with nested objects collapsed to their main value and arrays trimmed to a few names. The complete record always stays in the Apify dataset, and selecting a connector never changes the dataset output.
Plan Requirement
The actor needs an Apify account and uses the standard Apify proxy settings shown in the input. No additional credential or subscription is required.
Known Limits
- Roblox does not publish the list of game passes for an experience to a signed out request. Individual game passes are still returned when you paste their link or id in URL mode.
- The marketplace serves four categories to a signed out request: all, accessories, clothing and avatar animations. Other category names are rejected by the source.
sampledServerCount,sampledServerPlayers,avgServerFpsandavgServerPingdescribe a sample of up to 100 currently running public servers, not every server of the experience.- Community member rosters can run into the millions of rows. Keep
maxItemsset unless you intend to pull the whole roster.