← All work

Web app

Next Flip

Old School RuneScape has a player-run market where you can buy items and sell them back for a little more. I wanted a short list of offers I could put in by hand before logging off, and trust to still make sense when I came back.

Kind
Web app
Built with
JavaScript, Python
Data
Public live prices from the OSRS Wiki
Next Flip's Flip finder in Overnight mode with a sample budget: the mode buttons, budget, free slots and risk settings, then the ranked picks, each with a grade, a 7-day price line, the quantity and buy price, and the sell price with its break-even under it.
The problem

The game's market is the Grand Exchange. Players post buy and sell offers, and a buy limit caps how many of each item you can buy every four hours.

The free flipping sites I used capped what they showed. The one whose buy plan I used stopped at 150 rows and two slots on its free tier.

I flip like a farm run, checking in once or twice a day. So the item with the biggest margin this minute isn't much use if it won't fill while I'm away.

What I built

A page in the browser, with no account or sign-up. Once a minute it fetches the OSRS Wiki's real-time prices for every tradeable item and drops the ones that are stale, lopsided or too good to be true.

It grades what's left and drafts a plan for my free offer slots: what to buy, how many, at what price, and what to sell at. Quantities respect the buy limit and how much each item actually trades, and sell prices allow for the 2% market tax.

Nothing leaves my computer except the price requests to the Wiki, and it never touches the game: I place, relist and collect every offer by hand.

It has four tabs. The Flip finder makes the plan. The other three follow what I do with it. All the pictures use invented trades.

The plan, overnight

The page opens on Overnight: buy before bed, sell the next day.

Next Flip's Flip finder in Overnight mode with a sample budget: the mode buttons, budget, free slots and risk settings, then the ranked picks, each with a grade, a 7-day price line, the quantity and buy price, and the sell price with its break-even under it
  1. Two modes, because I flip two ways. I'm either flipping actively or buying something before bed. Overnight wants something that buys slowly but sells for a good margin at a normal pace the next day, so the buy gets the whole night.
  2. Settings I type once. Changing any of them redraws the plan straight away.
  3. The grade is a filter, not a rank. An item has to pass the grade my risk level takes, then picks are ranked by what a whole trip to the GE makes. Ten times the trades for a little more money isn't worth it to me.
  4. Break-even under the sell. The lowest sell that gets back what I paid, after the 2% tax.
Turned down, and why

Under the plan, every item it turned down, with every reason.

The bottom of the plan held for five minutes, the chart legend, and the list of items it turned down, each with its reason, such as a one gp spread, one side trading five times the other, or a margin that disappeared in the last few minutes
My offers

Once I've placed an offer in the game, this tab follows it. Each row is one of my GE slots.

The My offers tab with invented trades: a table of eight offer slots, each with its status and progress bar, a 7-day price line, the price paid, my sell price, its break-even, the market price now and what it makes, and a Tracked by hand table underneath
  1. My sell price follows the market until I type one. A price frozen when I set it was hours stale by the time I checked in.
  2. When the buy limit resets. Under an item's name, how many I can still buy and when the four hour window opens again.
  3. Tracked by hand. They take no slot or cash from the plan, and their items stay out of it.
Profit

Every fill is copied into the page's own log, so my history survives clearing the browser and is the same in any browser.

The Profit tab with invented trades: tiles for today, the last 7 days, all time, the flip count and the best item, a bar chart of the last 14 days with one red loss day, and a per-day table underneath
  1. Sales paired with earlier buys. Tax is taken per item at the sell price. A sale with no recorded buy is listed as left out, because its cost is unknown.
Blitz

Blitz is for when I sit at the Grand Exchange and flip the same few items over and over for about an hour. It picks offers that fill in minutes, not hours, and I place each one in the game as the tab tells me.

It's the newest tab. The timing it plans around is a model I'm still testing against my own sessions.

The Blitz tab with invented trades: a session header with time, flips and profit beside the risk buttons, a strip for items in the bank, eight slot cards each showing one large next step, and a Next up queue with the cash free
  1. This session. Time, flips, profit and an hourly rate. The rate waits until 15 minutes in, because one flip swings it too much before then. A flip counts only when its buy and its sell were both placed in the session.
  2. Risk, on this tab. The same Safe, Balanced and Risky buttons as the Flip finder. I asked for them here so I don't have to leave.
  3. In your bank. Items bought this session, collected and not yet listed, each with a Sell step.
  4. Eight cards, one per GE slot. Card 4 is slot 4. Each shows the item, how far it has filled and one large next step.
  5. Each card's profit, after the GE tax, drawn above its step. Green when it makes money, red when it would lose.
  6. One lit step. The card that needs me most is lit, with Sell first, then Rebuy, then Relist or Cancel. It stays lit until its own slot changes, and nothing on the tab flashes or moves.
  7. Next up. The best rows, most profit first. "Slot 3" means the row is pinned to that slot until an offer lands there. "Spare" rows aren't pinned.
  8. Cash free sits beside Next up, because I choose a row by what I can afford. I asked for it there.
How it was checked

When the picks felt off, two separate audits of the scoring code agreed on the top three causes, and all three were fixed the same day.

One early rule judged each item by its single latest trade. That threw out any item whose price swings within the hour, so it now prices from the hour's averages and uses the latest trades as a check.

When other sites showed bigger margins than anything it picked, a second audit took 75 items from four of those sites and traced where each one dropped out of my list. Most were prices from a single old trade, spreads of one coin, or items costing more than half the cash.

Have something in mind?

A few sentences about the problem is enough to start.

contact@JordanAdair.ca
Open in email