ARES Business Registry (CZ)
Use scripts/ares_client.py for ICO lookup and business search.
Working directory
- From workspace root:
python3 skills/ares-business-registry/scripts/ares_client.py ...
- From
skills/ares-business-registry:
python3 scripts/ares_client.py ...
Commands
You can run via the wrapper (recommended):
./ares ico <ico>
./ares name "NAME" [--nace CODE ...] [--city CITY] [--limit N] [--offset N] [--pick INDEX]
The underlying script also supports:
python3 scripts/ares_client.py search --name "NAME" ...
python3 scripts/ares_client.py search --nace CODE [CODE ...] ...
python3 scripts/ares_client.py search --name "NAME" --nace CODE ... (combined)
Output modes
- default: human-readable summary
--json: normalized JSON output (stable keys)
--raw: full raw ARES payload
Examples
# ICO lookup
python3 scripts/ares_client.py ico 27604977
python3 scripts/ares_client.py ico 27604977 --json
python3 scripts/ares_client.py ico 27604977 --raw
# Search by name
python3 scripts/ares_client.py search --name Google
python3 scripts/ares_client.py search --name Google --limit 3 --json
python3 scripts/ares_client.py search --name Google --city Praha --limit 10 --offset 0
python3 scripts/ares_client.py search --name Google --limit 3 --pick 1
# Search by NACE code (CZ-NACE, exactly 5 digits)
python3 scripts/ares_client.py search --nace 47710 --limit 10 # all clothing retailers
python3 scripts/ares_client.py search --nace 47710 --city Praha --json # clothing retailers in Praha
python3 scripts/ares_client.py search --nace 47710 47910 --limit 5 # clothing retail + mail order
# Combined: name + NACE (AND filter)
python3 scripts/ares_client.py search --name sport --nace 47710 --json # "sport" in clothing retail
Normalized JSON
ico output:
{ "subject": { "name", "ico", "dic", "datumVzniku", "address", "codes", "decoded" } }
search output:
{ "query", "total", "items", "picked?" }
query includes: name (nullable), city (nullable), nace (nullable array), limit, offset
dic can be null.
datumVzniku can be null.
Error JSON contract (--json only)
{
"error": {
"code": "validation_error | ares_error | network_error",
"message": "Human readable message",
"status": 429,
"details": {}
}
}
Validation and exits
- ICO: exactly 8 digits + mod11 checksum
- Search: at least
--name (length >= 3) or --nace required; both can be combined
--nace: exactly 5 digits per code (CZ-NACE format, e.g. 47710); multiple codes accepted (space-separated)
--limit: default 10, capped to 100
--offset: must be >= 0
- Exit codes:
0 success
1 validation error
2 ARES non-OK response
3 network/timeout
Caching and decoding
- Legal form decoding (
PravniForma) is loaded via POST /ciselniky-nazevniky/vyhledat
- Cache path:
skills/ares-business-registry/.cache/pravni_forma.json
- Cache TTL: 24h
- In-memory fallback is used if cache file is stale/unavailable
- Curated overrides:
112 -> s.r.o.
121 -> a.s.
141 -> z.s.
701 -> OSVČ
301 -> s.p.
331 -> p.o.
NACE code search
--nace sends the czNace field to the ARES complex filter endpoint
- Codes must be exactly 5 digits (CZ-NACE_2025 format)
- Multiple codes can be passed (space-separated) — ARES returns entities matching any of them
- When combined with
--name, both filters apply as AND (entities must match name AND have the NACE code)
- NACE-only search (without
--name) is supported — useful for browsing all entities in a sector
- Common e-commerce NACE codes:
47710 — Retail sale of clothing
47910 — Retail sale via mail order or internet
47410 — Retail sale of computers and software
47750 — Retail sale of cosmetic and toilet articles
46420 — Wholesale of clothing and footwear
- Full CZ-NACE list: https://www.czso.cz/csu/czso/klasifikace_ekonomickych_cinnosti_cz_nace
City filter limitation
--city maps to sidlo.nazevObce (structured filter).
- Matching remains best-effort only; ARES server-side matching/ranking can still return records outside the expected municipality.
Retries and rate limits
- HTTP timeout: connect 5s, read 20s
- Retries for transient failures:
429/502/503/504 + network timeout/connection issues
- Backoff:
1s, 2s, 4s
- Honors
Retry-After for 429 where provided
1---2name: ares-business-registry3description: Query Czech ARES business registry by ICO or name with human/JSON/raw outputs, retries, and legal-form decoding.4---5
6# ARES Business Registry (CZ)
7
8Use `scripts/ares_client.py` for ICO lookup and business search.
9
10## Working directory
11
12- From workspace root:
13 - `python3 skills/ares-business-registry/scripts/ares_client.py ...`
14- From `skills/ares-business-registry`:
15 - `python3 scripts/ares_client.py ...`
16
17## Commands
18
19You can run via the wrapper (recommended):
20- `./ares ico <ico>`
21- `./ares name "NAME" [--nace CODE ...] [--city CITY] [--limit N] [--offset N] [--pick INDEX]`
22
23The underlying script also supports:
24- `python3 scripts/ares_client.py search --name "NAME" ...`
25- `python3 scripts/ares_client.py search --nace CODE [CODE ...] ...`
26- `python3 scripts/ares_client.py search --name "NAME" --nace CODE ...` (combined)
27
28## Output modes
29
30- default: human-readable summary
31- `--json`: normalized JSON output (stable keys)
32- `--raw`: full raw ARES payload
33
34## Examples
35
36```bash
37# ICO lookup
38python3 scripts/ares_client.py ico 27604977
39python3 scripts/ares_client.py ico 27604977 --json
40python3 scripts/ares_client.py ico 27604977 --raw
41
42# Search by name
43python3 scripts/ares_client.py search --name Google
44python3 scripts/ares_client.py search --name Google --limit 3 --json
45python3 scripts/ares_client.py search --name Google --city Praha --limit 10 --offset 0
46python3 scripts/ares_client.py search --name Google --limit 3 --pick 1
47
48# Search by NACE code (CZ-NACE, exactly 5 digits)
49python3 scripts/ares_client.py search --nace 47710 --limit 10 # all clothing retailers
50python3 scripts/ares_client.py search --nace 47710 --city Praha --json # clothing retailers in Praha
51python3 scripts/ares_client.py search --nace 47710 47910 --limit 5 # clothing retail + mail order
52
53# Combined: name + NACE (AND filter)
54python3 scripts/ares_client.py search --name sport --nace 47710 --json # "sport" in clothing retail
55```
56
57## Normalized JSON
58
59- `ico` output:
60 - `{ "subject": { "name", "ico", "dic", "datumVzniku", "address", "codes", "decoded" } }`
61- `search` output:
62 - `{ "query", "total", "items", "picked?" }`
63 - `query` includes: `name` (nullable), `city` (nullable), `nace` (nullable array), `limit`, `offset`
64- `dic` can be `null`.
65- `datumVzniku` can be `null`.
66
67## Error JSON contract (`--json` only)
68
69```json
70{
71 "error": {
72 "code": "validation_error | ares_error | network_error",
73 "message": "Human readable message",
74 "status": 429,
75 "details": {}
76 }
77}
78```
79
80## Validation and exits
81
82- ICO: exactly 8 digits + mod11 checksum
83- Search: at least `--name` (length >= 3) or `--nace` required; both can be combined
84- `--nace`: exactly 5 digits per code (CZ-NACE format, e.g. `47710`); multiple codes accepted (space-separated)
85- `--limit`: default 10, capped to 100
86- `--offset`: must be >= 0
87- Exit codes:
88 - `0` success
89 - `1` validation error
90 - `2` ARES non-OK response
91 - `3` network/timeout
92
93## Caching and decoding
94
95- Legal form decoding (`PravniForma`) is loaded via POST `/ciselniky-nazevniky/vyhledat`
96- Cache path: `skills/ares-business-registry/.cache/pravni_forma.json`
97- Cache TTL: 24h
98- In-memory fallback is used if cache file is stale/unavailable
99- Curated overrides:
100 - `112 -> s.r.o.`
101 - `121 -> a.s.`
102 - `141 -> z.s.`
103 - `701 -> OSVČ`
104 - `301 -> s.p.`
105 - `331 -> p.o.`
106
107## NACE code search
108
109- `--nace` sends the `czNace` field to the ARES complex filter endpoint
110- Codes must be exactly 5 digits (CZ-NACE_2025 format)
111- Multiple codes can be passed (space-separated) — ARES returns entities matching **any** of them
112- When combined with `--name`, both filters apply as AND (entities must match name AND have the NACE code)
113- NACE-only search (without `--name`) is supported — useful for browsing all entities in a sector
114- Common e-commerce NACE codes:
115 - `47710` — Retail sale of clothing
116 - `47910` — Retail sale via mail order or internet
117 - `47410` — Retail sale of computers and software
118 - `47750` — Retail sale of cosmetic and toilet articles
119 - `46420` — Wholesale of clothing and footwear
120- Full CZ-NACE list: https://www.czso.cz/csu/czso/klasifikace_ekonomickych_cinnosti_cz_nace
121
122## City filter limitation
123
124- `--city` maps to `sidlo.nazevObce` (structured filter).
125- Matching remains best-effort only; ARES server-side matching/ranking can still return records outside the expected municipality.
126
127## Retries and rate limits
128
129- HTTP timeout: connect 5s, read 20s
130- Retries for transient failures: `429/502/503/504` + network timeout/connection issues
131- Backoff: `1s`, `2s`, `4s`
132- Honors `Retry-After` for 429 where provided