한국어Sign inRequest a trial

Somoon Data documentation

Somoon provides hiring data for Korean listed companies: posting-level records for the full KOSPI and KOSDAQ universe, mapped to exchange identifiers, with point-in-time observation dates. Alongside postings, it offers company fundamentals from DART filings and monthly workforce flows from National Pension Service records.

There are three ways to work with the data: the Explorer and company profiles in the portal, the REST API, and bulk files of the full history.

Snapshot: 2026-10-21.

Quickstart

  1. Sign in at data.somoon.ai with the credentials for your trial and accept the evaluation terms.
  2. Create an API key under Account & API keys. Trial keys return sandbox data — synthetic companies and values with the production schema — so you can build and test your integration; subscription keys return live data.
  3. Make your first request:
curl -s "https://data.somoon.ai/api/v1/metrics/postings?stock_code=005380&freq=month" \
  -H "Authorization: Bearer $SOMOON_API_KEY"

Or load the full history into pandas:

import pandas as pd
panel = pd.read_parquet("somoon_panel_weekly_2026-10-21.parquet")   # from Bulk downloads
universe = pd.read_parquet("somoon_universe_2026-10-21.parquet")
df = panel.merge(universe[["stock_code", "isin", "live_since"]], on="stock_code")
df = df[df.week_start >= df.live_since]          # live history only

Coverage

MeasureValue
Active KOSPI / KOSDAQ companies2,648 (829 / 1,819)
Delisted companies retained58
Companies with postings2,243
Unique postings held132,889
of which observed live116,024
Earliest posting date2022-05-24
Postings carrying a published start date32.5%
Companies with DART fundamentals666
Companies with NPS workforce flows630

Postings held by year (posting date)

YearUnique postingsLiveBackfilledCompanies
20221,3351,33502
20234,2794,2433669
202413,07313,0195498
202529,68821,8077,881896
202684,58375,6898,8942,193

How far back the data goes, per company

Number of companies by the age of their earliest posting — counting all postings, and counting live postings only.

HistoryCompanies — all postingsCompanies — live postings only
3+ years5755
2–3 years4841
1–2 years47235
6–12 months670890
under 6 months9961,168
Full-universe weekly collection began in April 2026; a smaller set of companies has been collected live since 2022–2023. Per-company dates are in the universe dataset (first_posting_date, live_since).

Datasets & fields

All datasets share stock_code and corp_code as join keys.

Job postings postings

Posting-level hiring data for KOSPI and KOSDAQ companies — one row per company and posting. Titles are in the original Korean. Posting body text and source URLs are not included.

FieldTypeDescription
posting_idstring(16)Stable identifier of the posting. The same posting_id appears under each company it was published for.
stock_codestring(6)KRX stock code
corp_codestring(8)DART unique corporate code
isinstring(12)ISIN of the common share (derived)
company_name_enstringCompany name in English, as registered with DART
company_name_kostringCompany name in Korean, as registered with DART
marketenumKOSPI / KOSDAQ
listing_statusenumactive / delisted — delisted companies are retained with their history
titlestringPosting title (Korean original)
categorystringJob category as published, where available
positionstringPosition / role as published, where available
posting_datedateDate the posting was published (from the posting; the date we first observed it where the posting states none)
posted_end_datedateApplication deadline as published, where available
collection_typeenumlive = observed within 30 days of publication; backfilled = published earlier and gathered when collection of the company began
first_seen_datedateDate Somoon first observed the posting. Never revised.
companies_sharing_postingintNumber of listed companies this posting is attached to (group-wide postings > 1)

Company universe & history universe

Every KOSPI and KOSDAQ company, including delisted ones, with ISIN, industry and per-company history depth. Join to the other datasets on stock_code.

FieldTypeDescription
stock_codestring(6)KRX stock code
corp_codestring(8)DART unique corporate code
isinstring(12)ISIN of the common share, derived from the stock code (KR7 + code + 00 + check digit). Preferred shares have different ISINs.
company_name_kostringCompany name in Korean (DART)
company_name_enstringCompany name in English (DART)
marketenumKOSPI / KOSDAQ
listing_statusenumactive / delisted
ksic_group_codestring(3)Korean Standard Industrial Classification, 3-digit group, where available
ksic_group_name_kostringIndustry group name in Korean
postingsintUnique postings held for the company
first_posting_datedateEarliest posting date held (includes postings published before collection began)
live_sincedateEarliest live posting — start of the company's live (point-in-time) history
posting_history_yearsfloatYears from first_posting_date to the snapshot date

Weekly hiring panel panel_weekly

Company × week counts of postings by posting date, split into live and backfilled — ready for backtests. Weeks start on Monday. Weeks with no postings have no row. Use postings_live for point-in-time work.

