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

# Compare Solana DEX and launchpad activity

> Compare Solana DEX and launchpad volume, transactions, active wallets, token launches, and migrations across rolling windows with Lighthouse.

Lighthouse returns market-wide activity in one request. Compare volume, transactions, wallets, launches, and migrations across `5m`, `1h`, `6h`, and `24h` windows.

* Market overview dashboards
* DEX and launchpad leaderboards
* “What is moving right now?” discovery pages
* Volume and transaction trend cards
* Pump.fun, Raydium, Meteora, and other venue comparisons

## Fetch market stats

```bash theme={null}
curl "https://data.solanatracker.io/lighthouse" \
  -H "x-api-key: YOUR_API_KEY"
```

Read each array entry as one market or market-family rollup:

```json theme={null}
{
  "market": "pumpfun",
  "label": "Pump.fun",
  "icon": "https://...",
  "url": "https://pump.fun",
  "stats": {
    "5m": {
      "transactions": {
        "total": 120,
        "buys": 72,
        "sells": 48,
        "changePct": 18.4
      },
      "wallets": {
        "total": 96,
        "changePct": 11.2
      },
      "volume": {
        "total": 185000,
        "buys": 112000,
        "sells": 73000,
        "changePct": 24.7
      },
      "tokensCreated": {
        "total": 34,
        "changePct": 8.1
      },
      "migrations": {
        "total": 5,
        "changePct": 25
      }
    }
  }
}
```

Every market includes the same four windows:

```text theme={null}
5m   1h   6h   24h
```

`changePct` compares the current window with the previous window of the same length. For example, the `1h` change compares the latest hour with the hour immediately before it.

## Build a market leaderboard

Sort markets by a metric such as recent volume:

```javascript theme={null}
const response = await fetch(
  "https://data.solanatracker.io/lighthouse",
  {
    headers: {
      "x-api-key": process.env.SOLANA_TRACKER_API_KEY,
    },
  }
);

const markets = await response.json();

const byRecentVolume = markets
  .filter((market) => market.stats?.["1h"])
  .sort(
    (a, b) =>
      b.stats["1h"].volume.total - a.stats["1h"].volume.total
  );

for (const market of byRecentVolume.slice(0, 10)) {
  const stats = market.stats["1h"];
  console.log(
    `${market.label}: $${stats.volume.total.toLocaleString()} ` +
    `(${stats.volume.changePct >= 0 ? "+" : ""}${stats.volume.changePct}%)`
  );
}
```

## Create a market overview card

Use the `all` market for a site-wide summary, then compare individual markets:

```javascript theme={null}
const all = markets.find((market) => market.market === "all");
const pumpfun = markets.find((market) => market.market === "pumpfun");

function overview(market) {
  const stats = market?.stats?.["5m"];
  if (!stats) return null;

  return {
    label: market.label,
    volumeUsd: stats.volume.total,
    transactions: stats.transactions.total,
    wallets: stats.wallets.total,
    tokensCreated: stats.tokensCreated.total,
    migrations: stats.migrations.total,
    volumeChangePct: stats.volume.changePct,
  };
}

console.log(overview(all));
console.log(overview(pumpfun));
```

## Understand market IDs

Use `market` as the identifier and `label` as the display name. Entries can represent a venue, a family of markets, or a launchpad within a family:

| Market ID | Meaning |
| - | - |
| `all` | All indexed markets |
| `pumpfun` | Pump.fun activity |
| `raydium-all` | Raydium family rollup |
| `meteora-curve:bags` | A discovered launchpad under a market family |

Each entry also includes:

* `label` — display name
* `icon` — branding URL when available
* `url` — project or venue URL when available
* `parent` — parent market for a launchpad child

Treat `icon` and `url` as optional presentation data; they may be empty when branding is unavailable.

## Handle zero-activity windows

A window with no activity contains zero-valued metrics. When there is no previous activity to compare, `changePct` is `0`:

```javascript theme={null}
const volume = market.stats["5m"].volume;

if (volume.total === 0) {
  console.log(`${market.label} is quiet right now`);
} else {
  console.log(`${market.label} has $${volume.total} in recent volume`);
}
```

<CardGroup cols={2}>
  <Card title="Lighthouse API reference" href="/data-api/lighthouse/solana-memecoin-market-stats" icon="https://mintcdn.com/solanatracker/l0aXlX5jJ7xpUiwY/icons/hugeicons/gauge-high.svg?fit=max&auto=format&n=l0aXlX5jJ7xpUiwY&q=85&s=95a1e5d2d1ac8fa978e8d3bccaefe5f7" iconType="duotone" width="24" height="24" data-path="icons/hugeicons/gauge-high.svg">
    Browse the endpoint, response schema, time windows, and market fields.
  </Card>

  <Card title="Find tokens" href="/guides/token-discovery" icon="https://mintcdn.com/solanatracker/4PIKDaYde_747jyk/icons/hugeicons/wand-magic-sparkles.svg?fit=max&auto=format&n=4PIKDaYde_747jyk&q=85&s=0f62e0da44925efb247f7ae1562f93c6" iconType="duotone" width="24" height="24" data-path="icons/hugeicons/wand-magic-sparkles.svg">
    Move from market-level signals to token-level research.
  </Card>

  <Card title="Launches and graduations" href="/guides/pumpfun" icon="https://mintcdn.com/solanatracker/l0aXlX5jJ7xpUiwY/icons/hugeicons/fire.svg?fit=max&auto=format&n=l0aXlX5jJ7xpUiwY&q=85&s=3ae30ad387cbd4a85232de4654aa6756" iconType="duotone" width="24" height="24" data-path="icons/hugeicons/fire.svg">
    Track Pump.fun launches, curves, graduations, and swaps.
  </Card>

  <Card title="Whale and KOL trades" href="/guides/whale-kol" icon="https://mintcdn.com/solanatracker/4PIKDaYde_747jyk/icons/hugeicons/whale.svg?fit=max&auto=format&n=4PIKDaYde_747jyk&q=85&s=dc7557a0037043bfd9757889a899b671" iconType="duotone" width="24" height="24" data-path="icons/hugeicons/whale.svg">
    Follow the wallets driving high-value activity.
  </Card>
</CardGroup>
