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.
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. Onlymanagerandadminkeys may make it. Examples:keyword_explorer,get_live_serps,serp_overview,run_ai_visibility_check.spends: true— the call can cost money. This includes thespend:incurtools 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 |
|---|---|
| The most one call can cost, in micro-USD (1,000,000 = $1). A ceiling, never an average. |
| Each purchase the call can make, with its own ceiling. |
| For work that runs on a schedule, what a month costs at the current setting; otherwise |
| 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.
- Quote
Call
estimate_costwith the arguments you intend to use. - Agree
Show
estimatedMaxMicrosto whoever is paying, or compare it to your own limit. - 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 |
|---|---|
| What the agency spent on data vendors per client over recent days ( |
| What one client's data cost, by operation |
Both need the cost:view permission (manager and admin). Amounts are US dollars.