FieldTypeDescription
stock_codestring(6)KRX stock code
corp_codestring(8)DART unique corporate code
isinstring(12)ISIN of the common share (derived)
company_name_enstringCompany name in English
week_startdateMonday of the posting week
postingsintUnique postings published during the week
postings_liveintOf which observed live
postings_backfilledintOf which backfilled

Company fundamentals (DART) fundamentals

Headcount, average salary by gender, average tenure and key financials from annual DART filings — latest available year per company. Monetary values in KRW. Data year is given per company because filing cycles differ.

FieldTypeDescription
isinstring(12)ISIN of the common share (derived)
stock_codestring(6)KRX stock code
corp_codestring(8)DART unique corporate code
company_name_enstringCompany name in English
male_employeesintMale employees (annual business report)
female_employeesintFemale employees (annual business report)
avg_salary_male_krwintAverage annual salary per male employee, KRW
avg_salary_female_krwintAverage annual salary per female employee, KRW
avg_tenure_yearsfloatAverage tenure in years
employee_data_yearstring(4)Fiscal year of the employee figures
revenue_krwintRevenue, KRW
operating_profit_krwintOperating profit, KRW
net_income_krwintNet income, KRW
financial_data_yearstring(4)Fiscal year of the financial figures

Monthly workforce flows (NPS) workforce

Monthly hires, leavers and insured headcount per company, derived from National Pension Service workplace records. Based on the company's registered NPS workplace(s); companies with workplaces registered under other entities may be partially covered.

FieldTypeDescription
isinstring(12)ISIN of the common share (derived)
stock_codestring(6)KRX stock code
corp_codestring(8)DART unique corporate code
company_name_enstringCompany name in English
monthstring(7)Reference month, YYYY-MM
new_hiresintEmployees newly enrolled during the month
leaversintEmployees who lost enrollment during the month
insured_employeesintInsured employees at the reference month
pension_billed_krwintPension contribution billed for the month, KRW (a payroll proxy)

Methodology

Universe

All companies listed on KOSPI and KOSDAQ, synchronized weekly with DART. Companies that delist are kept with their history.

Collection

Publicly available job postings are collected every week for the full universe from company career sites and major Korean job platforms, then normalized and mapped to the listed company.

History before collection

Many platforms keep closed postings online. When a company is first collected, postings still available are included and dated by the date published in the posting. Such postings have a first_seen_date later than their posted_start_date.

De-duplication

A posting re-observed on later collections is kept once per company. Group-wide postings that list several affiliates appear under each affiliate with the same posting_id; companies_sharing_posting gives the count. Count distinct posting_id for unique postings.

Identifiers

KRX stock code and DART corporate code come from DART. ISIN is derived for the common share from the stock code (KR7 + code + 00 + ISO 6166 check digit); preferred shares and other share classes have different ISINs.

Dates and collection type

posting_date is the published start date where the posting states one, otherwise the date we first observed it. Every posting carries a collection_type: live when we observed it within 30 days of publication, backfilled when it was published earlier and gathered when we began collecting the company. first_seen_date records when we actually observed each posting and is never revised.

Fundamentals and workforce

Fundamentals are the latest annual figures filed with DART; the data year is given per company. Workforce flows come from National Pension Service workplace records and depend on how a company registers its workplaces.

Point-in-time & backtesting

Backfilled postings extend history, but they were gathered after the fact. For a signal that only uses information available at the time, use live postings.

Recommended for backtests: use postings_live from the panel_weekly dataset and start each company's series at its live_since date from the universe dataset. Use postings (live + backfilled) for descriptive analysis of hiring activity.

For live postings that carry a published start date (28,247 postings), the gap between publication and our first observation was: median 4 days, 90th percentile 18 days; 70.2% were observed within 7 days.

Trial & subscription

The trial is designed for evaluation: every aggregate and the full weekly panel, with posting-level detail available in samples.

Free trialSubscription
Coverage, charts and aggregated countsAll companies, full historyAll companies, full history
Posting-level rows in Explorer / API10 rows per query, no paging; detail for up to 25 companies per day and 100 over the trialUnlimited, with paging and CSV export
API keysSandbox — synthetic data with the production schema, for integration testingLive data
Bulk filesuniverse (full), panel_weekly (full), postings (sample), fundamentals (sample), workforce (sample)universe (full), panel_weekly (full), postings (full), fundamentals (full), workforce (full)
Rate limit60 requests / minute300 requests / minute

Limits are applied by the service to the portal and the API alike. To extend your trial or discuss a subscription, use the chat button or email bkpark@seeso.kr.

API reference

Base URL https://data.somoon.ai. Authenticate with Authorization: Bearer <API key>; keys are created in the portal. Responses are JSON. List endpoints return total and a data array and accept limit / offset. Errors return a non-2xx status with {"error": ..., "message": ...}; plan limits return 403 with "error": "plan_limit". Each response carries X-Somoon-Environment: live or sandbox.

