<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: boba bobo</title>
    <description>The latest articles on Forem by boba bobo (@boba_bobo_c54aa2b42146177).</description>
    <link>https://forem.com/boba_bobo_c54aa2b42146177</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3780874%2F8d0b18fb-9918-4da3-bf03-130273cd9e0b.png</url>
      <title>Forem: boba bobo</title>
      <link>https://forem.com/boba_bobo_c54aa2b42146177</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/boba_bobo_c54aa2b42146177"/>
    <language>en</language>
    <item>
      <title>Why Mobula Stands Out as the Best Crypto Data API in 2026</title>
      <dc:creator>boba bobo</dc:creator>
      <pubDate>Mon, 23 Mar 2026 21:44:53 +0000</pubDate>
      <link>https://forem.com/boba_bobo_c54aa2b42146177/why-mobula-stands-out-as-the-best-crypto-data-api-in-2026-8ne</link>
      <guid>https://forem.com/boba_bobo_c54aa2b42146177/why-mobula-stands-out-as-the-best-crypto-data-api-in-2026-8ne</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27c5b6q9jkaxolo6p6ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27c5b6q9jkaxolo6p6ih.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
The crypto data API market was not designed as a single category. It grew out of necessity: CoinMarketCap started as a market cap ranking page. DexScreener was built as a screener UI. Covalent (now GoldRush) indexed blockchains for compliance and analytics use cases. Moralis was purpose-built for EVM wallet developers. Each of these products solved a specific problem at a specific moment in the market's evolution.&lt;/p&gt;

&lt;p&gt;The result, in 2026, is a fragmented landscape where developers building real-time DeFi applications (trading terminals, sniping bots, portfolio trackers that need live prices, multi-chain dashboards) have to assemble data stacks from multiple providers, each covering a different slice of the stack, each with different rate limits, different latency profiles, and different data models.&lt;/p&gt;

&lt;p&gt;Mobula was built for this specific layer. This article explains why, with verifiable numbers for each claim.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem with Every Alternative
&lt;/h2&gt;

&lt;p&gt;Before making the case for Mobula, it is worth being precise about what each category of competitor actually offers and where the limits are.&lt;/p&gt;

&lt;h3&gt;
  
  
  CoinMarketCap and CoinGecko: designed for the browser, not the API
&lt;/h3&gt;

&lt;p&gt;CoinMarketCap has been the reference layer for crypto market data since 2013. Its data is accurate, its coverage is broad, and its brand recognition means that "the CMC price" carries a form of authority in the market.&lt;/p&gt;

&lt;p&gt;What CMC was not designed for is real-time API access. The official pricing matrix confirms that the update frequency across all plans (including Enterprise) is once per minute. Every plan. On the Enterprise tier, which requires a custom contract, data still updates every 60 seconds. On the free Basic plan, the rate limit is 30 requests per minute, meaning a 200-token portfolio tracker polling once per minute per token exhausts the free plan in under four days.&lt;/p&gt;

&lt;p&gt;The WebSocket endpoint listed on the CMC API pricing page is marked "coming soon." It does not exist today.&lt;/p&gt;

&lt;p&gt;CoinGecko is similar in structure: an aggregation layer excellent for market cap rankings, token metadata, and broad coverage, with update cycles measured in minutes rather than seconds.&lt;/p&gt;

&lt;p&gt;For a trading terminal, a 60-second-old price is not real-time data. It is historical data with a short timestamp.&lt;/p&gt;

&lt;h3&gt;
  
  
  DexScreener: a screener UI with a rate-limited API as a byproduct
&lt;/h3&gt;

&lt;p&gt;DexScreener provides free access to DEX pair data with no API key required. For light use, it is a practical starting point. For production applications, the architecture reveals its limits quickly.&lt;/p&gt;

&lt;p&gt;The rate limit is 300 requests per minute on pair and token endpoints, a hard ceiling with no upgrade path. There is no paid tier, no enterprise plan, no way to increase that limit. At 25 tokens polled 12 times per minute, you hit the ceiling.&lt;/p&gt;

&lt;p&gt;The WebSocket that DexScreener provides does not stream price data. It delivers token profiles, boost notifications, and community takeover events. Price data on DexScreener requires polling the REST API.&lt;/p&gt;

&lt;p&gt;There are no webhooks, no historical price endpoint, no wallet data, no swap API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Moralis: the right tool for EVM wallets, not for DeFi price streaming
&lt;/h3&gt;

&lt;p&gt;Moralis is the production-grade infrastructure for EVM wallet applications. It is SOC2 Type II certified, covers wallet balances and transaction history on approximately 25 EVM mainnets with full API support, and its webhooks have a 100% delivery guarantee with retry logic. For a crypto wallet app or an NFT portfolio tracker on Ethereum, it is the correct choice.&lt;/p&gt;

&lt;p&gt;The DeFi data layer is a different story. Moralis does not have a WebSocket that streams price data. The Streams API (what Moralis calls its real-time product) delivers blockchain events via HTTP POST webhooks, not via WebSocket. The distinction matters for applications that need to react to price changes in under a second: a webhook is a notification that an event happened; a WebSocket is a persistent connection that receives data as it is produced.&lt;/p&gt;

