Company data

Match a company list to the registers

companies_match · Changes data · Markdown

Matches a company list (CSV, Excel or rows) to the registers in the background, with a results file of each match.

$0.01 per row matched

From your agent’s balance. A call that fails costs nothing.

An example

Here is the list of 240 companies we met at the trade fair. Find each one in the registers.

Your agent callscompanies_match$0.01 per row matched

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "file_id": "3f6c1e2a-8b7d-4c5e-9f01-2a3b4c5d6e7f",
  "country": "DE",
  "max_rows": 240,
  "name": "Trade fair contacts matched"
}
What comes back
{
  "match_id": "6d0f4b2e-3a71-4c8e-9b15-7e2f1a9c4d38",
  "rows": 240,
  "matched": 211,
  "ambiguous": 12,
  "not_found": 15,
  "no_country": 2,
  "register_unavailable": 0,
  "charged_usd": "$2.11",
  "file": {
    "file_id": "9b3e7c1d-2f4a-4d8b-a6e5-0c1d2e3f4a5b",
    "name": "Trade fair contacts matched.csv",
    "content_type": "text/csv",
    "size": "41.6 KB",
    "size_bytes": 42598,
    "sha256": "3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b",
    "created_at": "2026-10-14T08:00:00+00:00",
    "download_url": "https://cncto.co/d/9b3e7c1d2f4a4d8ba6e50c1d2e3f4a5b",
    "link_expires_in_hours": 24
  },
  "sample": [
    {
      "row": "Arnestad Storkjøkken",
      "status": "matched",
      "via": "name",
      "id": "no:961920566",
      "name": "ARNESTAD STORKJØKKEN AS",
      "score": 100,
      "city": "Oslo",
      "register_status": "active",
      "industry": "46.49",
      "founded": "1991-09-01",
      "lei": null
    },
    {
      "row": "Bremer Großküchen GmbH",
      "status": "not_found"
    }
  ]
}

Use it when

When the business has a list of companies to identify and enrich: a trade fair list, a CRM export, a target list.

What it does

Matches a list of companies (a CSV or Excel file in the store, or rows) to the registers: each row by its registry number, or by name with its city counting in its favour, in its country's register (GLEIF where there is none). It runs in the background within the registers' pace (a few hundred rows a minute; slower for countries only GLEIF covers): the reply is 202 with a call_id; follow it with account_get_call, or wait for the companies.matched event. The result: counts, a sample and a results file with the list's columns and each match (id, name, score, city, status, industry, founded, LEI). Only clear matches count; close calls come back ambiguous with candidates, free. The call holds $0.01 a row (max_rows) and charges only the rows matched.

What comes back

First 202 with a call_id. When the list is done, account_get_call gives match_id, rows, matched, ambiguous, not_found, no_country, register_unavailable, charged_usd, file (the results file) and a sample of the first ten rows (row, status and the match). Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
file_idstringA CSV or .xlsx list in the file store, with a header row. Exactly 36 characters.
rowsarray of objects1 to 500 items.
rows[].namestringUp to 200 characters.
rows[].countrystringUp to 200 characters.
rows[].citystringUp to 200 characters.
rows[].postcodestringUp to 200 characters.
rows[].domainstringUp to 200 characters.
rows[].numberstringUp to 200 characters.
countrystringFor rows without a country column, e.g. DE. Matches ^[A-Za-z]{2}$.
columnsobjectWhich of the list's columns holds what, where its headers are unusual, e.g. {"name": "Firma", "city": "Sitz"}.
columns.namestringUp to 100 characters.
columns.countrystringUp to 100 characters.
columns.citystringUp to 100 characters.
columns.postcodestringUp to 100 characters.
columns.domainstringUp to 100 characters.
columns.numberstringUp to 100 characters.
max_rowsintegerAt least the list's rows; the call holds $0.01 for each. 1 to 5,000. Default: 100.
namestringThe results file's name. Up to 200 characters.

The call

Over MCP, call companies_match on https://api.conecto.chat/mcp/companies. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/companies_match \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_id":"3f6c1e2a-8b7d-4c5e-9f01-2a3b4c5d6e7f","country":"DE","max_rows":240,"name":"Trade fair contacts matched"}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
invalid_input400Both or neither of file_id and rows, a list longer than max_rows, or no column of names.The message says what to change, such as the max_rows to set.
not_found404No file with that id on this account.files_list shows them.
unsupported_type400The file isn't a CSV or an Excel workbook.Save the list as CSV or .xlsx.

More Company data tools

All 9 tools

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md