# DexScreener Token Pairs Scraper — Multi-Chain DEX Export (`logiover/dexscreener-token-pairs-scraper`) Actor

Bulk lookup of token contract addresses to every live DEX pair on DexScreener — price USD, liquidity, FDV, market cap, 24h volume, transactions, price change. Multi-chain auto-discovery (Solana, Ethereum, Base, BSC + 30 more). Batched 30 addresses/request. No API key.

- **URL**: https://apify.com/logiover/dexscreener-token-pairs-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Business, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## DexScreener Token Pairs Scraper — Bulk Multi-Chain DEX Pair Data Export

![DexScreener Token Pairs Scraper — Multi-Chain DEX Export](https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/GjS6nQ8qauOdq9KGy-actor-lyLZ58EnNPG28THWe-ZOX7X2cgVd-unnamed.png)

**Bulk lookup of any token contract address to every live DEX trading pair on DexScreener, across every chain DexScreener indexes — in one run, with zero configuration.** Price USD, native price, liquidity USD, FDV, market cap, 24-hour / 6-hour / 1-hour / 5-minute volume, buy and sell transaction counts, price change percentages, base token, quote token, DEX, chain, pool creation date, websites and socials — for hundreds of tokens at a time.

Built for **crypto algorithmic traders, DEX market makers, on-chain analytics platforms, portfolio dashboards, wallet trackers, tax software, token research teams and indexer pipelines** that need DexScreener's pair data at scale — without writing batching, retry and rate-limiting logic by hand.

🟢 No API key. No proxy. No login. No browser automation. Pure public REST API.

---

### 🚀 Why this scraper

DexScreener is the de-facto market data layer for decentralized exchanges across Solana, Ethereum, Base, BSC, Polygon, Arbitrum, Avalanche, Optimism, Fantom, Cronos, PulseChain, Sui, TON, Tron, Hyperliquid EVM, Monad, Sonic, Berachain, Sei, Aptos and 30+ more networks. Their public API exposes incredible data — but using it well at scale requires:

- Knowing whether a token is on EVM or Solana (different endpoints)
- Batching to fit within the 300 requests/minute soft limit
- Retrying on HTTP 429 with exponential backoff
- Filtering noise (low-liquidity, dead pools, wrong DEX)
- Flattening deeply nested JSON to spreadsheet-ready rows
- Streaming output to disk/cloud storage before the run ends

This scraper does all of that for you. Feed it a list of token addresses — get back a flat, filtered, sorted dataset of every live pair, ready for Excel, your database, or your trading bot's ingest pipeline.

---

### ✨ Key features

| Feature | What it gives you |
|---|---|
| 🌍 **Multi-chain auto-discovery** | One token address returns pairs across ALL 30+ chains — no need to know in advance which chain a token lives on |
| 📦 **Batched mode (30 addresses/request)** | When you specify `chainId`, the scraper switches to the batch endpoint — 30× fewer API calls for large lists |
| 🎯 **Rich filtering** | Min liquidity, min 24h volume, chain whitelist, DEX whitelist, max pairs per token |
| 📊 **Smart sorting** | Per-token pairs sorted by USD liquidity descending — top pair = most liquid pair |
| ⚡ **Concurrent + rate-limit safe** | Built-in 300 req/min throttling, exponential backoff on HTTP 429 |
| 🗃️ **Flat ready-to-use rows** | 40+ columns, no nested JSON to wrangle |
| 💾 **JSON, CSV, Excel exports** | Direct Apify Dataset → any format |
| 🔓 **Public API only** | No auth, no proxy, no scraping, no Cloudflare bypass needed |

---

### 🎯 Built for these use cases

#### 1. Algorithmic trading & arbitrage bots
Resolve hundreds of watchlist tokens into actionable price + liquidity across every DEX. Detect cross-DEX or cross-chain arbitrage opportunities. Backtest strategies against full DEX universe.

#### 2. Portfolio dashboards & wallet apps
Turn raw wallet holdings (token contract addresses) into a live portfolio view with prices, USD values, 24-hour change and aggregated liquidity across all pools.

#### 3. On-chain analytics & research
Multi-chain market-share analysis per token. Which DEX dominates trading for a given token? How does liquidity distribute across chains? Track migrations.

#### 4. Tax accounting & compliance reporting
Snapshot pair prices at specific timestamps for cost-basis tracking. Run nightly to build historical price series.

