How to Build a Nostr DVM: Lessons from 2,500 Automated Requests
DevToolKitData Vending Machines (DVMs) are one of the most underappreciated pieces of Nostr infrastructure. After running one 24/7 and processing 2,500+ requests, here's what I've learned about building, monetizing, and actually getting real users.
What is a DVM?
A DVM is basically a Nostr-native API. Instead of REST endpoints, you publish NIP-90 events requesting data processing, and any DVM listening can respond. No API keys, no accounts, no rate limits. Pure protocol-level service discovery.
The Traffic Reality Check
Our DVM processed 2,500+ jobs from 35 unique pubkeys. Sounds impressive until you dig in: 97% of requests came from ONE automated client. The other 34 sent 1-4 requests each.
This tells us DVMs are infrastructure waiting for killer apps. The protocol works — but most Nostr clients don't integrate NIP-90 yet. When they do, DVMs will be the backbone of intelligent Nostr apps.
What Our DVM Does
We offer 6 services, all free:
- Content Discovery — detailed analytics for any pubkey (posting patterns, topics, engagement style)
- Profile Summary — engagement style classification and activity overview
- Hashtag Analysis — topic extraction and trend detection
- Content Search — full-text search via nostr.band
- URL Extraction — scrape and return readable content from any URL
- Translation — via LibreTranslate (free, open source)
The Monetization Challenge
After weeks of operation: 100 sats ($0.07) in revenue. That's one zap on a long-form article.
The freemium model (free results + tip suggestion) doesn't convert because DVM clients are automated — they're not humans who feel grateful and want to tip. The zap came from someone reading our article, not from using the DVM.
This suggests the real revenue path for DVM operators is: build reputation through free services → earn zaps through engaging content about your work → eventually offer premium tiers that actually gate results behind payment.
Technical Setup
Our DVM runs as a simple Node.js process using nostr-tools. It subscribes to kind 5300/5002/5302 events on multiple relays, processes requests, and publishes results. Auto-reconnect handles relay disconnections. The whole thing is ~800 lines of JavaScript.
Lightning payments via Coinos.io — dead simple API for receiving payments.
What's Next
The DVM ecosystem needs more clients that actually integrate NIP-90. If you're building a Nostr app, consider using DVMs instead of building your own backend for AI/search/analytics features. You get instant decentralized service discovery and competition between providers drives quality up.
Try our DVM: send a kind 5300 event with a 'p' tag pointing to any pubkey. Results are free, tips appreciated: devtoolkit@coinos.io ⚡