Costs and spending limits

Which calls cost money, how to quote one first, and how to cap what a call or a client can spend.

Embed
Preview of the card
<a href="https://seolyticize.com/docs/costs-and-spending-limits"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/f8743278-8ecb-4e36-a396-24fc0e69b950/social-card.svg?v=3e7ae33eec8b" alt="Costs and spending limits" width="600" height="315"></a>

Most tools read data Seolyticize already holds and cost nothing. Some buy fresh data from a vendor — live search results, keyword volumes, AI assistant answers — and those cost money. Every one of them can be quoted before it runs and capped while it runs.

Whose account pays

Seolyticize has no shared vendor account. Paid calls are made on the data-provider accounts your agency connects under Settings (DataForSEO for search and keyword data, and the AI assistants you add keys for), so a charge lands on your own bill with that vendor. get_vendor_connections says which are connected and whether each last checked out — a call whose vendor was never connected is refused with a sentence saying so.

Which calls cost money

Discovery tells you per tool:

  • permission: "spend:incur" — the call can buy data. Only manager and admin keys may make it. Examples: keyword_explorer, get_live_serps, serp_overview, run_ai_visibility_check.

  • spends: true — the call can cost money. This includes the spend:incur tools and a few readers that buy on a cache miss (get_domain_facts, for one).

Everything else is free. Data that was bought recently is answered from cache and costs nothing again, so the real charge is often lower than the quote.

Quote first: estimate_cost

estimate_cost is free. Give it a tool's name and the exact arguments you would call it with:

curl -X POST https://seolyticize.com/api/v1/tools/estimate_cost \
  -H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool":"keyword_explorer","arguments":{"clientId":"<clientId>","seed":"emergency dentist"}}'
{
  "data": {
    "tool": "keyword_explorer",
    "estimatedMaxMicros": 75000,
    "purchases": [ { "what": "…", "maxMicros": 75000 } ],
    "monthlyMicros": null,
    "notes": ["Purchases answered from cache cost nothing, so the real charge is often lower."]
  }
}

(The figures above are illustrative; the quote comes from the vendor's live pricing.)

Field

Meaning

estimatedMaxMicros

The most one call can cost, in micro-USD (1,000,000 = $1). A ceiling, never an average.

purchases

Each purchase the call can make, with its own ceiling.

monthlyMicros

For work that runs on a schedule, what a month costs at the current setting; otherwise null.

notes

Anything that changes how to read the quote.

Arguments the target tool would refuse are refused here too, so a quote is always for a call that could actually run. estimate_cost also quotes a rank tracker's scheduled captures: pass "tool": "rank_tracker" with clientId and trackerId, and read monthlyMicros.

Cap a call: maxCostMicros

Every tool that can spend takes an optional maxCostMicros, in micro-USD, up to 1,000,000,000 ($1,000). A purchase that would take the call past it is refused before anything is bought, with a 422 saying so.

  1. Quote

    Call estimate_cost with the arguments you intend to use.

  2. Agree

    Show estimatedMaxMicros to whoever is paying, or compare it to your own limit.

  3. Call with the quote as the cap

    Pass the quote as that call's maxCostMicros, so it cannot spend more than was agreed.

{ "clientId": "<clientId>", "seed": "emergency dentist", "maxCostMicros": 75000 }

This is what Seolyticize's own assistant workflows do before every paid call.

Cap a client: monthly budgets

A client can carry a monthly budget, set when the client is added in the app, or with create_client / update_client (monthlyBudgetUsd; null removes it). Each purchase claims its share of the budget before the call is made, so two calls arriving together cannot both slip under the limit, and a purchase that would breach it is refused. If the vendor call then fails, the claim is released: an outage never eats a client's budget.

See what was spent

Tool

Answers

get_costs

What the agency spent on data vendors per client over recent days (sinceDays, default 30), with request counts

get_client_costs

What one client's data cost, by operation

Both need the cost:view permission (manager and admin). Amounts are US dollars.

Updated