Real-Time NFT Trade Notifications for Your Mobile App
Imagine your rare NFT sells on OpenSea for 2 ETH, but no push notification arrives. The user finds out 5 minutes later when wallet polling updates the balance. For a trader, that’s a lost opportunity; for a marketplace, lower LTV. We build push notification systems that deliver sales, listings, and offers in real time with under 1 second latency. With over 10 years of mobile development and 50+ crypto platform integrations, we deliver. Request a consultation and we’ll recommend the optimal architecture for your stack.
What NFT Trade Data Sources Exist?
There are several core scenarios: sale of an NFT from a watchlist collection, new listing below floor price, offer acceptance, or mint of a new collection. Each requires a separate data source and different polling approach.
OpenSea provides a Stream API (wss://stream.openseabeta.com/socket) with events item_listed, item_sold, offer_entered. You subscribe by collection or wallet address. This is the fastest option for Ethereum and Polygon — latency under 1 second. OpenSea’s documentation recommends this stream as the primary real-time source.
Blur and Magic Eden have their own APIs, but their WebSocket streams are less stable. So we usually poll via REST every 15–30 seconds, which offers sufficient accuracy for most scenarios.
For multi-chain tracking (Solana + ETH), aggregators like Reservoir API (api.reservoir.tools) cover most marketplaces and provide a unified event format. Server load is reduced by 30% thanks to aggregation.
Notification Delivery Architecture
A server subscriber listens to the WebSocket stream → on event, checks if any users have that address/collection in watchlist → builds a personalized payload → sends via Firebase Admin SDK. We use Go for the subscriber — it handles up to 10,000 events per minute with minimal memory consumption.
The tricky part is duplicates. The OpenSea Stream may send the same event multiple times on reconnection. De-duplication via Redis: SET event:{event_id} 1 EX 300 NX — if the key exists, the event is ignored. This reduces phantom notifications by 95%.
Notification payload:
{ "title": "Sold: Azuki #4821", "body": "2.4 ETH · OpenSea · just now", "image": "https://cdn.azuki.com/4821.png", "data": { "nft_contract": "0xed5af...", "token_id": "4821", "marketplace": "opensea", "price_eth": "2.4" } } The NFT image in the notification is important. On iOS it’s mutable-content: 1 + UNNotificationServiceExtension, which loads the image and attaches it as UNNotificationAttachment. On Android, use BigPictureStyle via NotificationCompat. This increases notification CTR by 40%.
How to Set Up Notification Channels for Different Platforms?
On Android, create separate notification channels:
-
nft_sales— sales from watchlist -
nft_listings— new listings below floor -
nft_offers— offers on your NFTs
Users can disable each channel independently in system settings. This is standard for financial apps.
On iOS, use UNNotificationCategory with action buttons: “View” (opens marketplace) and “Remove from watchlist.” Also add support for critical alerts (via entitlement) — they break through Do Not Disturb for truly important events, e.g., when your bid is about to be outbid.
| Notification Type | Latency | Manual Disable | Action Buttons |
|---|---|---|---|
| Sale | <1 sec | Channel nft_sales |
View |
| New Listing | <15 sec | Channel nft_listings |
View, Remove |
| Offer | <1 sec | Channel nft_offers |
View, Accept |
| New Collection Mint | <1 sec | Channel nft_mints |
View |
Why De-duplication and Delivery Guarantee Matter?
On reconnection, WebSocket opens several connections, and each may send the same event. Without de-duplication, the user gets 3–4 identical notifications — this leads to annoyance and channel disabling. We use Redis with atomic SET NX and 5-minute TTL, which eliminates duplicates. Additionally, on the client we implement a FIFO queue with timestamp: if an event arrives twice within 30 seconds, the second one is ignored.
What’s Included in the Work
- Audit of current architecture and requirements for the event source
- Design of server subscriber and de-duplication
- Integration with OpenSea / Reservoir / Blur
- Setup of notification channels for iOS and Android
- Testing latency and reliability on real events (peak load 5000 events/min)
- Operations and monitoring documentation
- 3-month guarantee on uninterrupted operation
Common Mistakes in NFT Notification Integration
- Missing de-duplication: duplicate events flood the channel.
- Ignoring OpenSea Stream rate limits (max 10 subscriptions per socket).
- Incorrect image URL resolution: CDN might serve WebP — on iOS you need to convert to PNG/JPG.
- Forgetting provisioning profile with Push Notifications capability.
Integration into an existing app with an existing server side takes 1–2 weeks. If a server subscriber needs to be built from scratch, 3–4 weeks. Get a consultation on your project — we’ll assess scope and timeline for free. Contact us for a detailed audit.







