Most results carry an evidence object, placed first in the result, that shows why the company matched. Evidence confirms the filters you sent against the company's data; it is not a readout of the company. It surfaces only what you couldn't already reconstruct from your query, such as which snippet matched a text search, and stays silent on the plain structured gates you already know you asked for.
What evidence is, and what it never does
Evidence shows the piece of a company's data that proves a condition you set. It never returns data you didn't ask about, and it never returns an attribute's value on a check that failed or was negated. To retrieve a company's actual data, use the Match & Enrich API, Firmographics, or Location Intelligence.
The evidence object is omitted entirely when there's nothing to show (for example a segmentation built only from firmographic gates).
How much is shown
Evidence shows the minimum that proves a condition, following the logic of the condition itself:
- "Any of these" (an
or, or a membershipin): proven by a single value. One match is shown even if several qualified, picked deterministically: the first value in your query that the company satisfies. - "All of these" (
and, or severalandclauses on one attribute): one match per part. - A negation (
not_in, or anexcludeblock): nothing to show. The confirmation is the absence of a match, so nothing is surfaced and nothing leaks.
One entry per attribute. Clauses on the same attribute collapse into a single entry, keyed by the attribute name; the attribute and relation are never echoed back, and the entry combines the matches from each clause. So company_business_model in:[A] AND in:[B] shows both values, while company_business_model in:[A, B] shows one.
supplier_typesis the exceptionOn a
company_productsmatch, thesupplier_typesfield always lists all of the company's supplier roles for that product (manufacturer, distributor, and so on), regardless of what you filtered on. It only ever appears alongside a product match.
Where evidence appears, by module
| Module | Evidence |
|---|---|
company_lookup | None. The ranked candidate list is itself the answer, and the ordering is the explanation. |
supplier_discovery | Only for the text filters (company_products, company_keywords). Structured gates are not echoed. There is no matched flag, because a result is only returned when the whole query passed. Omitted when no text filter was used. |
segmentation | Same as supplier_discovery, but the only text filter it accepts is company_keywords. Omitted when no keyword filter was used. |
company_verification | A verdict for every filter you sent. |
The two shapes this produces:
- In
supplier_discoveryandsegmentation, each entry maps the attribute name straight to its evidence, with no wrapper. - In
company_verification, each entry is wrapped as{ "matched": <bool>, "value": <evidence | null> }:valueis the matched evidence on a pass, andnullon a fail or a negation.
Evidence shapes
Whatever the module, a single attribute's evidence takes the same shape:
| Attribute | Evidence shape | Example |
|---|---|---|
Identity (company_website, veridion_id) | a string, the matched identifier | "basf.com" |
Categorical (company_type, company_industry, company_category, company_naics_code, company_business_model) | an array of the company's satisfying value(s) | ["Business-to-Business"] |
company_target_markets | an array of matched target-market values | ["Automotive"] |
company_keywords | an object with one key | { "matched_snippets": ["…ISO 9001 certified…"] } |
company_products | an object: matched snippets, supplier roles, and product context | { "matched_snippets": [...], "supplier_types": [...], "product_context": { "name": "…", "url": "…", "description": "…" } } |
Numeric (company_estimated_revenue, company_employee_count, company_year_founded) | a number, the company's actual value (the proof it cleared the range) | 8900000 |
company_location | an array of matched locations, each { address_string, location_role }, plus distance_km on a within match | [{ "address_string": "…Ludwigshafen, DE", "location_role": "main" }] |
In company_location evidence, location_role is main (the company's HQ) or secondary (any other location), and distance_km is added on a within (proximity) match.
Examples
Each module below shows the exact evidence shape for a query from the module's own page.
company_lookup returns no evidence object. A result is a ranked candidate list:
{
"veridion_id": "…",
"company_name": "AstraZeneca plc",
...
}supplier_discovery shows evidence for the text matches only, so only company_products produces evidence:
"evidence": {
"company_products": {
"matched_snippets": ["…industrial battery energy storage systems…"],
"supplier_types": ["manufacturer"],
"product_context": {
"name": "Energy storage system",
"url": "…",
"description": "…"
}
}
}segmentation has the same shape, but only company_keywords can produce evidence. A keyword-themed segmentation (for example mapping the green-hydrogen market) carries just the keyword match, while the NAICS, location, and founding-year gates stay silent. A purely firmographic segmentation (like the DACH SaaS example on the segmentation page) returns no evidence object at all:
"evidence": {
"company_keywords": {
"matched_snippets": ["…green hydrogen production and electrolyzer systems…"]
}
}company_verification returns a verdict for every filter. In the KYB onboarding query example, each self-reported claim gets a pass or fail. Note that the two company_business_model clauses (SaaS and B2B) collapse into a single entry:
"evidence": {
"company_website": { "matched": true, "value": "highnote.com" },
"company_type": { "matched": true, "value": ["Private"] },
"company_business_model": { "matched": true, "value": ["Software-as-a-Service", "Business-to-Business"] },
"company_year_founded": { "matched": true, "value": 2019 },
"company_employee_count": { "matched": false, "value": null },
"company_location": { "matched": true, "value": [{ "address_string": "…San Francisco, CA, US", "location_role": "main" }] }
}When a check fails or a negation holds, value is null: a failed check reads { "matched": false, "value": null }, and a not_in negation that passes reads { "matched": true, "value": null }.