&lt;p&gt;The billing model on Streams also scales in a way that creates problems for high-frequency DeFi monitoring. Moralis charges 10 Compute Units per record, where a record is defined as a transaction, a log event, or an internal transaction. A single Uniswap swap generates multiple records. An ERC721 NFT transfer generates 11 records and costs 110 CU. For a compliance platform monitoring a wallet that receives a monthly NFT, this is negligible. For a DeFi application tracking thousands of swap events per day, the cost curve is steep.&lt;/p&gt;

&lt;p&gt;Chain coverage on Moralis is approximately 25 mainnet chains with full Data API and Streams support. Several newer chains (zkSync, Mantle, Blast) are available for RPC nodes only, with no structured data API.&lt;/p&gt;

&lt;h3&gt;
  
  
  GoldRush (Covalent): archival depth, not trading latency
&lt;/h3&gt;

&lt;p&gt;GoldRush maintains a full archival copy of every supported blockchain from genesis block across 100+ chains. Every transaction, log event, and balance is queryable going back to block zero. For a tax platform, a compliance tool, or an analytics dashboard that needs to reconstruct the complete history of an address, GoldRush offers depth that most providers cannot match.&lt;/p&gt;

&lt;p&gt;The REST API was designed for structured historical queries, and the cache TTL reflects that design: 40 to 70 seconds on REST endpoints. For periodic analytics, that is acceptable. For a price feed that a trading bot queries before executing, it means the data is always between 40 and 70 seconds old.&lt;/p&gt;

&lt;p&gt;GoldRush added a Streaming API (real-time data via GraphQL subscriptions over WebSocket) in public beta in July 2025. GraphQL over WebSocket requires a GraphQL-ws compatible client and familiarity with the GraphQL subscription protocol. For teams already working in TypeScript with the official GoldRush SDK, the integration is manageable. For teams working in other languages, it adds integration overhead that a plain JSON WebSocket does not.&lt;/p&gt;

&lt;p&gt;There are no webhooks in GoldRush. The only push delivery mechanism is the persistent WebSocket connection.&lt;/p&gt;

&lt;p&gt;Under benchmark conditions testing both APIs at equivalent load, the GoldRush token holders endpoint returned a 60% success rate against Mobula's 100%, with an average latency of 239ms against Mobula's 129ms. A 40% drop rate on a production endpoint requires fallback handling on every query.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Mobula Built Instead
&lt;/h2&gt;

&lt;p&gt;Mobula started from a different constraint: what does a DeFi application actually need from a data layer?&lt;/p&gt;

&lt;p&gt;The answer is not historical completeness from genesis block. It is not a market cap ranking updated once per minute. It is not an EVM-only architecture.&lt;/p&gt;

&lt;p&gt;The answer is: accurate prices refreshed continuously, delivered with low latency, across every chain where DeFi activity is happening, via whatever delivery mechanism the application requires. REST for queries, WebSocket for streaming, webhooks for event-driven backends.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Octopus pricing engine
&lt;/h3&gt;

&lt;p&gt;Mobula's price data is produced by a system called Octopus. It operates as a multi-chain composable pricing engine that tracks all assets from the largest tokens to newly listed DEX pairs, aggregates prices using volume-weighted and liquidity-ponderated methods across on-chain sources, and updates every 5 seconds with no cache applied, including on free plan accounts.&lt;/p&gt;

&lt;p&gt;The no-cache policy matters in practice. Most providers cache responses to manage infrastructure costs. The cache is the mechanism by which a "real-time" product becomes a 30-second or 60-second-delayed product. Octopus does not cache. The price returned by the API is the price computed from the most recent on-chain data available.&lt;/p&gt;

&lt;p&gt;The accuracy methodology (combining volume aggregation with liquidity ponderation) means that low-cap tokens and newly listed assets receive the same treatment as large-cap tokens. A token listed an hour ago on a minor DEX returns a price computed from actual on-chain liquidity, not a stale reference price or a missing data error.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three delivery mechanisms on a single platform
&lt;/h3&gt;

&lt;p&gt;Mobula supports REST, WebSocket, and webhooks as first-class products, all accessible from the same API key, all using the same data layer.&lt;/p&gt;

&lt;p&gt;The REST API covers market data, wallet data, token metadata, historical prices, and swap quotes. It returns real-time data with published latency benchmarks of 10ms to 200ms across three geographic regions, with the performance dashboard publicly accessible at &lt;a href="https://grafana-production-dc86.up.railway.app/" rel="noopener noreferrer"&gt;grafana-production-dc86.up.railway.app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The WebSocket delivers a JSON-over-WebSocket stream, not GraphQL subscriptions, not a polling wrapper. Connect, subscribe to assets or wallets, receive updates as they are produced. Available on Growth and Enterprise plans.&lt;/p&gt;

&lt;p&gt;Webhooks deliver HTTP POST notifications to your endpoint when a matching on-chain event occurs. One credit per trigger, flat rate, regardless of how many logs or internal transactions the event contains. Available on all plans including free.&lt;/p&gt;

&lt;p&gt;This means a trading application, a notification service, and an analytics dashboard can all operate from the same provider, with the same API key, without combining multiple vendors into a fragile multi-provider stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  88+ chains with uniform coverage
&lt;/h3&gt;

