Roblox Scraper icon

Roblox Scraper

Scrape Roblox experiences, marketplace items, users and communities. Player counts, visits, likes, genre, creator, resale prices and price history,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Roblox Scraper at a glance

Roblox Scraper is a ready-to-run Apify actor from abotapi for collecting automation data. Its documented output includes record type, record id, change type (incremental mode), id and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Automation, Other
Pricing
$1.80 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
31 options

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.

What Roblox Scraper can do

  • Five sources, one dataset. Experiences, marketplace items, game passes, players and communities all return through the same dataset with a kind column, instead of five separate tools.
  • Deep experience data. Live player count, total visits, favourites, likes and dislikes with a derived like ratio, plus, with detail on, sampled live server stats, media counts and badges.
  • Marketplace depth on demand. Resale price, recent average price, up to 30 points of price history and total quantity for limited items.
  • Six link shapes accepted as-is. Paste an experience, marketplace item, bundle, game pass, profile or community link, or a discover or catalog listing page, and the actor works out what each one is.
  • Incremental change tracking built in. Records are compared run over run and classified NEW, UPDATED, UNCHANGED or EXPIRED, with the exact fields that moved.
  • Detail lookups protect the rest of the run. If the extra per-record lookups start coming back empty for many records in a row, they turn themselves off for the rest of that run, so the base records still come back.

Choose what to collect

These inputs let you configure Roblox Scraper - Games, Catalog, Users & Communities. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredgames = search or look up experiences. catalog = search the avatar marketplace. users = look up or search players. groups = look up communities and, optionally, their members. url = paste roblox.com links and let the scraper work out what each one is.

Choices: games, catalog, users, groups, url

gameQueriesarrayOne entry per search. Each entry can be a keyword ("tycoon", "blox fruits"), a numeric experience or place id, or a roblox.com experience link. Keywords are searched, ids and links are looked up directly.
catalogKeywordstringOptional free-text search, for example "dominus", "valkyrie", "headphones". Leave blank to browse the chosen category.
catalogCategorystringWhich slice of the marketplace to browse. Only these categories are served to a signed-out request. A pasted listing link carries its own category.

Choices: all, accessories, clothing, avatarAnimations, heads

userQueriesarrayOne entry per user. Each entry can be a username, a numeric user id, or a roblox.com profile link. Usernames are resolved to ids automatically. The sample username is ignored when Username search is filled in.
userKeywordstringOptional. Search the player directory for this text and return every matching profile, not just the first page of matches.
groupQueriesarrayOne entry per community (group). Each entry can be a community name, a numeric community id or a roblox.com community link. A plain name is looked up with the public community search and must match a community name exactly (ignoring case); otherwise the entry is skipped with a warning in the log that lists close matches, and the run fails if no entry resolves. A link to anything other than a community is skipped with a warning.
Show 24 more inputs
More input fields
InputWhat it controls
fetchGroupMembersbooleanReturn one extra row per member (username, display name, role and rank) alongside the community record. Large communities have millions of members, so keep Max items set unless you really want the whole roster.
urlsarrayOne or more roblox.com links. Supported: experience pages (/games/...), marketplace items (/catalog/...), bundles (/bundles/...), game passes (/game-pass/...), user profiles (/users/.../profile), communities (/groups/... or /communities/...), and the listing pages /discover?Keyword=... and /catalog?Keyword=... which return their whole result set. Multi-link supported. The search fields of the other modes are ignored, with one exception: the Filters and sort fields below still apply, so a player floor drops experiences returned by these links and the marketplace controls shape a pasted /catalog?Keyword=... listing search (a sale type, sort order, creator or off-sale flag written in the link itself wins over the matching field).
minPlayingintegerOnly keep experiences with at least this many players in-game at the moment the run reads them. Leave empty to keep every result. It applies to every experience the run returns, whether it came from an Experiences search or from a pasted experience or /discover link.
catalogSalesTypestringNarrow to a sale type. Collectibles are the limited and limited-unique items that can be resold, and they are the ones that carry resale prices and price history. It applies to every marketplace search, unless a pasted /catalog?Keyword=... listing link carries its own salesTypeFilter, in which case the link's value is used.

Choices: any, collectibles, limited, premium

catalogSortTypestringHow the marketplace orders the results before they are returned. It applies to every marketplace search, unless a pasted /catalog?Keyword=... listing link carries its own SortType, in which case the link's value is used.

Choices: relevance, favorited, priceLowToHigh, priceHighToLow, bestselling, recentlyPublished

