# Solana DEX Scraper — Raydium + Orca Dev-Grade Swap Stream (`zhorex/solana-dex-scraper`) Actor

Extract normalized swap events from Solana's largest spot DEXes: Raydium AMM v4 and Orca Whirlpool. Per-swap rows with signer, mints, amounts, USD pricing, and fee data. Built for MEV/arb bot devs, copy-trading systems, and on-chain analytics. Bring your own RPC. No login required.

- **URL**: https://apify.com/zhorex/solana-dex-scraper.md
- **Developed by:** [Sami](https://apify.com/zhorex) (community)
- **Categories:** Developer tools, Automation, Integrations
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 swap event extracteds

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

## Solana DEX Scraper — Raydium + Orca Swap Stream API

**The Solana DEX swap data API for MEV bots, copy-trading systems, and on-chain analytics.** Extract normalized swap events from **Raydium AMM v4** and **Orca Whirlpool** — one clean record per swap with wallet address, token mints, amounts, USD pricing (via Jupiter Price v3), and fee data. **Helius / QuickNode alternative at $0.001 per event. Bring your own RPC URL.** No login, no API key, no geyser node required.

### Why this Actor exists

If you're building on Solana, your options for normalized swap data today are:

- **Helius / QuickNode / Triton Premium tiers** — $99–499/mo just to get indexed history. Locked into one vendor's schema. Per-event metering on enhanced webhooks gets expensive at scale.
- **Self-hosted geyser plugin / gRPC validator** — 200GB+ of state, snapshot sync nightmares, dedicated ops effort.
- **Bitquery enterprise** — quote-only pricing in the $20K–$100K/year band.
- **Roll your own RPC parser** — a sprint of work to handle Token-2022, versioned transactions, address lookup tables, balance-delta decoding, partial fills.

**This Actor is the middle path.** One record per swap. One normalized schema across DEXes. Pay $0.001 per event you actually extract — no monthly subscription, no per-seat licensing, no overage charges. Plug in any RPC URL you already have (Helius free tier, Triton, your own validator, etc.).

Pairs well with the [Hyperliquid Pro Scraper](https://apify.com/zhorex/hyperliquid-scraper) if you also trade perpetuals — same dev-grade schema philosophy, complementary DeFi coverage (spot DEX on Solana + perpetual DEX on Hyperliquid L1).

### How to use it in 3 steps

1. Open [Solana DEX Scraper](https://apify.com/zhorex/solana-dex-scraper) on Apify Store and click **Try for free**
2. Pick a mode and paste your RPC URL (or use the public default for a test run)
3. Click **Run** and download as JSON, CSV, Excel, or XML

No code required. Works with Apify's free tier.

### What's NOT included (compliance)

This Actor is intentionally scoped to Solana's broader AMM ecosystem. It does **NOT**:

- Scrape Pump.fun (different ecosystem with a different compliance posture — out of scope for v0.1)
- Use any private RPC bypass, validator keypair, or geyser plugin
- Decode MEV-specific data (bundle inclusion, sandwich detection, validator-side flow)
- Require any login, auth, or signing key

Every extraction is from **public on-chain state via standard Solana JSON-RPC**. All instruction parsing uses the published Anchor IDLs / open-source program layouts.

### 5 Modes

| Mode | What you get | Best for |
|------|--------------|----------|
| **`swaps_by_token`** | All recent swaps for a token mint across both DEXes | Momentum tracking, token velocity, copy-trade signal generation |
| **`swaps_by_wallet`** | A wallet's full swap history across both DEXes | Shadow-trading, PnL attribution, smart-money tracking |
| **`swaps_by_pool`** | One pool's swap activity | LP analysis, pool concentration tracking, impermanent-loss modeling |
| **`recent_swaps`** | Generic firehose with DEX / token / minimum-size filters | Whale-flow monitoring, ecosystem-wide analytics |
| **`pool_metadata`** | Resolve a pool address to token pair + fee tier + liquidity | Pipeline enrichment, pool discovery |

### Output schema (swap modes)

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | Source mode label |
| `dex` | string | `raydium_v4` or `orca_whirlpool` |
| `poolAddress` | string | Pool / whirlpool account |
| `signature` | string | Transaction signature |
| `slot` | int | Solana slot number |
| `blockTime` | ISO 8601 | Confirmation time, UTC |
| `signer` | string | Wallet that signed the swap tx |
| `mintIn` | string | SPL token going INTO the pool |
| `mintOut` | string | SPL token coming OUT to the signer |
| `amountIn` | float | UI-scaled amount (by token decimals) |
| `amountInUsd` | float / null | USD notional (Jupiter Price v3) |
| `amountOut` | float | UI-scaled amount |
| `amountOutUsd` | float / null | USD notional |
| `priceIn` / `priceOut` | float / null | USD prices used for conversion |
| `feeBps` | int / null | Fee in basis points (Raydium v4 = 25; Orca = per-pool) |
| `feeUsd` | float / null | Estimated fee in USD |
| `errorStatus` | null \| string | `null` for successful swaps |
| `explorerUrl` | url | Solscan link |
| `scrapedAt` | ISO 8601 | When the record was emitted |

### Output schema (`pool_metadata` mode)

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | `pool_metadata` |
| `dex` | string | `raydium_v4` or `orca_whirlpool` |
| `poolAddress` | string | Input pool account |
| `tokenA` | object | `{mint, symbol, decimals}` |
| `tokenB` | object | `{mint, symbol, decimals}` |
| `feeTierBps` | int / null | Fee in basis points |
| `tickSpacing` | int / null | Whirlpool tick spacing (Orca only) |
| `liquidityUsd` | float / null | Live USD value of vault A + vault B |
| `volume24hUsd` | float / null | Reserved for v0.2 |
| `explorerUrl` | url | Solscan account link |
| `scrapedAt` | ISO 8601 | |

### Input examples

#### Monitor all swaps for a specific token (e.g. JUP)

```json
{
    "mode": "swaps_by_token",
    "tokenMint": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
    "maxResults": 1000,
    "includeUsdPrices": true,
    "rpcUrl": "https://api.mainnet-beta.solana.com"
}
````

#### Shadow-trade a wallet

```json
{
    "mode": "swaps_by_wallet",
    "walletAddress": "DfXygSm4jCyNCybVYYK6vbnGv8ekCfRRsVwh9NXKbVbu",
    "maxResults": 500,
    "fromTimestamp": "2026-05-01T00:00:00Z",
    "rpcUrl": "<your Helius / QuickNode URL>"
}
```

#### Watch one pool's flow

```json
{
    "mode": "swaps_by_pool",
    "poolAddress": "Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE",
    "maxResults": 2000,
    "rpcUrl": "<your RPC URL>"
}
```

#### Whale-flow firehose (>$10K swaps on Raydium only)

```json
{
    "mode": "recent_swaps",
    "dexes": ["raydium_v4"],
    "minAmountUsd": 10000,
    "maxResults": 1000,
    "rpcUrl": "<your RPC URL>"
}
```

#### Resolve a pool

```json
{
    "mode": "pool_metadata",
    "poolAddress": "Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE",
    "rpcUrl": "https://api.mainnet-beta.solana.com"
}
```

### Pricing

Pay-per-event — you only pay for records the Actor extracted.

| Event | Price | What triggers it |
|-------|------:|------------------|
| `swap-event` | **$0.001** | One normalized swap record emitted |
| `wallet-history-batch` | **$0.05** | One page of wallet signatures pulled (up to 1000 signatures, includes the deep RPC scan cost) |
| `pool-metadata` | **$0.002** | One pool address resolved to tokens + fee + liquidity |

#### Volume math

| Workload | Volume | Monthly cost |
|---|---|---|
| Track 5 tokens, 100 swaps/day each | 15,000 swaps/mo | ~**$15/mo** |
| Bot ingesting all whale swaps (>$10K) on Raydium | ~5K swaps/day | ~**$150/mo** |
| Copy-trader shadowing 50 wallets, full daily history | ~10K history batches/mo | ~**$500/mo** |
| Liquidity dashboard, 100 pools refreshed hourly | ~72K pool-metadata/mo | ~**$144/mo** |

Apify compute time is **included** — you don't pay for run duration, only the data you extract.

**Free trial**: $5 of credits over 7 days. Enough for ~5K swaps, ~100 wallet histories, or ~2.5K pool resolutions.

### Bring your own RPC

The public default `https://api.mainnet-beta.solana.com` is **heavily rate-limited and for testing only**. For any production workload, plug in your own RPC URL via the `rpcUrl` input:

- **Helius** — full-history archival, geyser-fed. From ~$99/mo for indexed endpoints.
- **QuickNode** — solid mainnet RPC at ~$49/mo entry tier.
- **Triton One** — premium low-latency dedicated nodes.

Your RPC URL is treated as a **secret input** — Apify masks it in logs and the run config UI.

### Use cases

- **Copy-trade signal generation** — `swaps_by_wallet` + `minAmountUsd` filter → ingest into your bot's queue
- **Token momentum tracking** — `swaps_by_token` over rolling 1h windows → compute net-flow / VWAP
- **LP / pool analysis** — `swaps_by_pool` + `pool_metadata` → impermanent-loss modeling, fee-yield estimation
- **Whale flow dashboards** — `recent_swaps` with `minAmountUsd: 10000` → Slack/Discord alerts
- **Backtesting datasets** — pull months of swaps from `swaps_by_pool` as training data

### Quickstart — Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

## Monitor every swap of the JUP token across Raydium + Orca, last 1000 swaps
run = client.actor("zhorex/solana-dex-scraper").call(run_input={
    "mode": "swaps_by_token",
    "tokenMint": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
    "maxResults": 1000,
    "minAmountUsd": 100,        ## skip dust swaps
    "rpcUrl": "https://YOUR_HELIUS_RPC_URL",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    in_sym = item["mintIn"][:8]
    out_sym = item["mintOut"][:8]
    usd = item.get("amountInUsd") or 0
    print(
        f"{item['blockTime']}  {item['dex']:14s}  "
        f"{in_sym}->{out_sym}  ${usd:>12,.2f}  "
        f"{item['signer'][:8]}..."
    )
```

### Quickstart — JavaScript

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('zhorex/solana-dex-scraper').call({
    mode: 'recent_swaps',
    dexes: ['raydium_v4', 'orca_whirlpool'],
    minAmountUsd: 10000,
    maxResults: 200,
    rpcUrl: 'https://YOUR_HELIUS_RPC_URL'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`${items.length} whale swaps in the last window.`);
```

### FAQ

**Does it require any Solana account or login?** No. All reads are public on-chain data via JSON-RPC.

**Why bring my own RPC?** Solana RPC is a heavy operation. By default we use the public `api.mainnet-beta.solana.com` for testing, but it'll throttle you to a handful of requests per second. Plugging your own Helius/QuickNode key keeps the throughput, latency, and cost under your control — and we don't have to bundle a paid endpoint into the actor price.

**Will this catch every swap?** It catches every swap whose transaction is in the RPC's history and whose pre/postTokenBalances cleanly express the signer's swap legs (>99% of real swaps). It does NOT catch swaps that failed (`err != null`) or swaps where the signer is not the beneficiary (e.g. complex relayer-mediated flows). For aggregator-routed swaps (Jupiter v6), we currently report the leg the user's wallet actually received — the routed inner DEXes are visible via the explorerUrl.

**What about Pump.fun?** Intentionally out of scope. Different ecosystem, different compliance posture. Pump.fun-specific data is best sourced from a dedicated Actor.

**What about Meteora DLMM and Jupiter routing?** Planned for **v0.2**. The current decoder architecture is layout-agnostic (balance-delta parsing), so adding new DEXes is straightforward — open an issue if you have a specific need.

**Solana reorgs?** We default to `commitment: confirmed`, which gives 2-block safety. Switch to `finalized` in the input for strict 32-block safety at the cost of ~13s additional latency.

**Token-2022?** Yes. Both classic SPL Token and Token-2022 transfers are decoded.

**What's the latency from on-chain swap to scraped record?** Limited by your RPC's indexing lag. On Helius, typically <1s after confirmation.

### Integrations

Export as JSON, CSV, Excel, XML. Wire up:

- **Google Sheets** — automatic dashboards
- **Zapier / Make / n8n** — alert on whale swaps, large LP moves
- **REST API + Webhooks** — push to your own infra on every run
- **BigQuery / Snowflake** — bulk ingestion via Apify's storage exports

### Coming in v0.2

- **Meteora DLMM** — dynamic liquidity AMM
- **Jupiter v6 aggregator** — decode each leg of routed swaps
- **New-token-launch detection** — first-trade slot per mint
- **Pool 24h volume** — historical aggregation
- **DCA / limit-order events** — Jupiter DCA program

Open an issue if you have a feature you want prioritized.

### Other scrapers by Zhorex

**DeFi & Markets:**

- [Hyperliquid Pro Scraper](https://apify.com/zhorex/hyperliquid-scraper) — Perp DEX leaderboard, wallets, vaults, markets
- [Solana DEX Scraper](https://apify.com/zhorex/solana-dex-scraper) — *(this Actor)*
- [TradingView Multi-Market Scraper](https://apify.com/zhorex/tradingview-scraper) — Stocks, crypto, forex, indices
- [Forex Factory Scraper](https://apify.com/zhorex/forex-factory-scraper) — Economic calendar

**AI & Search:**

- [Perplexity AI Search Scraper](https://apify.com/zhorex/perplexity-ai-scraper)

**Chinese Digital Intelligence Suite:**

- [Weibo](https://apify.com/zhorex/weibo-scraper), [Bilibili](https://apify.com/zhorex/bilibili-scraper), [RedNote / Xiaohongshu](https://apify.com/zhorex/rednote-xiaohongshu-scraper), [RedNote Shop](https://apify.com/zhorex/rednote-shop-scraper)

**B2B Review Intelligence:**

- [G2 Reviews](https://apify.com/zhorex/g2-reviews-scraper), [Capterra Reviews](https://apify.com/zhorex/capterra-reviews-scraper), [Booking.com Reviews](https://apify.com/zhorex/booking-reviews-scraper)

***

### Your review matters ⭐

If this Actor saved you a sprint of RPC-parsing work, **a 30-second review helps a lot**:

1. Go to the [Solana DEX Scraper page](https://apify.com/zhorex/solana-dex-scraper)
2. Click the star rating
3. Optionally drop a one-line note ("used this for copy-trade signals on Raydium" etc.)

**Why it matters**: reviews are the #1 signal Apify devs check before trying a scraper. The first 5–10 reviews dramatically improve discovery for everyone.

**Found a bug or want a new DEX?** [Open an issue](https://apify.com/zhorex/solana-dex-scraper/issues) — typically fixed within 48 hours.

***

### 🏢 Running a quant fund, MEV bot, or copy-trading platform?

If your pipeline ingests **10K+ swap records per day** or needs continuous wallet polling, I offer:

- **Custom output schemas** matching your warehouse / data-lake format
- **Schema stability SLA** — no breaking changes without 30-day notice
- **Volume pricing** above 100K events/month
- **Priority DEX additions** (Meteora, Phoenix, Lifinity, etc.) on a custom timeline
- **Dedicated indexer infrastructure** for sub-second latency

DM me on Apify, [open an Issue](https://apify.com/zhorex/solana-dex-scraper/issues) titled **"Enterprise inquiry"**, or email **samimassis2002@gmail.com**.

***

*Last updated: May 2026 · Actively maintained · Built by the developer of [Hyperliquid Pro Scraper](https://apify.com/zhorex/hyperliquid-scraper), [TradingView Multi-Market Scraper](https://apify.com/zhorex/tradingview-scraper), and 15+ other production Apify Actors.*

# Actor input Schema

## `mode` (type: `string`):

What slice of DEX data to extract.

## `rpcUrl` (type: `string`):

Solana JSON-RPC endpoint. The public default (api.mainnet-beta.solana.com) is heavily rate-limited and is for testing only. For production volumes plug in your own Helius, QuickNode, or Triton URL. Leave empty to use the public default.

## `tokenMint` (type: `string`):

SPL token mint (base58). Required for 'swaps\_by\_token' mode. Example: USDC = EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

## `walletAddress` (type: `string`):

Solana wallet (base58). Required for 'swaps\_by\_wallet' mode.

## `poolAddress` (type: `string`):

Pool program account (base58). Required for 'swaps\_by\_pool' and 'pool\_metadata' modes.

## `dexes` (type: `array`):

Which DEX programs to scan. Defaults to both supported DEXes.

## `fromSlot` (type: `integer`):

Start slot, inclusive. Optional. If omitted with no fromTimestamp, scans most-recent activity.

## `toSlot` (type: `integer`):

End slot, inclusive. Optional. Default: current slot.

## `fromTimestamp` (type: `string`):

Start time, e.g. '2026-05-01T00:00:00Z'. Alternative to fromSlot. Slot-based filtering wins if both set.

## `toTimestamp` (type: `string`):

End time, e.g. '2026-05-02T00:00:00Z'.

## `minAmountUsd` (type: `number`):

Filter out swaps below this USD notional. Requires includeUsdPrices to be enabled. Default: 0 (no filter).

## `maxResults` (type: `integer`):

Cap on records returned by the run.

## `includeUsdPrices` (type: `boolean`):

Fetch USD prices for input/output tokens at swap time using Jupiter Price API. Adds latency; disable for raw on-chain data only.

## `commitment` (type: `string`):

Solana confirmation level. 'confirmed' is fast; 'finalized' is safest. 'processed' is not supported (reorg risk).

## Actor input object example

```json
{
  "mode": "swaps_by_token",
  "rpcUrl": "https://api.mainnet-beta.solana.com",
  "tokenMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "dexes": [
    "raydium_v4",
    "orca_whirlpool"
  ],
  "minAmountUsd": 0,
  "maxResults": 1000,
  "includeUsdPrices": true,
  "commitment": "confirmed"
}
```

# 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 = {
    "mode": "swaps_by_token",
    "rpcUrl": "https://api.mainnet-beta.solana.com",
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("zhorex/solana-dex-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 = {
    "mode": "swaps_by_token",
    "rpcUrl": "https://api.mainnet-beta.solana.com",
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("zhorex/solana-dex-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 '{
  "mode": "swaps_by_token",
  "rpcUrl": "https://api.mainnet-beta.solana.com",
  "maxResults": 1000
}' |
apify call zhorex/solana-dex-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Solana DEX Scraper — Raydium + Orca Dev-Grade Swap Stream",
        "description": "Extract normalized swap events from Solana's largest spot DEXes: Raydium AMM v4 and Orca Whirlpool. Per-swap rows with signer, mints, amounts, USD pricing, and fee data. Built for MEV/arb bot devs, copy-trading systems, and on-chain analytics. Bring your own RPC. No login required.",
        "version": "0.1",
        "x-build-id": "a9FVW7fe8uSL6WPbZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zhorex~solana-dex-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zhorex-solana-dex-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/zhorex~solana-dex-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zhorex-solana-dex-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/zhorex~solana-dex-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zhorex-solana-dex-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Scraping Mode",
                        "enum": [
                            "swaps_by_token",
                            "swaps_by_wallet",
                            "swaps_by_pool",
                            "recent_swaps",
                            "pool_metadata"
                        ],
                        "type": "string",
                        "description": "What slice of DEX data to extract.",
                        "default": "swaps_by_token"
                    },
                    "rpcUrl": {
                        "title": "Solana RPC URL",
                        "type": "string",
                        "description": "Solana JSON-RPC endpoint. The public default (api.mainnet-beta.solana.com) is heavily rate-limited and is for testing only. For production volumes plug in your own Helius, QuickNode, or Triton URL. Leave empty to use the public default."
                    },
                    "tokenMint": {
                        "title": "Token Mint Address",
                        "type": "string",
                        "description": "SPL token mint (base58). Required for 'swaps_by_token' mode. Example: USDC = EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                    },
                    "walletAddress": {
                        "title": "Wallet Address",
                        "type": "string",
                        "description": "Solana wallet (base58). Required for 'swaps_by_wallet' mode."
                    },
                    "poolAddress": {
                        "title": "Pool Address",
                        "type": "string",
                        "description": "Pool program account (base58). Required for 'swaps_by_pool' and 'pool_metadata' modes."
                    },
                    "dexes": {
                        "title": "DEXes to include",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Which DEX programs to scan. Defaults to both supported DEXes.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "raydium_v4",
                                "orca_whirlpool"
                            ],
                            "enumTitles": [
                                "Raydium AMM v4",
                                "Orca Whirlpool"
                            ]
                        },
                        "default": [
                            "raydium_v4",
                            "orca_whirlpool"
                        ]
                    },
                    "fromSlot": {
                        "title": "From Slot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Start slot, inclusive. Optional. If omitted with no fromTimestamp, scans most-recent activity."
                    },
                    "toSlot": {
                        "title": "To Slot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "End slot, inclusive. Optional. Default: current slot."
                    },
                    "fromTimestamp": {
                        "title": "From Timestamp (ISO 8601)",
                        "type": "string",
                        "description": "Start time, e.g. '2026-05-01T00:00:00Z'. Alternative to fromSlot. Slot-based filtering wins if both set."
                    },
                    "toTimestamp": {
                        "title": "To Timestamp (ISO 8601)",
                        "type": "string",
                        "description": "End time, e.g. '2026-05-02T00:00:00Z'."
                    },
                    "minAmountUsd": {
                        "title": "Minimum Swap Size (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Filter out swaps below this USD notional. Requires includeUsdPrices to be enabled. Default: 0 (no filter).",
                        "default": 0
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Cap on records returned by the run.",
                        "default": 1000
                    },
                    "includeUsdPrices": {
                        "title": "Include USD Prices",
                        "type": "boolean",
                        "description": "Fetch USD prices for input/output tokens at swap time using Jupiter Price API. Adds latency; disable for raw on-chain data only.",
                        "default": true
                    },
                    "commitment": {
                        "title": "Commitment Level",
                        "enum": [
                            "confirmed",
                            "finalized"
                        ],
                        "type": "string",
                        "description": "Solana confirmation level. 'confirmed' is fast; 'finalized' is safest. 'processed' is not supported (reorg risk).",
                        "default": "confirmed"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
