Skip to content

/brokerprice

Script-provided

Registered by brokerprice. Start it with /lua run brokerprice.

Syntax

/brokerprice scan
/brokerprice set <platinum>
/brokerprice catalog [minPlat]
/brokerprice tag [minPlat] [bank]

Description

Resident broker toolkit. scan searches the market for each of your unlocked consignments and undercuts the lowest competitor; set stamps a flat platinum price onto every unlisted consignment (both need the broker window open). catalog crawls every page of the broker into a local price cache, and tag reports which of your carried items are worth selling against that cache.

Ships armed

COMMIT is a constant at the top of brokerprice.lua, set to true as shipped — there is no in-game toggle. Both scan and set will send real vendor_set_price writes the first time you run them. Edit the script and set COMMIT = false first if you want a dry run (both subcommands still search/log the full plan, they just don't send anything).

Subcommands

Subcommand What
scan Search the broker for each consignment, undercut the lowest competitor's buyer price by UNDERCUT (10% as shipped), and reprice. Skips locked items, items already lowest, and items nobody else lists.
set <platinum> Set every unlisted, unlocked consignment to <platinum>p flat. Leaves already-listed items untouched.
catalog [minPlat] Crawl every page of the broker and cache the lowest / mean / highest price per item to brokerprice.catalog.json. Optional minPlat scopes the crawl to items priced at least that many platinum (default: everything). Needs the broker window open.
tag [minPlat] [bank] Read-only report: cross-reference your inventory against the catalog and list items worth at least minPlat platinum (default 1p). Does not need the broker open. Scans bags only unless you add bank. Writes nothing — use /autoloot autobroker to actually tag.

A command is refused with busy -- a job is already running or queued if a scan or set is still in flight; the handler only queues work, the resident loop (its own coroutine, so it can eq2.delay) does the actual searching.

A launch argument still works as a one-shot: /lua run brokerprice set 10000 queues that job immediately after the script starts and stays resident afterward — you don't need to type the /brokerprice command separately.

How scan pricing works

For each consignment, scan reads the Buy-tab search results, splits rows into your own listing (matched by seller name) and everyone else's, and targets a price that lands your buyer-facing price UNDERCUT below the lowest competitor's buyer price — converting back through the broker commission (derived live from your own listing when possible, otherwise a 20% fallback), rounded up to the nearest gold. If you're already lowest, or nobody else lists the item, it's skipped. Searches are paced with a cooldown between items to avoid the broker silently returning empty results under rate limiting.

Building a price catalog

catalog runs one broad broker search (blank item filter) and walks the whole result set — roughly 8,400 pages for a full economy — aggregating a per-item record keyed by display name:

  • lo / hi — lowest and highest listed price seen (copper)
  • avg — mean price. Skewed by outliers (a Krono listed at 76,000,000p wrecks the mean), so price decisions use lo, not avg.
  • n — number of listings observed; level — item level
  • cheap — the cheapest few {price, seller} samples
  • id — reserved 0 placeholder; the broker's search rows don't expose a stable item id yet (a pending RE task will backfill it)

It pages at the broker's native size of 8 — the window's next-page button re-searches at 8 regardless of the PAGESIZE we ask for, so a larger initial page just desyncs the "Page A of B" counter — checkpoints to disk periodically, and posts an ETA to the chat window every ~2.5 minutes. An interrupted crawl leaves a valid partial catalog on disk. Output: brokerprice.catalog.json, next to the script. A full crawl takes ~90 minutes; catalog 1 (only items ≥ 1p) is far smaller if you just want the sellable set.

Checking what's worth selling

tag [minPlat] [bank] loads the catalog and your live inventory and prints the carried items whose lowest market price clears minPlat platinum (default 1p), with a match summary (how many matched, how many aren't listed on the broker at all). It scans bags only by default; add bank to include bank items (they appear only when you're at a banker, and /autoloot putbroker moves from bags). This command is read-only — to actually apply Broker tags, use /autoloot autobroker.

Logging

Every run appends to brokerprice.log next to the script (in the Lua scripts directory), in addition to printing to the game chat window — useful for reviewing a scan's full plan after the fact.

Examples

/lua run brokerprice
/brokerprice catalog          # full price crawl (~90 min)
/brokerprice tag              # which carried items are worth >= 1p
/brokerprice scan
/brokerprice set 10000
/lua stop brokerprice

See also

  • lib.loot.broker — the consignment data model and vendor_set_price / search write path behind scan/set.
  • lib.loot.brokercat — the price-catalog reader shared by tag and /autoloot autobroker.
  • /autoloot — autobroker turns catalog prices into Broker tags (upgrading Sell→Broker); putbroker moves them into the box.