Sale Logger | Roblox Api

While scrolling the forum, I found a bot named RoManager. I saw that they had a feature that logs sales.
xspELPH0n14
While trying to recreate this, I realized I don’t know how to detect api changes (When a new result shows up, such as the new sale) or the api that is needed to do this. Any help is appreciated, thanks.

1 Like

A lot of these sites and tools scrape the catalog api or bruteforce asset ids directly.

If you want to see when a new bundle comes out then you can use the Catalog API and sort by recently updated and compare the items in your list to a large saved list of items you have collected over time.

Alternatively you just keep trying to access https://www.roblox.com/bundles/ID by incrementing ID until it does not return an error response. I do this for my roblox user count tracker.

Example for bruteforcing written in JS for the Node framework:

I set it so that the starting id will be the 2nd most recent package so the code will output the two most recent packages and when a new package comes out–and assuming the code is still running–then the new package will be found. You will see the code output that it is retrying the same id until it exists.

image

const { request } = require(`https`)

const BUNDLE_URL = `https://www.roblox.com/bundles/`
const ATTEMPT_TIMEOUT_MS = 1000

async function fetch(url) {
	return new Promise(resolve => {
		const req = request(url, resp => {
			let data = ""

			resp.on(`data`, chunk => data += chunk)
			resp.on(`end`, () => resolve([resp.statusCode, resp.headers.location, data]))
		})

		req.end()
	})
}

async function start(id) {
	const [ status, redirect, response ] = await fetch(BUNDLE_URL + id)

	switch (status) {
		case 302:
			const name = redirect
				.match(/\/bundles\/\d+\/(.+)/)[1]
				.replaceAll(/-/g, ` `)
			console.log(`found package with id "${id}" called "${name}"`)
			setTimeout(start, ATTEMPT_TIMEOUT_MS, id + 1)
			break
		case 404: 
			console.log(`no package with id "${id}"`)
			setTimeout(start, ATTEMPT_TIMEOUT_MS, id)
			break
		default: 
			console.log(`unexpected status code: `, status)
	}
}

start(788)

If I wanted to check my transactions (When someone buys my shirt/game pass) would i use the same method?

Sorry I did not realize what that image was–I glanced at it and assumed “Package” was referring to Roblox bundles.

What you want to do is make a GET request to https://economy.roblox.com/v2/users/YOUR_USER_ID/transactions?transactionType=Sale&limit=100 and that will be the 100 most recent items sold. Everytime a new item is added you can output it.

You will have to pass your .ROBLOSECURITY cookie inside the Cookie header of the request to have permissions to view the JSON response from the webpage.

2 Likes

Thanks, quick question, how would i be able to detect if there is a new item in the list (Should I save the most recent sale and see if the new request is different?)

Hey, just got home.

You can save all of the items to a JSON file and read the file. I suggest saving the data to some sort of file then also having a reference in the running code. The reason you might want to save sales to file is because you might encounter an issue where your program stops running.

Are you still creating this bot? I would definitely purchase it if possible.