Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
DexScreener Pair Price & Liquidity Scraper icon

DexScreener Pair Price & Liquidity Scraper

One row per DEX trading pair: USD price, pool liquidity, 24h volume and trade counts, each stamped with the time the source produced it. No API key needed.

46 runs on Apify $0.0014 per pair ($1.4 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, tokenAddresses, pairAddresses (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0014 per pair = $1.4 per 1,000

You are charged forWhenPrice
Pair scrapedOne trading pair with its price and liquidity, carrying the source snapshot time. Misses are never charged.$0.0014

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchTermsFree-text search: a token symbol, a token name, a pair like SOL/USDC, or a contract address. Each term returns at most 30 pairs and there is no page two, so a broad symbol gives you the top of the list rather than every pair. Up to 100 terms per run.array
tokenAddressesToken contract addresses, written as chain:address - for example solana:So11111111111111111111111111111111111111112 or ethereum:0x6982508145454ce325ddbe47a25d4ec3d2311933. A dexscreener.com URL pasted straight from the browser works too. By default you get the deepest pool for each token, one row each. Up to 100 per run.array
pairAddressesExact pool addresses, written as chain:address, or a pasted dexscreener.com pair URL. One row each. The address that comes back is checked against the one you asked for, so you never get billed for somebody else's pool. Up to 100 per run.array
chainIdOnly needed if you paste addresses without a chain prefix. Set it to the chain they belong to - solana, ethereum, base, bsc, arbitrum, polygon and so on. An address written as chain:address ignores this.string
allPoolsPerTokenOff by default, which gives you one row per token - the pool with the most liquidity. Turn it on to get every pool the API lists for that token, up to 30 each. Useful for spotting price gaps between venues, and it multiplies what you pay by the number of pools.boolean
minLiquidityUsdLeave at 0 to keep everything. Set it to, say, 10000 and pools holding less than that are dropped before they are written, so you are not billed for dust. A popular symbol returns a lot of near-empty pools.integer
maxItemsTotal rows across everything you asked for. Keep it low while you are testing - you pay per row. Hard ceiling 3000.integer
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

querychainIddexIdbaseSymbolquoteSymbolpriceUsdliquidityUsdvolumeH24priceChangeH24marketCapUsdsnapshotAtsourceAgeSecondspairUrlpairAddress

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

DexScreener Pair Price & Liquidity Scraper: DEX pairs by symbol, token or pool address

Search by symbol, paste token addresses or paste pool addresses, and you get one row per trading pair: the price in USD and in the quote token, the pool's liquidity, volume and price change from five minutes to 24 hours, and the buy and sell counts. Every row also says when DexScreener produced those figures. The catch is the ceiling: one search or token returns at most 30 pairs, there is no second page, and a broad symbol gives you the top of the list rather than every pool.

InputSearch terms, token addresses or pool addresses, on any chain DexScreener lists
OutputOne row per trading pair
Ceiling3,000 rows per run, 30 pairs per search or token
Account neededNone: no wallet, no API key
Price$1.40 per 1,000 pairs, flat on every plan

🔍 What DexScreener Pair Price & Liquidity Scraper does

Three ways in, and one run can mix them across chains:

  • Search terms. A symbol, a name, a pair like SOL/USDC, or a contract address. Search is

fuzzy. On 30 September a SOL/USDC search capped at five rows returned the real SOL/USDC pool on Base next to tokens called SOLANGELES, SOLO and PLAY. When you know what you want, use addresses.

  • Token addresses. By default the deepest pool for each token, one row each. Turn on

allPoolsPerToken for every pool the token trades in, up to 30.

  • Pool addresses. Exactly that pool. The address that comes back is checked against the one you

asked for, and a mismatch is dropped, not charged.

A pool that two of your targets both find comes back once.

DexScreener's figures can already be up to a minute old when the run reads them. So every row carries snapshotAt, the moment DexScreener produced the numbers, and sourceAgeSeconds, how old they were when read. Read those before you trust a price.

If the first 25 targets all come back empty and nothing has been delivered, the run stops there rather than grinding through the rest. That is nearly always a list of addresses on the wrong chain.

📥 What you give it

{
  "searchTerms": ["SOL/USDC", "PEPE"],
  "tokenAddresses": ["solana:So11111111111111111111111111111111111111112"],
  "pairAddresses": ["base:0x1131DB5977242a03eBeaD1aCD18F80A9A29e5922"],
  "minLiquidityUsd": 10000,
  "maxItems": 50
}
FieldPrefilled withWhat it is
searchTerms["SOL/USDC"]Free text: a symbol, a name, a pair or a contract address. At most 30 pairs per term. Up to 100 terms.
tokenAddressesemptyToken contracts as chain:address, or a dexscreener.com URL pasted from the browser. Up to 100.
pairAddressesemptyPool addresses in the same forms. One row each. Up to 100.
chainIdsolanaOnly read for bare addresses with no chain in front: solana, ethereum, base, bsc, arbitrum, polygon and so on. The form starts on solana, so a bare address is read as Solana unless you change it.
allPoolsPerTokenoffEvery pool for each token, up to 30, instead of only the deepest. It multiplies what you pay by the number of pools.
minLiquidityUsd0Pools holding less than this many dollars are dropped before they are written, so you are not billed for dust. 10000 is a sensible floor for real markets.
maxItems50Total rows across everything you asked for, 1 to 3,000. Left out of an API call, it is 50.
proxyUrlsemptyOptional. Your own servers, one per line as http://user:pass@host:port, if you want the traffic to leave through them. Leave it empty for a normal run.

All four of these mean the same address:

solana:So11111111111111111111111111111111111111112
solana/So11111111111111111111111111111111111111112
https://dexscreener.com/solana/So11111111111111111111111111111111111111112
So11111111111111111111111111111111111111112        (with chainId set to "solana")

📤 What you get back

A real row from a real run on 30 September 2026:

{
  "ok": true,
  "charged": true,
  "recordType": "pair",
  "query": "SOL/USDC",
  "chainId": "base",
  "dexId": "aerodrome",
  "baseSymbol": "SOL",
  "quoteSymbol": "USDC",
  "priceUsd": 119.55,
  "liquidityUsd": 713289.14,
  "volumeH24": 7372325.26,
  "priceChangeH24": 2.46,
  "marketCapUsd": 28813210,
  "snapshotAt": "2026-09-30T02:24:25.000Z",
  "sourceAgeSeconds": 47,
  "pairUrl": "https://dexscreener.com/base/0x1131db5977242a03ebead1acd18f80a9a29e5922",
  "pairAddress": "0x1131DB5977242a03eBeaD1aCD18F80A9A29e5922",
  "baseAddress": "0x311935Cd80B76769bF2ecC9D8Ab7635b2139cf82",
  "quoteAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "priceNative": 119.5566,
  "liquidityBase": 2171.1728,
  "liquidityQuote": 453710,
  "fdvUsd": 28813210,
  "volumeH6": 1534194.95,
  "volumeH1": 379441.31,
  "volumeM5": 29220.53,
  "priceChangeH6": 0.49,
  "priceChangeH1": 0.05,
  "priceChangeM5": 0.05,
  "buysH24": 5902,
  "sellsH24": 5496,
  "labels": [],
  "pairCreatedAt": null,
  "retrievedAt": "2026-09-30T02:25:12.901Z"
}
FieldWhat it is
queryThe term or address that produced the row, so you can join the output back to your input.
snapshotAt, sourceAgeSecondsWhen DexScreener produced these figures, and how many seconds old they were when read, normally 0 to about 60.
retrievedAtWhen the run read them. Always later than snapshotAt, and the less useful of the two.
priceUsd, priceNativeThe price in dollars, and in units of the quote token. Sub-cent tokens keep full precision, so expect values like 0.00000412.
liquidityUsd, liquidityBase, liquidityQuoteWhat sits in the pool, in dollars and in each token. This is the field that tells you whether ten dollars of trading would move the price.
volumeM5 to volumeH24, priceChangeM5 to priceChangeH24Volume and percentage change over 5 minutes, 1 hour, 6 hours and 24 hours.
buysH24, sellsH24Buy and sell counts over 24 hours.
marketCapUsd, fdvUsd, pairCreatedAtDexScreener's own figures. Null wherever it has none, as pairCreatedAt is above. Nothing is estimated to fill a gap.
labelsTags DexScreener attaches to some pools, such as v3 or CLMM. Usually empty.

🧾 Reading the output

recordType is not a safe filter on its own, because the free sample row says pair too.

RowHow to spot itCharged
A paircharged: true, recordType: "pair", no _sample fieldyes
The sample row_sample: true and charged: false. Written only when all three lists are emptyno
A diagnostic row_diagnostic: true, charged: false, recordType: "diagnostic", with an errorCode, the query it is about, and error and details in plain wordsno
errorCodeWhat happened
NO_RESULTSThe search or token matched nothing. A real answer, not a failure.
NOT_FOUNDNo pool exists at that address on that chain.
WRONG_TARGETWhat came back was not the pool or token you asked for, so it was dropped.
RESULT_TRUNCATED30 pairs came back, the most one search or token gives, so you have the top of the list and not all of it.
BAD_INPUTThe chain or address was not recognised, or a bare address had no chain.
RATE_LIMITEDDexScreener's rate limit stopped the run at that target. Split the work across two runs.
SERVER_ERROR, NETWORKDexScreener errored or did not answer for that target. Usually worth one re-run.
UNEXPECTED_ERRORThe run hit an error it did not expect. Nothing was charged for it.
TIME_BUDGETThe run reached its time limit before reading that target.
NOTHING_MATCHEDThe first 25 targets came back empty with no rows anywhere, so the run stopped. It says how many targets went unread.
CHARGE_ERRORSome charges could not be recorded. The row gives the rows delivered and the rows charged.

charged: true is what tells a real row from a sample or diagnostic row. To keep only the data, filter on it, or drop every row carrying _sample or _diagnostic.

▶️ How to run it

1. Open DexScreener Pair Price & Liquidity Scraper and click Try for free. 2. Type into Search terms, or paste into Token addresses or Pair addresses, with the chain in front of each address. 3. Set Skip pools below this liquidity (USD) if you only want real markets. 4. Set Maximum rows, and keep it low while you are testing. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.

💰 How much does it cost?

$1.40 per 1,000 pairs, flat on every Apify plan: no volume tiers, no subscription. One hundred pairs come to 14 cents.

Not charged: the sample row, every diagnostic row, pools under your liquidity floor, a pool found twice, and an answer that did not match what you asked for. If you set a maximum charge for the run, it stops at the last row that fits.

💡 What people use it for

  • Watching one token's pools across several chains and venues, to see where it actually trades and

where the price differs.

  • Keeping a sheet of current prices and pool depth for a basket of tokens, refreshed on a schedule.
  • Checking whether a token that looks liquid on a chart has any depth behind it. liquidityUsd next

to volumeH24 answers that at a glance.

  • Pulling pairCreatedAt, early volume and starting liquidity for a list of new pools.

🚧 What it does not do

  • No advice. No score, rating, signal or prediction anywhere in the output. Just the numbers.
  • No live feed. A price can be up to a minute old; sourceAgeSeconds says how old. For

sub-second prices, use the trading venue's own feed.

  • No history. No candles, no OHLC, no time series. Only the current snapshot and the change

percentages DexScreener publishes.

  • No holders, wallets or individual trades.
  • No second page. 30 pairs per search or token, whatever you set.
  • No pools DexScreener does not list. Coverage is what DexScreener has.
  • No protection from copycat symbols. Names and symbols are chosen by whoever deployed the

contract, and two tokens can share one. That is why every row carries the addresses.

🧭 Which crypto scraper do you need?

If you wantUse
DEX pair prices, pool liquidity and volumeThis one
Coin prices, market caps and rankingsCoinGecko Scraper
Price history as daily candles, BTC-USD includedYahoo Finance Scraper
Crypto Fear and Greed readings, back to 2018Crypto Fear and Greed Index Scraper
Large Polymarket trades and the wallets behind themPolymarket Whale Tracker

❓ Questions people ask

How fresh is the price? Between zero and about sixty seconds old. sourceAgeSeconds gives the exact age and snapshotAt the moment the figures were true.

What happens if my search matches nothing? You get one free NO_RESULTS row and the run carries on to your other targets. "Nothing there" is a different code from "could not look", so you can tell them apart.

Can I get every pool for a token instead of just the biggest? Yes. Turn on allPoolsPerToken. You get up to 30 pools per token and pay for each, which is why it is off by default.

Which chains work? Any that DexScreener lists, in the same run. Write the chain in front of each address and mix them freely.

Can I run it on a schedule? Yes. Nothing is kept between runs, so the same input on a schedule is safe. Join on pairAddress to compare one run with the last.

Is this financial advice? No. It returns published market data and nothing else.

🆘 If something breaks

Open the Issues tab on the actor page. Send the input and the run ID, and the errorCode rows usually show what went wrong.