Use DexScreener Token Pair & Boosted Token Scraper with Python
Look up decentralized exchange trading pairs by token or pair address, search tokens by name or symbol, or pull the latest boosted tokens and token profiles across 20 blockchains. Returns price, liquidity, volume, and transaction counts.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"allPools": false,
"chainId": "all",
"expandChainSearch": true,
"feed": "boostedTop",
"includeFlags": true,
"includeInfo": true,
"includeMarketData": true,
"maxItems": 1,
"maxItemsPerQuery": 30,
"mode": "search",
"newPairHours": 24,
"queries": [
"USDC"
],
"sortBy": "none",
"sortOrder": "desc"
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | What to collect. Each mode uses its own fields below. |
queries | array | optional | Token names, symbols, pair text such as SOL/USDC, token addresses, or DexScreener URLs. Multiple queries fan out. (mode=search) |
tokenAddresses | string | optional | One or more token contract addresses or DexScreener token URLs, separated by commas or new lines. (mode=byToken, orders) |
pairAddresses | array | optional | Pair URLs, chain:pairAddress, or bare pair addresses. Bare addresses need a specific chain. (mode=byPair) |
chainId | string | optional | Blockchain to read. Required for byToken when not 'all', for bare pair addresses, and for orders. Also filters search and promotion feeds locally. |
customChainId | string | optional | Optional override for a chain added after this release, e.g. 'newchain'. When set it replaces Chain. |
feed | string | optional | Which live promotion feed to read. (mode=discovery) |
metaSlugs | array | optional | Narrative slugs such as ai, dog, cat, or x402. Run mode=metas to discover live slugs. (mode=metaPairs) |
allPools | boolean | optional | When on, byToken returns every pool of each token on the chain. When off, it returns the best pair per token. |
minLiquidityUsd | number | optional | Skip pairs with liquidity below this USD value. |
maxLiquidityUsd | number | optional | Skip pairs with liquidity above this USD value. |
minVolume24hUsd | number | optional | Skip pairs with 24-hour volume below this USD value. |
maxVolume24hUsd | number | optional | Skip pairs with 24-hour volume above this USD value. |
minMarketCapUsd | number | optional | Skip pairs below this market cap. Uses FDV when market cap is missing. |
maxMarketCapUsd | number | optional | Skip pairs above this market cap. Uses FDV when market cap is missing. |
minFdvUsd | number | optional | Skip pairs with a fully diluted valuation below this USD value. |
maxFdvUsd | number | optional | Skip pairs with a fully diluted valuation above this USD value. |
minTxns24h | integer | optional | Skip pairs with fewer buys plus sells in the last 24 hours. |
maxTxns24h | integer | optional | Skip pairs with more buys plus sells in the last 24 hours. |
minPriceChange24h | number | optional | Skip pairs whose 24-hour price change is below this percent. Negative values allowed. |
maxPriceChange24h | number | optional | Skip pairs whose 24-hour price change is above this percent. Negative values allowed. |
minAgeHours | number | optional | Skip pairs younger than this many hours. |
maxAgeHours | number | optional | Skip pairs older than this many hours. Use 24 to keep pairs launched today. |
dexIds | array | optional | Keep only these DEX protocols, e.g. uniswap, raydium, aerodrome. Empty means all. |
quoteSymbols | array | optional | Keep only pairs quoted in these assets, e.g. USDC, SOL, WETH. Empty means all. |
sortBy | string | optional | Sort results within each query, token, or feed. Missing values are always last. |
sortOrder | string | optional | Largest/oldest first or smallest/newest first. Pair age ascending means newest first. |
onePairPerToken | boolean | optional | Keep only the most liquid pair for each token. |
includeInfo | boolean | optional | Add logo, header image, website and social links when DexScreener has them. |
includeMarketData | boolean | optional | For promotion feeds, attach price, liquidity, volume, market cap and age of each token's best pair. |
expandChainSearch | boolean | optional | When a chain is selected, also search quote variants and pull the token pools to get past the 30-pair search cap. |
chainSearchTokens | integer | optional | How many matching tokens get their pools fetched when widening a chain search. 0 = quote variants only. |
includeFlags | boolean | optional | Add heuristic flags such as low liquidity, new pair, sell pressure, or no socials. |
newPairHours | integer | optional | Pairs younger than this many hours get a new_pair flag. |
maxItemsPerQuery | integer | optional | Maximum records from each query, token, or feed. DexScreener caps search at 30. |
maxItems | integer | optional | Hard cap on records for the whole run. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/MOa8uJUJGEpUpfB7L/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
DexScreener pair, pool, boosted-token, profile, takeover, ad, narrative and paid-order records with price, liquidity, volume, transaction counts, token info and risk flags.
Questions before you run
Which inputs are required?
The published required fields are mode
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build yo7tmA6LqmLYqmoGa and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.