DexScreener Pair Price & Liquidity Scraper
Pricing
from $1.34 / 1,000 pairs
DexScreener Pair Price & Liquidity Scraper
DEX trading pairs from DexScreener by symbol, token address or pool address, on any chain it lists. Each row holds the price in USD and the quote token, pool liquidity, volume and price change from 5 minutes to 24 hours, buys and sells, and when the figures were produced. $1.40 per 1,000 pairs.
Pricing
from $1.34 / 1,000 pairs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Search DEX trading pairs by symbol, token address or pool address and get one row per 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. And these are market figures, nothing more: no score, no signal, no advice.
| Input | Search terms, token addresses or pool addresses, on any chain DexScreener lists |
| Output | One row per trading pair: prices, liquidity, volume and price change from 5 minutes to 24 hours, buys and sells, market cap, addresses, snapshot time |
| Ceiling | 3,000 rows per run, 30 pairs per search or token |
| Account needed | None: no wallet, no API key |
| Price | $1.40 per 1,000 pairs on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 3,500 |
🔍 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 aSOL/USDCsearch 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
allPoolsPerTokenfor 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 data you get from each DEX pair
| What you get | Field |
|---|---|
| The chain, the exchange and the two tokens | chainId, dexId, baseSymbol, quoteSymbol |
| Price in dollars and in the quote token | priceUsd, priceNative |
| What sits in the pool | liquidityUsd, liquidityBase, liquidityQuote |
| Volume over 5 minutes, 1, 6 and 24 hours | volumeM5, volumeH1, volumeH6, volumeH24 |
| Price change over the same windows | priceChangeM5, priceChangeH1, priceChangeH6, priceChangeH24 |
| Buy and sell counts over 24 hours | buysH24, sellsH24 |
| Market cap, fully diluted value, pool age | marketCapUsd, fdvUsd, pairCreatedAt |
| The pool and token addresses, and the pair page | pairAddress, baseAddress, quoteAddress, pairUrl |
| When the figures were produced, and how old they were | snapshotAt, sourceAgeSeconds, retrievedAt |
▶️ How to scrape DexScreener pairs
- Open DexScreener Pair Price & Liquidity Scraper and click Try for free.
- Type into Search terms, or paste into Token addresses or Pair addresses, with the chain in front of each address.
- Set Skip pools below this liquidity (USD) if you only want real markets.
- Set Maximum rows, and keep it low while you are testing.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.
Fill in none of the three lists and you get one labelled sample row instead, which is not charged.
💰 How much does it cost to scrape DexScreener?
$1.40 per 1,000 pairs on the Free plan, with no subscription. Paid plans pay a little less: $1.38 on Starter, $1.36 on Scale and $1.34 on Business. On the free plan, the $5 Apify gives you each month covers about 3,500 pairs. 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 you give it
{"searchTerms": ["SOL/USDC", "PEPE"],"tokenAddresses": ["solana:So11111111111111111111111111111111111111112"],"pairAddresses": ["base:0x1131DB5977242a03eBeaD1aCD18F80A9A29e5922"],"minLiquidityUsd": 10000,"maxItems": 50}
| Field | Default | What it is |
|---|---|---|
searchTerms | none, the form starts with SOL/USDC | Free text: a symbol, a name, a pair or a contract address. At most 30 pairs per term. Up to 100 terms. |
tokenAddresses | none | Token contracts as chain:address, or a dexscreener.com URL pasted from the browser. Up to 100. |
pairAddresses | none | Pool addresses in the same forms. One row each. Up to 100. |
chainId | none, the form starts with solana | Only read for bare addresses with no chain in front: solana, ethereum, base, bsc, arbitrum, polygon and so on. With the form's solana, a bare address is read as Solana unless you change it. |
allPoolsPerToken | off | Every pool for each token, up to 30, instead of only the deepest. It multiplies what you pay by the number of pools. |
minLiquidityUsd | none, the form starts at 0 | Pools 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. |
maxItems | 50 | Total rows across everything you asked for, 1 to 3,000. |
proxyUrls | none | Leave it empty for a normal run. Fill it only if you want the traffic to leave through your own servers, one per line as http://user:pass@host:port. |
All four of these mean the same address:
solana:So11111111111111111111111111111111111111112solana/So11111111111111111111111111111111111111112https://dexscreener.com/solana/So11111111111111111111111111111111111111112So11111111111111111111111111111111111111112 (with chainId set to "solana")
📤 What you get back
A real row from a 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"}
| Field | How to read it |
|---|---|
query | The term or address that produced the row, so you can join the output back to your input. |
snapshotAt, sourceAgeSeconds | When DexScreener produced these figures, and how many seconds old they were when read, normally 0 to about 60. |
retrievedAt | When the run read them. Always later than snapshotAt, and the less useful of the two. |
priceUsd, priceNative | The price in dollars, and in units of the quote token. Sub-cent tokens keep full precision, so expect values like 0.00000412. |
liquidityUsd, liquidityBase, liquidityQuote | What 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. |
marketCapUsd, fdvUsd, pairCreatedAt | DexScreener's own figures. Null wherever it has none, as pairCreatedAt is above. Nothing is estimated to fill a gap. |
labels | Tags 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.
| Row | How to spot it | Billed |
|---|---|---|
| A pair | charged: true, recordType: "pair", no _sample field | yes |
| The sample row | _sample: true and charged: false. Written only when all three lists are empty | no |
| A diagnostic row | _diagnostic: true, charged: false, recordType: "diagnostic", with an errorCode, the query it is about, and error and details in plain words | no |
| Code | What it means |
|---|---|
NO_RESULTS | The search or token matched nothing. A real answer, not a failure. |
NOT_FOUND | No pool exists at that address on that chain. |
WRONG_TARGET | What came back was not the pool or token you asked for, so it was dropped. |
RESULT_TRUNCATED | 30 pairs came back, the most one search or token gives, so you have the top of the list and not all of it. |
BAD_INPUT | The chain or address was not recognised, or a bare address had no chain. |
RATE_LIMITED | DexScreener's rate limit stopped the run at that target. |
SERVER_ERROR, NETWORK | DexScreener errored or did not answer for that target. Usually worth one re-run. |
UNEXPECTED_ERROR | The run hit an error it did not expect. Nothing was charged for it. |
TIME_BUDGET | The run reached its time limit before reading that target. Nothing was charged for it. The run ends as failed only when the time limit stopped it before any pair came back. |
NOTHING_MATCHED | The first 25 targets came back empty with no rows anywhere, so the run stopped. It says how many targets went unread. |
CHARGE_ERROR | Some 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.
💡 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 on a schedule, joining one
run to the last on
pairAddress. - Checking whether a token that looks liquid on a chart has any depth behind it.
liquidityUsdnext tovolumeH24answers 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;
sourceAgeSecondssays 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.
- It is not an official DEX Screener tool. Dami's Studio is independent and is not affiliated with or endorsed by DEX Screener, or by any other company named on this page.
🧭 Which market data scraper do you need?
| If you want | Use |
|---|---|
| Stock, ETF, index, FX and crypto quotes with daily price history | Yahoo Finance Scraper |
| Coin prices, market caps and rankings | CoinGecko Scraper |
| Price, liquidity and volume of a DEX trading pair | This one |
| The daily Crypto Fear and Greed reading, back to 2018 | Crypto Fear and Greed Index Scraper |
| Large Polymarket trades and the wallets behind them | Polymarket Whale Tracker |
| Company filings by keyword, ticker or CIK | SEC EDGAR Scraper |
| Indian mutual fund NAVs, today's or back to 2010 | Indian Mutual Fund NAV Scraper |
❓ Questions people ask
How fresh is the DexScreener 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.
Is this financial advice?
No. It returns published market data and nothing else.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/dexscreener-pairs-scraper. Either way
the run happens on your Apify account at the same price.
Is it legal to scrape DexScreener?
These are public market figures, open to anyone, about pools rather than people. Check DexScreener's terms before you republish them. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 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.