TL;DR
-
Fetch newly created tokens across 360+ chains using CoinGecko API’s new pools list and new pools by network endpoints to power sniper bots, wallet discovery feeds, DEX screeners, CEX listing monitors, and real-time alert pipelines.
-
Use CoinGecko's Pools Megafilter endpoint to filter newly created tokens for quality signals such as GT Score health checks, honeypot detection, and liquidity floors.
Cross-chain token detection across Solana, Base, BSC, and 360+ chains relies on ingesting newly created DEX liquidity pool events at deployment time. Instead of managing chain-specific APIs, indexers, or custom RPC infrastructure per network, developers can use an onchain market data provider that aggregates new liquidity pools across multiple chains into a single API. This approach simplifies multi-chain token discovery and enables scaling across popular and new emerging networks through a single integration.
In this guide, you'll build a Python workflow using the CoinGecko API, powered by GeckoTerminal to discover newly launched tokens, retrieve and filter newly created liquidity pools to identify emerging tokens as soon as they become tradable.

How to Fetch New Tokens on Solana, Base, BSC, and 360+ Chains in Python
CoinGecko API provides access to newly created tokens and liquidity pools through two endpoints: /onchain/networks/new_pools returns the latest pools across all 360+ supported networks, while /onchain/networks/{network}/new_pools returns the latest pools for a specific chain. Both return data from the past 48 hours, making them an ideal starting point for tracking new token launches.
Prerequisites & Setup
You'll need a CoinGecko API key. If you don't have one, follow the guide to get a free Demo API key. The Demo plan includes 30 calls per minute, which is more than enough to follow along with this tutorial.
1 2
requests>=2.31.0 python-dotenv>=1.0.0
1 2
COINGECKO_API_KEY=CG-your_api_key_here # Optional: add CG_API_MODE=pro if you're using a paid Pro key
Install the dependencies.
pip install -r requirements.txtNext, set up a shared HTTP client that handles authentication, configures the base URL, and includes a helper for resolving related data returned by GeckoTerminal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import os import requests from dotenv import load_dotenv load_dotenv() API_KEY = os.getenv("COINGECKO_API_KEY") MODE = os.getenv("CG_API_MODE", "demo") # Demo and Pro use different base URLs and header names. Pick one and stick to it. if MODE == "pro": BASE_URL = "https://pro-api.coingecko.com/api/v3" HEADERS = {"x-cg-pro-api-key": API_KEY} else: BASE_URL = "https://api.coingecko.com/api/v3" HEADERS = {"x-cg-demo-api-key": API_KEY} def get(path, params=None): """Call any onchain endpoint on the CoinGecko API.""" response = requests.get(f"{BASE_URL}{path}", headers=HEADERS, params=params, timeout=20) response.raise_for_status() return response.json() def index_included(payload): """Index sideloaded entities (tokens, networks, dexes) by ID.""" return {item["id"]: item for item in payload.get("included", [])}
1 2 3 4 5
from cg_client import get payload = get("/onchain/networks") for network in payload["data"][:5]: print(network["id"], network["attributes"]["name"])
Fetch new pools across every chain
The core function works across all 360+ supported networks using the same code and response format. Specify a network ID to filter results to a single chain, or leave it blank to fetch newly created pools across all chains.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
import sys from cg_client import get, index_included def fetch_new_pools(network=None, pages=2): """Return newest pools. Without a network, fetches across all chains. With a network ID, scopes to that chain.""" if network: path = f"/onchain/networks/{network}/new_pools" include = "base_token" else: path = "/onchain/networks/new_pools" include = "base_token,network" results = [] for page in range(1, pages + 1): payload = get(path, params={"include": include, "page": page}) included = index_included(payload) for pool in payload["data"]: attrs = pool["attributes"] base_id = pool["relationships"]["base_token"]["data"]["id"] base = included[base_id]["attributes"] row = { "symbol": base.get("symbol"), "address": base["address"], "reserve_usd": float(attrs.get("reserve_in_usd") or 0), "volume_24h": float(attrs.get("volume_usd", {}).get("h24") or 0), } if network: row["network"] = network row["network_id"] = network else: net_id = pool["relationships"]["network"]["data"]["id"] row["network"] = included[net_id]["attributes"]["name"] row["network_id"] = net_id results.append(row) return results if __name__ == "__main__": network = sys.argv[1] if len(sys.argv) > 1 else None pools = fetch_new_pools(network)[:10] header = f"{'NETWORK':<14} {'SYMBOL':<12} {'RESERVE':>14} {'24H VOLUME':>14}" print() print(header) print("-" * len(header)) for p in pools: print(f"{p['network'][:13]:<14} {(p['symbol'] or '?')[:11]:<12} " f"${p['reserve_usd']:>13,.0f} ${p['volume_24h']:>13,.0f}") print()
Running this script produces output like the following:
NETWORK SYMBOL RESERVE 24H VOLUME
----------------------------------------------------------
Solana ROI $ 2,440 $ 87
Solana METAMASK $ 4 $ 0
Solana Alain $ 17,585 $ 68
Solana RedBull $ 16,022 $ 4,065
Solana MEOW $ 7,126 $ 298
Solana Horseshit $ 1,835 $ 558
Solana PGTL $ 1,595 $ 1
Solana MeSSi $ 3,326 $ 5,140
Solana UOF $ 0 $ 0
Solana UOF $ 0 $ 0
How to Filter High-Quality New Tokens
The raw new-pools feed is a high-volume, unfiltered stream that may include bots, scams, honeypots, and low-liquidity tokens. The CoinGecko API Pools Megafilter endpoint lets you define quality and safety criteria as query parameters to return only matching newly created pools across all supported chains, with 30+ filtering and sorting options spanning liquidity, activity, distribution, and security metrics.
The example below filters for recently created pools with minimum liquidity and volume thresholds, honeypot exclusion, and a healthy GeckoTerminal GT Score (a 0–100 pool quality score). Results include price, FDV, market cap, 5-minute volume, and 5-minute price change in a single response.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
from datetime import datetime from cg_client import get, index_included def fetch_megafilter(): """Return new pools across every chain, pre-filtered server-side.""" payload = get("/onchain/pools/megafilter", params={ "include": "base_token,network", "pool_created_hour_max": 0.1, # pools created in the last 6 minutes "reserve_in_usd_min": 1_000, # liquidity floor "h24_volume_usd_min": 100, # activity floor "checks": "no_honeypot", "sort": "pool_created_at_desc", }) included = index_included(payload) results = [] for pool in payload["data"]: attrs = pool["attributes"] rels = pool["relationships"] base = included[rels["base_token"]["data"]["id"]]["attributes"] net = included[rels["network"]["data"]["id"]]["attributes"] vol = attrs.get("volume_usd") or {} chg = attrs.get("price_change_percentage") or {} results.append({ "network": net["name"], "symbol": base.get("symbol"), "pool_address": attrs.get("address"), "price_usd": float(attrs.get("base_token_price_usd") or 0), "fdv_usd": float(attrs.get("fdv_usd") or 0), "market_cap_usd": float(attrs.get("market_cap_usd") or 0), "reserve_usd": float(attrs.get("reserve_in_usd") or 0), "volume_5m_usd": float(vol.get("m5") or 0), "price_change_5m_pct": float(chg.get("m5") or 0), "created_at": attrs["pool_created_at"], }) return results if __name__ == "__main__": pools = fetch_megafilter() print("=" * 78) print(" NEW POOLS (Megafilter)") print("=" * 78) print(f" Generated: {datetime.utcnow().isoformat()}Z") print(f" Window: past 6 minutes (0.1 hours)") print(f" Filters: reserve >= $1,000 | 24h volume >= $100 | no_honeypot") print(f" Matches: {len(pools)} pools across 360+ chains") print("=" * 78) print() for p in pools: mcap = f"${p['market_cap_usd']:,.2f}" if p['market_cap_usd'] else "n/a" print(f" {p['symbol']} ({p['network']})") print(f" Pool : {p['pool_address']}") print(f" Price : ${p['price_usd']:,.8f}") print(f" FDV : ${p['fdv_usd']:,.2f}") print(f" Market Cap : {mcap}") print(f" Reserve : ${p['reserve_usd']:,.2f}") print(f" 5m Volume : ${p['volume_5m_usd']:,.2f}") print(f" 5m Change : {p['price_change_5m_pct']:+.2f}%") print(f" Created : {p['created_at']}") print()
Here is an example of how the output looks like:
==============================================================================
NEW POOLS (Megafilter)
==============================================================================
Generated: 2026-06-18T09:30:10.102720Z
Window: past 6 minutes (0.1 hours)
Filters: reserve >= $1,000 | 24h volume >= $100 | no_honeypot
Matches: 4 pools across 360+ chains
==============================================================================
StarShip (BNB Chain)
Pool : 0x4965867bc9203dd880ffe1d17466535c46089c17
Price : $0.00000349
FDV : $34,506.61
Market Cap : n/a
Reserve : $68,530.48
5m Volume : $155.49
5m Change : +0.00%
Created : 2026-06-18T09:28:36Z
DRCR (Ethereum)
Pool : 0xe001151a1ca343128feec5fb93bddcd5f5176324
Price : $0.00000000
FDV : $1,651.44
Market Cap : n/a
Reserve : $2,658.06
5m Volume : $608.77
5m Change : +73.60%
Created : 2026-06-18T09:26:47Z
BNBS😃 (BNB Chain)
Pool : 0xa1d2c85558bb5afd4ebf8ee65141d2de5a82db13
Price : $0.00028318
FDV : $283,179.57
Market Cap : n/a
Reserve : $64,833.89
5m Volume : $56,811.91
5m Change : +167.59%
Created : 2026-06-18T09:25:32Z
SPCX (BNB Chain)
Pool : 0x0482084ae323185d82b17a4d9f0454989059ff6d
Price : $0.00001741
FDV : $1,740.82
Market Cap : n/a
Reserve : $3,268.74
5m Volume : $157.59
5m Change : +13.42%
Created : 2026-06-18T09:25:27Z
How to Get Real-Time New Token Alerts
The CoinGecko API’s New Pools List endpoint returns newly created liquidity pools across all supported networks in a single call. To build an alert pipeline, run the endpoint at regular intervals and track previously seen pools to avoid duplicate alerts. The combination of network and pool address provides a simple deduplication key.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import json from pathlib import Path from fetch_new_pools import fetch_new_pools SEEN_PATH = Path("seen_pools.json") def send_alert(pool): print(f"NEW: {pool['symbol']} on {pool['network']} — ${pool['reserve_usd']:,.0f}") seen = set(json.loads(SEEN_PATH.read_text())) if SEEN_PATH.exists() else set() for pool in fetch_new_pools(): key = f"{pool['network_id']}:{pool['address']}" if key in seen: continue send_alert(pool) seen.add(key) SEEN_PATH.write_text(json.dumps(sorted(seen)))
Instead of continuously polling, the new coin listed webhook event (currently under private beta) triggers when a token completes indexing and becomes available across CoinGecko, enabling real-time alerts as soon as new tokens go live. Submit the form for early access.
What Can You Build with Multi-Chain New Token Data?
The following use cases show how teams build alerts, dashboards, automated trading systems, and onchain analytics platforms on top of new token streams.
-
Real-time alert channels: Send alerts about new token launches to Telegram, Discord, Slack, email, or internal systems.
-
Sniper bots and automated trading: Auto-buy logic catching newly launched tokens before CEX listings move price.
-
Token discovery feeds: Surface trending and newly launched tokens across all supported chains via a single API, with GT Score and honeypot-based filtering for safer launches. Token discovery feeds are commonly integrated into wallet experiences like Phantom, Crypto.com, and Magic Eden. The same feed also covers newer asset classes, with newly listed tokenized stocks such as xStock/HOODX on Robinhood Chain appearing alongside memecoin launches, so one integration can cover both.
-
CEX new-listing monitoring: Identifying cross-chain launches that achieve real liquidity within hours. The multi-chain new-pools feed combined with GT Score helps exchanges detect early market demand and prioritize which new assets to evaluate for listing.
Conclusion
CoinGecko API enables unified multi-chain tracking for new tokens across 360+ blockchain networks with the broadest onchain data coverage, allowing a single integration code to scale across networks without re-architecture. A wallet, screener, or listing-monitoring workflow built for one chain can be easily extended across hundreds of others without maintaining separate integrations for each network.
These token discovery signals can be used to power automated trading strategies. Our guides on building a Solana sniper bot and pump.fun sniper bot show how to turn them into automated execution workflows. For broader onchain coverage, the GeckoTerminal onchain data guide shows how to retrieve pool, token, liquidity, market, and OHLCV data across 360+ networks.
Ready to start building? Sign up for a free Demo API plan today and start tracking newly launched tokens with real-time multi-chain data. As your application scales, upgrade to a CoinGecko API Basic plan for for higher API call credits, increased rate limits, and multiple data delivery methods including REST APIs, webhook, and WebSocket streams. For even higher API call credits, rate limits, and access to exclusive endpoints such as Pools Megafilter, upgrade to a CoinGecko API Analyst plan.
