GET /search
Company records matching filters. 1 credit per row returned; a search that matches nothing costs 0.
Company records matching filters. 1 credit per row returned; a search that matches nothing costs 0.
curl -H "Authorization: Bearer $KCID_KEY" \
".../search?industry=26®ion=수원시&size=1000%2B&limit=3"
{
"returned": 3,
"results": [
{ "brn": "1248100998",
"name_en": "SAMSUNG ELECTRONICS CO,.LTD",
"name_ko": "삼성전자(주)",
"ksic_code": "26519",
"ksic_name_en": "Manufacture of video and other visual equipment",
"address_en": "129, Samseong-ro, Yeongtong-gu, Suwon-si, Gyeonggi-do",
"ei_workers": 160917,
"nps_latest": 125592, "nps_period": "2026-07", ... },
...
],
"credits_spent": 3,
"credits_remaining": 47
}
Rows are full company records — the same shape as
/companies/{brn}, worksite addresses included.
There is no second call to fetch details.
Filters
name | English, romanized or Korean. The legal form is ignored, so
주식회사 삼성전자, 삼성전자 and samsung electronics
all reach the same company |
|---|---|
brn | Exact 10-digit registration number |
industry | KSIC code by prefix. 26 is the division
(electronics), 26299 one exact class.
All 77 divisions, with how many companies each holds → |
region | Province (경기도) or city/district (수원시) |
size | 10-49 · 50-99 · 100-299
· 300-999 · 1000+ |
status | active · suspended · closed |
established_from / _to | Four-digit years |
has | Comma-separated: pension_series · crno
· contact · listed · sites. Only companies that carry those —
the monthly series exists for 91.9%, so filter on it before you buy.
sites means more than one worksite address |
limit | Rows to return. Default 10 — the default is your default bill. Up to 1,000 |
cursor | The next_cursor from the previous page. Omit for
the first page |
Filters combine with AND. Results are ordered by employees, largest first, so a narrow
limit gives you the companies most people mean.
Paging past 1,000
A full page comes back with next_cursor. Send it as cursor to get the
next one. When the response has no next_cursor, you have reached the end.
curl -H "Authorization: Bearer $KCID_KEY" \
".../search?industry=26&limit=1000"
# → { "returned": 1000, "next_cursor": "22237.1428145237", ... }
curl -H "Authorization: Bearer $KCID_KEY" \
".../search?industry=26&limit=1000&cursor=22237.1428145237"
Paging costs the same as one large call — 1 credit per row either way. The cursor is positional, not a snapshot: if the data changes between pages, rows can shift. For a consistent extract, pull the pages in one sitting.
An unknown value is an error, not an empty result. size=big returns
400 bad_query naming the accepted values — a typo should not look like
"no such companies".
Count before you pull
curl -H "Authorization: Bearer $KCID_KEY" \
".../search?industry=26&count_only=true"
{ "total": 3152, "credits_spent": 1, "credits_remaining": 49 }
Narrowing filters is cheap: 1 credit per count, regardless of how many match. Row responses do not carry a total — counting every match on every search would cost you nothing and cost us everything, so it is its own call.
Missing an endpoint or a field? Say what you were trying to do — it is read by the person who builds this.