← Back to guides
April 15, 2026·11 min read

Yellowstone gRPC Filters Explained: The Complete Reference (2026)

Yellowstone gRPC Filters Explained: The Complete Reference (2026)
YellowstonegRPCFiltersTutorialSolanaReference

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.

FieldLogicDescription
account_includeORTransactions involving ANY of these accounts
account_excludeNOTSkip transactions involving ANY of these accounts
account_requiredANDTransactions must involve ALL of these accounts
voteInclude (true) or exclude (false) vote transactions
failedInclude (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.

FieldDescription
accountSpecific account pubkeys to watch
ownerWatch all accounts owned by these programs
filtersAdvanced: 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

LevelSpeedSafetyUse Case
PROCESSEDFastestMay be revertedSniper bots needing maximum speed
CONFIRMEDDefaultVery safe (~0.01% revert)Most trading bots
FINALIZED~13s delayGuaranteed permanentHigh-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

Ready to try it?

Get your API key and start receiving filtered data in under 5 minutes. Free tier available.

Get started