#### 5. Token research & due diligence
For each project under evaluation, pull every DEX listing. Discover hidden listings on smaller DEXes. Verify liquidity claims. See real volume vs. claimed volume.

#### 6. Indexer & data product pipelines
Power your own crypto data API, dashboard or screener with DexScreener as a reliable upstream source. Schedule the scraper to keep your DB fresh.

#### 7. Newsletter & content creation
Daily/weekly snapshots of trending portfolios. "Here's what 50 memecoin tokens did this week" — exported, ready for the data visualization step.

#### 8. NFT & GameFi token tracking
Sub-niches (gaming, AI, RWA, DePIN) often have their tokens on smaller DEXes. Multi-chain auto-discovery surfaces all of them.

---

### 📥 Inputs

| Field | Type | Required | Description |
|---|---|---|---|
| `tokenAddresses` | string[] | ✅ Yes | Token contract addresses. EVM (`0x...`) or Solana (base58). Mix chains freely — auto-discovery handles all of them. |
| `chainId` | string | No | Optional. If you set this AND all addresses are on the same chain, the batched endpoint (30 addrs/call) is used — much faster. Examples: `solana`, `ethereum`, `bsc`, `polygon`, `base`, `arbitrum`, `avalanche`, `fantom`, `optimism`, `pulsechain`, `sui`, `ton`, `tron`, `cronos`, `hyperevm`, `monad`, `sonic`, `berachain`. |
| `minLiquidityUsd` | int | No | Skip pairs below this USD liquidity threshold. Use to filter dead/abandoned pools. Default `0`. |
| `minVolume24hUsd` | int | No | Skip pairs below this 24-hour USD volume. Use to focus on actively-traded pairs. Default `0`. |
| `onlyDexes` | string[] | No | Whitelist DEX IDs: `uniswap`, `pancakeswap`, `raydium`, `pumpswap`, `meteora`, `orca`, `aerodrome`, `quickswap`, `sushiswap`, `curve`, etc. |
| `onlyChains` | string[] | No | Whitelist chain IDs. Useful in multi-chain auto mode when you only want certain chains. |
| `maxPairsPerToken` | int | No | Cap pairs per token — top N kept by liquidity desc. `1` = most-liquid pair only. `0` = no cap. |
| `maxConcurrency` | int | No | Parallel requests, 1–30. Default `8`. |

#### Example inputs

