Yellowstone gRPC Filters Explained: The Complete Reference (2026)

The power of Yellowstone gRPC isn't just speed — it's filtering. Instead of processing the entire Solana firehose (15,000+ tx/s), you define exactly what data reaches your bot. This guide covers every filter type, how they combine, and the patterns that matter for trading.
The SubscribeRequest Structure
Yellowstone uses a map-based subscription model. You define named filters for each data type:
{
"transactions": {
"pump_filter": { ... },
"raydium_filter": { ... }
},
"accounts": {
"whale_watch": { ... }
},
"slots": {
"slot_monitor": { ... }
},
"commitment": "CONFIRMED"
}
Named filters let you run multiple independent subscriptions on a single gRPC connection. Results from all filters merge into one stream — each update tells you which filter matched.
Transaction Filters
SubscribeRequestFilterTransactions is the workhorse for trading bots.
| Field | Logic | Description |
|---|---|---|
account_include | OR | Transactions involving ANY of these accounts |
account_exclude | NOT | Skip transactions involving ANY of these accounts |
account_required | AND | Transactions must involve ALL of these accounts |
vote | — | Include (true) or exclude (false) vote transactions |
failed | — | Include (true) or exclude (false) failed transactions |
Example — subscribe to Pump.fun + Raydium transactions, no votes, no failures:
const request = {
transactions: {
dex_filter: {
accountInclude: [
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", // Pump.fun
"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8", // Raydium AMM V4
],
vote: false,
failed: false,
},
},
commitment: 1,
};
Account Filters
Watch specific accounts or all accounts owned by a program.
| Field | Description |
|---|---|
account | Specific account pubkeys to watch |
owner | Watch all accounts owned by these programs |
filters | Advanced: memcmp, datasize, lamports |
memcmp (memory compare) is the most powerful advanced filter. It checks specific bytes at a given offset in the account data. Common use: filter all token accounts for a specific mint by checking bytes at offset 0.
Commitment Levels
| Level | Speed | Safety | Use Case |
|---|---|---|---|
| PROCESSED | Fastest | May be reverted | Sniper bots needing maximum speed |
| CONFIRMED | Default | Very safe (~0.01% revert) | Most trading bots |
| FINALIZED | ~13s delay | Guaranteed permanent | High-value operations, accounting |
Filter Combination Logic
- Within a single filter: Fields combine with AND. A transaction must match account_include AND NOT match account_exclude AND satisfy vote/failed flags.
- Within arrays: Values combine with OR.
account_include: ["A", "B"]matches transactions touching A or B. - Across named filters: Results combine with OR. Filter "pump" OR filter "raydium" = you get results from either.
Common Filter Patterns
Sniper Bot
// Fastest possible — PROCESSED commitment, Pump.fun only
{ accountInclude: ["6EF8r..."], vote: false, failed: false }
// commitment: PROCESSED
Copy Trader
// Watch specific whale wallets across all programs
{ accountInclude: ["whale1...", "whale2...", "whale3..."], vote: false }
// commitment: CONFIRMED
Arbitrage Scanner
// Raydium + Jupiter for cross-DEX price discrepancies
{ accountInclude: ["675kPX9...", "JUP6L..."], vote: false, failed: false }
// commitment: CONFIRMED
Let Subglow Handle the Filtering
Yellowstone filters give you raw transactions — you still need to decode Borsh instruction data. Subglow adds server-side program-level filtering with pre-parsed JSON output. Define your programs once, and receive only the events you need — already decoded with human-readable fields.
Related Guides
- Yellowstone gRPC Tutorial — connect and subscribe step-by-step
- Monitor Pump.fun via gRPC — Pump.fun-specific filters
- Stream Raydium Swaps — Raydium AMM and CLMM filters
- What is Solana Geyser? — understand the plugin framework
Ready to try it?
Get your API key and start receiving filtered data in under 5 minutes. Free tier available.
Get started →