2026-03-27
How to Stream Meteora DEX Trades and Pool Data in Real-Time
Meteora is a Solana DEX with three pool types: Dynamic AMM (DAMM), Dynamic AMM V2 (DAMM2), and DLMM (Dynamic Liquidity Market Maker). The Sailfish SDK streams trades and pool events across all three in real-time. This guide shows how to set it up.
Meteora Pool Types
- MeteoraDyn (DAMM) — Original dynamic AMM with variable fees based on market volatility.
- MeteoraDynV2 (DAMM2) — V2 dynamic AMM with improved fee mechanics.
- MeteoraDlmm — Concentrated liquidity using discrete price bins, similar to Trader Joe's Liquidity Book.
Stream All Meteora Trades
import { Sailfish, SailfishTier, Trade } from "sailfish-sdk";
const sailfish = new Sailfish({
tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }),
filter: {
token_addresses: [],
pool_addresses: [],
dex_types: ["MeteoraDyn", "MeteoraDynV2", "MeteoraDlmm"],
},
callbacks: {
onTrade: (trade: Trade) => {
console.log(`Meteora trade: ${trade.base_amount} @ ${trade.price}`);
console.log(`Pool: ${trade.pool_address}`);
},
},
});
sailfish.swim();
Filter by Pool Type
To focus on DLMM concentrated liquidity pools only:
filter: {
token_addresses: [],
pool_addresses: [],
dex_types: ["MeteoraDlmm"],
},
Or only dynamic AMM pools (both versions):
dex_types: ["MeteoraDyn", "MeteoraDynV2"],
Detect New Meteora Pools
callbacks: {
onPoolInit: (poolInit) => {
console.log(`New Meteora pool: ${poolInit.pool_address}`);
console.log(`Type: ${poolInit.pool_type}`);
console.log(`Tokens: ${poolInit.token_0_mint} / ${poolInit.token_1_mint}`);
},
},
Pool inits are currently available for MeteoraDyn and MeteoraDynV2. DLMM pool inits are coming soon.
Get Pool Metadata
const poolInfo = await sailfish.fetchPoolInfo("METEORA_POOL_ADDRESS");
console.log(`Pool type: ${poolInfo.pool_type}`);
console.log(`Base: ${poolInfo.base_token.symbol} (${poolInfo.base_token.decimals} decimals)`);
console.log(`Quote: ${poolInfo.quote_token.symbol}`);
Pool info is cached automatically -- repeated lookups for the same address don't hit the network.
Use TradeRaw for High-Frequency Processing
TradeRaw gives raw token amounts with no PoolInfo lookup -- lower latency for high-frequency processing:
callbacks: {
onTradeRaw: (tradeRaw) => {
if (tradeRaw.pool_type === "MeteoraDlmm") {
console.log(`DLMM raw: ${tradeRaw.token_amount_in} ${tradeRaw.token_address_in}`);
console.log(` -> ${tradeRaw.token_amount_out} ${tradeRaw.token_address_out}`);
}
},
},
Query Historic Meteora Trades
import { SailfishApi, SailfishTier } from "sailfish-sdk";
const api = new SailfishApi({ tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }) });
const trades = await api.fetchTrades({
pool_address: "METEORA_POOL_ADDRESS",
limit: 100,
});
for (const trade of trades) {
console.log(`Slot ${trade.index.tick}: ${trade.base_amount} @ ${trade.price}`);
}
You can also query by token address or block range. For visual exploration, use the free Historic Trade Data tool.
Compare Meteora with Other DEXs
const sailfish = new Sailfish({
tier: SailfishTier.free({ apiKey: "YOUR_API_KEY" }),
filter: {
token_addresses: ["TOKEN_MINT"],
pool_addresses: [],
dex_types: [], // empty = all DEXs
},
callbacks: {
onTradeRaw: (tradeRaw) => {
console.log(`${tradeRaw.pool_type}: ${tradeRaw.price}`);
},
},
});
sailfish.swim();
Useful for cross-DEX price comparison and arbitrage detection.
Resources
- Sailfish SDK -- Real-time data streaming
- Sailfish Examples -- Working code samples
- API Documentation -- Endpoints, schemas, and SDK reference
- Free Solana Trading Dashboard -- Live market data
- Historic Trade Data Tool -- Query and explore past trades