Company API
Search, look up and list signals on any Swiss company over the API, with the same filters and rows as the directory, one page at a time.
Three routes over the Swiss company register, on a bearer key holding companies:read.
curl -s -H 'Authorization: Bearer pxk_…' \
'https://prospex.ch/api/v1/companies?q=machining&canton=VD&size_band=small'
curl -s -H 'Authorization: Bearer pxk_…' 'https://prospex.ch/api/v1/companies/12345'
curl -s -H 'Authorization: Bearer pxk_…' 'https://prospex.ch/api/v1/companies/12345/signals'
Every route spends the row budget: one row per company returned, or per company the signals are about. A company counts once a month, however often you read it.
Any valid company id returns its data. Lists answer 404 for another account's object.
Routes
| Name | Path |
|---|---|
| company_search | /api/v1/companies |
| company_detail | /api/v1/companies/<str:company_id> |
| company_signals | /api/v1/companies/<str:company_id>/signals |
Search parameters
| Parameter | Meaning |
|---|---|
| q | Free text. Matches the name, the registered purpose, the UID and the address. |
| canton | Two-letter canton codes, repeated or comma-separated. |
| sector | Sector group keys. See the list below. |
| size_band | micro, small, mid or large. |
| audience | b2b, b2c, mixed or no_market. |
| followed | 1 to restrict to companies you follow. |
| limit | Rows per page, up to 100. |
| cursor | Opaque. Follow next_url instead of building one. |
An unrecognized parameter answers 400 unknown_parameter. A value outside a parameter's vocabulary answers 400 invalid_parameter and names the accepted set.
Vocabularies
- canton
- AG, AI, AR, BE, BL, BS, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SO, SZ, TG, TI, UR, VD, VS, ZG, ZH
- sector
- tech_digital, professional, finance, real_estate, retail, industry, construction, hospitality, health, transport, admin_support, other_public
- size_band
- micro, small, mid, large
- audience
- b2c, b2b, mixed, no_market
A row
| Field | Type | Meaning |
|---|---|---|
| company_id | integer | The Prospex company id. Stable. |
| company_name | string | The registered name, as the register writes it. |
| company_url | string | The company's page in Prospex. |
| company_tagline | string | One line saying what the company does. Empty when unknown. |
| company_canton | string | Two-letter code of the registered office. |
| company_city | string | The commune of the registered office. |
| company_sector | string | The NOGA division, as a phrase. |
| company_sector_group | string | The macro-sector key, for grouping. |
| company_audience | string | Who the company sells to. |
| company_employee_size | string | The headcount bucket. Empty when unknown. |
| company_legal_form | string | The eCH-0097 legal-form code, such as 0106 for a corporation. Empty when the register gives none. |
| company_legal_form_label | string | The same legal form in words, such as Swiss branch. |
| company_head_office_id | integer|null | For a register branch, the Prospex id of the company it belongs to. Null for every other company, and for a branch whose head office Prospex does not hold. |
| company_head_office_name | string | That head office's name. |
| company_group_id | integer|null | The group this company belongs to, such as the entities of one bank or a head office with its branches. Rows carrying the same id are one group. The id carries over from one rebuild to the next while the group keeps its main company or any of its members. |
| company_group_name | string | The group's name, which is its main company's. |
| company_group_primary_id | integer|null | The Prospex id of the group's main company. |
| company_is_group_primary | boolean|null | Whether this row is the group's main company. Null outside a group. |
| company_website_relationship | string | How the website on this row belongs to the company, once Prospex has verified it: official, brand or group, where group means the site is shared by the whole group. Empty until verified. |
| company_trading_names | string | Names the company trades under, such as a brand, where its own website ties the name to this legal entity. Several are separated by | . Empty when none is known. |
| company_noga_code | string | The company's NOGA 2025 code, two to six digits, such as 953101. Every finer code starts with the coarser one, so 95 covers 953101. Empty when Prospex could not place the company. |
| company_noga_level | string | How fine the code is: type (six digits), class (four), group (three) or division (two). |
| company_noga_label | string | The code's official English name. |
| company_noga_source | string | register when the canton's commercial register codes the company, classifier when Prospex read the code from its purpose and website. |
| signal_count | integer | Visible signals on this company, live-counted. |
| latest_signal_date | string|null | The most recent event date, ISO. |
| followed | boolean | Whether you follow this company. |
Search relevance is per-query, so the response carries a band word, never a score.
version is 1 on the company routes and 1 on the signal route. They are separate payload contracts and version independently.
One company's signals
| Parameter | Meaning |
|---|---|
| since | ISO date or datetime. Only signals recorded after it. |
| type | Signal types, repeated or comma-separated. |
| limit | Rows per page, up to 100. |
| cursor | Opaque, keyset-based. Follow next_url instead of building one. |
A row here is a signal-feed row, field for field. Use has_more and next_url to page through results.
Pagination, and the ceiling on search
Follow next_url. It is absolute, carries every parameter you sent, and carries no credential: the key stays in the header, so the URL is safe to log and to paste into a ticket.
Search returns at most 2,000 results for one query. Asking past that answers 400 window_exceeded. Narrow the query, or read a list's companies at /api/v1/markets/<id>/companies, which has no ceiling.
If the search index is unreachable you get 503 search_unavailable.
Default page size 25, maximum 100.