From zero to your first paid fetch

Get an agent reading, extracting, and crawling the web — paid per fetch in USDC — in a few commands. No signup, no dashboard, no API key: just a wallet.

Prerequisites

node --version # v20 or newer
export AGENTSCOUT_ENDPOINT=https://api.agentx402.ai # optional — this is already the default
export AGENTSCOUT_MAX_SPEND_USD=0.05 # optional — refuse any single fetch above this

Read, extract, crawl

AgentScout is wallet-native — no signup, no API key. Leave AGENTSCOUT_PRIVATE_KEY unset and it mints and manages a local wallet for you on first use; export your own key instead and it uses that. (An opt-in account-key mode — an ak_… bearer funded out-of-band via AgentKV — covers managed wallets that can't sign; see the CLI docs for that path.)

  1. Get a wallet.

    No wallet new command to run first — the CLI mints a local keypair on the first paid call and persists it (0600) under ~/.agentscout/wallet.json. quote is free and never spends, so it's a safe first command even before you're funded.

    npx @agentscout/cli quote https://example.com
    # → { "toll_price": 0, "total": 0, "would_pay": true, … } — free page, atomic USDC, no spend
    # A tolled page reads { "toll_price": 2000, "total": 2500, "would_pay": false } —
    # total adds the $0.0005 settle fee, and would_pay is true only when the page is free.
    # no AGENTSCOUT_PRIVATE_KEY set? Scout mints a local wallet on the first PAID call:
    # agentscout: created a new wallet 0x… (saved to ~/.agentscout/wallet.json). Fund it, then retry.

    Bring your own wallet instead? export AGENTSCOUT_PRIVATE_KEY=0x… and Scout uses it — no local key is minted.

  2. Fund it.

    Send USDC on Base to the printed address. Reads are $0.004, extracts $0.020, crawls $0.004 per page — quoted upfront as max_pages × price (up to 500 pages), with any unused budget refunded as credits when the crawl completes. No onramp helper ships in the CLI — send USDC to the address directly (e.g. awal send).

    awal send 5 0x… # or send USDC to the printed address any other way
  3. Read, extract, crawl.

    Same service from every surface — pick the one that fits your agent.

    Long crawl? crawl returns a jobId — poll it with agentscout crawl status <jobId>, then pull a page with agentscout crawl artifact <jobId> <key>.

    agentscout read https://example.com                           # → clean markdown, $0.004
    agentscout extract https://example.com --schema ./schema.json  # → schema-valid JSON, $0.020
    agentscout crawl https://example.com --max-pages 10            # → job manifest, 10 × $0.004

Before you ship

Pay on success

A read that fails or returns too little content settles nothing; an extraction that can't produce schema-valid JSON settles nothing. A crawl is the exception: it settles its whole max_pages budget at submit (a crawl can outrun the ~10-minute payment authorization), then refunds every unused page as credits when the job completes — only pages clearing the read predicate are billable, and any unused budget in max_pages is refunded as credits when the job completes.

Cap the spend

Set maxSpendUsd in the client (or AGENTSCOUT_MAX_SPEND_USD for the CLI and MCP) for a per-fetch ceiling, plus AGENTSCOUT_MAX_SESSION_SPEND_USD for a cumulative one — any op that would exceed either is refused before it's signed. Every paid verb is also flagged state-changing in the MCP server (never readOnlyHint), so MCP clients prompt before spending.

Name extract fields for what you want

In an extract schema, a field's name carries at least as much weight as its description. A field named domain returns github.com even when the page shows github.com/example-org and the description says "exactly as written" — the name promises a domain, so the model normalizes to one. Want the literal page text? Name the field for it (source_as_shown). Want the normalized form (price_usd, domain)? The name is doing that work for you.