Skip to content
unlob

Use case

Regulatory and compliance research

Teams in finance, legal, pharma and the public sector who must defend a retrieval decision.

The problem, and the approach

The problem

  • The question after an answer is not "what did you find" but "what did you miss, and can you show it was not material".
  • No amount of ranking quality answers that, because ranking says nothing about what was excluded.
  • Reproducing a retrieval decision months later requires knowing what the index held at the time, not what it holds now.

The approach

  • from and to bound the crawl-time window, reconstructing the evidence base as it stood at a point in time.
  • authority restricted to governmental and educational sources removes an entire category of noise in one parameter.
  • why_not explains any specific exclusion — present, removed with a typed reason and replacement, or never admitted.
  • assemble_context attaches a reason to every included passage, making the selection itself auditable.

The parameters that matter

ParameterValueWhy
from / tothe period under reviewReconstructs the evidence base at that time.
authority[]gov, eduInstitutional sources only.
min_independent_sources2A documented threshold applied uniformly.
why_not?url=any challenged documentA substantive answer to "why was this not in scope".
In practicebash
curl -H "x-api-key: $UNLOB_API_KEY" \
  "https://api.unlob.com/search?q=disclosure+requirement&authority[]=gov&from=1735689600&to=1738368000"

curl -H "x-api-key: $UNLOB_API_KEY" \
  "https://api.unlob.com/why_not?url=https://example.gov/guidance/2026-04"

Defensibility is about the exclusions, not the hits

In regulated work nobody doubts that a search happened. The question asked afterwards is what it missed, and that is a question about the excluded set — which most retrieval stacks cannot describe at all, because exclusion happens implicitly through ranking and the cut-off at k.

Making the exclusions explicit is what turns a search into a record. A uniform corroboration threshold, an authority filter and a bounded time window are all statements about what was not considered, applied identically to every query in a review rather than tuned per question. The uniformity is the part that matters: a threshold varied by hand across a review produces a set of results nobody can characterise afterwards, which is worse than a stricter threshold applied consistently.

An answer about absence, and its boundary

The strongest thing this workload gets is a substantive answer about a URL that did not appear: present, removed with a stated reason and a timestamp, or never admitted. Against an append-only ledger that is a reconstructable claim rather than an assurance, and it is the difference between “we searched the web” and a description of what was considered and what was set aside.

Two boundaries should be stated to whoever relies on it. History windows are bounded by plan, so a review that needs to reach back years has to be on a plan that reaches back years — discovering that mid-review is expensive. And a technical answer about index membership is not a legal one: whether it satisfies a particular obligation is a question for your compliance function, and the honest position is to hand them the mechanism rather than a conclusion.

Where this is not the right tool

  • History windows are plan-bounded: 30 days on Free, one year on Build, five years on Scale, and the full index on Archive.
  • why_not is a substantive answer, not legal advice. Whether it satisfies a specific obligation is a question for your compliance function.
  • Query strings leave your infrastructure. Treat the query itself as disclosed.

Frequently asked questions

Can I reproduce a search from six months ago?

You can reconstruct the evidence base by bounding the crawl-time window, provided your plan reaches that far back. Ranking may differ as the index evolves, so log the returned passage ids at the time.

What should I log for an audit trail?

The query and every filter verbatim, the timestamp bounds, the corroboration threshold, the passage ids returned with their reasons, and the result of any why_not call about a document later raised.

Build it on the free tier

10,000 credits a month, no card. Every parameter above works on every plan.

API and MCP reference ↗