> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dexpaprika.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Filter and screen liquidity pools

> Use the DexPaprika pool filter endpoint to find pools by volume, transaction count, and creation date. Build pool screeners, find high-activity pools, and discover recently launched tokens.

## What you'll build

A pool screener that finds liquidity pools matching specific criteria -- volume thresholds, transaction counts, and creation dates. This is useful for:

* Finding high-activity pools on any network
* Discovering newly created pools (early token launches)
* Building automated pool monitoring pipelines
* Filtering noise from low-activity pools

***

## The filter endpoint

```
GET /networks/{network}/pools/filter
```

This endpoint lets you combine multiple filters with AND logic. The response includes paginated results with total counts.

### Available parameters

| Parameter        | Type    | Description                                      |
| ---------------- | ------- | ------------------------------------------------ |
| `volume_24h_min` | number  | Minimum 24h volume in USD                        |
| `volume_24h_max` | number  | Maximum 24h volume in USD                        |
| `txns_24h_min`   | integer | Minimum transactions in last 24h                 |
| `created_after`  | integer | UNIX timestamp -- pools created after this date  |
| `created_before` | integer | UNIX timestamp -- pools created before this date |
| `sort_by`        | string  | `volume_24h` (default), `txns_24h`, `created_at` |
| `sort_dir`       | string  | `asc` or `desc` (default: `desc`)                |
| `page`           | integer | Page number, 1-indexed (default: 1)              |
| `limit`          | integer | Items per page, 1–100 (default: 50)              |

<Warning>
  The parameters `volume_7d_min`, `volume_30d_min`, `liquidity_usd_min`, and `liquidity_usd_max` exist in the API spec but are not functional yet. Using them returns empty results.
</Warning>

***

## Example 1: High-volume pools on Ethereum

Find Ethereum pools with over \$500,000 in daily volume:

<CodeGroup>
  ```bash bash theme={null}
  curl "https://api.dexpaprika.com/networks/ethereum/pools/filter?volume_24h_min=500000&sort_by=volume_24h&sort_dir=desc&limit=5"
  ```

  ```python python theme={null}
  import requests

  response = requests.get("https://api.dexpaprika.com/networks/ethereum/pools/filter", params={
      "volume_24h_min": 500000,
      "sort_by": "volume_24h",
      "sort_dir": "desc",
      "limit": 5
  })

  data = response.json()
  print(f"Total matching pools: {data['page_info']['total_items']}")

  for pool in data["results"]:
      print(f"  {pool['dex_id']} | {pool['address'][:16]}... | Vol: ${pool['volume_usd_24h']:,.0f} | Txns: {pool['txns_24h']}")
  ```

  ```javascript javascript theme={null}
  const response = await fetch(
    "https://api.dexpaprika.com/networks/ethereum/pools/filter?" +
    new URLSearchParams({
      volume_24h_min: 500000,
      sort_by: "volume_24h",
      sort_dir: "desc",
      limit: 5
    })
  );

  const data = await response.json();
  console.log(`Total matching pools: ${data.page_info.total_items}`);

  data.results.forEach(pool => {
    console.log(`  ${pool.dex_id} | ${pool.address.slice(0, 16)}... | Vol: $${pool.volume_usd_24h.toLocaleString()} | Txns: ${pool.txns_24h}`);
  });
  ```
</CodeGroup>

### Response format

```json theme={null}
{
  "results": [
    {
      "chain": "ethereum",
      "address": "0xf6e72db5454dd049d0788e411b06cfaf16853042",
      "dex_id": "makerdao",
      "volume_usd_24h": 1657645861.93,
      "liquidity_usd": 0,
      "txns_24h": 4383,
      "created_at": "2024-07-11T13:48:47Z"
    }
  ],
  "page_info": {
    "limit": 5,
    "page": 1,
    "total_items": 720,
    "total_pages": 144
  }
}
```

<Note>
  The filter endpoint uses different field names than the pool listing endpoint (`/networks/{network}/pools`). Key differences: `address` instead of `id`, `volume_usd_24h` instead of `volume_usd`, `txns_24h` instead of `transactions`, and results are in a `results` array instead of `pools`.
</Note>

***

## Example 2: Recently created pools with activity

Find pools created in the last 7 days that have at least 50 transactions:

<CodeGroup>
  ```bash bash theme={null}
  # Calculate UNIX timestamp for 7 days ago
  SEVEN_DAYS_AGO=$(python3 -c "import time; print(int(time.time()) - 7*86400)")

  curl "https://api.dexpaprika.com/networks/base/pools/filter?created_after=$SEVEN_DAYS_AGO&txns_24h_min=50&sort_by=created_at&sort_dir=desc&limit=10"
  ```

  ```python python theme={null}
  import requests
  import time

  seven_days_ago = int(time.time()) - 7 * 86400

  response = requests.get("https://api.dexpaprika.com/networks/base/pools/filter", params={
      "created_after": seven_days_ago,
      "txns_24h_min": 50,
      "sort_by": "created_at",
      "sort_dir": "desc",
      "limit": 10
  })

  data = response.json()
  print(f"New pools with 50+ txns in last 7 days: {data['page_info']['total_items']}")

  for pool in data["results"]:
      print(f"  Created: {pool['created_at']} | DEX: {pool['dex_id']} | Txns: {pool['txns_24h']} | Vol: ${pool['volume_usd_24h']:,.0f}")
  ```
