Skip to main content
SmartSearch matches on meaning rather than characters. You describe what you’re looking for in plain language, and we find it however it happens to be worded. There are three, and the important part is that you can combine them.

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:
Catches a freight forwarder that calls itself a supply chain partner. Detail: Company Description.

Job Title

Find people by the role they actually hold, whatever it happens to be called:
Catches Head of Growth and VP Marketing, and skips the Marketing Intern. Detail: Job Title.

Company Look-alike

Find companies resembling one you name, by domain:
No industry code and no keyword list. Detail: Company Look-alike. Each of these is a complete filter on its own — send any one of them to /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 in AND / 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

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.
The industry taxonomy has no code for what you sell into. Describe it instead, at related to see the shape of the market:
Preview with "includeScores": true, see where the results stop being right, then tighten to similar or exact before you export.
Three roles that all touch the same purchase, each its own node:
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.
Three things are doing the work:
  • The OR group of five look-alikes is an “any of these”. Put look-alikes in an AND group 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.
Drop the title group and send the rest to POST /v2/contact/company/count for the same targeting at company grain.

One vocabulary for all three

Every SmartSearch takes the same four presets. Send match 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 raw maxDistance instead of match:
A 78% similarity floor is "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:
Rows come back with _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 to similar. 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.

Next steps