&lt;p&gt;Mobula covers 88+ chains with the same REST, WebSocket, and webhook endpoints available across all of them. There is no distinction between chains where "full" support is available and chains where only RPC nodes are offered. Solana, EVM chains, and non-EVM chains all return market data, wallet data, and on-chain transactions via the same API surface.&lt;/p&gt;

&lt;p&gt;Three geographic server locations reduce round-trip latency for applications deployed across different regions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Oracle-grade price data
&lt;/h3&gt;

&lt;p&gt;Chainlink, Supra, and API3 (three of the largest on-chain oracle networks) use Mobula as a data source for their price feeds. This is a precise claim: they use Mobula as a source, not as an independent validator. The practical implication is that Mobula's price data has been evaluated by oracle providers whose own business model depends on price accuracy, and passes the bar they set for sourcing.&lt;/p&gt;

&lt;p&gt;For a DeFi protocol integrating on-chain price feeds, the fact that Chainlink pulls from the same source the protocol's developer API uses means the on-chain and off-chain price references share a common data origin.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers That Matter
&lt;/h2&gt;

&lt;p&gt;The following figures are drawn from internal benchmarks and verified against published documentation. Each can be independently tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint performance (token holders benchmark):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Mobula&lt;/th&gt;
&lt;th&gt;GoldRush&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Average latency&lt;/td&gt;
&lt;td&gt;129ms&lt;/td&gt;
&lt;td&gt;239ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Success rate&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Data freshness:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;REST cache TTL&lt;/th&gt;
&lt;th&gt;WebSocket push&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mobula&lt;/td&gt;
&lt;td&gt;0s (no cache)&lt;/td&gt;
&lt;td&gt;✓ JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoldRush&lt;/td&gt;
&lt;td&gt;40 to 70s&lt;/td&gt;
&lt;td&gt;✓ GraphQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinMarketCap&lt;/td&gt;
&lt;td&gt;60s (all plans)&lt;/td&gt;
&lt;td&gt;Not available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DexScreener&lt;/td&gt;
&lt;td&gt;Not disclosed&lt;/td&gt;
&lt;td&gt;Not available (price data)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moralis&lt;/td&gt;
&lt;td&gt;Not disclosed&lt;/td&gt;
&lt;td&gt;Not available (HTTP POST only)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Cost at scale (5 million calls per month):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Estimated cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mobula (Growth, unlimited above 1.25M)&lt;/td&gt;
&lt;td&gt;$750/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoldRush (Professional, $0.000833/credit)&lt;/td&gt;
&lt;td&gt;~$4,165/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoinMarketCap (Standard, credit system)&lt;/td&gt;
&lt;td&gt;Varies; Standard plan at $299/mo includes 3M credits, overages additional&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;DexScreener rate ceiling:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A portfolio application tracking 25 tokens with a 5-second refresh interval generates 300 requests per minute, exactly at DexScreener's published hard ceiling. Adding a single additional token breaks the limit. There is no upgrade path.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Mobula Is Not the Right Choice
&lt;/h2&gt;

&lt;p&gt;Honest comparisons include the use cases where the recommended provider is not the best answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For full historical data from genesis block,&lt;/strong&gt; GoldRush has depth that Mobula does not match. Reconstructing the complete transaction history of a smart contract from block zero requires an archival indexer. GoldRush is that indexer on 100+ chains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For CEX aggregate price data and market cap authority,&lt;/strong&gt; CoinMarketCap and CoinGecko are the reference layers. These providers aggregate prices from centralized exchanges via reported volume, which on-chain providers like Mobula do not cover. For Fear &amp;amp; Greed Index data, exchange volume rankings, or any metric that requires CEX data as its primary source, CMC and CoinGecko are the correct inputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For EVM wallet infrastructure with SOC2 certification,&lt;/strong&gt; Moralis provides the most mature product. Its delivery guarantee, documented retry logic, and compliance certification make it the correct choice for wallet applications where guaranteed delivery of every event is a contractual requirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For institutional-grade CEX order book data,&lt;/strong&gt; neither Mobula nor the providers compared in this article are the right product. CoinAPI and Amberdata serve institutional desks that need tick-by-tick order book data across hundreds of exchanges. That is a different market segment.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Gap in 2026
&lt;/h2&gt;

&lt;p&gt;The crypto data API market in 2026 has clear leaders in each legacy segment: CMC for market cap, Moralis for EVM wallets, GoldRush for historical archival, DexScreener for free DEX screening. Each of those providers has a well-defined customer.&lt;/p&gt;

&lt;p&gt;The gap is at the real-time DeFi trading layer: applications that need 0-cache price data across 88+ chains, delivered via REST, WebSocket, or webhooks, at a unit cost that does not make 10 million monthly API calls financially unviable.&lt;/p&gt;

&lt;p&gt;That is the gap Mobula fills. Not by trying to replicate what CoinMarketCap does for CEX data or what GoldRush does for historical depth, but by doing one thing well: giving DeFi applications an accurate, fast, multi-chain data layer with three delivery mechanisms, benchmarked performance, and a cost model that scales with usage rather than punishing it.&lt;/p&gt;

