Skip to content

Listings Methodology

How the open-offer table and orderbook samples are built.

The Listings dashboard pulls from two distinct data sources that should not be conflated. flowty_open_listings is a complete, real-time view of every open Flowty loan offer — when a borrower posts a loan listing, it appears in this view; when the listing is funded, canceled, or expires, it disappears. The open-offer count and total liquidity figures are exact representations of the Flowty lending order book. There's no sampling involved on this side.

cached_listings is the marketplace ask side and is explicitly a subset, not a full orderbook snapshot. It is populated by the Sniper deal-feed scanner, which walks each marketplace looking for below-FMV inventory worth surfacing as deals, and holds the same shape across NFL All Day, Golazos, and others. ts_listings, the Top Shot equivalent, works differently again: the original sampler was switched off on 2026-05-26, but the table was rewired to the Atlas firehose on 2026-09-07 and is now rebuilt every few minutes from the listings the firehose re-reported in the last 24 hours. That is not the whole book: the firehose re-reports only listings that change, so at any moment the window holds only a small fraction of the Top Shot listings that are open. Order Book Depth for Top Shot therefore describes recently active listings, not the total supply for sale. Order Book Depth publishes it only while it is fresh — the block carries the age of its own newest row, and if that age passes six hours the card reports the age instead of the depth, because a book nobody has rebuilt is not a market fact. Per-edition Top Shot lowest asks live in edition_offers, refreshed from the same firehose every few minutes. When an older listing that is still open undercuts the 24-hour floor by more than half, neither price can be confirmed, so the lowest ask is shown as unknown until a re-check of that edition's full book settles it (those editions are re-checked first). The boards and edition pages show the age of any ask we have not re-confirmed recently rather than implying it is live. Median ask is the most representative summary statistic on these tables — min and max can be skewed by listing-reward farming asks, and the dataset is small enough that count alone doesn't tell the full story.

Both sources are filtered through the dead-listing rule before they hit the dashboard: any ask above 50× FMV (or above $100,000 when no FMV is available) is excluded. This catches the listing-reward farming pattern where wallets list a moment at $9 million to earn micro-rewards from being a marketplace participant — those listings exist on-chain but are not real prices. Without the filter the orderbook stats would be unreadable.

APR on loan offers is annualized for honest comparison. The Flowty contract emits a term_rate (the rate over the loan term, typically 30-90 days) and we convert via term_rate × (365 / term_days). A 23% rate on a 77-day loan is ~110% APR, which is the more useful comparison metric — the dashboard surfaces only the annualized figure, not the raw term rate. Collections are filtered through the same normalization used elsewhere (nba_top_shot → topshot, nfl_all_day → allday, laliga_golazos → golazos, etc.) so the FilterBar chips work identically across Loans, Sales, Pulse, and Listings.

Borrower resolution via HybridCustody. Flowty's ListingAvailable event identifies the storefront resource (typically a child account in a HybridCustody hierarchy), not the parent wallet that ultimately receives the loan. We resolve storefront → parent borrower by mapping each storefront we observe in past funded loans to its parent wallet. About 73% of currently-listed offers resolve via this lookup; the remaining 27% are first-time storefronts that will resolve once they get their first funded loan. Open-offer rows expose both addresses — the borrower wallet (linked to the wallet profile when known) plus the storefront address used as the fallback identifier when the parent hasn't been seen yet.

Data sources

  • flowty_open_listings (Supabase view) — real-time open Flowty loan offers
  • ts_listings (Supabase) — Top Shot listings the Atlas firehose re-reported in the last 24 h (a subset of the open book), rebuilt every few minutes; published as Order Book Depth only while its newest row is under six hours old
  • cached_listings (Supabase) — Sniper-feed-sampled marketplace asks for AllDay, Golazos, others
  • fmv_snapshots (Supabase) — for the 50× FMV dead-listing filter
  • analytics_listings_summary / analytics_listings_open_loan_offers RPCs

Refresh cadence

Page revalidates every 5 minutes; the underlying ask feed re-checks each edition roughly hourly when healthy

← Back to all methodology