DocsStart here
Costs, caching and spending limits
How prices are worked out, when results are free, where to see what you spent, and the controls that stop spending.
OpenSEO charges nothing. Every paid action is billed by YepAPI to your own key at YepAPI's price. This page explains how the prices are worked out, where to see what you spent, and the controls you have over spending. Prices are YepAPI's at the time of writing; YepAPI sets them.
How prices are worked out
| Kind | How it is billed | Examples |
|---|---|---|
| Flat | A fixed price per call. | Domain overview totals $0.08, Lighthouse $0.05, Maps search $0.07, business profile $0.05 |
| Per results page | $0.01 for every 10 search results fetched. | Google results: top 20 is $0.02, top 100 is $0.10 |
| Per row | A base price plus a price per 100 rows returned, rounded up to the cent. | Keyword ideas: $0.03 + $0.03 per 100 keywords. Backlink lists: $0.05 + $0.01 per 100 rows |
| Per token | AI models charge by the length of the question and answer, at least $0.01 per answer. Web search adds roughly a cent or more. | AI visibility, Prompt explorer, prompt suggestions |
Per-row prices are billed on the rows that actually come back, so the price you see is the most a lookup can cost. Where a price is a range, the app shows both ends, for example $0.03 – $0.08.
A paid call is never retried automatically when retrying could bill you twice. OpenSEO retries it only when YepAPI turned it away for sending too fast, or when the connection failed before the request left. After a server error, a timeout or a connection lost mid-call, the request may already have run and been billed, so the error is shown and you decide whether to try again. Free calls, such as the balance, are retried as usual.
Rank checks: top 20, 50 or 100
Each tracker reads the top 20, 50 or 100 Google results per check, at $0.01 for every 10: $0.02, $0.05 or $0.10 per keyword and device. Top 100, the default, records your position wherever it is and the full field of competitors; top 20 covers the first two pages for a fifth of the price. SERP features count toward the depth. Desktop and mobile are separate checks. A run costs keywords × devices × price per check, and the tracker shows it per run and per month on its schedule.
AI answers have no fixed price
Because models charge by length, an AI visibility run shows a minimum ($0.01 per answer) and, once every selected model has answered before, an expected figure based on what its answers cost you. Web search is on by default because it is needed for citations.
When results are free
Results are kept for your account. Repeating the same request within its cache time costs nothing, and the next search loads at once. To pay for fresh data, use Refresh. Every paid call is listed with its cost inSettings and usage.
| Lookup | Reused for |
|---|---|
| Keyword ideas, keyword metrics, organic and SERP competitors, keyword gap | 7 days |
| Domain overview, top keywords, top pages, all backlink reports, autocomplete, trends, Maps search, business profile | 1 day |
| Reviews | 6 hours |
| Google results, on-page check, Lighthouse | 1 hour |
| Prompt explorer | never |
Rank checks, AI visibility runs and geo-grids are not cached: each run fetches fresh data, which is the point of tracking. A plain site audit is free whatever you do.
Controls that stop spending
Monthly spending limit
Under Settings and usage you can set a monthly limit in dollars. Before every paid call, OpenSEO adds up what your account has spent this calendar month (UTC) and refuses the call once the limit is reached, with the error budget_reached. This covers the dashboard, the REST API, agents and scheduled runs, and it stops a long run part way instead of only checking when it starts.
Free actions keep working when the limit is reached: cached results, price checks, your saved data and the YepAPI balance. Calls already in flight when the limit is crossed still complete, so a month can end a few cents over.
Per-call ceilings
Agents and scripts can pass a ceiling with each paid call: max_cost_usd on MCP tools, ?maxCostUsd= on REST lookups and maxCostUsd when starting an AI visibility run. A call whose worst-case price is above the ceiling is refused before anything is spent, with cost_ceiling_exceeded.
AI answers have no worst case, so for them the ceiling works while the call runs: models are asked one at a time, each answer reserves its expected cost, and the run stops before an answer that would likely cross the ceiling. Since an answer's price is only known afterwards, the total can end above the ceiling by up to the cost of one answer. A run stopped this way is marked cancelled and is left out of your trend.
Confirmations in the app
Background runs that spend (rank checks, AI visibility, rendered audits and geo-grids) ask you to confirm with the price on the button. Creating trackers, adding keywords or prompts, and saving settings never spend.
Limits
| What | Limit |
|---|---|
| Keywords per rank tracker | 1,000 |
| Rank check depth | top 20, 50 or 100 |
| AI prompts per project | 200 |
| AI models per project | 20 |
| Competitors per project (AI visibility) | 20 |
| Models in one Prompt explorer question | 8 |
| Pages per site audit | 5,000 |
| Pages per rendered audit | 500 |
| Keywords per metrics lookup | 700 (100 for city-level volume) |
| Keywords per SERP-competitor lookup | 200 |
| Domains per link intersect | 2 to 20 |
| Geo-grid size | 3×3, 5×5, 7×7 or 9×9 in a project; up to 7×7 in the local rank checker |
| Saved keywords added at once | 1,000 |