Docs / Start here
Costs, caching and limits
How prices are worked out before anything runs, when results are free, and the controls that stop spending.
OpenSEO charges nothing. Every paid action is billed by YepAPI to your own key at YepAPI's price, and the app shows that price before anything runs. This page explains how the prices are worked out 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 stop where you are found
A rank check asks for results one page of 10 at a time and stops at the page where your site appears. A keyword you rank for on page one costs $0.01; one you are not found for costs the full depth you chose ($0.03 for a top 30 check). Desktop and mobile are separate checks. So a run costs between keywords × devices × $0.01 and keywords × devices × depth / 10 × $0.01, and the tracker shows both figures, per run and per month.
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 result says cached, free. To pay for fresh data, use Refresh (pay again); it shows its price next to it.
| 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 10 to top 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 |
| Saved keywords added at once | 1,000 |