{
  "data": {
    "id": "yo7tmA6LqmLYqmoGa",
    "actId": "MOa8uJUJGEpUpfB7L",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-28T08:00:59.516Z",
    "finishedAt": "2026-10-28T08:01:09.221Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 9538,
      "runTimeSecs": 9.538,
      "computeUnits": 0.010597777777777777,
      "imageSizeBytes": 318650880
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"DexScreener Scraper Input\",\n  \"description\": \"Search tokens and pairs, inspect every pool of a token, monitor pairs, or pull promotion feeds, narratives and paid orders from DexScreener's public API.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to collect. Each mode uses its own fields below.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byToken\",\n        \"byPair\",\n        \"discovery\",\n        \"metas\",\n        \"metaPairs\",\n        \"orders\",\n        \"byTokenAddress\",\n        \"byPairAddress\",\n        \"trending\",\n        \"byProfile\"\n      ],\n      \"enumTitles\": [\n        \"Search tokens and pairs\",\n        \"Token lookup (pools or best pair)\",\n        \"Pair lookup by address or URL\",\n        \"Promotion feeds (boosts, profiles, takeovers, ads)\",\n        \"Trending narratives\",\n        \"Pairs inside narratives\",\n        \"Paid orders for tokens\",\n        \"Token lookup (legacy)\",\n        \"Pair lookup (legacy)\",\n        \"Boosted tokens (legacy)\",\n        \"Token profiles (legacy)\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"queries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"Token names, symbols, pair text such as SOL/USDC, token addresses, or DexScreener URLs. Multiple queries fan out. (mode=search)\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [\n        \"USDC\"\n      ]\n    },\n    \"tokenAddresses\": {\n      \"title\": \"Token addresses\",\n      \"type\": \"string\",\n      \"description\": \"One or more token contract addresses or DexScreener token URLs, separated by commas or new lines. (mode=byToken, orders)\",\n      \"editor\": \"textarea\"\n    },\n    \"pairAddresses\": {\n      \"title\": \"Pair addresses or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Pair URLs, chain:pairAddress, or bare pair addresses. Bare addresses need a specific chain. (mode=byPair)\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"chainId\": {\n      \"title\": \"Chain\",\n      \"type\": \"string\",\n      \"description\": \"Blockchain to read. Required for byToken when not 'all', for bare pair addresses, and for orders. Also filters search and promotion feeds locally.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"abstract\",\n        \"algorand\",\n        \"aptos\",\n        \"arbitrum\",\n        \"arc\",\n        \"avalanche\",\n        \"base\",\n        \"beam\",\n        \"berachain\",\n        \"blast\",\n        \"bsc\",\n        \"celo\",\n        \"conflux\",\n        \"cronos\",\n        \"ethereum\",\n        \"fantom\",\n        \"fuse\",\n        \"flare\",\n        \"flowevm\",\n        \"harmony\",\n        \"heco\",\n        \"hedera\",\n        \"hyperevm\",\n        \"hyperliquid\",\n        \"ink\",\n        \"injective\",\n        \"kava\",\n        \"klaytn\",\n        \"linea\",\n        \"manta\",\n        \"mantle\",\n        \"metis\",\n        \"monad\",\n        \"moonbeam\",\n        \"moonriver\",\n        \"gnosis\",\n        \"movement\",\n        \"multiversx\",\n        \"near\",\n        \"okex\",\n        \"optimism\",\n        \"cro\",\n        \"plasma\",\n        \"polygon\",\n        \"pulsechain\",\n        \"robinhood\",\n        \"scroll\",\n        \"seiv2\",\n        \"solana\",\n        \"soneium\",\n        \"sonic\",\n        \"stacks\",\n        \"starknet\",\n        \"sui\",\n        \"telos\",\n        \"ton\",\n        \"tron\",\n        \"unichain\",\n        \"worldchain\",\n        \"xrpl\",\n        \"zksync\"\n      ],\n      \"enumTitles\": [\n        \"All chains\",\n        \"Abstract\",\n        \"Algorand\",\n        \"Aptos\",\n        \"Arbitrum\",\n        \"Arc\",\n        \"Avalanche\",\n        \"Base\",\n        \"Beam\",\n        \"Berachain\",\n        \"Blast\",\n        \"BNB Smart Chain (BSC)\",\n        \"Celo\",\n        \"Conflux\",\n        \"Cronos\",\n        \"Ethereum\",\n        \"Fantom\",\n        \"Fuse\",\n        \"Flare\",\n        \"Flow EVM\",\n        \"Harmony\",\n        \"HECO\",\n        \"Hedera\",\n        \"HyperEVM\",\n        \"Hyperliquid\",\n        \"Ink\",\n        \"Injective\",\n        \"Kava\",\n        \"Klaytn\",\n        \"Linea\",\n        \"Manta\",\n        \"Mantle\",\n        \"Metis\",\n        \"Monad\",\n        \"Moonbeam\",\n        \"Moonriver\",\n        \"Gnosis\",\n        \"Movement\",\n        \"MultiversX\",\n        \"NEAR\",\n        \"OKEx Chain\",\n        \"Optimism\",\n        \"Crypto.com Chain\",\n        \"Plasma\",\n        \"Polygon\",\n        \"PulseChain\",\n        \"Robinhood\",\n        \"Scroll\",\n        \"Sei V2\",\n        \"Solana\",\n        \"Soneium\",\n        \"Sonic\",\n        \"Stacks\",\n        \"Starknet\",\n        \"Sui\",\n        \"Telos\",\n        \"TON\",\n        \"Tron\",\n        \"Unichain\",\n        \"World Chain\",\n        \"XRP Ledger\",\n        \"zkSync\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"customChainId\": {\n      \"title\": \"Custom chain id\",\n      \"type\": \"string\",\n      \"description\": \"Optional override for a chain added after this release, e.g. 'newchain'. When set it replaces Chain.\",\n      \"editor\": \"textfield\"\n    },\n    \"feed\": {\n      \"title\": \"Promotion feed\",\n      \"type\": \"string\",\n      \"description\": \"Which live promotion feed to read. (mode=discovery)\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"boostedTop\",\n        \"boostedLatest\",\n        \"profilesLatest\",\n        \"profilesUpdated\",\n        \"takeovers\",\n        \"ads\"\n      ],\n      \"enumTitles\": [\n        \"Most-boosted tokens\",\n        \"Newest boosts\",\n        \"Newest token profiles\",\n        \"Recently updated profiles\",\n        \"Community takeovers\",\n        \"Paid ads\"\n      ],\n      \"default\": \"boostedTop\",\n      \"prefill\": \"boostedTop\"\n    },\n    \"metaSlugs\": {\n      \"title\": \"Narrative slugs\",\n      \"type\": \"array\",\n      \"description\": \"Narrative slugs such as ai, dog, cat, or x402. Run mode=metas to discover live slugs. (mode=metaPairs)\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"allPools\": {\n      \"title\": \"All pools per token\",\n      \"type\": \"boolean\",\n      \"description\": \"When on, byToken returns every pool of each token on the chain. When off, it returns the best pair per token.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minLiquidityUsd\": {\n      \"title\": \"Min liquidity (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with liquidity below this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000\n    },\n    \"maxLiquidityUsd\": {\n      \"title\": \"Max liquidity (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with liquidity above this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000\n    },\n    \"minVolume24hUsd\": {\n      \"title\": \"Min 24h volume (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with 24-hour volume below this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000\n    },\n    \"maxVolume24hUsd\": {\n      \"title\": \"Max 24h volume (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with 24-hour volume above this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000\n    },\n    \"minMarketCapUsd\": {\n      \"title\": \"Min market cap (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs below this market cap. Uses FDV when market cap is missing.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000000\n    },\n    \"maxMarketCapUsd\": {\n      \"title\": \"Max market cap (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs above this market cap. Uses FDV when market cap is missing.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000000\n    },\n    \"minFdvUsd\": {\n      \"title\": \"Min FDV (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with a fully diluted valuation below this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000000\n    },\n    \"maxFdvUsd\": {\n      \"title\": \"Max FDV (USD)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs with a fully diluted valuation above this USD value.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000000000\n    },\n    \"minTxns24h\": {\n      \"title\": \"Min 24h transactions\",\n      \"type\": \"integer\",\n      \"description\": \"Skip pairs with fewer buys plus sells in the last 24 hours.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"maxTxns24h\": {\n      \"title\": \"Max 24h transactions\",\n      \"type\": \"integer\",\n      \"description\": \"Skip pairs with more buys plus sells in the last 24 hours.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000\n    },\n    \"minPriceChange24h\": {\n      \"title\": \"Min 24h change (%)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs whose 24-hour price change is below this percent. Negative values allowed.\",\n      \"minimum\": -100,\n      \"maximum\": 100000\n    },\n    \"maxPriceChange24h\": {\n      \"title\": \"Max 24h change (%)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs whose 24-hour price change is above this percent. Negative values allowed.\",\n      \"minimum\": -100,\n      \"maximum\": 100000\n    },\n    \"minAgeHours\": {\n      \"title\": \"Min pair age (hours)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs younger than this many hours.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"maxAgeHours\": {\n      \"title\": \"Max pair age (hours)\",\n      \"type\": \"number\",\n      \"description\": \"Skip pairs older than this many hours. Use 24 to keep pairs launched today.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"dexIds\": {\n      \"title\": \"DEX filter\",\n      \"type\": \"array\",\n      \"description\": \"Keep only these DEX protocols, e.g. uniswap, raydium, aerodrome. Empty means all.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"quoteSymbols\": {\n      \"title\": \"Quote symbols\",\n      \"type\": \"array\",\n      \"description\": \"Keep only pairs quoted in these assets, e.g. USDC, SOL, WETH. Empty means all.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Sort results within each query, token, or feed. Missing values are always last.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"none\",\n        \"liquidity\",\n        \"volume24h\",\n        \"volume1h\",\n        \"volume6h\",\n        \"marketCap\",\n        \"fdv\",\n        \"priceChange5m\",\n        \"priceChange1h\",\n        \"priceChange6h\",\n        \"priceChange24h\",\n        \"txns24h\",\n        \"buys24h\",\n        \"sells24h\",\n        \"buySellRatio24h\",\n        \"pairAge\",\n        \"boosts\"\n      ],\n      \"enumTitles\": [\n        \"Source order\",\n        \"Liquidity\",\n        \"24h volume\",\n        \"1h volume\",\n        \"6h volume\",\n        \"Market cap\",\n        \"FDV\",\n        \"5m price change\",\n        \"1h price change\",\n        \"6h price change\",\n        \"24h price change\",\n        \"24h transactions\",\n        \"24h buys\",\n        \"24h sells\",\n        \"24h buy/sell ratio\",\n        \"Pair age\",\n        \"Active boosts\"\n      ],\n      \"default\": \"none\",\n      \"prefill\": \"none\"\n    },\n    \"sortOrder\": {\n      \"title\": \"Sort order\",\n      \"type\": \"string\",\n      \"description\": \"Largest/oldest first or smallest/newest first. Pair age ascending means newest first.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"desc\",\n        \"asc\"\n      ],\n      \"enumTitles\": [\n        \"Descending\",\n        \"Ascending\"\n      ],\n      \"default\": \"desc\",\n      \"prefill\": \"desc\"\n    },\n    \"onePairPerToken\": {\n      \"title\": \"One pair per token\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only the most liquid pair for each token.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeInfo\": {\n      \"title\": \"Include token info\",\n      \"type\": \"boolean\",\n      \"description\": \"Add logo, header image, website and social links when DexScreener has them.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeMarketData\": {\n      \"title\": \"Include market data\",\n      \"type\": \"boolean\",\n      \"description\": \"For promotion feeds, attach price, liquidity, volume, market cap and age of each token's best pair.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"expandChainSearch\": {\n      \"title\": \"Widen search by chain\",\n      \"type\": \"boolean\",\n      \"description\": \"When a chain is selected, also search quote variants and pull the token pools to get past the 30-pair search cap.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"chainSearchTokens\": {\n      \"title\": \"Tokens to widen\",\n      \"type\": \"integer\",\n      \"description\": \"How many matching tokens get their pools fetched when widening a chain search. 0 = quote variants only.\",\n      \"minimum\": 0,\n      \"maximum\": 30,\n      \"default\": 10,\n      \"prefill\": 10\n    },\n    \"includeFlags\": {\n      \"title\": \"Include risk flags\",\n      \"type\": \"boolean\",\n      \"description\": \"Add heuristic flags such as low liquidity, new pair, sell pressure, or no socials.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"newPairHours\": {\n      \"title\": \"New pair threshold\",\n      \"type\": \"integer\",\n      \"description\": \"Pairs younger than this many hours get a new_pair flag.\",\n      \"minimum\": 1,\n      \"maximum\": 720,\n      \"default\": 24,\n      \"prefill\": 24\n    },\n    \"maxItemsPerQuery\": {\n      \"title\": \"Max per query\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum records from each query, token, or feed. DexScreener caps search at 30.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 30,\n      \"prefill\": 30\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on records for the whole run.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 100,\n      \"prefill\": 1\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# DexScreener Token Pair & Boosted Token Scraper\n\nDexScreener is the market screen for on-chain trading: live pairs across DEXs and dozens of chains, plus the paid boosts, profiles, takeovers, ads and narratives that drive attention. This actor reads DexScreener's official public API and returns clean, analysis-ready records for token research, pair monitoring and promotion tracking. No wallet, API key, cookie or proxy is needed.\n\n## What this actor does\n\n- **Search** tokens and pairs by name, symbol, pair text such as `SOL/USDC`, contract address, or a pasted DexScreener URL.\n- **Inspect a token**: best pair per token on one chain, or every pool of the token.\n- **Monitor pairs** by address or URL, many at a time.\n- **Pull six promotion feeds**: most-boosted tokens, newest boosts, newest profiles, recently updated profiles, community takeovers and paid ads.\n- **Follow narratives**: trending metas, then the pairs inside each meta.\n- **Check paid orders**: profile, ad and takeover orders plus boost purchases for a token.\n- **Filter and sort** by liquidity, 24h volume, market cap, FDV, transactions, 24h price change, pair age, DEX and quote symbol.\n- **Token info and risk flags**: logo, header, website and social links when available; heuristic flags such as low liquidity, new pair, sell pressure or no socials.\n\n## Output per record type\n\nEmpty fields are omitted. Every record has `recordType`, `siteName` and `scrapedAt`.\n\n### Pair (`pair`)\n\n- `chainId`, `dexId`, `pairAddress`, `pairUrl`\n- `id` - `chain:pairAddress`\n- `tokenAddress`, `tokenName`, `tokenSymbol`, `quoteTokenAddress`, `quoteTokenSymbol`\n- `baseToken`, `quoteToken` - `{address, name, symbol}`\n- `priceNative`, `priceUsd`\n- `liquidity` - `{usd, base, quote}`\n- `fdv`, `marketCap`\n- `volume` - `{h24, h6, h1, m5}`\n- `priceChange` - `{h24, h6, h1, m5}`\n- `txns` - buy/sell counts for the same windows\n- `pairCreatedAt`, `ageHours`\n- `labels`, `boosts`\n- `buySellRatio24h`, `volumeToLiquidity24h`\n- `info` - `{imageUrl, header, openGraph, websites[], socials[]}`\n- `flags[]` - `low_liquidity`, `no_liquidity_data`, `suspicious_liquidity`, `new_pair_<N>h`, `sell_pressure`, `no_sells_24h`, `extreme_price_move_24h`, `volume_over_10x_liquidity`, `no_profile`, `no_socials`\n- `query`, `rank`, `metaSlug`, `metaName` when relevant\n- `querySide`, `tokenPriceUsd` for token lookups where the token is the quote side\n\n### Boosted token (`boostedToken`) and token profile (`tokenProfile`)\n\n- `chainId`, `tokenAddress`, `tokenUrl`, `pairUrl`\n- `icon`, `header`, `openGraph`, `description`, `links[]`\n- `boostAmount`, `boostTotalAmount` (boosts)\n- `cto` (profiles), `updatedAt` (recently updated profiles)\n- `rank`, `listType`\n- Market data when enabled: `symbol`, `name`, `priceUsd`, `quoteSymbol`, `dexId`, `liquidityUsd`, `fdv`, `marketCap`, `volume24h`, `priceChange1h`, `priceChange24h`, `pairCreatedAt`, `ageHours`, `pairsFound`, `topPairAddress`, `topPairUrl`\n\n### Community takeover (`communityTakeover`) and ad (`ad`)\n\n- Takeover: `chainId`, `tokenAddress`, `tokenUrl`, `pairUrl`, `icon`, `header`, `openGraph`, `description`, `links[]`, market data, plus `claimDate`.\n- Ad: `tokenAddress`, `tokenUrl`, `adDate`, `adType`, `adImpressions`, optional `adDurationHours`, plus market data.\n\n### Narrative (`meta`)\n\n- `slug`, `name`, `description`, `icon`, `iconType`\n- `marketCap`, `liquidity`, `volume`, `tokenCount`\n- `marketCapChange`, `marketCapDelta` for `m5`, `h1`, `h6`, `h24`\n- `rank`\n\n### Paid orders (`orders`)\n\n- `chainId`, `tokenAddress`\n- `ordersCount`, `approvedCount`, `hasApprovedProfile`, `hasPaidAds`, `lastPaymentAt`\n- `orders[]` - `{type, status, paymentTimestamp}`\n- `boosts[]` - `{id, amount, paymentTimestamp}`\n- `totalBoostAmount`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byToken`, `byPair`, `discovery`, `metas`, `metaPairs`, `orders` |\n| `queries` | array | – | Names, symbols, `SOL/USDC`, addresses or DexScreener URLs (mode=search) |\n| `tokenAddresses` | string | - | Token addresses or URLs, comma/newline separated (mode=byToken, orders) |\n| `pairAddresses` | array | - | Pair URLs, `chain:pairAddress`, or bare pair addresses (mode=byPair) |\n| `chainId` | string | `all` | Chain scope; required for byToken (unless `all`), bare pairs, and orders |\n| `customChainId` | string | - | Override for a chain added after this release |\n| `feed` | string | `boostedTop` | `boostedTop`, `boostedLatest`, `profilesLatest`, `profilesUpdated`, `takeovers`, `ads` |\n| `metaSlugs` | array | - | Narrative slugs such as `ai`, `dog`, `cat` (mode=metaPairs) |\n| `allPools` | boolean | `false` | byToken: every pool of the token instead of the best pair |\n| `minLiquidityUsd` / `maxLiquidityUsd` | number | - | Keep pairs inside this liquidity range |\n| `minVolume24hUsd` / `maxVolume24hUsd` | number | - | Keep pairs inside this 24h volume range |\n| `minMarketCapUsd` / `maxMarketCapUsd` | number | - | Uses market cap, or FDV when market cap is missing |\n| `minFdvUsd` / `maxFdvUsd` | number | - | Keep pairs inside this FDV range |\n| `minTxns24h` / `maxTxns24h` | integer | - | Buys plus sells in the last 24 hours |\n| `minPriceChange24h` / `maxPriceChange24h` | number | - | 24h price change in percent; negatives allowed |\n| `minAgeHours` / `maxAgeHours` | number | - | Pair age in hours |\n| `dexIds` | array | - | Keep only these DEX protocols |\n| `quoteSymbols` | array | - | Keep only these quote assets |\n| `sortBy` | string | `none` | Sort by liquidity, volume, market cap, FDV, change, transactions, age or boosts |\n| `sortOrder` | string | `desc` | `desc` or `asc`; age ascending means newest first |\n| `onePairPerToken` | boolean | `false` | Keep the most liquid pair per token |\n| `includeInfo` | boolean | `true` | Add logo, header, websites and socials |\n| `includeMarketData` | boolean | `true` | Attach best-pair market data to promotion feeds |\n| `expandChainSearch` | boolean | `true` | Widen a chain-filtered search past the 30-pair cap |\n| `chainSearchTokens` | integer | `10` | Matching tokens whose pools are fetched when widening |\n| `includeFlags` | boolean | `true` | Add heuristic risk flags |\n| `newPairHours` | integer | `24` | Threshold for the new-pair flag |\n| `maxItemsPerQuery` | integer | `30` | Cap per query, token, feed or meta |\n| `maxItems` | integer | `100` | Cap for the whole run |\n\n### Example: search across all chains\n\n```json\n{\n  \"mode\": \"search\",\n  \"queries\": [\"PEPE\", \"WIF\", \"AERO\"],\n  \"sortBy\": \"volume24h\",\n  \"maxItems\": 50\n}\n```\n\nOlder saved tasks that use `query`, `pairAddress`, `minVolumeH24`, or the previous mode names (`byTokenAddress`, `byPairAddress`, `trending`, `byProfile`) keep working.\n\n### Example: every pool of a token on Solana\n\n```json\n{\n  \"mode\": \"byToken\",\n  \"chainId\": \"solana\",\n  \"tokenAddresses\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"allPools\": true,\n  \"minLiquidityUsd\": 10000,\n  \"maxItems\": 30\n}\n```\n\n### Example: newest boosted tokens with market data\n\n```json\n{\n  \"mode\": \"discovery\",\n  \"feed\": \"boostedLatest\",\n  \"includeMarketData\": true,\n  \"minLiquidityUsd\": 5000,\n  \"maxItems\": 30\n}\n```\n\n### Example: paid orders for a token\n\n```json\n{\n  \"mode\": \"orders\",\n  \"chainId\": \"solana\",\n  \"tokenAddresses\": \"So11111111111111111111111111111111111111112\",\n  \"maxItems\": 1\n}\n```\n\n## Use cases\n\n- **Token screening** - rank pairs by liquidity, volume, age or price change before deeper research.\n- **Liquidity mapping** - pull every pool of a token to see where it actually trades.\n- **Launch monitoring** - watch newest profiles, boosts, takeovers and ads for emerging projects.\n- **Narrative research** - follow trending metas and compare the pairs inside them.\n- **Promotion due diligence** - check whether a token paid for profiles, ads or boosts.\n- **Scheduled snapshots** - keep a time series of prices, liquidity and volume for a watchlist.\n\n## FAQ\n\n### Is this affiliated with DexScreener?\n\nNo. This is an independent actor that reads DexScreener's public API. Data belongs to DexScreener.\n\n### Do I need a wallet, API key or proxy?\n\nNo. Every mode works without an account, key or proxy.\n\n### Why did I get fewer records than `maxItems`?\n\nDexScreener caps a search at 30 pairs per query and has no pagination. Pools per token are capped at 30. The promotion feeds return at most 30 rows for boosts, profiles and ads, 11 for takeovers, 18 trending narratives and 49 pairs per narrative feed. Repeated boosts or ads for the same token are collapsed into one record. Use multiple queries, `byToken` with `allPools`, or several chains to widen coverage.\n\n### How do I get every pool of a token?\n\nUse `byToken` with a specific chain and `allPools: true`. A search is capped at 30 pairs across all chains; pool lookup is scoped to the token and chain.\n\n### Are the filters applied by DexScreener?\n\nNo. The public API has no filter parameters, so filters and sorting run in the actor after the fetch. That also means a filter cannot recover rows beyond the source cap.\n\n### Why are `info` or some flags missing from a pair?\n\nToken images, websites and socials are optional on DexScreener, and some market fields do not exist for brand-new pairs. Missing values are omitted, not sent as null. Flags are heuristics for triage, not verdicts.\n\n### What is the difference between the boost and profile feeds?\n\n`boostedTop` and `boostedLatest` return tokens with paid boosts (ranked or newest). `profilesLatest` and `profilesUpdated` return token profile submissions, and `takeovers` returns community takeover events.\n\n### Does this actor include OHLC candles, holders or top traders?\n\nNo. Those are not part of DexScreener's official public API. This actor covers pairs, pools, promotion feeds, narratives and paid orders.\n\n### How fresh is the data?\n\nEvery run reads DexScreener live, so prices, liquidity, volume and promotions reflect the market at run time.\n\n### Is this financial advice?\n\nNo. It is market data for research and monitoring; verify token contracts independently.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "dexscreener-token-pair-and-boosted-token-scraper",
      "title": "DexScreener Token Pair & Boosted Token Scraper",
      "description": "Search DexScreener pairs, inspect every pool of a token, monitor pairs, or collect boosts, profiles, takeovers, ads, narratives and paid orders across 50+ chains. Price, liquidity, volume, transactions, socials and risk flags.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# DexScreener Token Pair & Boosted Token Scraper\n\nDexScreener is the market screen for on-chain trading: live pairs across DEXs and dozens of chains, plus the paid boosts, profiles, takeovers, ads and narratives that drive attention. This actor reads DexScreener's official public API and returns clean, analysis-ready records for token research, pair monitoring and promotion tracking. No wallet, API key, cookie or proxy is needed.\n\n## What this actor does\n\n- **Search** tokens and pairs by name, symbol, pair text such as `SOL/USDC`, contract address, or a pasted DexScreener URL.\n- **Inspect a token**: best pair per token on one chain, or every pool of the token.\n- **Monitor pairs** by address or URL, many at a time.\n- **Pull six promotion feeds**: most-boosted tokens, newest boosts, newest profiles, recently updated profiles, community takeovers and paid ads.\n- **Follow narratives**: trending metas, then the pairs inside each meta.\n- **Check paid orders**: profile, ad and takeover orders plus boost purchases for a token.\n- **Filter and sort** by liquidity, 24h volume, market cap, FDV, transactions, 24h price change, pair age, DEX and quote symbol.\n- **Token info and risk flags**: logo, header, website and social links when available; heuristic flags such as low liquidity, new pair, sell pressure or no socials.\n\n## Output per record type\n\nEmpty fields are omitted. Every record has `recordType`, `siteName` and `scrapedAt`.\n\n### Pair (`pair`)\n\n- `chainId`, `dexId`, `pairAddress`, `pairUrl`\n- `id` - `chain:pairAddress`\n- `tokenAddress`, `tokenName`, `tokenSymbol`, `quoteTokenAddress`, `quoteTokenSymbol`\n- `baseToken`, `quoteToken` - `{address, name, symbol}`\n- `priceNative`, `priceUsd`\n- `liquidity` - `{usd, base, quote}`\n- `fdv`, `marketCap`\n- `volume` - `{h24, h6, h1, m5}`\n- `priceChange` - `{h24, h6, h1, m5}`\n- `txns` - buy/sell counts for the same windows\n- `pairCreatedAt`, `ageHours`\n- `labels`, `boosts`\n- `buySellRatio24h`, `volumeToLiquidity24h`\n- `info` - `{imageUrl, header, openGraph, websites[], socials[]}`\n- `flags[]` - `low_liquidity`, `no_liquidity_data`, `suspicious_liquidity`, `new_pair_<N>h`, `sell_pressure`, `no_sells_24h`, `extreme_price_move_24h`, `volume_over_10x_liquidity`, `no_profile`, `no_socials`\n- `query`, `rank`, `metaSlug`, `metaName` when relevant\n- `querySide`, `tokenPriceUsd` for token lookups where the token is the quote side\n\n### Boosted token (`boostedToken`) and token profile (`tokenProfile`)\n\n- `chainId`, `tokenAddress`, `tokenUrl`, `pairUrl`\n- `icon`, `header`, `openGraph`, `description`, `links[]`\n- `boostAmount`, `boostTotalAmount` (boosts)\n- `cto` (profiles), `updatedAt` (recently updated profiles)\n- `rank`, `listType`\n- Market data when enabled: `symbol`, `name`, `priceUsd`, `quoteSymbol`, `dexId`, `liquidityUsd`, `fdv`, `marketCap`, `volume24h`, `priceChange1h`, `priceChange24h`, `pairCreatedAt`, `ageHours`, `pairsFound`, `topPairAddress`, `topPairUrl`\n\n### Community takeover (`communityTakeover`) and ad (`ad`)\n\n- Takeover: `chainId`, `tokenAddress`, `tokenUrl`, `pairUrl`, `icon`, `header`, `openGraph`, `description`, `links[]`, market data, plus `claimDate`.\n- Ad: `tokenAddress`, `tokenUrl`, `adDate`, `adType`, `adImpressions`, optional `adDurationHours`, plus market data.\n\n### Narrative (`meta`)\n\n- `slug`, `name`, `description`, `icon`, `iconType`\n- `marketCap`, `liquidity`, `volume`, `tokenCount`\n- `marketCapChange`, `marketCapDelta` for `m5`, `h1`, `h6`, `h24`\n- `rank`\n\n### Paid orders (`orders`)\n\n- `chainId`, `tokenAddress`\n- `ordersCount`, `approvedCount`, `hasApprovedProfile`, `hasPaidAds`, `lastPaymentAt`\n- `orders[]` - `{type, status, paymentTimestamp}`\n- `boosts[]` - `{id, amount, paymentTimestamp}`\n- `totalBoostAmount`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byToken`, `byPair`, `discovery`, `metas`, `metaPairs`, `orders` |\n| `queries` | array | – | Names, symbols, `SOL/USDC`, addresses or DexScreener URLs (mode=search) |\n| `tokenAddresses` | string | - | Token addresses or URLs, comma/newline separated (mode=byToken, orders) |\n| `pairAddresses` | array | - | Pair URLs, `chain:pairAddress`, or bare pair addresses (mode=byPair) |\n| `chainId` | string | `all` | Chain scope; required for byToken (unless `all`), bare pairs, and orders |\n| `customChainId` | string | - | Override for a chain added after this release |\n| `feed` | string | `boostedTop` | `boostedTop`, `boostedLatest`, `profilesLatest`, `profilesUpdated`, `takeovers`, `ads` |\n| `metaSlugs` | array | - | Narrative slugs such as `ai`, `dog`, `cat` (mode=metaPairs) |\n| `allPools` | boolean | `false` | byToken: every pool of the token instead of the best pair |\n| `minLiquidityUsd` / `maxLiquidityUsd` | number | - | Keep pairs inside this liquidity range |\n| `minVolume24hUsd` / `maxVolume24hUsd` | number | - | Keep pairs inside this 24h volume range |\n| `minMarketCapUsd` / `maxMarketCapUsd` | number | - | Uses market cap, or FDV when market cap is missing |\n| `minFdvUsd` / `maxFdvUsd` | number | - | Keep pairs inside this FDV range |\n| `minTxns24h` / `maxTxns24h` | integer | - | Buys plus sells in the last 24 hours |\n| `minPriceChange24h` / `maxPriceChange24h` | number | - | 24h price change in percent; negatives allowed |\n| `minAgeHours` / `maxAgeHours` | number | - | Pair age in hours |\n| `dexIds` | array | - | Keep only these DEX protocols |\n| `quoteSymbols` | array | - | Keep only these quote assets |\n| `sortBy` | string | `none` | Sort by liquidity, volume, market cap, FDV, change, transactions, age or boosts |\n| `sortOrder` | string | `desc` | `desc` or `asc`; age ascending means newest first |\n| `onePairPerToken` | boolean | `false` | Keep the most liquid pair per token |\n| `includeInfo` | boolean | `true` | Add logo, header, websites and socials |\n| `includeMarketData` | boolean | `true` | Attach best-pair market data to promotion feeds |\n| `expandChainSearch` | boolean | `true` | Widen a chain-filtered search past the 30-pair cap |\n| `chainSearchTokens` | integer | `10` | Matching tokens whose pools are fetched when widening |\n| `includeFlags` | boolean | `true` | Add heuristic risk flags |\n| `newPairHours` | integer | `24` | Threshold for the new-pair flag |\n| `maxItemsPerQuery` | integer | `30` | Cap per query, token, feed or meta |\n| `maxItems` | integer | `100` | Cap for the whole run |\n\n### Example: search across all chains\n\n```json\n{\n  \"mode\": \"search\",\n  \"queries\": [\"PEPE\", \"WIF\", \"AERO\"],\n  \"sortBy\": \"volume24h\",\n  \"maxItems\": 50\n}\n```\n\nOlder saved tasks that use `query`, `pairAddress`, `minVolumeH24`, or the previous mode names (`byTokenAddress`, `byPairAddress`, `trending`, `byProfile`) keep working.\n\n### Example: every pool of a token on Solana\n\n```json\n{\n  \"mode\": \"byToken\",\n  \"chainId\": \"solana\",\n  \"tokenAddresses\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"allPools\": true,\n  \"minLiquidityUsd\": 10000,\n  \"maxItems\": 30\n}\n```\n\n### Example: newest boosted tokens with market data\n\n```json\n{\n  \"mode\": \"discovery\",\n  \"feed\": \"boostedLatest\",\n  \"includeMarketData\": true,\n  \"minLiquidityUsd\": 5000,\n  \"maxItems\": 30\n}\n```\n\n### Example: paid orders for a token\n\n```json\n{\n  \"mode\": \"orders\",\n  \"chainId\": \"solana\",\n  \"tokenAddresses\": \"So11111111111111111111111111111111111111112\",\n  \"maxItems\": 1\n}\n```\n\n## Use cases\n\n- **Token screening** - rank pairs by liquidity, volume, age or price change before deeper research.\n- **Liquidity mapping** - pull every pool of a token to see where it actually trades.\n- **Launch monitoring** - watch newest profiles, boosts, takeovers and ads for emerging projects.\n- **Narrative research** - follow trending metas and compare the pairs inside them.\n- **Promotion due diligence** - check whether a token paid for profiles, ads or boosts.\n- **Scheduled snapshots** - keep a time series of prices, liquidity and volume for a watchlist.\n\n## FAQ\n\n### Is this affiliated with DexScreener?\n\nNo. This is an independent actor that reads DexScreener's public API. Data belongs to DexScreener.\n\n### Do I need a wallet, API key or proxy?\n\nNo. Every mode works without an account, key or proxy.\n\n### Why did I get fewer records than `maxItems`?\n\nDexScreener caps a search at 30 pairs per query and has no pagination. Pools per token are capped at 30. The promotion feeds return at most 30 rows for boosts, profiles and ads, 11 for takeovers, 18 trending narratives and 49 pairs per narrative feed. Repeated boosts or ads for the same token are collapsed into one record. Use multiple queries, `byToken` with `allPools`, or several chains to widen coverage.\n\n### How do I get every pool of a token?\n\nUse `byToken` with a specific chain and `allPools: true`. A search is capped at 30 pairs across all chains; pool lookup is scoped to the token and chain.\n\n### Are the filters applied by DexScreener?\n\nNo. The public API has no filter parameters, so filters and sorting run in the actor after the fetch. That also means a filter cannot recover rows beyond the source cap.\n\n### Why are `info` or some flags missing from a pair?\n\nToken images, websites and socials are optional on DexScreener, and some market fields do not exist for brand-new pairs. Missing values are omitted, not sent as null. Flags are heuristics for triage, not verdicts.\n\n### What is the difference between the boost and profile feeds?\n\n`boostedTop` and `boostedLatest` return tokens with paid boosts (ranked or newest). `profilesLatest` and `profilesUpdated` return token profile submissions, and `takeovers` returns community takeover events.\n\n### Does this actor include OHLC candles, holders or top traders?\n\nNo. Those are not part of DexScreener's official public API. This actor covers pairs, pools, promotion feeds, narratives and paid orders.\n\n### How fresh is the data?\n\nEvery run reads DexScreener live, so prices, liquidity, volume and promotions reflect the market at run time.\n\n### Is this financial advice?\n\nNo. It is market data for research and monitoring; verify token contracts independently.\n",
      "input": {
        "title": "DexScreener Scraper Input",
        "description": "Search tokens and pairs, inspect every pool of a token, monitor pairs, or pull promotion feeds, narratives and paid orders from DexScreener's public API.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to collect. Each mode uses its own fields below.",
            "editor": "select",
            "enum": [
              "search",
              "byToken",
              "byPair",
              "discovery",
              "metas",
              "metaPairs",
              "orders",
              "byTokenAddress",
              "byPairAddress",
              "trending",
              "byProfile"
            ],
            "enumTitles": [
              "Search tokens and pairs",
              "Token lookup (pools or best pair)",
              "Pair lookup by address or URL",
              "Promotion feeds (boosts, profiles, takeovers, ads)",
              "Trending narratives",
              "Pairs inside narratives",
              "Paid orders for tokens",
              "Token lookup (legacy)",
              "Pair lookup (legacy)",
              "Boosted tokens (legacy)",
              "Token profiles (legacy)"
            ],
            "default": "search",
            "prefill": "search"
          },
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Token names, symbols, pair text such as SOL/USDC, token addresses, or DexScreener URLs. Multiple queries fan out. (mode=search)",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": [
              "USDC"
            ]
          },
          "tokenAddresses": {
            "title": "Token addresses",
            "type": "string",
            "description": "One or more token contract addresses or DexScreener token URLs, separated by commas or new lines. (mode=byToken, orders)",
            "editor": "textarea"
          },
          "pairAddresses": {
            "title": "Pair addresses or URLs",
            "type": "array",
            "description": "Pair URLs, chain:pairAddress, or bare pair addresses. Bare addresses need a specific chain. (mode=byPair)",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "chainId": {
            "title": "Chain",
            "type": "string",
            "description": "Blockchain to read. Required for byToken when not 'all', for bare pair addresses, and for orders. Also filters search and promotion feeds locally.",
            "editor": "select",
            "enum": [
              "all",
              "abstract",
              "algorand",
              "aptos",
              "arbitrum",
              "arc",
              "avalanche",
              "base",
              "beam",
              "berachain",
              "blast",
              "bsc",
              "celo",
              "conflux",
              "cronos",
              "ethereum",
              "fantom",
              "fuse",
              "flare",
              "flowevm",
              "harmony",
              "heco",
              "hedera",
              "hyperevm",
              "hyperliquid",
              "ink",
              "injective",
              "kava",
              "klaytn",
              "linea",
              "manta",
              "mantle",
              "metis",
              "monad",
              "moonbeam",
              "moonriver",
              "gnosis",
              "movement",
              "multiversx",
              "near",
              "okex",
              "optimism",
              "cro",
              "plasma",
              "polygon",
              "pulsechain",
              "robinhood",
              "scroll",
              "seiv2",
              "solana",
              "soneium",
              "sonic",
              "stacks",
              "starknet",
              "sui",
              "telos",
              "ton",
              "tron",
              "unichain",
              "worldchain",
              "xrpl",
              "zksync"
            ],
            "enumTitles": [
              "All chains",
              "Abstract",
              "Algorand",
              "Aptos",
              "Arbitrum",
              "Arc",
              "Avalanche",
              "Base",
              "Beam",
              "Berachain",
              "Blast",
              "BNB Smart Chain (BSC)",
              "Celo",
              "Conflux",
              "Cronos",
              "Ethereum",
              "Fantom",
              "Fuse",
              "Flare",
              "Flow EVM",
              "Harmony",
              "HECO",
              "Hedera",
              "HyperEVM",
              "Hyperliquid",
              "Ink",
              "Injective",
              "Kava",
              "Klaytn",
              "Linea",
              "Manta",
              "Mantle",
              "Metis",
              "Monad",
              "Moonbeam",
              "Moonriver",
              "Gnosis",
              "Movement",
              "MultiversX",
              "NEAR",
              "OKEx Chain",
              "Optimism",
              "Crypto.com Chain",
              "Plasma",
              "Polygon",
              "PulseChain",
              "Robinhood",
              "Scroll",
              "Sei V2",
              "Solana",
              "Soneium",
              "Sonic",
              "Stacks",
              "Starknet",
              "Sui",
              "Telos",
              "TON",
              "Tron",
              "Unichain",
              "World Chain",
              "XRP Ledger",
              "zkSync"
            ],
            "default": "all",
            "prefill": "all"
          },
          "customChainId": {
            "title": "Custom chain id",
            "type": "string",
            "description": "Optional override for a chain added after this release, e.g. 'newchain'. When set it replaces Chain.",
            "editor": "textfield"
          },
          "feed": {
            "title": "Promotion feed",
            "type": "string",
            "description": "Which live promotion feed to read. (mode=discovery)",
            "editor": "select",
            "enum": [
              "boostedTop",
              "boostedLatest",
              "profilesLatest",
              "profilesUpdated",
              "takeovers",
              "ads"
            ],
            "enumTitles": [
              "Most-boosted tokens",
              "Newest boosts",
              "Newest token profiles",
              "Recently updated profiles",
              "Community takeovers",
              "Paid ads"
            ],
            "default": "boostedTop",
            "prefill": "boostedTop"
          },
          "metaSlugs": {
            "title": "Narrative slugs",
            "type": "array",
            "description": "Narrative slugs such as ai, dog, cat, or x402. Run mode=metas to discover live slugs. (mode=metaPairs)",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "allPools": {
            "title": "All pools per token",
            "type": "boolean",
            "description": "When on, byToken returns every pool of each token on the chain. When off, it returns the best pair per token.",
            "default": false,
            "prefill": false
          },
          "minLiquidityUsd": {
            "title": "Min liquidity (USD)",
            "type": "number",
            "description": "Skip pairs with liquidity below this USD value.",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "maxLiquidityUsd": {
            "title": "Max liquidity (USD)",
            "type": "number",
            "description": "Skip pairs with liquidity above this USD value.",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "minVolume24hUsd": {
            "title": "Min 24h volume (USD)",
            "type": "number",
            "description": "Skip pairs with 24-hour volume below this USD value.",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "maxVolume24hUsd": {
            "title": "Max 24h volume (USD)",
            "type": "number",
            "description": "Skip pairs with 24-hour volume above this USD value.",
            "minimum": 0,
            "maximum": 1000000000000
          },
          "minMarketCapUsd": {
            "title": "Min market cap (USD)",
            "type": "number",
            "description": "Skip pairs below this market cap. Uses FDV when market cap is missing.",
            "minimum": 0,
            "maximum": 1000000000000000
          },
          "maxMarketCapUsd": {
            "title": "Max market cap (USD)",
            "type": "number",
            "description": "Skip pairs above this market cap. Uses FDV when market cap is missing.",
            "minimum": 0,
            "maximum": 1000000000000000
          },
          "minFdvUsd": {
            "title": "Min FDV (USD)",
            "type": "number",
            "description": "Skip pairs with a fully diluted valuation below this USD value.",
            "minimum": 0,
            "maximum": 1000000000000000
          },
          "maxFdvUsd": {
            "title": "Max FDV (USD)",
            "type": "number",
            "description": "Skip pairs with a fully diluted valuation above this USD value.",
            "minimum": 0,
            "maximum": 1000000000000000
          },
          "minTxns24h": {
            "title": "Min 24h transactions",
            "type": "integer",
            "description": "Skip pairs with fewer buys plus sells in the last 24 hours.",
            "minimum": 0,
            "maximum": 1000000000
          },
          "maxTxns24h": {
            "title": "Max 24h transactions",
            "type": "integer",
            "description": "Skip pairs with more buys plus sells in the last 24 hours.",
            "minimum": 0,
            "maximum": 1000000000
          },
          "minPriceChange24h": {
            "title": "Min 24h change (%)",
            "type": "number",
            "description": "Skip pairs whose 24-hour price change is below this percent. Negative values allowed.",
            "minimum": -100,
            "maximum": 100000
          },
          "maxPriceChange24h": {
            "title": "Max 24h change (%)",
            "type": "number",
            "description": "Skip pairs whose 24-hour price change is above this percent. Negative values allowed.",
            "minimum": -100,
            "maximum": 100000
          },
          "minAgeHours": {
            "title": "Min pair age (hours)",
            "type": "number",
            "description": "Skip pairs younger than this many hours.",
            "minimum": 0,
            "maximum": 1000000
          },
          "maxAgeHours": {
            "title": "Max pair age (hours)",
            "type": "number",
            "description": "Skip pairs older than this many hours. Use 24 to keep pairs launched today.",
            "minimum": 0,
            "maximum": 1000000
          },
          "dexIds": {
            "title": "DEX filter",
            "type": "array",
            "description": "Keep only these DEX protocols, e.g. uniswap, raydium, aerodrome. Empty means all.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "quoteSymbols": {
            "title": "Quote symbols",
            "type": "array",
            "description": "Keep only pairs quoted in these assets, e.g. USDC, SOL, WETH. Empty means all.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Sort results within each query, token, or feed. Missing values are always last.",
            "editor": "select",
            "enum": [
              "none",
              "liquidity",
              "volume24h",
              "volume1h",
              "volume6h",
              "marketCap",
              "fdv",
              "priceChange5m",
              "priceChange1h",
              "priceChange6h",
              "priceChange24h",
              "txns24h",
              "buys24h",
              "sells24h",
              "buySellRatio24h",
              "pairAge",
              "boosts"
            ],
            "enumTitles": [
              "Source order",
              "Liquidity",
              "24h volume",
              "1h volume",
              "6h volume",
              "Market cap",
              "FDV",
              "5m price change",
              "1h price change",
              "6h price change",
              "24h price change",
              "24h transactions",
              "24h buys",
              "24h sells",
              "24h buy/sell ratio",
              "Pair age",
              "Active boosts"
            ],
            "default": "none",
            "prefill": "none"
          },
          "sortOrder": {
            "title": "Sort order",
            "type": "string",
            "description": "Largest/oldest first or smallest/newest first. Pair age ascending means newest first.",
            "editor": "select",
            "enum": [
              "desc",
              "asc"
            ],
            "enumTitles": [
              "Descending",
              "Ascending"
            ],
            "default": "desc",
            "prefill": "desc"
          },
          "onePairPerToken": {
            "title": "One pair per token",
            "type": "boolean",
            "description": "Keep only the most liquid pair for each token.",
            "default": false,
            "prefill": false
          },
          "includeInfo": {
            "title": "Include token info",
            "type": "boolean",
            "description": "Add logo, header image, website and social links when DexScreener has them.",
            "default": true,
            "prefill": true
          },
          "includeMarketData": {
            "title": "Include market data",
            "type": "boolean",
            "description": "For promotion feeds, attach price, liquidity, volume, market cap and age of each token's best pair.",
            "default": true,
            "prefill": true
          },
          "expandChainSearch": {
            "title": "Widen search by chain",
            "type": "boolean",
            "description": "When a chain is selected, also search quote variants and pull the token pools to get past the 30-pair search cap.",
            "default": true,
            "prefill": true
          },
          "chainSearchTokens": {
            "title": "Tokens to widen",
            "type": "integer",
            "description": "How many matching tokens get their pools fetched when widening a chain search. 0 = quote variants only.",
            "minimum": 0,
            "maximum": 30,
            "default": 10,
            "prefill": 10
          },
          "includeFlags": {
            "title": "Include risk flags",
            "type": "boolean",
            "description": "Add heuristic flags such as low liquidity, new pair, sell pressure, or no socials.",
            "default": true,
            "prefill": true
          },
          "newPairHours": {
            "title": "New pair threshold",
            "type": "integer",
            "description": "Pairs younger than this many hours get a new_pair flag.",
            "minimum": 1,
            "maximum": 720,
            "default": 24,
            "prefill": 24
          },
          "maxItemsPerQuery": {
            "title": "Max per query",
            "type": "integer",
            "description": "Maximum records from each query, token, or feed. DexScreener caps search at 30.",
            "minimum": 1,
            "maximum": 500,
            "default": 30,
            "prefill": 30
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on records for the whole run.",
            "minimum": 1,
            "maximum": 10000,
            "default": 100,
            "prefill": 1
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "DexScreener Token Pair & Boosted Token Scraper Output",
        "description": "DexScreener pair, pool, boosted-token, profile, takeover, ad, narrative and paid-order records with price, liquidity, volume, transaction counts, token info and risk flags.",
        "properties": {
          "records": {
            "type": "string",
            "title": "Records",
            "description": "Scraped DexScreener records",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Pairs",
              "transformation": {
                "fields": [
                  "chainId",
                  "dexId",
                  "pairAddress",
                  "tokenSymbol",
                  "quoteTokenSymbol",
                  "priceUsd",
                  "liquidity",
                  "volume",
                  "marketCap",
                  "info",
                  "flags",
                  "pairUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultMemoryMbytes": 1024
    },
    "buildNumber": "1.0.2",
    "imageDigest": "af892fcd1f27cfe53c6a39007249abc444f33ad072fee10e359fe4d7ea2bfee9",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.010597777777777777
    }
  }
}