&lt;p&gt;The evidence for that claim is not marketing copy. It is a public Grafana dashboard, a benchmark table, a price comparison that shows $750/mo vs $4,165/mo at 5 million calls, and a list of oracle networks that evaluated the price data and chose to use it as a source.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Benchmark data sourced from internal testing. GoldRush pricing from goldrush.dev/docs/faq (March 2026). CMC update frequency from coinmarketcap.com/api/pricing/ official pricing matrix. DexScreener rate limits from docs.dexscreener.com. Moralis Streams billing from docs.moralis.com/streams/pricing. GoldRush cache TTL from docs.moonbeam.network/builders/integrations/indexers/covalent/. Mobula live performance at grafana-production-dc86.up.railway.app.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Built a Fake Market Detector Using DEX Trade Fees</title>
      <dc:creator>boba bobo</dc:creator>
      <pubDate>Fri, 27 Feb 2026 17:27:13 +0000</pubDate>
      <link>https://forem.com/boba_bobo_c54aa2b42146177/i-built-a-fake-market-detector-using-dex-trade-fees-1loc</link>
      <guid>https://forem.com/boba_bobo_c54aa2b42146177/i-built-a-fake-market-detector-using-dex-trade-fees-1loc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4blr0mwiha58mgpwpiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4blr0mwiha58mgpwpiy.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last month I almost aped into a Solana token showing $2M in daily volume. Everything looked legit active chart, thousands of transactions, growing holder count.&lt;/p&gt;

&lt;p&gt;Then I looked at the fees. The token had generated &lt;strong&gt;$12 in total platform fees&lt;/strong&gt; on $2M of volume. That's a 0.0006% fee ratio. On a real market, that number should be somewhere between 0.5% and 2%.&lt;/p&gt;

&lt;p&gt;It was a wash traded token. The "volume" was bots trading back and forth with themselves. I would have lost everything.&lt;/p&gt;

&lt;p&gt;That's when I started building a market legitimacy scanner powered by fee data. Here's how it works and how you can build one too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fees Can't Be Faked
&lt;/h2&gt;

&lt;p&gt;Every DEX trade has three cost components that most platforms hide from you:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Typical cost (Solana)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gas Fee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Network cost to validators&lt;/td&gt;
&lt;td&gt;~$0.35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform Fee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aggregator cut (Axiom, GMGN, etc.)&lt;/td&gt;
&lt;td&gt;~1% of trade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MEV Fee&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Priority tips, Jito bundles&lt;/td&gt;
&lt;td&gt;~$2-5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here's the key insight: &lt;strong&gt;on a $2,500 trade, the platform fee ($25) is 90% of your total cost&lt;/strong&gt; but most interfaces only show you the gas fee.&lt;/p&gt;

&lt;p&gt;More importantly: real traders pay real fees. Wash traders don't. They control the entire flow, often trading through direct DEX contracts to avoid platform fees entirely. This asymmetry is your detection signal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;According to &lt;a href="https://www.chainalysis.com/blog/crypto-market-manipulation-wash-trading-pump-and-dump-2025/" rel="noopener noreferrer"&gt;Chainalysis's 2025 report&lt;/a&gt;, over 42% of tokens launched in 2024 were listed on a DEX, and wash trading remains one of the most prevalent forms of manipulation. &lt;a href="https://dune.com/blog/a-a-wash-trading-detection-on-uniswap-v2-a-new-tool-for-investors-investigators" rel="noopener noreferrer"&gt;Solidus Labs found&lt;/a&gt; that self-trading on DEX pools is far more common than expected.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Detection Logic
&lt;/h2&gt;

&lt;p&gt;The math is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fee-to-Volume Ratio = (Fees Paid 24h / Volume 24h) × 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what the ratio tells you:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ratio&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.5% - 2.5%&lt;/td&gt;
&lt;td&gt;✅ Healthy, organic trading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.1% - 0.5%&lt;/td&gt;
&lt;td&gt;⚠️ Investigate further&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt; 0.1% with high volume&lt;/td&gt;
&lt;td&gt;🚨 Very likely wash traded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0% with any volume&lt;/td&gt;
&lt;td&gt;🚨 Probable honeypot or scam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt; 5%&lt;/td&gt;
&lt;td&gt;⚠️ Unusual fee structure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A token with $500K daily volume but only $50 in fees? That's a 0.01% ratio. Something is very wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbop4nnhki0dtn6dst4zr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbop4nnhki0dtn6dst4zr.png" alt=" " width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetching Fee Data with Mobula API
&lt;/h2&gt;

&lt;p&gt;Most crypto APIs only give you volume and price. &lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;Mobula&lt;/a&gt; exposes the full fee breakdown — gas, platform, and MEV — per trade and aggregated per token.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get token-level fee stats
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.mobula.io/api/2/token/details?blockchain=solana&amp;amp;address=TOKEN_ADDRESS"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response includes fee metrics across multiple timeframes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EXAMPLE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"totalFeesPaidUSD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;125000.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"feesPaid24hUSD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4450.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"feesPaid1hUSD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;185.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"feesPaid5minUSD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;15.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"volume24hUSD"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;890000.00&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get individual trade fee breakdown
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; GET &lt;span class="s2"&gt;"https://api.mobula.io/api/2/token/trades?blockchain=solana&amp;amp;address=TOKEN_ADDRESS&amp;amp;limit=50"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: YOUR_API_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each trade returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;totalFeesUSD&lt;/code&gt; — sum of all fee components&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gasFeesUSD&lt;/code&gt; — network transaction cost&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;platformFeesUSD&lt;/code&gt; — aggregator/frontend fee&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mevFeesUSD&lt;/code&gt; — priority and MEV-related cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building the Scanner
&lt;/h2&gt;