catalogCreatorNamestringOnly marketplace items made by this creator (user or group name). Leave empty for any creator. It applies to every marketplace search, unless a pasted /catalog?Keyword=... listing link carries its own CreatorName, in which case the link's value is used.
catalogIncludeUnavailablebooleanAlso return marketplace items that are not currently for sale. It applies to every marketplace search, unless a pasted /catalog?Keyword=... listing link carries its own includeNotForSale, in which case the link's value is used.
minPriceintegerOnly return marketplace items priced at or above this. Leave empty for no floor. It applies to every marketplace search, whether built from the Marketplace catalog fields above or from a pasted /catalog?Keyword=... listing link.
maxPriceintegerOnly return marketplace items priced at or below this. Leave empty for no ceiling. It applies to every marketplace search, whether built from the Marketplace catalog fields above or from a pasted /catalog?Keyword=... listing link.
fetchDetailsbooleanAdd the extra per-record data: live server statistics, media counts and badges for experiences; resale price, sales and price history for marketplace items; connection, follower and following counts plus created experiences for users; roles and community experiences for communities. Adds extra requests per record and is billed as a detail-enrichment surcharge. Turn off for a lighter run that returns only the base fields. Community members, game passes and bundles are always returned complete and are never charged the surcharge.
maxPagesintegerHow many result pages to read per search target. 0 (default) means unlimited: reading stops naturally once the source reports no further page, or sooner once Max items is reached. Set a number only for an explicit page cap below that natural stop.
maxItemsintegerThe sole soft cap on the run: stop after this many records across all searches. Defaults to 20 so a run stays small unless you raise it. 0 = up to the maximum of 1,000,000 records (or the natural end of each listing). Larger values are lowered to 1,000,000.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning or charging for records already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns everything as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Values that move on their own between runs (live player count, visits, favourites, member and follower counts, sampled live server statistics, scrape time) are excluded from change detection, so a record whose only difference is one of them counts as unchanged; those fields are still returned with their current value. Prices, off-sale status and stock are compared. The marketplace fields mainImage, itemCreatedUtc, quantityLimitPerUser, itemStatus, bundledItems, isRecolorable and isFreeItem are returned but not compared, so a change in only those fields does not mark a record UPDATED (price, which isFreeItem follows, lowest price, off-sale status and stock are compared). You can exclude more fields with the ignore setting below. State is kept separately for each mode, search and detail setting; use State key to name or deliberately share a campaign.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key from the mode, search and detail settings, so different searches never mix state.
emitUnchangedbooleanOff by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search: not when Max items capped it, not when Resume was used, and not when any request was refused. This returns, and bills, extra rows.
changeScopestringAll fields (default) compares every field except the built-in excluded ones and your own ignore list. Price and stock only narrows marketplace items to price, lowest price, off-sale status and remaining stock, so other edits (description, favourites) no longer mark an item UPDATED. Other record kinds are unaffected. A narrowed scope keeps its own stored baseline.

Choices: all, priceStock

compactUpdatesbooleanOff by default. When on, an UPDATED row carries only its identity fields, the current value of each changed field and the change details. NEW rows stay complete. A compacted UPDATED row is billed the detail-enrichment event only when a changed field it carries came from the extra detail lookups.
expireAfterMissedScansinteger0 (default) marks a record EXPIRED after the first complete scan that does not find it. Set 2 or more to wait for that many complete scans in a row before marking it EXPIRED. Only applies with Emit expired records on.
ignoreFieldsForChangesarrayOptional, incremental mode only. Field names to leave out when deciding whether a record changed, for example likeRatio or creator.name. Dotted paths reach nested fields and apply to every item of a list. The fields are still returned; they are just not compared and never appear in changedFields. Changing this list does not mark records as updated.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title plus key fields), not the full JSON; the complete record always stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

