Korea Data

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

nameEnglish, romanized or Korean. The legal form is ignored, so 주식회사 삼성전자, 삼성전자 and samsung electronics all reach the same company
brnExact 10-digit registration number
industryKSIC code by prefix. 26 is the division (electronics), 26299 one exact class. All 77 divisions, with how many companies each holds →
regionProvince (경기도) or city/district (수원시)
size10-49 · 50-99 · 100-299 · 300-999 · 1000+
statusactive · suspended · closed
established_from / _toFour-digit years
hasComma-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
limitRows to return. Default 10 — the default is your default bill. Up to 1,000
cursorThe 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.