&lt;p&gt;Here's a TypeScript scanner that analyzes any token and flags suspicious fee patterns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MobulaClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@mobula_labs/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;FeeAnalysis&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ORGANIC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SUSPICIOUS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WARNING&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scanToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;blockchain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;FeeAnalysis&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MobulaClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MOBULA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchTokenDetails&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;blockchain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volume24hUSD&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fees&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;feesPaid24hUSD&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;symbol&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;UNKNOWN&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fees&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Zero fees + active volume = honeypot signal&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fees&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WARNING&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Zero fees with active volume — possible honeypot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Very low ratio + high volume = wash trading signal&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ratio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SUSPICIOUS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Fee ratio &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ratio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;% is far below expected 0.5-2%`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Abnormally high fees = investigate&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ratio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WARNING&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Fee ratio &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ratio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;% is unusually high`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ratio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ORGANIC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fee distribution looks normal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Scan multiple tokens&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8J69rbLTzWWgUJziFY8jeu5tDQEPBwUz4pKBMr5rpump&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addr&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;scanToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;solana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ORGANIC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;✅&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SUSPICIOUS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;⚠️&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;🚨&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;]`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`   Volume 24h: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volume24h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`   Fees 24h:   $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fees24h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`   Fee ratio:  &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;feeRatio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;%`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`   → &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✅ FARTCOIN [ORGANIC]
   Volume 24h: $12,450,000
   Fees 24h:   $89,200
   Fee ratio:  0.7166%
   → Fee distribution looks normal

🚨 SCAMTOKEN [WARNING]
   Volume 24h: $2,100,000
   Fees 24h:   $12
   Fee ratio:  0.0006%
   → Zero fees with active volume — possible honeypot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-Time Monitoring with WebSocket
&lt;/h2&gt;

&lt;p&gt;For live alerting, connect to Mobula's trade stream:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://general-api-v2.mobula.io&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onopen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fast-trades&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MOBULA_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TOKEN_ADDRESS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;solana:solana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;trade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;feePercent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;totalFeesUSD&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseTokenAmountUSD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Alert on suspicious zero-fee large trades&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;feePercent&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseTokenAmountUSD&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`🚨 SUSPICIOUS: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseTokenAmountUSD&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; trade with $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;trade&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;totalFeesUSD&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; fees`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Fee data flips the script on how we evaluate tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Can be faked?&lt;/th&gt;
&lt;th&gt;Reliability&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;✅ Yes (wash trading)&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transaction count&lt;/td&gt;
&lt;td&gt;✅ Yes (spam txs)&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fees paid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ No (costs real money)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique traders&lt;/td&gt;
&lt;td&gt;Partially (sybil)&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tokens with rapidly increasing &lt;code&gt;feesPaid1hUSD&lt;/code&gt; indicate genuine interest from real traders willing to pay premium costs. That's a signal you can't manufacture cheaply.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhmdkn9abequ7hl4xt2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhmdkn9abequ7hl4xt2i.png" alt=" " width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>cryptocurrency</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Best Crypto APIs for Developers in 2026: A Builder's Honest Comparison</title>
      <dc:creator>boba bobo</dc:creator>
      <pubDate>Thu, 19 Feb 2026 17:54:46 +0000</pubDate>
      <link>https://forem.com/boba_bobo_c54aa2b42146177/best-crypto-apis-for-developers-in-2026-a-builders-honest-comparison-486o</link>
      <guid>https://forem.com/boba_bobo_c54aa2b42146177/best-crypto-apis-for-developers-in-2026-a-builders-honest-comparison-486o</guid>
      <description>&lt;h1&gt;
  
  
  Best Crypto APIs for Developers in 2026: A Builder's Honest Comparison
&lt;/h1&gt;

&lt;p&gt;Let me save you the 3 weeks I just spent.&lt;/p&gt;

&lt;p&gt;I've been building crypto tools for a while now. Trading terminals, portfolio trackers, real-time dashboards. And every single time, the first decision that can make or break your project is the same: &lt;strong&gt;which data API do you pick?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pick wrong and you're refactoring in week 3. Too slow for your trading bot. No WebSocket when you need live feeds. Pricing that looks fine until you actually scale. We've all been there.&lt;/p&gt;

&lt;p&gt;So I went through the main players again for 2026, tested them on real use cases, and here's what I found. I wrote this article thinking about what actually matters the most in today's market, so my criteria were mostly about speed, data quality, coverage, and possibilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually matters in 2026
&lt;/h2&gt;

&lt;p&gt;The bar has moved since last year. Cached REST endpoints with 30-second delays? That was fine for a hackathon project in 2024. Not anymore.&lt;/p&gt;

