Skip to content
unlob

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

GET /groundobjective="UK AI regulation position this week"

What the web holds

24 copies · 17 hosts

  1. 6 copies · 4 hostsgov.ukofficial · original
  2. 14 copies · 10 hostsThomson Reuterssecondary · wire
  3. 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
An illustrative example of one ground call, not a measurement. Every figure is a field in the response; the agent reads it instead of reasoning its way to it.
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.

  1. search
  2. dedupe
  3. corroborate
  4. rank
  5. pack
  6. judge
  7. 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.

Illustrative: the same objective, both ways. The difference is how much of the answer the agent has to work out for itself.

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=3000
import 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);
}
The response, trimmedjson
{
  "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": []
}
independentmissingbudgetFull annotated response →

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.

MCP profiles ↗Per-client setup ↗The Agent Skill ↗

MCP client configjson
{
  "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.

How the coverage graph works

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.

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.

Dollars per 1,000 comparable web searches, log scale; the multiple beside each price is against unlob Scale. Each competitor figure is read from the vendor's own pricing page on 5 August 2026.

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.

Your first callbash
# 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"
API and MCP reference ↗