포스팅 개요
전자공시시스템(DART, Data Analysis, Retrieval and Transfer System)은 상장법인 등이 공시서류를 인터넷으로 제출하고, 투자자는 이를 활용해 다양한 기업의 정보를 확인할 수 있도록 지원해주는 시스템입니다.
요즘 주식과 같은 재테크를 활발하게 하면서 기업에 대한 다양한 정보를 쉽게 접근해서 분석하고자 하는 니즈가 꽤 있는데요. 기업 분석을 위해서 전자공시 DART에서 제공해주는 API(DART API)를 사용하면 쉽게 기업에 대한 다양한 정보를 활용할 수 있습니다.
이번 포스팅에서는 전자공시 DART의 API를 신청하고 파이썬(Python)을 통해 데이터를 가져올 수 있는 예제를 정리해보겠습니다.
- DART: https://dart.fss.or.kr/main.do
- OPEN DART: https://opendart.fss.or.kr/
전자공시 OPENDART 시스템
25년도 1분기 XBRL 주석 미제출 및 정정 예정 법인 안내 25년도 1분기보고서에 XBRL 주석을 포함하여 공시하여야 하나 '25.5.15. 제출 마감일 기준 XBRL 주석을 제출하지 않은 법인이 있어 다음과 같이
opendart.fss.or.kr
포스팅 본문
OPEN DART는 전자공시 시스템(DART)에 공시되고 있는 공시보고서 원문 등을 오픈 API를 통해 활용할 수 있는 API 서비스입니다. 활용을 원하는 (개인 기관 등) 사람들이 이용할 수 있습니다. OPEN DART API의 특징은 다음과 같습니다.
- DART 공시원문을 활용할 수 있습니다. DART에 공시되는 공시보고서의 원문을 XML 형식으로 다운로드 받아 원하는 자료를 자유롭게 추출하여 사용할 수 있습니다.
- 주요 공시 및 재무정보를 제공해줍니다. 기업의 사업보고서 주요항목 및 주요재무계정, 지분보고서, 주요사항보고서, 증권 신고서 등의 종합 정보를 확인할 수 있습니다.
- 대용량 재무정보를 제공해줍니다. 상장법인 및 주요 비상장법인에서 제출한 정기보고서의 재무제표를 분기별로 다운로드 받을 수 있습니다.
OPEN DART 이용하기 - 회원가입 및 API Key 발급 받기
OPEN DART API 서비스를 사용하려면 가장 먼저, API Key를 받아야 하는데요. 처음엔 회원가입을 해야하는 줄 알았는 데, 인증키 신청으로도 되더라구요.
로그인 버튼을 누르면 위 사진과 같은 화면으로 들어오게 되는데요. 여기서 인증키 신청을 클릭합니다.
그러면 간단한 동의서 체크와 위와 같이 인증키 신청하는 폼을 몇 개 작성하게 됩니다.
저는 개인용으로 신청했고, 사용 용도도 개인적 데이터 분석으로 사용해서 제출했습니다.
이렇게 간단히 신청을 하게 되면, 아래와 같이 API Key를 받을 수 있게 됩니다.
전자공시 DART 데이터 API로 활용하기
DART에서 제공해주는 전자공시 데이터는 상당히 많이 있습니다. 기업에서 제출하는 재무정보를 포함한 다양한 정보를 확인할 수 있는데요. 예를 들어, 왼쪽 사진과 같이 정기보고서 주요 정보를 보면 증자(감자) 현황, 배당에 관한 사항, 최대주주 현황, 최대주주 변동 현황, 소액주주 현황, 임원 현황 등의 정보를 확인할 수도 있습니다.
또한, 오른쪽 사진과 같이 단일회사 주요계정, 다중회사 주요계정, 재무제표 원본파일, 단일회사 전체 재무제표, 단일회사 주요 재무지표 등의 재무정보 목록도 받을 수 있구요.
여기서, 정기보고서 재무정보 중 단일회사 주요계정 API를 확인해보겠습니다.
해당 API에 들어오게 되면, 메서드 GET으로 요청 URL이 어떻게 되고, 요청 인자(Request parameter)가 무엇이 있는 지 설명해주고 있습니다. 이 DART API의 경우 고유번호로 조회할 수 있는데요. 고유번호는 개바가이드 > 공시정보 > 고유번호를 참고해서 볼 수 있습니다.
또한, 그 아래에 응답 결과(Response parameter)에 대한 설명도 있습니다. 즉, API Request를 보냈을 때 어떤 응답을 받을 수 있는지 설명해주고 있는데요. 예를 들어, 에러 번호라던가, 사업 연도, 재무제표인지 연결재무제표인지의 구분 값, 손익계산서인지 재무상태표인지에 대한 구분 값 등 다양한 정보를 받을 수 있습니다.
즉, 이 DART API를 잘 활용한다면 기업의 자산 총계나, 부채총계, 자본에 대한 정보, 매출액 정보, 영업이익 정보 등을 데이터로 확인할 수 있게 되는 것입니다.
이렇게 DART API에 대한 설명을 OPEN DART에서 꽤나 친절하게 데이터에 대한 설명과 가이드를 해주고 있습니다.
파이썬(Python)을 활용해 API 요청하고 데이터 받아오기
자, 그러면 어떻게 저 API와 통신할 수 있을까요? 파이썬(Python)을 활용해서 간단하게 API 호출하고 결과를 받아와서 시각화 할 수 있는 방법을 알아보겠습니다.
def fetch_financial_statements(crtfc_key, corp_code, bsns_year, reprt_code):
url = "https://opendart.fss.or.kr/api/fnlttSinglAcnt.xml"
params = {
'crtfc_key': crtfc_key,
'corp_code': corp_code,
'bsns_year': bsns_year,
'reprt_code': reprt_code,
}
response = requests.get(url, params=params)
if response.status_code != 200:
raise Exception(f"[HTTP 오류] 상태 코드: {response.status_code}")
root = ET.fromstring(response.content)
status = root.findtext("status")
message = root.findtext("message")
if status != '000':
error_desc = ERROR_MESSAGES.get(status, '알 수 없는 오류입니다.')
# 조회 데이터 없음은 경고만 출력
if status == '013':
print(f"[정보] {bsns_year}년 {REPORT_CODES[reprt_code]}: 조회된 데이터 없음.")
return []
raise Exception(f"[API 오류] 상태 코드: {status} - {error_desc}\n→ DART 응답 메시지: {message}")
results = []
for item in root.findall("list"):
data = {
'bsns_year': bsns_year,
'report_type': REPORT_CODES[reprt_code],
'rcept_no': item.findtext('rcept_no'),
'account_nm': item.findtext('account_nm'),
'fs_div': item.findtext('fs_div'),
'sj_div': item.findtext('sj_div'),
'thstrm_nm': item.findtext('thstrm_nm'),
'thstrm_dt': item.findtext('thstrm_dt'),
'thstrm_amount': item.findtext('thstrm_amount'),
'frmtrm_nm': item.findtext('frmtrm_nm'),
'frmtrm_dt': item.findtext('frmtrm_dt'),
'frmtrm_amount': item.findtext('frmtrm_amount'),
'currency': item.findtext('currency'),
}
results.append(data)
return results
def fetch_all_reports_last_n_years(crtfc_key, corp_code):
current_year = datetime.now().year
years = [str(current_year - 1), str(current_year)]
all_data = []
for year in years:
for code in REPORT_CODES.keys():
print(f"수집 중: {year}년 {REPORT_CODES[code]}")
try:
result = fetch_financial_statements(crtfc_key, corp_code, year, code)
all_data.extend(result)
except Exception as e:
print(f"[오류] {year}년 {REPORT_CODES[code]} - {e}")
df = pd.DataFrame(all_data)
return df
위 코드는 기업의 재무제표를 자동으로 수집하는 것을 목표로 구성된 코드입니다. 이 코드가 동작되는 순서는
1. 특정 기업과 기간을 지정합니다.
2. DART API에 요청을 보내 재무제표 데이터를 받아옵니다.
3. 여러 연도, 여러 종류의 보고서를 반복적으로 수집합니다.
4. 데이터를 정리해서 Python의 데이터프레임(pandas dataframe)으로 만들어서 제공합니다.
예를 들어서, 삼성전자의 2023년 사업보고서 데이터를 보고 싶다면
- corp_code = '00126380', bsns_year='2023', reprt_code = '11011'과 같이 설정할 수 있습니다.
저는 2년치의 모든 보고서를 반복적으로 수집하도록 했습니다.
Open DART API 키를 넣고, 실행시키면 위와 같이 수집이 정상적으로 되는 것을 확인할 수 있습니다.
이 데이터를 확인해보면 아래와 다양한 기업 정보가 담겨있는 것을 확인할 수 있는데요.
이 중에서 자신이 원하는 정보를 기준으로 다양하게 시각화 및 분석을 하면서 기업 정보에 대한 분석을 수행할 수 있습니다.
예를 들어, 기업의 자산, 부채, 자본 추이를 알고 싶다거나, 영업이익률, 순이익률을 알고 싶다면 아래와 같이 분석을 할 수도 있겠죠.
이렇게 전자공시 서비스인 DART의 OPEN DART API를 이용하면 다양한 기업 정보를 가져올 수 있고, 원하는 방식대로 데이터를 추출 및 분석할 수 있습니다.
이를 잘 활용한다면 주식 투자와 같은 재테크에도 잘 활용할 수 있겠죠?
도움이 되셨기를 바랍니다.
'python' 카테고리의 다른 글
한국은행 ECOS Open API 사용 방법과 Python API 활용 예제 (3) | 2025.07.14 |
---|---|
Kipris plus API 활용하는 방법 - 특허 API 사용법과 Python 연동 예시 (0) | 2025.05.19 |
python(파이썬) jupyter notebook cell 너비(width) 크기 및 dataframe 크기 조절 방법 정리 (0) | 2021.05.28 |
윈도우에서 파이썬 konlpy 형태소 분석기 및 Mecab(은전한닢) 설치하고 사용자 사전 적용하기 - Python install konlpy on windows (10) | 2021.03.22 |
파이썬(Python) 형태소 분석기를 활용한 한국어 원형 복원 분석기 설치 및 설정하기 (2) | 2021.03.13 |