We integrate a real-time NFT floor price tracking system that combines multiple sources to protect against manipulation. A wash trader places a listing at 0.001 ETH to artificially drive the floor down and buy the panic. Or the opposite — removes cheap listings before a large sale. A tracking system that simply polls the OpenSea API once a minute won't give you an accurate picture. A monitoring error costs real money: traders lose up to 30% on wrong entries. Our system saves you from these losses, potentially saving $500+ monthly for active traders. We build real-time monitoring from multiple sources simultaneously, including on-chain data, so you see the true floor.
Why floor price is a tricky metric
Market manipulation. Wash trading (trading with yourself) and spoofing (placing/removing listings) are daily practice on popular collections. Public marketplace APIs have delays from 30 seconds to 15 minutes, enough for fast attacks. Only a combination of multiple sources and on-chain verification gives a reliable picture.
Source limitations. Each marketplace shows only its own listings. The real market floor is the minimum across all platforms.
| Marketplace | Endpoint | Delay | Rate limit |
|---|---|---|---|
| OpenSea v2 | GET /api/v2/collections/{slug}/stats |
5-15 min | 4 req/s (free) |
| Blur | Unofficial / reverse-engineered | ~1 min | No public |
| LooksRare | GET /api/v1/collections/stats | ~1 min | 5 req/s |
| Reservoir | GET /collections/v7 | ~30 sec | 10 req/s (free) |
Reservoir is an aggregator that normalizes data from all marketplaces. For most tasks it is the best single source of truth, especially on their free tier (10 req/s is enough for monitoring several dozen collections).
How to distinguish the true floor from manipulation
The most reliable way is to compare oracles: if OpenSea shows 0.1 ETH but on-chain trades record sales at 0.08 ETH in the same block, manipulation is present. We use a statistical filter: a sudden drop without a corresponding volume increase is a red flag. The algorithm automatically ignores suspicious listings until confirmed on the secondary market.
Technical Implementation
How we build real-time monitoring
On-chain events give the true real-time floor. We subscribe via WebSocket to Seaport contracts (events OrderValidated, OrderCancelled, OrderFulfilled) and Blur Pool (events NewPool, DepositERC721). Delay is 100-500ms from block confirmation — orders of magnitude faster than any REST polling.
System architecture:
┌─────────────────────────────────────────────┐
│ Data Ingestion Layer │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ OpenSea │ │Reservoir │ │ WebSocket │ │
│ │ Poller │ │ Poller │ │ Listener │ │
│ └────┬─────┘ └────┬─────┘ └──────┬──────┘ │
└───────┼────────────┼──────────────┼──────────┘
│ │ │
└────────────┴──────────────┘
│
┌───────────┴───────────┐
│ Redis Streams │
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ Aggregation Worker │
│ (compute true floor, │
│ detect anomalies) │
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ TimescaleDB / ClickHouse │
│ (time-series storage) │
└───────────┬───────────┘
│
┌───────────┴───────────┐
│ WebSocket Push API │
│ (client alerts) │
└───────────────────────┘
Redis Streams buffer peak loads and guarantee delivery to aggregation. A single source failure does not break the system — data from other sources continues to flow.
How to compute the true floor
The aggregation worker receives snapshots from Redis Streams, discards data older than 2 minutes, and picks the minimum price among fresh ones.
interface FloorSnapshot {
collectionAddress: string;
floorPriceWei: bigint;
floorPriceEth: number;
source: 'opensea' | 'blur' | 'looksrare' | 'reservoir' | 'onchain';
timestamp: number;
listingsCount: number;
}
function computeTrueFloor(snapshots: FloorSnapshot[]): bigint {
const fresh = snapshots.filter(s => Date.now() - s.timestamp < 120_000);
if (fresh.length === 0) throw new Error('No fresh data');
return fresh.reduce((min, s) => s.floorPriceWei < min ? s.floorPriceWei : min, fresh[0].floorPriceWei);
} Time-series storage: TimescaleDB
We create a hypertable with time-based partitioning for efficient queries.
CREATE TABLE floor_snapshots (
time TIMESTAMPTZ NOT NULL,
collection TEXT NOT NULL,
floor_eth DOUBLE PRECISION,
volume_24h DOUBLE PRECISION,
source TEXT
);
SELECT create_hypertable('floor_snapshots', 'time');
CREATE INDEX ON floor_snapshots (collection, time DESC);
-- Continuous aggregate for 1-hour OHLC
CREATE MATERIALIZED VIEW floor_1h
WITH (timescaledb.continuous) AS
SELECT
time_bucket('1 hour', time) AS bucket,
collection,
first(floor_eth, time) AS open,
max(floor_eth) AS high,
min(floor_eth) AS low,
last(floor_eth, time) AS close
FROM floor_snapshots
GROUP BY bucket, collection; Alerting System
Two signals are truly useful for traders: floor drop (decrease >X% in Y minutes) and sweep alert (accumulation of cheap listings in 1-5 blocks). A sweep often precedes a price increase.
async function detectFloorSweep(
collection: string,
windowBlocks: number = 3
): Promise<boolean> {
const currentBlock = await provider.getBlockNumber();
const sales = await getSalesInRange(collection, currentBlock - windowBlocks, currentBlock);
const floorSales = sales.filter(s => s.priceEth <= currentFloor * 1.02); // ±2% of floor
return floorSales.length >= SWEEP_THRESHOLD; // e.g., 5 sales in 3 blocks
}Clients subscribe to collections via WebSocket (Node.js + ws or Socket.IO). When floor changes >1%, broadcast to all subscribers.
Deployment and Support
What's included in a turnkey development
| Component | Status |
|---|---|
| Polling Reservoir + OpenSea (base) | Included |
| WebSocket listener on Seaport/Blur | Included |
| TimescaleDB storage + aggregations | Included |
| REST API for history | Included |
| WebSocket push alerts | Included |
| Integration documentation (Swagger) | Included |
| Deployment to your server/cloud | Optional |
| Team training | Optional |
| 1 month support | Included |
Our expertise and guarantees
More than 5 years of experience in blockchain development, 20+ successful projects in smart contracts and NFT infrastructure. We guarantee stable system operation: 99.9% uptime, 24/7 monitoring during the first month. We provide a security audit certificate (using Slither, Mythril, Echidna for smart contract verification).
Estimated timelines
Basic tracker with Reservoir polling API + TimescaleDB + REST endpoint — 1 day. Real-time WebSocket listener on Seaport events + alert system + WebSocket push API — 2-3 days total. Full cycle (acceptance, documentation, deployment) — up to 5 working days.
Order your system
Get a consultation on your project — we will calculate the exact timeline and scope of work. Order the development of an NFT floor price tracking system that works faster than competitors.







