Filter DSL
One filter string, GitHub-search-style. AND binds tighter than OR;-x or NOT x for negation; comma-lists scope to one predicate; tag@evidence requires evidence ≥ low/medium/high. Any bareword (an identifier or number not followed by an operator) becomes a free-text keyword search — mix it freely with structured filters: dental industry:marketing_agency.
The kind field is implicit on /v1/datasets/:id/search (URL is authoritative) and using it inside the filter is rejected with HTTP 400. Different datasets surface different field sets — see /v1/datasets/:id or the endpoints page for per-dataset filter lists.
Live tester
The tester calls bearer-gated endpoints. Paste a token first.
kind:
free — returns brief rows + per-row unlock state
Examples · pro_services
Grammar
filter := orExpr
orExpr := andExpr ("OR" andExpr)*
andExpr := notExpr (("AND")? notExpr)* # whitespace = implicit AND
notExpr := ("NOT" | "-") notExpr | atom
atom := "(" filter ")" | predicate
predicate:= IDENT op valueOrList | bareword
op := ":" | "=" | ">=" | "<=" | ">" | "<"
valueOrList := value ("," value)*
value := IDENT | NUMBER | tagAtEvidence
tagAtEvidence := IDENT "@" ("low"|"medium"|"high")
bareword := IDENT | NUMBER # → keyword:<bareword>Field catalog
Paste a token to load the field catalog.