&lt;p&gt;If you're building anything serious today, here's your checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time data&lt;/strong&gt;, not "real-time*" with a 20s cache asterisk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket support&lt;/strong&gt;, because polling is not a strategy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wallet &amp;amp; on-chain data&lt;/strong&gt;, market prices alone don't cut it for DeFi&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-chain&lt;/strong&gt;: ETH is not the only chain anymore. You need Base, Arbitrum, Solana, Sui, Cosmos…&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt; for event-driven architectures that don't burn your rate limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing that doesn't surprise you&lt;/strong&gt;. You know what I mean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's go through each one.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Mobula: The One That Actually Ships Everything
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farqbohphm1l1j5l4as2t.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farqbohphm1l1j5l4as2t.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mobula.io" rel="noopener noreferrer"&gt;mobula.io&lt;/a&gt;&lt;/strong&gt; · Docs: &lt;a href="https://docs.mobula.io" rel="noopener noreferrer"&gt;docs.mobula.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, I'll be upfront. Mobula is the one that surprised me the most in this comparison. Not because of marketing or hype (they barely have any), but because when you actually plug it in, &lt;em&gt;everything just works&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes it different
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Speed.&lt;/strong&gt; Mobula publishes its latency numbers openly: &lt;strong&gt;10ms to 200ms&lt;/strong&gt;. They're one of the only providers that actually does this. When I tested it on a live trading terminal, the difference was night and day compared to CoinGecko's 20-second cache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Latency Benchmark
&lt;/h2&gt;

