L logiover
business · May 27, 2026 · 5 min read

How to Scrape DexScreener Search Results by Symbol in 2026

Turn ticker symbols, token names or partial addresses into every matching DEX pair across 30+ chains — price, liquidity, volume, market cap. How the search API works and how to run bulk multi-query.

Sometimes you don’t have a contract address — you have a word. A ticker someone mentioned (PEPE), a project name, a fragment of an address. Resolving that human-friendly input into the actual DEX pairs trading under it, across every chain and every DEX, is the search problem. It’s where memecoin discovery starts, where symbol-to-address resolution lives, and where impersonator-token detection begins. This guide covers DexScreener’s search endpoint, how to run it in bulk, and why dedup and post-filtering matter more than they look.

What’s worth extracting

A search query can match many pairs — same symbol on many chains, many DEXes, plus impostors. Per matching pair you want:

  • Pair & chain identifiers — chain, DEX, pair address, listing URL.
  • Token metadata — base/quote symbols, names, addresses.
  • Price — USD and native.
  • Liquidity — USD liquidity (the field you sort by to separate the real token from the dust impostors).
  • Valuation — market cap and FDV.
  • Activity — multi-interval volume, price-change percentages, transaction counts.
  • Context — pair creation timestamp, images, website and social links, labels.

30+ columns per row. For symbol resolution you mostly care about chain, token address and liquidity (to pick the canonical match); for discovery you want the full activity set.

How the data is exposed

DexScreener’s documented public search endpoint takes free text:

GET https://api.dexscreener.com/latest/dex/search?q=PEPE

The q parameter accepts ticker symbols, token names, partial contract addresses, or pair syntax. It returns an array of matching pairs ranked by DexScreener’s own relevance, drawing from 30+ chains and 100+ DEXes. Free, no key. The endpoint is one query at a time, though — there’s no native “search these 200 symbols” call, so bulk symbol resolution means many queries plus your own dedup.

Rate limits and bulk querying

The search endpoint is rate-limited (~300 requests/minute on the public API). The real complications in bulk search:

  • Many queries — resolving a list of 500 tickers is 500 calls; you need controlled concurrency and 429 backoff.
  • Dedup across queries — searching SOL and SOLANA can return overlapping pairs; without dedup you double-count.
  • Substring noise — a search for PEPE matches PEPE, PEPE2, BABYPEPE and impostors; you usually want an exact or substring post-filter plus a liquidity floor to keep only meaningful matches.

A managed scraper does all of this — multi-query concurrency, automatic dedup, symbol exact/substring post-filter, chain/DEX whitelist, liquidity/volume filters, and per-query re-sort by USD liquidity — so the output is clean instead of a pile of dust.

Run the DexScreener Search Scraper — bulk-search by symbol (SOL, PEPE), token name or partial address; export every matching DEX pair across 30+ chains with price, liquidity, volume and market cap. Automatic dedup, symbol post-filter and liquidity sort. No API key, pay per row.

Build it yourself vs. use a managed scraper

  • Building from scratch — loop your queries, concurrency + 429 backoff, dedup across overlapping results, post-filter on exact/substring symbol, apply liquidity/volume thresholds, sort, flatten 30 columns. Doable, but it’s a real little pipeline, not a one-liner.
  • Using a managed actor — paste a query list, set filters, run, get a deduplicated, liquidity-sorted table.

For one quick lookup, hit the endpoint directly. For resolving a list of symbols or sweeping trending keywords, the dedup-and-filter layer is the work.

Schema design for downstream use

A flat per-match row:

{
  "query": "PEPE",
  "chain": "ethereum",
  "dex": "uniswap",
  "pair_address": "0x...",
  "base_symbol": "PEPE",
  "base_address": "0x6982508145454ce325ddbe47a25d4ec3d2311933",
  "quote_symbol": "WETH",
  "price_usd": 0.0000118,
  "liquidity_usd": 14200000,
  "market_cap_usd": 4960000000,
  "fdv_usd": 4960000000,
  "volume_24h_usd": 210000000,
  "price_change_24h": -3.4,
  "txns_24h_buys": 8200,
  "pair_created_at": "2023-04-14T00:00:00Z",
  "scraped_at": "2026-05-27T12:00:00Z"
}

Decisions worth making early:

  • Keep the originating query on each row. When bulk-resolving a symbol list, you need to know which input produced which match.
  • Sort and rank by liquidity_usd. The canonical token for a symbol is almost always the highest-liquidity match; impostors are the dust below it.
  • Store base_address. The whole point of symbol search is getting to the contract address — that’s the resolution output.
  • Compare market_cap_usd vs fdv_usd. A huge gap signals locked/vesting supply, useful context for discovery.

Typical use cases

  • Bulk symbol → contract address resolution for large ticker lists.
  • Watchlist enrichment — attach the current top pair, price, liquidity and volume to a list of symbols.
  • DEX market screening — discover token variants and cross-chain listings, ranked by liquidity.
  • Memecoin & narrative discovery — search trending keywords across DEXes to surface what’s moving.
  • Content & newsletter pipelines — daily top-movers by narrative.
  • Indexer / data-product seeding — sweep symbolic queries to seed a catalog.
  • Token research — enumerate all DEX listings for a project.
  • Anti-impersonator monitoring — detect scam tokens reusing a legitimate symbol (the low-liquidity matches under the real one).

Cost math for the managed approach

You pay per matched row. A single popular symbol might return dozens of pairs; a bulk run over 500 tickers, after dedup and a liquidity floor, might land a few thousand rows — a few dollars at a fraction of a cent each. A daily trending-keyword sweep is similarly cheap. The dedup and post-filter mean you’re not paying to store dust, which keeps the bill honest.

Common pitfalls

  • Search is discovery, not refresh. Use this to find pairs by text. Once you have the addresses, the watchlist or token-pairs scrapers are cheaper for repeated refresh.
  • Substring matches flood you. Without an exact/substring post-filter, a short query returns hundreds of unrelated tokens — always filter and sort by liquidity.
  • Impostors share symbols. Many tokens reuse a famous ticker; liquidity and pair age disambiguate the real one (and that’s also the anti-impersonator signal).
  • Overlapping queries double-count. Dedup on chain + pair_address across the whole run.
  • Relevance ranking is DexScreener’s, not yours. Re-sort by liquidity yourself rather than trusting the raw order.

Wrapping up

Search is the entry point when you have a word, not an address — and the difference between a useful result and noise is dedup, a liquidity-sorted post-filter, and keeping the originating query attached. If you’re resolving symbol lists, discovering narratives, or hunting impersonators, run a managed scraper that already does the multi-query orchestration, dedup and filtering and hands you a clean, ranked table.

Open the DexScreener Search Scraper on Apify — bulk symbol/name/address search across 30+ chains, deduplicated and liquidity-sorted. JSON/CSV, no API key, pay per row, free monthly credit to start.

Related guides