Skip to main content
Global search is in alpha. The request and response shapes may still change, and so may the wording of explanations and the list of reason kinds.
Every /v2/search call needs a country. Often you do not have one: a shareholder listed in a foreign filing, a counterparty on an invoice, a holding company whose stated domicile is not where it is incorporated. Or you know the country but not the state: an American company, any of fifty registers. POST /v2/search/global takes what you know in one line of text and returns candidates across every country Topograph covers, or only the countries you choose, best first. Each candidate has the country and registration number you pass to /v2/company, whether it is a strong or a possible match, and a one-sentence explanation of why it matched. When the search can stand behind one of them, that candidate is selected.

Quick example

The selected candidate is the company, ready for a company request:

Sending what you know

Put everything you know in query, separated by commas. The name comes first; everything after it is read for what it says about the company. What was understood comes back in query, so you can check the search read your input as you meant it: Add "activeOnly": true to leave out companies the search sees as inactive (an indicative status, see Candidates).

Searching only some countries

countries limits the search to the countries you name. Nothing outside them is searched or returned.
US stands for every state, and CA for every Canadian jurisdiction we cover. When the state is not known, the search looks for it in public sources first, then asks the state registers: the usual incorporation states first (Delaware, New York, Nevada, Wyoming, Florida, Texas), then almost every other state. A Canadian company is returned once, in the jurisdiction it is incorporated in. A federal corporation registered in a province as an extra-provincial corporation is found in both registers; when the two records share a Business Number, or the provincial record names the federal one, the search returns the federal (CA-FED) candidate and lists the provincial registration as an other_registration reason. New Brunswick and Nunavut are not covered yet. countries is a filter. A country named in query is not: it says where you think the company is, and the search can still look elsewhere. When nothing is found in the countries you named and the evidence places the company elsewhere (a GmbH searched in the United States only), the search ends not_found with the reason outside_countries, and likelyCountryCode names the country it points to. The same happens, without any search, for an LEI registered outside them.

Searching by LEI

An LEI names one entity, and the LEI record says where it is registered. Send the LEI alone as query, or next to a name (La Banque Postale, 96950066U5XAAIRCPA78), and the search goes straight to that register: no other country is searched.
The candidate carries the reason identifier, “The LEI you gave belongs to a company registered in France”. When the LEI belongs to a company registered in a country Topograph does not cover, the search ends not_found with country_not_covered, and likelyCountryCode names that country.

How it decides

The search works through cheap signals first and stops as soon as one candidate is a strong match.
  1. The name. The legal form and the wording of the name point to the jurisdictions that use them: EOOD is Bulgarian, S.p.A. Italian, GmbH German, Austrian or Swiss. Ltd is most often British, but an American-sounding Ltd is weighed toward the United States. LLC and Inc. point to the United States, and the state still has to be found. Scanning noise such as S.a r.1. is corrected.
  2. The rest of your query, as above: an address, an identifier, a website, a country.
  3. Topograph’s company data, checked once across all countries.
  4. The web, only when the name and Topograph’s data are not enough, or the company is American and its state is unknown. A source page is kept as evidence.
  5. The registers. Live searches in the most likely countries, three at a time, with one rephrased retry when a register returns nothing. The search stops once a register returns the exact name and no other country is a serious contender.
For a US company with no known state, the usual incorporation states are tried first (Delaware, New York, Nevada, Wyoming, Florida, Texas). Then the search moves on through the other states, up to almost every state, six at a time and fastest registers first. When you give an address, it decides a lot. If the address names a country or a US state, that register is asked first, before any web search. When it returns the company under that name at the address you gave, or nearby, the search stops there and no other country is searched. When a register holds several companies with the same name, they are ranked by the distance between their registered address and yours, and each explanation says how far it is (“Its registered address is 3 km from Richmond”). A search runs at most 15 register and web searches, plus up to 40 state registers for a US company with no known state, within 100 seconds.

Reading the answer

status is the first thing to check. summary says the same thing in one sentence you can show a user. On not_found, reason says why: likelyCountryCode names the country the evidence settled on, even when the company could not be confirmed, its register is not covered, or it is outside countries. A Cayman Islands fund still gets its country. id identifies the search. Quote it when you contact support about one.

The company: selected

The candidate with selected: true is the one you can use without a person checking it. At most one candidate is selected, always the first, and only when status is resolved. The search selects a candidate only for a strong match with no plausible rival: no candidate of that name in another country, and no other company of the same name in the same register that the evidence cannot tell apart. Two Topograph SAS in France and no address to separate them is ambiguous, not a guess. Take the selected candidate rather than picking from candidates yourself: the decision is the search’s own, made on evidence the response does not all carry.

Candidates

Candidates come best first. Each carries countryCode, id, legalName, its registered address and isActive, selected, and a match: strong when the evidence points to this company, possible when it needs a second look. Several candidates can be strong (the same name in Germany and Austria) while none is selected. isActive is indicative only. It is the status the search saw, from a register’s search results or from Topograph’s company data, which can lag the register, so it may be out of date, and it is absent when unknown. activeOnly filters on the same indicative status. Before relying on a company’s status, request company from /v2/company and read company.status. explanation.summary says why it matched in one or two sentences, and explanation.reasons lists the reasons one by one, each with a text you can show as is:

Streaming

With "stream": true and the Accept: text/event-stream header, the endpoint sends Server-Sent Events while the search runs:
  • progress: the search so far, as { revision, activity, candidates, query }. activity lists what the search is doing right now, as sentences you can show (“Asking the register in Austria”); several registers are often asked at once. Its wording is for display and may change. candidates are the ones found so far; none is selected before complete. A new event is sent every time something changes.
  • complete: the final response, same shape as the non-streaming answer.
  • error: { error: { code, message } }.
Streaming is the better choice for anything a person watches: candidates appear as each register answers, and a long search never runs into an HTTP timeout.

Billing

A search is billed only when it succeeds, that is when status is resolved. Ambiguous and not-found searches, inputs rejected as not a legal entity, failures and timeouts are not billed. usage.priceCents shows what the search was charged. The current price is on the pricing page.

Limits and errors

Each account can run 60 global searches per minute and 5 at the same time.

Development environments

With an sk_dev_ key, global search answers from generated data: candidates in the countries the name’s legal form points to, each resolvable with /v2/company in the same environment. Coverage is honoured, so a name that only points at uncovered countries ends not_found with country_not_covered, as it would live. A countries filter is honoured too: nothing outside it is generated, and US lands on a state. Nothing is billed.

In the app

The same search is in the app under Global search in the sidebar: one text box, a choice between every country, the United States only or a list of countries, the search progressing live, and the candidates with their explanations. Click a candidate, or Get data, to pick the datapoints and order the company exactly as from the country search.