verticals

Build your first cross-chain token scan

Define criteria, run across whole chains, read universe stats and methodology hash

8-12 min · intermediate

What you'll have when finished

  • Define a multi-criteria scan with universe constraints
  • Pick a scoring method (weighted_average / minimum / all_or_nothing)
  • Read the universe stats and partial-run reasons
  • Save the methodology hash for reproducibility

Before you start

  • A high match score is a signal, not a recommendation. Past patterns do not guarantee future returns.
  • Tokens matching criteria may still be illiquid, scams, or rug pulls. Always cross-check with Whale Watcher and Token Safety Score.
  • Status = "partial" means we know the run was incomplete. Read partialReasons before acting.

Walkthrough

  1. Read the public ToS

    GET /api/scanner/policy — full methodology, supported criterion types with formulas, scope limits, partial-run thresholds.

  2. Open the scanner

    Discover → Token Scanner. Pick a template or click Create scan.

  3. Define your universe

    Pick chains, minimum liquidity ($10k+), age range, exclusion flags. The universe is bounded — disclosed in every result.

  4. Add criteria

    VOLUME_SPIKE / PRICE_CHANGE_PERCENT / LIQUIDITY_FLOOR / PRICE_BREAKOUT / AGE_RANGE. Max 6. AND logic — tokens must pass ALL criteria.

    Success criteria: Each criterion has a formula visible in the UI · Pending criteria return status:pending, never score:0 · Per-criterion score breakdown shows the math

  5. Pick scoring + run

    weighted_average is the default. Click Run now. The result shows top-50 matches + universe stats + partial reasons + sample non-matches.

  6. Save the methodology hash

    The SHA-256 hash on every run is deterministic. Save it with your decision record — anyone can reproduce by re-running the same definition.

What's next

Set frequency to hourly or every-15-min. The scheduled worker runs at the next tick boundary. New matches will appear in the run history; in-app alerts coming when alerts.enabled = true.