GET /api/v1/coverage — Coverage summary

Universe size, posting totals and history depth by year for the current snapshot. Try it →

GET /api/v1/companies — Search companies

Find companies in the KOSPI/KOSDAQ universe by stock code or name (English or Korean). Try it →

ParameterDescriptionExample
qStock code or part of the company namenaver
marketKOSPI or KOSDAQ
limitMax results (1–3000)20

GET /api/v1/companies/{stock_code} — Company profile

Identifiers, industry, hiring summary and latest DART fundamentals for one company. Try it →

ParameterDescriptionExample
stock_code *KRX stock code035420

GET /api/v1/postings — Query postings

Posting-level records with filters. Subscriptions can export the full filtered result via /api/v1/postings.csv. Try it →

ParameterDescriptionExample
stock_codeOne or more stock codes, comma-separated035420
qKeyword in title, category or position (Korean or English)
fromPosting date from, YYYY-MM-DD (inclusive)2026-01-01
toPosting date to, YYYY-MM-DD (inclusive)
collection_typelive = observed around publication; backfilled = published before collection began and gathered later
marketKOSPI or KOSDAQ
sortposting_date or stock_code; prefix - for descending-posting_date
limitPage size10
offsetRows to skip0

GET /api/v1/metrics/postings — Posting counts over time

Unique postings (split live / backfilled) and number of hiring companies per week, month or year — same filters as /postings. Try it →

ParameterDescriptionExample
stock_codeOne or more stock codes, comma-separated005380
qKeyword filter
fromPosting date from, YYYY-MM-DD
toPosting date to, YYYY-MM-DD
collection_typelive = observed around publication; backfilled = published before collection began and gathered later
marketKOSPI or KOSDAQ
freqweek, month or yearmonth

GET /api/v1/workforce — Monthly workforce flows

Monthly new hires, leavers and insured headcount from National Pension Service records. Try it →

ParameterDescriptionExample
stock_code *One or more stock codes, comma-separated005380
fromStart month, YYYY-MM
toEnd month, YYYY-MM

GET /api/v1/fundamentals — Company fundamentals

Headcount, average salary by gender, tenure and financials from annual DART filings. Try it →

ParameterDescriptionExample
stock_codeOne or more stock codes, comma-separated035420
limitPage size (1–1000)100
offsetRows to skip0

Bulk delivery

During the trial, every dataset is available as a full-history file in CSV (UTF-8 with BOM) and Parquet (zstd) under Bulk downloads. After the trial, weekly full refreshes are delivered by file download or to your S3 bucket / SFTP.

Data FAQ

Answers to the questions in a standard data-sourcing questionnaire.

QuestionAnswer
ProductJob-posting level data for all KOSPI and KOSDAQ companies, mapped to KRX stock code, ISIN and DART corporate code; with company fundamentals from DART filings and monthly workforce flows from National Pension Service records.
HistoryPostings from 2022-05-24 onward. Depth varies by company — see Coverage for the per-company distribution. Full-universe weekly collection since April 2026.
FrequencyWeekly, full universe. More frequent collection for selected companies can be discussed.
Delivery time and lagSnapshots are published after each weekly collection. See Point-in-time for the observed lag between publication and first observation.
Mapped to tickersYes — every company carries a stock code and ISIN (2,243 companies with postings).
Raw vs aggregatedBoth: posting-level records and a company × week panel. Posting body text is available under a subscription.
Regional coverage / asset classKorea (KOSPI, KOSDAQ) · equities.
Source and collectionPublicly available online job postings, collected from company career sites and major Korean job platforms, then normalized and mapped to exchange identifiers. Fundamentals: DART. Workforce flows: National Pension Service public data.
Point-in-timeYes — first_seen_date on every posting, never revised, and a collection_type (live / backfilled) flag. Delisted companies retained.
DocumentationThis page: data dictionary, methodology, API reference and changelog.
Delivery methodREST API and bulk files (CSV, Parquet). S3 / SFTP delivery after the trial.
File formatCSV (UTF-8) and Parquet (zstd); JSON over the API.
Personal dataNone. Posting-level and company-level information only.
PricingProvided on request, by scope.

Compliance & sourcing

  • No personal data. No information about applicants or individual employees is collected or provided.
  • Public information. Job postings are publicly accessible online. Fundamentals come from public DART filings; workforce flows from public National Pension Service data.
  • Trial scope. Posting body text and source URLs are excluded from the trial.
  • Access records. Sign-ins, acceptance of the evaluation terms, downloads and API calls are recorded.

Questions from compliance or legal teams are welcome — contact bkpark@seeso.kr.

Changelog

DateChange
2026-10-21Data portal launched: Explorer, company profiles, REST API v1 with sandbox keys, bulk downloads, weekly panel with live / backfilled split, ISIN mapping.