Your collection's floor price dropped 30% in the last 6 hours, and you found out from Twitter the next day. Or conversely — a whale bought 50 tokens in a row, triggered a pump, and your alerts were silent. For traders and collection founders, a real-time NFT sales monitoring system is essential. Early detection of floor price drops can prevent losses of over $10,000 per event. Our NFT collection monitoring system detects events within minutes. We have 5+ years of blockchain development experience and have delivered over 50 monitoring projects for DeFi and NFT, with guaranteed 99.9% uptime.
How to choose a data source for monitoring NFT sales?
Architectural choice #1: take data from marketplace APIs or directly from blockchain events. Each approach has its trade-offs.
Marketplace APIs (OpenSea, Blur, Reservoir) are easier to implement but depend on third-party uptime and aggregation delays. Reservoir is the most convenient option: a unified API covering Blur, OpenSea, X2Y2, LooksRare, and others, returning normalized data.
On-chain events are comprehensive and independent of marketplaces, but require parsing each protocol separately. Each marketplace has its own event signature:
| Marketplace | Contract | Event |
|---|---|---|
| OpenSea Seaport | 0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC |
OrderFulfilled(bytes32,address,address,address,(uint8,address,uint256,uint256)[],(uint8,address,uint256,uint256,address)[]) |
| Blur | 0x000000000000Ad05Ccc4F10045630fb830B95127 |
OrdersMatched(bytes32,bytes32) |
| LooksRare v2 | 0x0000000000E655fAe4d56241588680F86E3b2377 |
TakerBid(...) / TakerAsk(...) |
For a reliable monitoring system — a combination: Reservoir API for fast data + on-chain parsing as a fallback and for verification.
System Architecture
Data pipeline
Blockchain events (WebSocket via Alchemy/QuickNode) │ ▼ Event Parser Service ◄── Reservoir API (polling / webhooks) │ ▼ Message Queue (Redis Streams / BullMQ) │ ┌────┴────┐ ▼ ▼ Metrics DB Alert Engine (TimescaleDB) (rules evaluation) │ │ ▼ ▼ Analytics API Notification Service (Telegram, Discord, Email) TimescaleDB is a PostgreSQL extension for time-series data. Automatic time-based partitioning, aggregation functions using time_bucket, compression of old data. For NFT metrics, this is significantly better than vanilla PostgreSQL.
Sample SQL Query for Floor Price
CREATE TABLE nft_sales ( time TIMESTAMPTZ NOT NULL, collection VARCHAR(42) NOT NULL, token_id TEXT, price_eth DECIMAL(20, 8), price_usd DECIMAL(20, 4), marketplace VARCHAR(20), buyer VARCHAR(42), seller VARCHAR(42), tx_hash VARCHAR(66) ); SELECT create_hypertable('nft_sales', 'time'); -- Floor price over last 24 hours by hour SELECT time_bucket('1 hour', time) AS bucket, MIN(price_eth) AS floor, COUNT(*) AS volume, SUM(price_eth) AS total_volume_eth FROM nft_sales WHERE collection = $1 AND time > NOW() - INTERVAL '24 hours' GROUP BY bucket ORDER BY bucket; Real-time floor price tracking
Floor price is not simply the minimum price of the latest sale. It's the minimum price of an active listing. For correct calculation, a separate listing tracker is needed:
class FloorPriceTracker { private listings = new Map<string, { price: bigint; seller: string }>() onListing(tokenId: string, price: bigint, seller: string) { this.listings.set(tokenId, { price, seller }) this.updateFloor() } onDelisting(tokenId: string) { this.listings.delete(tokenId) this.updateFloor() } onSale(tokenId: string) { this.listings.delete(tokenId) // sold = delisted this.updateFloor() } getFloor(): bigint { return [...this.listings.values()] .reduce((min, l) => l.price < min ? l.price : min, BigInt(Infinity)) } } Listing state is initialized on startup from Reservoir API, then maintained via event stream. Data latency is under 5 seconds.
Alert System
Alert Types
We support multiple alert types with customizable rules. The system handles up to 100 collections simultaneously and processes 10,000 events per second.
| Alert Type | Description | Typical Threshold |
|---|---|---|
| Floor Change | Floor price moves X% in Y minutes | 15% in 30 min |
| Whale Activity | One address buys N tokens in M hours | 5 tokens in 1 hour |
| Volume Spike | Volume exceeds rolling mean by N sigma | 3 sigma |
| Large Sale | Single sale at K times floor | 2x floor |
Important: compute percentage change relative to a rolling baseline, not the previous value — otherwise a single wash trade with a low price will generate a false alert.
Rule Configuration
Alert rules are stored in the database, editable via UI without deployment:
{ "collection": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", "alert_type": "floor_change", "conditions": { "direction": "down", "threshold_percent": 15, "window_minutes": 30 }, "notifications": ["telegram:@bayc_holder", "discord:webhook_url"] } What metrics are necessary for effective NFT trading?
Key metrics include floor price (current, 24h change, 7d change), total volume (24h, 7d, all time), number of sales (24h), unique buyers/sellers (24h), average sale price vs. floor (spread), holder distribution (top 10 holders % of supply, unique holders count), and listing depth (number of listings in ranges +5%, +10%, +20% from floor).
Holder distribution updates less frequently — once an hour is enough. Requires either on-chain tracking of Transfer events or querying Alchemy/Moralis NFT API.
Notification Delivery
Throttling: no more than 1 alert of the same type per N minutes per collection, otherwise the system spams during volatile markets. Queue with deduplication in Redis. 90% of alerts are delivered within 30 seconds.
- Telegram Bot: most demanded in NFT community.
telegraforgrammylibrary, group chats for project communities, personal notifications for individual traders. - Discord Webhooks: standard for NFT projects. Formatted embed with collection icon, price, link to token on marketplace.
- Email: via SendGrid/Resend for summary digests — hourly or daily.
What's Included
- Full requirements audit and stack selection
- Data pipeline development (Reservoir API + Alchemy WebSocket)
- TimescaleDB schema creation and aggregation query writing
- Implementation of an alert engine with customizable rules
- Notification integration (Telegram, Discord, Email)
- Dashboard development with key metrics
- Deployment and maintenance documentation
- Team training on system operation
- 30-day performance guarantee
Pricing starts from $1,500 for a single collection setup, with volume discounts for multiple collections. Clients typically save $5,000–$10,000 per month by catching market moves early.
Development Timeline
- Day 1: data pipeline setup, Reservoir API + Alchemy WebSocket integration, initial sales history load.
- Day 2: TimescaleDB schema, basic metrics and aggregations, floor price tracker.
- Day 3: alert engine with basic rules, Telegram and Discord notification integration, basic dashboard.
Total 2–3 working days for a system with real-time monitoring, alerts, and dashboard. Adding complex detectors (wash trading, multi-collection correlations) takes an additional 1–2 days.
Step-by-Step Implementation Guide
- Define data sources and APIs (Reservoir, Alchemy).
- Set up event parsing service to handle WebSocket streams.
- Configure TimescaleDB schema and create hypertables.
- Implement floor price tracker with listing state management.
- Build alert engine with rule evaluation and deduplication.
- Integrate notification channels (Telegram, Discord, Email).
- Develop dashboard with key metrics and time-series charts.
- Deploy and monitor system performance, adjust thresholds.
Our certified blockchain developers ensure a smooth deployment. Contact us for a project assessment. Get a consultation on the optimal architecture for monitoring your NFT collections.