</CodeGroup>

***

## Example 3: Paginating through all results

When the filter returns many results, paginate through them:

```python theme={null}
import requests

all_pools = []
page = 1

while True:
    response = requests.get("https://api.dexpaprika.com/networks/solana/pools/filter", params={
        "volume_24h_min": 10000,
        "txns_24h_min": 20,
        "sort_by": "volume_24h",
        "sort_dir": "desc",
        "page": page,
        "limit": 100
    })

    data = response.json()
    all_pools.extend(data["results"])

    total_pages = data["page_info"]["total_pages"]
    print(f"Page {page}/{total_pages} -- collected {len(all_pools)} pools so far")

    if page >= total_pages:
        break
    page += 1

print(f"Total pools matching criteria: {len(all_pools)}")
```

***

## Example 4: Combining with pool details

The filter returns summary data. To get full pool details (token pair info, reserves, fees), make a follow-up request:

```python theme={null}
import requests

# Step 1: Find interesting pools
response = requests.get("https://api.dexpaprika.com/networks/ethereum/pools/filter", params={
    "volume_24h_min": 100000,
    "txns_24h_min": 500,
    "limit": 5
})

pools = response.json()["results"]

# Step 2: Get full details for each pool
for pool in pools:
    details = requests.get(
        f"https://api.dexpaprika.com/networks/{pool['chain']}/pools/{pool['address']}"
    ).json()

    tokens = details.get("tokens", [])
    pair = "/".join(t["symbol"] for t in tokens) if tokens else "Unknown"
    print(f"{pair} on {pool['dex_id']} -- Vol: ${pool['volume_usd_24h']:,.0f}")
```

***

## Tips

* **Start broad, then narrow:** Begin with just `volume_24h_min` to see how many pools match, then add more filters
* **Use `created_after` for new token discovery:** Combine with `txns_24h_min` to find new pools that actually have trading activity
* **Different networks, different thresholds:** A \$10k volume pool on Ethereum is tiny; on a smaller chain it might be significant. Adjust thresholds per network
* **Check `total_items` in `page_info`:** This tells you how many pools match your criteria before you paginate

***

## Next steps

<CardGroup cols={2}>
  <Card title="Find New Pools" icon="plus-circle" href="/tutorials/find-new-pools">
    More techniques for discovering new pools using the standard pool listing endpoint
  </Card>

  <Card title="Pool Details" icon="water" href="/api-reference/pools/get-a-pool-on-a-network">
    Get full details for any pool including token pairs and reserves
  </Card>

  <Card title="Common Patterns" icon="book" href="/knowledge-base/common-patterns">
    Standard API workflows including filtering, pricing, and historical data
  </Card>

  <Card title="API Reference" icon="bolt" href="/api-reference/pools/advanced-pool-filtering-on-a-network">
    Full filter endpoint documentation with all parameters
  </Card>
</CardGroup>

### FAQs

<AccordionGroup>
  <Accordion title="Why do some filter parameters return empty results?">
    The parameters `volume_7d_min`, `volume_30d_min`, `liquidity_usd_min`, and `liquidity_usd_max` are not yet functional. Stick to `volume_24h_min`, `volume_24h_max`, `txns_24h_min`, `created_after`, and `created_before`.
  </Accordion>

  <Accordion title="Can I filter across multiple networks at once?">
    No. The filter endpoint works per network. Make separate requests for each network you want to check.
  </Accordion>

  <Accordion title="What's the maximum number of results?">
    The filter can return up to `total_items` results (shown in `page_info`), but you must paginate through them 100 at a time.
  </Accordion>
</AccordionGroup>

<script type="application/ld+json">
  {JSON.stringify({
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {"@type": "Question","name": "Why do some DexPaprika filter parameters return empty results?","acceptedAnswer": {"@type": "Answer","text": "volume_7d_min, volume_30d_min, liquidity_usd_min, liquidity_usd_max are not yet functional."}},
        {"@type": "Question","name": "Can I filter pools across multiple networks?","acceptedAnswer": {"@type": "Answer","text": "No. Make separate requests per network."}},
        {"@type": "Question","name": "What's the maximum filter results?","acceptedAnswer": {"@type": "Answer","text": "No hard cap, but paginate 100 at a time. Check page_info.total_items for the full count."}}
      ]
    })}
</script>
