No generated answer. Bring your own model.
The evidence layer
for agents.
Ground any objective. Know what’s missing.
Deduplicated, provenance-tagged evidence from the open web, packed to your token budget — with a receipt that tells your agent when it isn’t enough.
10,000 free credits a monthno card5 credits per ground call
What the web holds
24 copies · 17 hosts
- 6 copies · 4 hostsgov.ukofficial · original
- 14 copies · 10 hostsThomson Reuterssecondary · wire
- 4 copies · 3 hostsA trade publicationsecondary · original
collapsed by origin and owner, not by host
receipt
status: sufficient
- origins
- 3
- hosts
- 17
- copies
- 24
- freshnesswithin 7d · newest 37 min
- missingprimary
- context1,420 / 3,000 tokens
- billed5 credits
- per 1,000 searches
- $0.40
- free credits / month
- 10,000
- upstream search engines
- 0
- tools in the MCP grounding profile
- 2
- languages
- 101
The problem
Stop rebuilding search in your context window.
A search API hands your agent links. Deciding which are duplicates, which sources are independent and whether it has enough is left to the model — in context, billed by the token, differently every run.
- search
- dedupe
- corroborate
- rank
- pack
- judge
- one ground call
Rebuilding it in context
20 calls
Search, fetch, compare, search again. Every intermediate result lands in the context window whether or not it turns out to matter.
+8 more not drawn
One ground call
1 call
Deduplicated, origin-clustered, ranked and packed on our side. The agent reads the status and the receipt instead of reasoning its way to them.
The evidence layer
Between the open web and your model’s context.
Owning an index is table stakes now — Exa and Parallel run one too. Being the deterministic grounding layer beneath whichever model you run is not.
01 · Context compiler
The smallest defensible evidence set, packed to a budget you set.
One call turns an objective into the smallest defensible evidence set, packed to your token budget. No generated answer: the reasoning stays with your model.
02 · Evidence graph
Seventeen hosts can be three origins.
A wire story and its forty reprints are one origin. Independence is counted by owner, not by host, over six graph operations.
24 copies · 17 hosts → 3 origins
03 · Coverage receipts
Absence, reported instead of guessed.
Every answer says what was searched, what was not, how fresh it is and what is missing, so absence is reported rather than guessed.
04 · Agent-native
Built to be learned by the agent, not the human.
Explicit budgets and failure semantics, a two-tool MCP profile and a self-describing API an agent can learn without a human.
One call
An objective and a budget in. Evidence and a receipt out.
Retrieval, story deduplication, origin clustering, ranking and packing run on our side. What comes back is not a list of links and not a generated answer: it is evidence with its provenance, and a receipt that says whether it is enough.
curl -G https://api.unlob.com/ground \
-H "x-api-key: $UNLOB_API_KEY" \
--data-urlencode "objective=UK AI regulation position this week" \
-d max_age=7d \
-d min_independent_origins=2 \
-d token_budget=3000import os, requests
g = requests.get(
"https://api.unlob.com/ground",
headers={"x-api-key": os.environ["UNLOB_API_KEY"]},
params={
"objective": "UK AI regulation position this week",
"max_age": "7d",
"min_independent_origins": 2,
"token_budget": 3000,
},
).json()
# Read status first. partial is never complete.
if g["status"] == "sufficient":
context = [e["hit"]["snippet"] for e in g["evidence"]]
else:
print(g["coverage"]["known_gaps"], g["next_actions"])const url = new URL("https://api.unlob.com/ground");
url.search = new URLSearchParams({
objective: "UK AI regulation position this week",
max_age: "7d",
min_independent_origins: "2",
token_budget: "3000",
}).toString();
const g = await fetch(url, {
headers: { "x-api-key": process.env.UNLOB_API_KEY! },
}).then((r) => r.json());
// Read status first. partial is never complete.
if (g.status !== "sufficient") {
console.log(g.coverage.known_gaps, g.next_actions);
}{
"status": "sufficient",
"evidence": [ /* 3 items, with provenance */ ],
"coverage": {
"independent_origins": 3,
"hosts": 17, "copies": 24,
"within_max_age": true,
"source_roles_missing": ["primary"]
},
"budget": {
"context_tokens": 1420, "token_budget": 3000
},
"next_actions": []
}Status sufficient; 3 independent origins across 17 hosts and 24 copies; missing primary; 1,420 of 3,000 tokens used.
Or connect over MCP
Two tools in Claude Code, Cursor or any MCP client.
The grounding profile lists only what an agent needs to ground a task, so far less tool schema rides along in every request. The full profile adds the six graph operations.
{
"mcpServers": {
"unlob": {
"type": "http",
"url": "https://api.unlob.com/mcp?profile=grounding",
"headers": { "x-api-key": "ulb_your_key_here" }
}
}
}The evidence graph
Or walk the graph yourself.
Every other search API makes your agent rebuild the relationships between documents in its context window. We computed them to build the index; six operations let an investigative agent traverse them directly.
For architects
What to check before you depend on it.
The retrieval layer is the part of an agent stack that is hardest to swap later. These are the properties that decide whether it holds up.
- Index
- Our own, crawled and served by us.No upstream search engine can deprecate, reprice or rate-limit the layer your agents depend on.Why an own index
- Status
- Decided by a fixed rule, not a model.Five outcomes — sufficient, insufficient, stale, partial or empty. The same request over the same corpus gives the same status.How grounding works
- Failure
- Explicit, and priced as such.A call that runs and fails costs 1 credit; a refused one (401, 402, 429) costs 0. A partial result says so and is never presented as complete.Errors and retries
- Cost
- Tracks demand, not corpus size.No upstream per-query fee, margin at every tier, and no valuation to grow into. The price is not a subsidy.The cost model
Built for
Where to start, by what you’re doing.
Engineers wiring agents
One call or two MCP tools, evidence packed to the budget you set, and a free tier big enough to build on.
Architects choosing a retrieval layer
An own index, no generated answer, and a price that is margin rather than subsidy — with every competitor figure sourced.
Teams switching providers
The Bing Web Search API is retired and Tavily was acquired. Each guide maps the parameters and lists what you lose.
Teams that must defend an answer
Compliance, research and verification need independent origins and a record of what was searched and what was not.
Price
Priced like infrastructure.
A ground call is retrieval over structure built with the index, so it costs infrastructure money rather than research-agent money — and no part of the bill is a fee to an upstream provider.
Gemini API pricing, read 5 August 2026
- Tavily20×$8
Tavily pricing, read 5 August 2026
- Exa18×$7
Exa pricing, read 5 August 2026
- Brave Search API13×$5
Brave Search API pricing, read 5 August 2026
- Parallel Search2.5×$1
Parallel pricing, read 5 August 2026
- unlob — Scale$0.40
FAQ
Frequently asked questions
What does "the evidence layer" mean?
Search retrieves things. unlob tells an agent what evidence exists, whether the sources are independent, whether the set is sufficient, what is missing, how fresh it is, and what to do next — within a token budget. One call, ground, returns that structure. No generated answer is returned, deliberately: the reasoning stays with whichever model you run, and the layer beneath it is deterministic.
Why not just generate the answer, like a research agent?
Because that puts a retrieval company in a race to run the most expensive reasoning on its own models. Exa, Parallel, Tavily and Linkup are all moving that way. unlob is the infrastructure their agents — and yours — ought to consume: the smallest defensible evidence package, how its pieces relate, and what is not known, beneath arbitrary reasoning models. It is cheaper for the same reason: the structure is precomputed, so a ground call costs infrastructure money rather than research-agent money.
How is source independence computed?
Not by counting hosts. Within a story, passages are grouped into origins: a wire dispatch and its reprints are one origin, a press release and the sites that ran it verbatim are one origin, and two outlets under one media group are two origins with one owner. independent_origins counts distinct owners. Every label carries a confidence, and the rule is documented in full — seventeen URLs and two genuinely independent origins are different findings, and the receipt says which you have.
What is a coverage receipt?
Every ground answer carries one: what was searched, what was not — shard slots down, verticals excluded, stories not expanded — how fresh the evidence is against the window you asked for, which source classes are present and missing, and a plain-language list of known gaps. It is why_not generalised from one URL to a whole request, so an agent knows when an answer is incomplete instead of inferring absence from a short list.
Does unlob have its own web index, or does it resell Google results?
Our own. We crawl the open web ourselves and serve from the index we built, which is what makes the evidence graph possible: story clusters, origins, the link graph and corroboration signals are computed when the index is built. No upstream search engine can deprecate us, reprice us or rate-limit us.
Is there an MCP server?
Yes, over Streamable HTTP at https://api.unlob.com/mcp with your API key. The grounding profile (?profile=grounding) lists ground and get_document — the right surface for most tasks and far less schema in every request. The default profile lists all 13 tools, including the six coverage-graph operations. There is also an installable Agent Skill at api.unlob.com/skill.md, so a coding agent can learn the API without a human reading the docs.
What does the free tier include?
10,000 credits a month, 30 days of history, and 60 credits a minute — no card required, and it is the most generous free tier in the category. A search costs 1 credit and a ground call 5 credits, however many stories it expands. The rate limit, not the allowance, is what makes it a tier for building and evaluating rather than for serving users; it hard-caps at its monthly credits rather than billing you by surprise.
Start on the free tier
10,000 credits a month, no card, no sales call. One magic link creates your account and your first API key.
# One magic link: account, org and your first key
export UNLOB_API_KEY=ulb_your_key_here
curl -G https://api.unlob.com/ground \
-H "x-api-key: $UNLOB_API_KEY" \
--data-urlencode "objective=UK AI regulation position this week"