Why not keywords and booleans?
Keyword and boolean filters match characters. That works when your target has one spelling, and fails the moment it doesn’t — which is most of the time in B2B data. Say you want people who run demand generation:
The same failure repeats on the company side.
Financial Services covers a retail bank and a crypto exchange. A keyword search for “logistics” misses a freight forwarder that calls itself a supply chain partner.
Booleans aren’t wrong — they’re exact, fast, and you should keep using them for things that genuinely are exact, like country, headcount band, or seniority. SmartSearch is for the parts of a query that are fuzzy by nature: what a person does and what a company does.
Use both. A good filter is usually SmartSearch for role and business, plus ordinary conditions for geography, size, and seniority. See Search Filters.
Each one on its own
Every SmartSearch is a single node in a filter. Here is each one doing its own job, before any combining.Company Description
Find companies by what they actually do, however they word it:Job Title
Find people by the role they actually hold, whatever it happens to be called:Company Look-alike
Find companies resembling one you name, by domain:/count or /preview and it works. The rest of this page is about what happens when you put them together.
Combining them is the point
Any one semantic search is useful. Combining several in a single query is what nothing else in this market does. You can put up to three job title searches, three company description searches, and ten look-alikes in one filter, nest them inAND / OR groups, and negate any of them — alongside ordinary conditions. Every combination below is one request.
Two descriptions, OR’d
A market that doesn’t reduce to one sentence:A look-alike plus a job title
“People who run security at companies like our best customer” — no industry code, no title list:Descriptions and titles together
“Ops leaders at cold chain companies”:Worked use cases
Expand from your best accounts
Expand from your best accounts
You closed ten great deals and want more like them. You don’t have to work out what they have in common.Send it to
POST /v2/contact/company/count for the account list, or add a job title node and send it to POST /v2/contact/count for the people to call.Enter a new vertical you can't name
Enter a new vertical you can't name
The industry taxonomy has no code for what you sell into. Describe it instead, at Preview with
related to see the shape of the market:"includeScores": true, see where the results stop being right, then tighten to similar or exact before you export.Find a buying committee, not a person
Find a buying committee, not a person
Three roles that all touch the same purchase, each its own node:
Target a market while excluding a segment
Target a market while excluding a segment
Everyone like our customers, minus anyone resembling the incumbent we never beat:
The full combination
Everything at once: US-based, senior demand gen and marketing ops people, at companies resembling any of five accounts, excluding anyone at a company like a competitor.- The
ORgroup of five look-alikes is an “any of these”. Put look-alikes in anANDgroup and a company must resemble all five at once, which almost nothing does. - The negated group is how you exclude. There is no “not in” look-alike node.
- Two title nodes joined by
OR. One node holding several roles collapses to a single role internally and silently matches only that one.
POST /v2/contact/company/count for the same targeting at company grain.
One vocabulary for all three
Every SmartSearch takes the same four presets. Sendmatch and the server owns the number, so “Similar” means the same measured thing in your app, in ours, and in a partner’s.
Presets are cumulative: each is a similarity floor, so
broad returns everything related would plus a looser band beneath it. Widening never drops a result you already had.
Calibrated per target
RevenueBase calibrates these floors against judged benchmarks. They differ per target because the three vector spaces are not comparable — read down a column, never across.
Each cell is similarity band · on-target rate. On target is the measured share of matches at that stop that genuinely fit.
Job title holds up well all the way to
broad. Company description and look-alike fall off sharply past similar — company description at broad is 24% on target, meaning roughly three in four results need review. Treat related and broad on those two as discovery tools, not list-building settings.
Or set your own thresholds
The presets are a good starting point, not a ceiling. They’re the settings we’d pick, calibrated on our benchmarks — but what counts as a good match depends on your market, and you’re welcome to find your own. Send a rawmaxDistance instead of match:
"maxDistance": 0.22. A raw maxDistance means exactly what it says and skips the preset calibration entirely.
To find your own numbers, preview with "includeScores": true, see where results stop being useful, and set maxDistance just below that point:
_titleSimilarity and _companySimilarity between 0 and 1, best-match first. Scroll to where quality drops off and you have your threshold.
Send match or maxDistance, never both — sending both is a 422.
If you send neither
Every SmartSearch node defaults tosimilar. One rule, all three targets — the floor differs because the vector spaces differ, but the promise is the same.
Omitting
match is exactly the same search as sending "match": "similar" — the same threshold and the same query handling, so the two return the same rows. Send it explicitly when the intent matters to a future reader, and send exact or broad when you want to move off the recommendation.
Read the presets at runtime
Fetch the table rather than hardcoding it, so your app picks up any recalibration automatically:Limits
Title and company caps are counted separately, so three of each in one filter is fine. Each look-alike node is a full scan of the company vector index, which is why that cap sits where it does.