**Multi-chain auto-discovery (no chainId):**
```json
{
  "tokenAddresses": [
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
    "So11111111111111111111111111111111111111112",
    "0x6982508145454Ce325dDbE47a25d4ec3d2311933"
  ],
  "minLiquidityUsd": 10000
}
````

**Batched mode (same chain, faster):**

```json
{
  "chainId": "solana",
  "tokenAddresses": [
    "8pMBqLivfaMgjtzmGWTDxnkKbzAEuU5LhfQvhKMKpump",
    "9bvVs7V3dWCMYgd43NojZZKeKNKZ68G9KfaH7xZ8pump",
    "jvKtLFLnNGPM7edS9KEpYqPxuY8HPGTZohLFM4Spump"
  ]
}
```

**Most-liquid-pair-only (1 row per token):**

```json
{
  "tokenAddresses": ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"],
  "maxPairsPerToken": 1
}
```

**Filter to high-volume Uniswap V3 on Ethereum + Base only:**

```json
{
  "tokenAddresses": ["0x6982508145454Ce325dDbE47a25d4ec3d2311933"],
  "onlyChains": ["ethereum", "base"],
  "onlyDexes": ["uniswap"],
  "minVolume24hUsd": 100000
}
```

***

### 📤 Output (per pair)

```json
{
  "chainId": "base",
  "dexId": "aerodrome",
  "pairAddress": "0x1131DB5977242a03eBeaD1aCD18F80A9A29e5922",
  "url": "https://dexscreener.com/base/0x1131db59...",
  "baseTokenAddress": "0x311935Cd80B76769bF2ecC9D8Ab7635b2139cf82",
  "baseTokenName": "Solana",
  "baseTokenSymbol": "SOL",
  "quoteTokenAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "quoteTokenName": "USD Coin",
  "quoteTokenSymbol": "USDC",
  "priceUsd": 89.20,
  "priceNative": 89.2098,
  "liquidityUsd": 445015.59,
  "liquidityBase": 3977.85,
  "liquidityQuote": 90152,
  "fdv": 7998591,
  "marketCap": 7998591,
  "volumeH24": 4990198.97,
  "volumeH6": 1132367.10,
  "volumeH1": 133951.24,
  "volumeM5": 2347.84,
  "priceChangeH24": -3.81,
  "priceChangeH6": 0.15,
  "priceChangeH1": -0.23,
  "priceChangeM5": -0.02,
  "txnsH24Buys": 3327,
  "txnsH24Sells": 3529,
  "txnsH6Buys": 800,
  "txnsH6Sells": 823,
  "txnsH1Buys": 74,
  "txnsH1Sells": 89,
  "txnsM5Buys": 0,
  "txnsM5Sells": 2,
  "pairCreatedAt": "2024-04-12T08:23:11.000Z",
  "imageUrl": "https://cdn.dexscreener.com/...",
  "websites": [{"label": "Website", "url": "https://solana.com/"}],
  "socials":  [{"type": "twitter", "url": "https://x.com/solana"}],
  "labels":   ["v3"],
  "inputTokenAddress": "0x311935Cd80B76769bF2ecC9D8Ab7635b2139cf82",
  "scrapedAt": "2026-05-16T08:42:00.000Z"
}
```

#### Full field reference (40+ fields)

| Field | Type | Meaning |
|---|---|---|
| `chainId` | string | Chain identifier (solana, ethereum, base, bsc, etc.) |
| `dexId` | string | DEX identifier (uniswap, raydium, pancakeswap, etc.) |
| `pairAddress` | string | On-chain pool / LP contract address |
| `url` | string | DexScreener pair page URL |
| `baseToken{Address,Name,Symbol}` | string | Base token identity |
| `quoteToken{Address,Name,Symbol}` | string | Quote token identity |
| `priceUsd` | number | Current price in USD |
| `priceNative` | number | Current price denominated in quote token |
| `liquidityUsd` | number | Pool depth in USD |
| `liquidityBase`, `liquidityQuote` | number | Pool depth in native token amounts |
| `fdv` | number | Fully diluted valuation (price × total supply) |
| `marketCap` | number | Circulating supply market cap |
| `volumeH24/H6/H1/M5` | number | Trading volume in USD by window |
| `priceChangeH24/H6/H1/M5` | number | Percent change in window |
| `txnsH24Buys/Sells` etc. | number | Buy and sell tx counts by window |
| `pairCreatedAt` | string | ISO 8601 timestamp of pool creation |
| `imageUrl` | string | Token logo URL |
| `websites` | array | Official websites (name + URL) |
| `socials` | array | Twitter, Telegram, Discord, etc. |
| `labels` | array | Pool labels like `v3`, `stable`, `concentrated` |
| `inputTokenAddress` | string | The address from your input that produced this row |
| `scrapedAt` | string | ISO 8601 timestamp |

***

### ⚙️ How it works

1. **Reads input** — your list of token addresses (plus optional chain hint and filters)
2. **Picks endpoint strategy:**
   - `chainId` provided + ≥2 addresses → batched `tokens/v1/{chain}/{addrs}` (30 per call)
   - Otherwise → per-token `latest/dex/tokens/{address}` (multi-chain auto)
3. **Fires concurrent requests** with the rate-limit budget you allow
4. **Handles HTTP 429** with exponential backoff (1.5s → 3s → 6s → 12s → 24s)
5. **Filters** by chain, DEX, liquidity, volume
6. **Sorts** per-token pairs by liquidity desc; optionally caps at `maxPairsPerToken`
7. **Streams** flat rows directly into the Apify Dataset

The scraper uses ONLY DexScreener's officially-supported public REST API (`api.dexscreener.com`). No HTML scraping, no headless browser, no proxy, no anti-bot bypass. Endpoints are documented at [docs.dexscreener.com](https://docs.dexscreener.com/api/reference).

***

### ⚡ Performance

| Workload | Time | API calls |
|---|---|---|
| 10 addresses, multi-chain auto | ~3 seconds | 10 |
| 100 addresses, multi-chain auto, concurrency 8 | ~20 seconds | 100 |
| 100 addresses, batched (same chain) | ~5 seconds | 4 |
| 1000 addresses, batched | ~45 seconds | 34 |
| 10000 addresses, batched | ~8 minutes | 334 |

DexScreener's `tokens` and `pairs` endpoints allow ~300 requests/minute. The scraper stays well within that with concurrency 8.

***

### 💰 Cost model

This actor uses **Pay-Per-Result** pricing — you pay only for the actual pair rows saved (after filters). Pairs that don't pass your liquidity/volume/chain/DEX filters are not billed.

Typical costs (rounded, depending on Apify rates):

- 100 token addresses (multi-chain) → ~500–2000 pair rows → small
- 1000 addresses with `maxPairsPerToken=3` → ~3000 rows
- Watchlist refresh (200 tokens, 1 pair each) → 200 rows

***

### 🔄 Schedule for continuous monitoring

This scraper plays nicely with Apify's scheduler. Common patterns:

- **Every 5 minutes** for trading-bot watchlists (latest prices, short-window volume)
- **Every hour** for portfolio refresh
- **Daily** for analytics / accounting snapshots
- **Weekly** for full universe sweep

Use Apify Webhooks to push fresh data into your database / Slack / Discord / your own API.

***

### 🛠️ FAQ

**Do I need a DexScreener API key?**
No. The public REST API requires no authentication.

**Which chains are supported?**
Every chain DexScreener indexes — currently 30+: Solana, Ethereum, Base, BSC, Polygon, Arbitrum, Avalanche, Optimism, Fantom, Cronos, PulseChain, Sui, TON, Tron, Sei, Aptos, Hyperliquid EVM, Monad, Sonic, Berachain, Linea, Mantle, Scroll, zkSync, Blast, World, Mode, Manta and others.

**Will this break when DexScreener adds a new chain?**
No. The multi-chain auto-discovery mode dynamically receives whatever chains DexScreener returns. New chains light up automatically.

**How fresh is the data?**
Real-time. DexScreener updates pair stats every few seconds from on-chain events.

**Can I get historical OHLCV / chart bars?**
Not from this scraper — this returns current snapshots. To build a time series, schedule this scraper at the desired interval and aggregate.

**What if a token has no live pairs?**
The token returns 0 rows. The actor doesn't error — it just logs a 0-pair result.

**Does it handle tokens that exist on multiple chains?**
Yes. The multi-chain auto-discovery returns pairs from every chain that token is bridged to.

**How is this different from the search scraper?**

- **Search scraper** = free-text query (symbol, name, partial address) → up to 30 matching pairs
- **Token-pairs scraper** = exact contract address(es) → ALL pairs for that token

If you know exact addresses, use this one (more comprehensive, more reliable).

**How is this different from the pair-watchlist scraper?**

- **Pair-watchlist** = pair (LP/pool) address → 1 specific listing
- **Token-pairs** = token address → ALL pair listings for that token

Use pair-watchlist if you care about a specific DEX listing. Use this if you want every listing.

**Can I export to CSV or Excel?**
Yes. Apify Dataset exports support JSON, CSV, Excel, HTML and JSONL out of the box.

**Can I integrate via webhook / API?**
Yes. Apify provides REST API access to runs and datasets. Trigger from Zapier, Make.com, n8n, custom code, or any HTTP client.

**Does this respect DexScreener's rate limits?**
Yes — built-in concurrency cap (default 8) and exponential backoff on HTTP 429 keep you safely under the 300 req/min soft limit.

**What about CoinGecko or CoinMarketCap data?**
For deep token metadata (categories, descriptions, official URLs from CG/CMC), see our `dexscreener-pair-security-scraper` which exposes that data alongside security audit.

***

### 📚 Related scrapers in the DexScreener suite

| Scraper | Purpose |
|---|---|
| **`dexscreener-token-pairs-scraper`** | **You are here.** Bulk token address → all pair listings (multi-chain). |
| `dexscreener-search-pairs-scraper` | Free-text query (symbol/name) → matching pairs. |
| `dexscreener-pair-watchlist-scraper` | Pair (LP) address → current data for that specific listing. |
| `dexscreener-boosted-tokens-scraper` | Currently boosted/promoted tokens with marketing spend + pair data. |
| `dexscreener-pair-security-scraper` | Deep security audit, holders, locks, CG/CMC metadata. |

***

### 🔑 Keyword cloud

**Core:** dexscreener api, dexscreener scraper, dex pair scraper, multi-chain token data, dex aggregator data, token to pairs lookup, bulk crypto pair lookup, defi data export.

**Per chain:** solana dex data, solana pair scraper, raydium pair scraper, pumpswap scraper, meteora scraper, orca scraper, ethereum dex pairs, uniswap pair data, sushiswap data, base chain pairs, aerodrome scraper, bsc dex pairs, pancakeswap scraper, polygon dex data, quickswap scraper, arbitrum dex data, avalanche dex pairs, optimism dex data.

**Per use case:** crypto algorithmic trading data, dex arbitrage data, defi portfolio tracker, crypto wallet enrichment, on-chain analytics data, defi market making data, crypto research data, token discovery api, dex indexer data, defi tax reporting, crypto accounting export.

**Per output type:** dex price feed, real-time crypto prices, dex liquidity export, dex volume tracker, fdv tracker, market cap api, dex transaction counts, dex price change tracker.

**Per audience:** crypto data for traders, defi data for analysts, dex data for developers, blockchain data api, web3 market data, crypto data for indexers.

# Actor input Schema

## `tokenAddresses` (type: `array`):

List of token contract addresses to look up on DexScreener. Accepts EVM addresses (0x...), Solana addresses (base58), and any other supported chain. Mix chains freely — addresses are dispatched against the multi-chain endpoint that returns ALL pairs for each token across every supported chain (Solana, Ethereum, Base, BSC, Polygon, Arbitrum, Avalanche, etc.). Examples: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' (WETH), 'So11111111111111111111111111111111111111112' (WSOL), '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' (USDC on Base).

## `chainId` (type: `string`):

Optional. If you provide a chain ID AND all addresses belong to that chain, the scraper uses the batched endpoint (up to 30 addresses per request — much faster). Accepted values: 'solana', 'ethereum', 'bsc', 'polygon', 'base', 'arbitrum', 'avalanche', 'fantom', 'optimism', 'pulsechain', 'sui', 'ton', 'tron', 'cronos', 'hyperevm', 'monad', 'sonic', and any other DexScreener-supported chain. Leave empty for multi-chain auto-discovery (one request per token).

## `minLiquidityUsd` (type: `integer`):

Exclude pairs with USD liquidity below this threshold. Useful to filter out illiquid/abandoned pairs. Example: 1000 to skip pairs below $1k liquidity, 10000 for $10k. Set 0 to include all pairs.

## `minVolume24hUsd` (type: `integer`):

Exclude pairs with 24-hour USD volume below this threshold. Helps focus on actively traded pairs. Example: 1000 to drop dead pairs, 100000 to keep only high-volume pairs.

## `onlyDexes` (type: `array`):

Optional whitelist of DEX IDs. Only pairs from these DEXes will be saved. Examples: 'uniswap', 'pancakeswap', 'raydium', 'pumpswap', 'meteora', 'orca', 'aerodrome', 'quickswap', 'sushiswap', 'curve'. Leave empty to include all DEXes.

## `onlyChains` (type: `array`):

Optional whitelist of chain IDs. Only pairs on these chains will be saved. Examples: 'solana', 'ethereum', 'base', 'bsc'. Leave empty to include all chains.

## `maxPairsPerToken` (type: `integer`):

Cap the number of pairs saved per input token. After filtering, the top N pairs are kept sorted by liquidity (descending). Example: 1 to keep only the most liquid pair per token, 5 to keep the top 5. Set 0 for no cap.

## `maxConcurrency` (type: `integer`):

Number of parallel API requests. DexScreener's public API allows up to 300 requests/minute for the tokens endpoint. Recommended: 5–15. Higher values may hit rate limits.

## Actor input object example

```json
{
  "tokenAddresses": [
    "So11111111111111111111111111111111111111112",
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
  ],
  "chainId": "",
  "minLiquidityUsd": 0,
  "minVolume24hUsd": 0,
  "onlyDexes": [],
  "onlyChains": [],
  "maxPairsPerToken": 0,
  "maxConcurrency": 8
}
```

# Actor output Schema

## `chainId` (type: `string`):

Chain identifier (e.g. solana, ethereum, base, bsc)

## `dexId` (type: `string`):

DEX identifier (e.g. uniswap, raydium, pancakeswap)

## `pairAddress` (type: `string`):

On-chain pair/pool address

## `baseTokenSymbol` (type: `string`):

Base token symbol

## `quoteTokenSymbol` (type: `string`):

Quote token symbol (e.g. WSOL, WETH, USDC)

## `priceUsd` (type: `string`):

Current USD price

## `liquidityUsd` (type: `string`):

Pool liquidity in USD

## `volumeH24` (type: `string`):

24-hour trading volume in USD

## `priceChangeH24` (type: `string`):

24-hour price change percent

## `marketCap` (type: `string`):

Circulating-supply market cap (USD)

## `fdv` (type: `string`):

Fully diluted valuation (USD)

## `url` (type: `string`):

DexScreener pair page URL

## `scrapedAt` (type: `string`):

ISO 8601 scrape timestamp

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tokenAddresses": [
        "So11111111111111111111111111111111111111112",
        "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/dexscreener-token-pairs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "tokenAddresses": [
        "So11111111111111111111111111111111111111112",
        "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("logiover/dexscreener-token-pairs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tokenAddresses": [
    "So11111111111111111111111111111111111111112",
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
  ]
}' |
apify call logiover/dexscreener-token-pairs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/dexscreener-token-pairs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DexScreener Token Pairs Scraper — Multi-Chain DEX Export",
        "description": "Bulk lookup of token contract addresses to every live DEX pair on DexScreener — price USD, liquidity, FDV, market cap, 24h volume, transactions, price change. Multi-chain auto-discovery (Solana, Ethereum, Base, BSC + 30 more). Batched 30 addresses/request. No API key.",
        "version": "1.0",
        "x-build-id": "8WLQ4AZemO9dR9vTj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~dexscreener-token-pairs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-dexscreener-token-pairs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~dexscreener-token-pairs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-dexscreener-token-pairs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~dexscreener-token-pairs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-dexscreener-token-pairs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "tokenAddresses"
                ],
                "properties": {
                    "tokenAddresses": {
                        "title": "Token Addresses",
                        "type": "array",
                        "description": "List of token contract addresses to look up on DexScreener. Accepts EVM addresses (0x...), Solana addresses (base58), and any other supported chain. Mix chains freely — addresses are dispatched against the multi-chain endpoint that returns ALL pairs for each token across every supported chain (Solana, Ethereum, Base, BSC, Polygon, Arbitrum, Avalanche, etc.). Examples: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' (WETH), 'So11111111111111111111111111111111111111112' (WSOL), '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' (USDC on Base).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "chainId": {
                        "title": "Chain ID (optional, enables batched API)",
                        "type": "string",
                        "description": "Optional. If you provide a chain ID AND all addresses belong to that chain, the scraper uses the batched endpoint (up to 30 addresses per request — much faster). Accepted values: 'solana', 'ethereum', 'bsc', 'polygon', 'base', 'arbitrum', 'avalanche', 'fantom', 'optimism', 'pulsechain', 'sui', 'ton', 'tron', 'cronos', 'hyperevm', 'monad', 'sonic', and any other DexScreener-supported chain. Leave empty for multi-chain auto-discovery (one request per token).",
                        "default": ""
                    },
                    "minLiquidityUsd": {
                        "title": "Minimum Liquidity (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Exclude pairs with USD liquidity below this threshold. Useful to filter out illiquid/abandoned pairs. Example: 1000 to skip pairs below $1k liquidity, 10000 for $10k. Set 0 to include all pairs.",
                        "default": 0
                    },
                    "minVolume24hUsd": {
                        "title": "Minimum 24h Volume (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Exclude pairs with 24-hour USD volume below this threshold. Helps focus on actively traded pairs. Example: 1000 to drop dead pairs, 100000 to keep only high-volume pairs.",
                        "default": 0
                    },
                    "onlyDexes": {
                        "title": "Only Include These DEXes",
                        "type": "array",
                        "description": "Optional whitelist of DEX IDs. Only pairs from these DEXes will be saved. Examples: 'uniswap', 'pancakeswap', 'raydium', 'pumpswap', 'meteora', 'orca', 'aerodrome', 'quickswap', 'sushiswap', 'curve'. Leave empty to include all DEXes.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "onlyChains": {
                        "title": "Only Include These Chains",
                        "type": "array",
                        "description": "Optional whitelist of chain IDs. Only pairs on these chains will be saved. Examples: 'solana', 'ethereum', 'base', 'bsc'. Leave empty to include all chains.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPairsPerToken": {
                        "title": "Max Pairs Per Token",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap the number of pairs saved per input token. After filtering, the top N pairs are kept sorted by liquidity (descending). Example: 1 to keep only the most liquid pair per token, 5 to keep the top 5. Set 0 for no cap.",
                        "default": 0
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Number of parallel API requests. DexScreener's public API allows up to 300 requests/minute for the tokens endpoint. Recommended: 5–15. Higher values may hit rate limits.",
                        "default": 8
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