kindRecord type (text)
recordIdRecord ID (text)
changeTypeChange type (incremental mode) (text)
idID (number)
urlURL (link)
nameName (text)
displayNameDisplay name (text)
descriptionDescription (text)
creatorNameCreator (text)
creatorTypeCreator type (text)
genreGenre (text)
playingPlaying now (number)
Show 73 more fields
visitsVisits (number)
favoritedCountFavourites (number)
upVotesLikes (number)
downVotesDislikes (number)
likeRatioLike ratio (number)
pricePrice (Robux) (number)
lowestResalePriceLowest resale (Robux) (number)
recentAveragePriceRecent average price (number)
isLimitedLimited (boolean)
isCollectibleCollectible (boolean)
categoryNameMarketplace category (text)
totalQuantityTotal quantity (number)
memberCountMembers (number)
ownerUsernameCommunity owner (text)
groupNameCommunity (text)
roleNameRole (text)
roleRankRole rank (number)
followersCountFollowers (number)
friendsCountConnections (number)
createdAtCreated (text)
iconUrlIcon (image)
thumbnailUrlThumbnail (image)
avatarHeadshotUrlAvatar (image)
emblemUrlEmblem (image)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
scrapedAtScraped at (date)
universeIdExperience ID (number)
rootPlaceIdPlace ID (number)
genreL1Genre (main) (text)
genreL2Genre (sub) (text)
maxPlayersMax per server (number)
updatedAtUpdated (text)
sampledServerCountSampled servers (number)
sampledServerPlayersPlayers in sampled servers (number)
avgServerFpsAverage server FPS (number)
avgServerPingAverage server ping (number)
mediaImageCountImages (number)
mediaVideoCountVideos (number)
badgesBadges (array)
itemTypeItem type (text)
categoryGroupCategory group (text)
lowestPriceLowest price (number)
salesCountSales (number)
numberRemainingRemaining (number)
favoriteCountFavourites (number)
itemRestrictionsRestrictions (array)
isLimitedUniqueLimited unique (boolean)
hasResellersHas resellers (boolean)
isOffSaleOff sale (boolean)
priceHistoryPrice history (array)
itemCreatedAtCreated (text)
itemCreatedUtcCreated (UTC) (text)
itemStatusItem status (array)
bundledItemsBundled items (array)
isRecolorableRecolorable (boolean)
isFreeItemFree item (boolean)
mainImageMain image (image)
quantityLimitPerUserMax per user (number)
isBannedBanned (boolean)
hasVerifiedBadgeVerified (boolean)
followingCountFollowing (number)
robloxBadgesPlatform badges (array)
createdExperiencesCountCreated experiences (number)
createdExperiencesExperiences (array)
publicEntryAllowedOpen to join (boolean)
shoutBodyCommunity shout (text)
roleCountRoles (number)
rolesRole list (array)
groupExperiencesCountCommunity experiences (number)
groupExperiencesCommunity experience list (array)
groupIdCommunity ID (number)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "kind": "game",
  "recordId": "game-1",
  "id": 1,
  "universeId": 1,
  "rootPlaceId": 2,
  "url": "https://www.roblox.com/games/2/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,
  "mediaImageCount": 5,
  "mediaVideoCount": 1,
  "badges": [
    {
      "id": 0,
      "name": "Sample Badge",
      "awardedCount": 1000,
      "winRatePercentage": 0.1
    }
  ],
  "changeType": "UPDATED",
  "changedFields": [
    "favoritedCount",
    "visits"
  ],
  "firstSeenAt": "2026-01-01T00:00:00.000Z",
  "lastSeenAt": "2026-01-02T00:00:00.000Z",
  "scrapedAt": "2026-01-02T00:00:00.000Z"
}

Ways to use this data

  • Player count and trend monitoring: track live players, visits and favourites for a watchlist of experiences over time.
  • Limited item and resale tracking: watch marketplace collectibles for price, quantity and resale history changes.
  • Community research: pull a community's member roster, roles and rank breakdown.
  • Creator and catalog research: compare genres, creators, prices and player counts across many experiences or marketplace items at once.
  • Player lookups: resolve usernames or profile links to follower, following and connection counts.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Roblox Scraper return?

The documented output for Roblox Scraper includes record type, record id, change type (incremental mode), id, url, name, display name and description. Availability of each field depends on the source page and the selected mode.

How much does Roblox Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed data on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Unchanged records are not returned or billed unless you turn on Emit unchanged, and Emit expired records only produces tombstones for items that vanished, and only after a run that scanned the tracked search completely.

Why did I never see a REAPPEARED record?

REAPPEARED is not a normal outcome of running the same search twice. It only appears for a record that a previous complete scan, with Emit expired records on, not capped, not resumed, nothing refused, already marked EXPIRED, and that later turns up again in a further run. If you have never turned on Emit expired records, or no run has ever scanned its whole tracked search end to end, REAPPEARED will never appear, and that is expected.

Why did my run fail instead of returning an empty dataset?

If every request to Roblox's endpoints is refused, the run stops with a clear message so "no matches for this search" is never confused with "nothing could be read". Re-run in a few minutes. A run also fails if the selected mode's required search field is empty, or if Resume is combined with Incremental mode on a state key that already has tracked records from an earlier run.

Why are some fields empty even though Fetch full details is on?

Game passes, community members and marketplace bundles are always returned complete from their listing page and never carry the extra detail fields, and are never charged the surcharge. For experiences, marketplace items, players and communities, if the extra lookups come back empty for many records in a row, they turn off for the rest of that run and the base fields still come back. The sampled live server numbers describe up to 100 currently running public servers, not every server of the experience.

Ready to collect with Roblox Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.