&lt;p&gt;I find this benchmark to see the latency live:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://grafana-production-dc86.up.railway.app/?orgId=1&amp;amp;from=now-6h&amp;amp;to=now&amp;amp;timezone=browser&amp;amp;refresh=30s" rel="noopener noreferrer"&gt;Live Latency Benchmark&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full stack in one API.&lt;/strong&gt; REST + WebSocket + Webhooks. You don't need to stitch together 3 different providers. One API key, one integration, done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chain coverage is nuts.&lt;/strong&gt; 88+ chains including all the major EVM chains, Solana, Cosmos ecosystem, Sui, you name it. And it's not just "we index the token list" coverage. It's actual wallet transaction data, historical on-chain data, NFT data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They're an oracle source.&lt;/strong&gt; Chainlink, Supra, API3 all use Mobula data. That tells you something about data quality when the oracle networks trust it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 geographic regions&lt;/strong&gt; for low-latency globally. Most competitors? Single region or "we have a CDN" (which is not the same thing).&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smaller community than CoinGecko, fewer Stack Overflow answers, fewer blog tutorials&lt;/li&gt;
&lt;li&gt;Less name recognition (which, honestly, is why it's still competitively priced)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Free tier to get started. Enterprise = unlimited calls. No "compute unit" nonsense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Trading bots, DeFi dashboards, portfolio trackers, anything that needs real-time multi-chain data and can't afford to wait 20 seconds for a price update.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. CoinGecko: The Wikipedia of Crypto Data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.coingecko.com/en/api" rel="noopener noreferrer"&gt;coingecko.com/en/api&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0xmu7xzvpma9s9a7adz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0xmu7xzvpma9s9a7adz.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
CoinGecko is the default recommendation everywhere, and for good reason. It's been around forever, the docs are excellent, and the community is massive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Huge token coverage&lt;/strong&gt;: 13M+ tokens across 200+ networks. Hard to beat on breadth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation is top-tier.&lt;/strong&gt; Interactive explorer, SDKs, tons of community wrappers. The &lt;a href="https://github.com/man-c/pycoingecko" rel="noopener noreferrer"&gt;pycoingecko&lt;/a&gt; Python library alone has ~1.1k GitHub stars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;70+ endpoints&lt;/strong&gt; covering prices, OHLC, on-chain data via GeckoTerminal, NFT metrics, trending coins, categories…&lt;/li&gt;
&lt;li&gt;Trusted by big names: Coinbase, MetaMask, Phantom.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data freshness: 20-second cache.&lt;/strong&gt; This is the killer for real-time use cases. If you're building a trading bot, 20 seconds is an eternity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No wallet transaction data.&lt;/strong&gt; It's market data, not on-chain data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No webhooks.&lt;/strong&gt; You're stuck polling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebSocket still in beta.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free tier wall:&lt;/strong&gt; 30 calls/min, 10k/month. You'll hit it faster than you think. Paid starts at $129/month with no middle ground.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Price widgets, market overviews, token metadata, discovery features (trending, categories). Solid for read-heavy dashboards that don't need sub-second freshness.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. CoinMarketCap: The Legacy Giant
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://coinmarketcap.com/api/" rel="noopener noreferrer"&gt;coinmarketcap.com/api&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpuhfezn5u2dc4st09jc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpuhfezn5u2dc4st09jc.jpeg" alt=" " width="648" height="320"&gt;&lt;/a&gt;&lt;br&gt;
CMC is the name everyone knows. It was the first crypto data site most of us ever visited. But for developer use cases in 2026, it's showing its age.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brand recognition.&lt;/strong&gt; If your client/boss says "use CoinMarketCap data," you know why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2.4M+ tokens&lt;/strong&gt;, 790+ exchanges, and they recently launched a DEX API suite.&lt;/li&gt;
&lt;li&gt;Structured docs with Postman collection.&lt;/li&gt;
&lt;li&gt;Good for aggregated market cap rankings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No WebSocket.&lt;/strong&gt; REST only. In 2026.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No wallet data, no on-chain depth.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data freshness: ~1 minute cache.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Free tier is essentially a demo (~333 calls/day).&lt;/li&gt;
&lt;li&gt;Historical data locked behind $299+/month tiers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No webhooks, no NFT data.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Simple price displays, market cap rankings, content sites that need "powered by CMC" credibility. Not for real-time or on-chain anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Moralis: The Web3 Dev Favorite
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://moralis.io" rel="noopener noreferrer"&gt;moralis.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4z63282e1j8ynrn5h3aa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4z63282e1j8ynrn5h3aa.png" alt=" " width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moralis carved out a strong niche in the Web3 dev community, especially for wallet and NFT data. If you're building anything wallet-centric, you've probably already looked at them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good wallet + NFT data&lt;/strong&gt; including transaction histories, token balances, NFT metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks supported.&lt;/strong&gt; Finally, event-driven architecture.&lt;/li&gt;
&lt;li&gt;Historical transaction data available.&lt;/li&gt;
&lt;li&gt;Active developer community.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No WebSocket.&lt;/strong&gt; REST + Webhooks only. Fine for some use cases, dealbreaker for others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain coverage is vague.&lt;/strong&gt; They say "multi-chain" but don't publish specific numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compute Unit pricing&lt;/strong&gt; is opaque and unpredictable. You'll need a spreadsheet to figure out your actual cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single region&lt;/strong&gt;, no geographic distribution.&lt;/li&gt;
&lt;li&gt;Data accuracy issues have been reported in their own community forums.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;NFT projects, wallet-focused apps, Web3 social features. Less ideal for price-sensitive or high-frequency trading use cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Birdeye: Solana's Home Turf
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://birdeye.so" rel="noopener noreferrer"&gt;birdeye.so&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3sso1v2yznt7qy20cts4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3sso1v2yznt7qy20cts4.jpeg" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
If you're building on Solana and only Solana, Birdeye is hard to ignore. They've got deep DEX coverage and real-time data for the Solana ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time data&lt;/strong&gt; with WebSocket support.&lt;/li&gt;
&lt;li&gt;Deep Solana DEX coverage, every memecoin launch, every liquidity pool.&lt;/li&gt;
&lt;li&gt;Good UI tools alongside the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Only ~10 chains.&lt;/strong&gt; Solana-first, EVM feels like an afterthought.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No webhooks.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Wallet data is limited.&lt;/li&gt;
&lt;li&gt;Historical data is limited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No NFT coverage.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket locked behind $250/month.&lt;/strong&gt; Ouch.&lt;/li&gt;
&lt;li&gt;Single region.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Solana-native projects. Period. If you need multi-chain, this isn't it.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. DexScreener: Great UI, Not Really an API
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://dexscreener.com" rel="noopener noreferrer"&gt;dexscreener.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2ih8yye43eb69717sq5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2ih8yye43eb69717sq5.webp" alt=" " width="800" height="233"&gt;&lt;/a&gt;&lt;br&gt;
DexScreener is a fantastic tool for manually checking DEX pairs. As a developer API? It's… limited.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;90+ chains&lt;/strong&gt; for DEX pair data.&lt;/li&gt;
&lt;li&gt;Free to use, no API key needed.&lt;/li&gt;
&lt;li&gt;Fast for basic pair lookups.&lt;/li&gt;
&lt;li&gt;Unique "boosted tokens" data (tokens promoted on their platform).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No WebSocket.&lt;/strong&gt; REST only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No wallet data.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No historical data&lt;/strong&gt; beyond 24h stats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No webhooks, no NFT data.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;No batch requests.&lt;/li&gt;
&lt;li&gt;Rate limited to 60-300 req/min depending on endpoint.&lt;/li&gt;
&lt;li&gt;Only 8 endpoints total.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Quick pair lookups, price checks, supplementary on-chain data. Not a production API for serious applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Bitquery: The GraphQL Power User's Pick
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://bitquery.io" rel="noopener noreferrer"&gt;bitquery.io&lt;/a&gt;&lt;/strong&gt; · Docs: &lt;a href="https://docs.bitquery.io" rel="noopener noreferrer"&gt;docs.bitquery.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tb3rdokqa43qneyy2o6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tb3rdokqa43qneyy2o6.png" alt=" " width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bitquery takes a completely different approach: instead of REST endpoints, they went all-in on &lt;strong&gt;GraphQL&lt;/strong&gt;. If you're the type of dev who wants to write one query that pulls exactly what you need across multiple chains, no over-fetching, no under-fetching, Bitquery is interesting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;40+ blockchains&lt;/strong&gt; including EVM chains, Solana, Bitcoin, Cosmos, Cardano, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphQL API&lt;/strong&gt; with incredibly flexible queries, filters, aggregations, and multi-chain in a single call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket subscriptions + Kafka streams&lt;/strong&gt; for real-time streaming, great for algo traders and low-latency use cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep on-chain data&lt;/strong&gt;: DEX trades, token transfers (ERC-20, ERC-721, ERC-1155, SPL), smart contract calls, events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crypto Price API&lt;/strong&gt; with OHLCV, moving averages, and cross-chain price aggregation.&lt;/li&gt;
&lt;li&gt;Built-in IDE to build and test queries in the browser.&lt;/li&gt;
&lt;li&gt;Cloud data integrations (AWS, GCP, Snowflake, Databricks).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GraphQL learning curve.&lt;/strong&gt; If your team is used to REST, there's ramp-up time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Point-based pricing is opaque.&lt;/strong&gt; Same query can cost different points depending on complexity and data volume. You'll need to monitor usage closely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free tier is tiny.&lt;/strong&gt; 10K points for the first month, then you need to upgrade or contact sales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation could be better.&lt;/strong&gt; Community reports it's inconsistent in places.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming API reliability.&lt;/strong&gt; Some users report the real-time subscriptions can be spotty.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Data analysts, compliance tools, DeFi analytics platforms, and devs who love GraphQL and need deep on-chain querying flexibility. Less ideal if you just want a quick REST endpoint for price data.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. CoinDesk API (formerly CryptoCompare): Institutional Grade
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developers.coindesk.com/" rel="noopener noreferrer"&gt;developers.coindesk.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxvpywi2228lnzrl1spi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxvpywi2228lnzrl1spi.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
CoinDesk's API is aimed squarely at institutional trading. Order books, futures data, granular OHLCV, the heavy stuff.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;300+ exchanges, 7,000+ assets.&lt;/li&gt;
&lt;li&gt;Order book and futures data.&lt;/li&gt;
&lt;li&gt;Social insights and on-chain metrics.&lt;/li&gt;
&lt;li&gt;Supplementary data like asset news and events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it falls short
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Free plan capped at 250,000 &lt;strong&gt;lifetime&lt;/strong&gt; calls. That's not a free tier, that's a trial.&lt;/li&gt;
&lt;li&gt;Advanced data requires contacting Sales (read: expensive and opaque).&lt;/li&gt;
&lt;li&gt;Narrower asset coverage than aggregators.&lt;/li&gt;
&lt;li&gt;Oriented toward traders, not general dev.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Institutional trading apps, hedge fund dashboards. If you're not in that world, there are better options.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Comparison Table
&lt;/h2&gt;

&lt;p&gt;Here's what it looks like side by side, the features that actually matter when you're choosing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Mobula&lt;/th&gt;
&lt;th&gt;CoinGecko&lt;/th&gt;
&lt;th&gt;CMC&lt;/th&gt;
&lt;th&gt;Moralis&lt;/th&gt;
&lt;th&gt;Birdeye&lt;/th&gt;
&lt;th&gt;DexScreener&lt;/th&gt;
&lt;th&gt;Bitquery&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10–200ms (published)&lt;/td&gt;
&lt;td&gt;20s cache&lt;/td&gt;
&lt;td&gt;~1min cache&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Real-time&lt;/td&gt;
&lt;td&gt;Near real-time&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebSocket&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Beta&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ ($250+)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ (+ Kafka)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Webhooks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wallet data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Historical on-chain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Market only&lt;/td&gt;
&lt;td&gt;Market only&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;24h only&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chain coverage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;88+&lt;/td&gt;
&lt;td&gt;200+ (market)&lt;/td&gt;
&lt;td&gt;Market only&lt;/td&gt;
&lt;td&gt;"Multi"&lt;/td&gt;
&lt;td&gt;~10&lt;/td&gt;
&lt;td&gt;90+ (DEX)&lt;/td&gt;
&lt;td&gt;40+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NFT data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geo regions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;CDN&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;REST + WS&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;td&gt;REST + WS&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;td&gt;GraphQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;30 calls/min&lt;/td&gt;
&lt;td&gt;~333/day&lt;/td&gt;
&lt;td&gt;CU-based&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;10K points/1mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Oracle trusted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chainlink, Supra, API3&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;When you look at the full picture (speed, data quality, chain coverage, real-time capabilities), &lt;strong&gt;Mobula stands out as the most technically complete option available right now.&lt;/strong&gt; The combination of published sub-200ms latency, 88+ chains with actual on-chain depth, REST + WebSocket + Webhooks in a single API, and the trust of oracle networks like Chainlink makes it hard to beat for builders who need a serious data layer.&lt;/p&gt;

&lt;p&gt;CoinGecko remains the gold standard for breadth and developer experience, just know you're getting cached data. Moralis is solid for wallet/NFT use cases but watch the Compute Unit costs. Birdeye owns the Solana niche. Bitquery gives you unmatched GraphQL flexibility if you're willing to deal with the learning curve and opaque pricing. DexScreener is great for quick pair lookups. And CoinDesk serves the institutional crowd.&lt;/p&gt;

&lt;p&gt;At the end of the day, the right choice depends on what you're building. But if I had to pick one API to start a new project with today, I'd go with Mobula and expand from there if needed.&lt;/p&gt;

&lt;p&gt;Thank for your attention don't hesitate to reach out if you have question, i will be happy to help, and i hope this article give you more insight !&lt;/p&gt;

</description>
      <category>api</category>
      <category>blockchain</category>
      <category>cryptocurrency</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
