Prowl ← Back to home
REPORTS

What to expect from a report run

Duration and cost per tier, the timeout-and-resume rules, how to cancel a run, and how billing settles.

A prowl_analyze run plans research, fans out across the 448-tool catalog, verifies the extracted claims, and writes a structured report. A basic run takes roughly 30-90 seconds; deep takes 3-5 minutes and max 5-10 minutes. The tool-execution DAG is zero-LLM-cost, so what you pay tracks provider usage under a fixed per-tier cap. On the web the run streams live and self-cancels after 30 minutes (offering a partial-data resume); over MCP you can either block on one call or start a session and poll it. You are never billed more than the hold placed at the start, and a conversational follow-up on the same session is free.

Pick a tier: duration, calls, and cost

The execution_mode argument sets how hard the run works. Higher tiers make more tool calls, run longer, verify claims more aggressively, and hold more budget. deep and max require an active subscription — a caller without one is automatically downgraded to basic and told so, so an unauthorized request never silently costs deep/max money.

ModeTool callsTypical durationNeeds a plan?Provider-cost cap
basic (default)20-100~30-90 secNo - free$2.50
deep40-3003-5 minSubscription$8.00
max60-4005-10 minSubscription$18.00

The cap column is the per-run provider-cost ceiling and the basis for the wallet hold. Reports are billed at a 1.5x markup over provider cost, so the maximum you can be charged for a completed run is $3.75 (basic) / $12 (deep) / $27 (max) — and in practice far less, because most runs finish well under the cap and the unused hold is refunded.

Watching a run: blocking vs. async poll

Blocking (prowl_analyze): one call runs the whole pipeline and returns the finished markdown report. To keep long connections alive through proxies, the server emits a progress + heartbeat event about every 15 seconds, and closes with a final line like:

Done | 63 tool calls | 214,880 tokens | 182.4s

Async (session tools): for deep/max runs where you'd rather not hold a connection open, call prowl_start_session. It returns immediately with status: "running". Then poll:

  • prowl_session_status transitions running → completed (or failed). While running it returns live progress and stats; when completed the full report is included in the response.
  • A failed status carries the error plus a hint to call prowl_get_error_feed for the failure detail.
  • Read the finished report any time later with prowl_get_session — it survives job expiry and server restarts because it is persisted to the session.

Timeouts: the 30-minute limit and resume

A web run is capped at 30 minutes (AGENT_RUN_TIMEOUT=1800 seconds). If it exceeds that, the run is stopped, whatever data was collected is flushed and saved, and the unfinished hold is fully refunded (no report was delivered). What you see next depends on how far the pipeline got:

  • Far enough to resume (the run reached the verified, executed, or reported phase): the error offers a Resume option and your collected data has been saved.
  • Too early to resume: you are asked to try again with a more specific query.

Resuming continues from the saved point instead of re-running the whole pipeline — and it re-bills only the delta. The settle uses a spend watermark, so the tool spend from the interrupted leg is accounted for exactly once and never double-charged when the resumed leg delivers the report.

Cancelling a run

On the web app, the Cancel button is a two-click confirm: the first click arms it and it disarms itself after a 3-second window if you don't click again. The second click sends the cancel. This prevents an accidental single click from throwing away a run in progress.

Once confirmed, the running task is cancelled, the session state is saved, and the status updates to "Query cancelled". The wallet hold is released exactly once — a settled flag plus the reservation's idempotency key guarantee the full-hold refund can't be applied twice, so a double-click or a second cancel can never produce a double refund. Any data gathered before the cancel is preserved.

What you pay: caps, the billed-under-hold rule, and free follow-ups

At the start of every run Prowl places a hold on your wallet equal to the tier's estimate. When the run ends, the hold is settled against the real cost: the unused remainder is refunded, and a completed report is billed at provider-cost ×1.5. The core guarantee is that you are billed no more than the hold — settlement only ever refunds. If actual cost somehow overshoots the reserved hold, the overshoot is absorbed as platform cost (logged), never charged to you. This clamp applies on all surfaces (blocking MCP, async sessions, web, and scheduled runs).

Follow-up questions are free. Sending another message on the same session_id — "summarise the pricing section", "explain the funnel finding" — is answered conversationally from the cached report with zero tool calls. A transient hold is placed and then released at 100%, so a follow-up can never accidentally trigger a full re-billed run.

When the server is busy: at most 5 reports run concurrently across all users. A 6th concurrent request is queued — you get a queue_wait status with your position — and if a slot doesn't free up within 300 seconds the run returns a "Server is busy" message and nothing is charged.

Frequently asked questions

How long does a report take?

It depends on the tier. A basic run is typically 30-90 seconds, deep is 3-5 minutes, and max is 5-10 minutes. Runs stream progress about every 15 seconds so you can see they are still working.

How much does one run cost?

Each tier has a provider-cost cap of $2.50 (basic), $8.00 (deep), or $18.00 (max). Reports bill at a 1.5x markup, so the most a completed run can cost is about $3.75, $12, or $27 respectively - usually much less, since the unused portion of the hold is refunded. basic needs no subscription; deep and max require an active plan, and an unauthorized request is auto-downgraded to basic with a notice.

What happens if a run takes too long?

Web runs stop automatically at 30 minutes. Your collected data is saved and the hold is fully refunded because no report was delivered. If the run got far enough (the verified, executed, or reported phase) you are offered a Resume that continues from the save point and re-bills only the additional cost, not the whole run again.

How do I cancel, and will I be charged?

Click Cancel twice within 3 seconds to confirm (the first click arms it and it disarms after 3 seconds). The run stops with a 'Query cancelled' status, saved data is kept, and the wallet hold is released once - it cannot be double-refunded. Because no report was produced, you are not charged for the cancelled run.

Should I use the blocking call or the async session tools?

Use prowl_analyze (blocking) for a quick basic run where waiting on one call is fine. For a long deep or max run, use prowl_start_session, then poll prowl_session_status until it reports completed (or failed), and read the finished report with prowl_get_session. The async path survives dropped connections and server restarts because the report is persisted to the session.

Related

  • Billing & Wallet Top-Ups→
  • Rate limits & error handling→
  • Scheduling & webhooks→
Start with $5 free credit →
Prowl
Getting started Docs Use cases Contact Privacy Terms
© 2026 Prowl. Market intelligence.