쓸모 쓸모연구소 · 실전 노트
제 740 호이번 주 새 글 260 편2026 · 10 · 30
챗GPT·제미나이⁠·AI 소식
DART · 챗GPT

오픈다트 API 사용법, 인증키 발급부터 재무제표 불러오기까지

오픈다트 API를 쓰면 전자공시(DART)에 올라온 기업 재무제표를 사이트에 들어가 하나씩 베끼지 않고 바로 불러올 수 있습니다. 이 글은 개발을 모르는 사람 기준으로 오픈다트 API 사용법을 인증키 발급, 회사 고유번호 찾기, 재무제표 호출 주소 만들기, 응답 읽기 순서로 설명하고, 챗GPT 맞춤형 GPT의 작업(Actions)에 붙일 때 쓰는 스키마 코드를 읽는 법과 주의점까지 다룹니다.

오픈다트 API 사용법, 인증키 발급부터 재무제표 불러오기까지 삽화
삽화 · 쓸모연구소

오픈다트 API로 줄일 수 있는 반복 업무

경쟁사 공시가 올라올 때마다 전자공시 시스템에 들어가 매출액⁠·비용⁠·영업이익을 확인하고, 엑셀 숫자를 고치고, 전년 같은 기간과 비교해 증감을 계산하고, 왜 늘었는지 줄었는지 재무제표를 뒤지는 일. 재무⁠·경영 기획 업무에서는 분기마다 되풀이되는 일입니다.

오픈다트(OpenDART)는 금융감독원 전자공시 시스템의 공시 정보와 재무제표 데이터를 누구나 프로그램으로 가져다 쓸 수 있게 열어 둔 서비스입니다. API로 받으면 원하는 회사, 연도, 보고서의 숫자를 한 번에 불러와 엑셀이나 AI 도구로 바로 넘길 수 있습니다.

API와 인증키, 먼저 이해하고 넘어가기

  • API는 한 프로그램이 다른 프로그램의 기능이나 데이터를 쓸 수 있게 만든 통로입니다. 어떤 웹사이트에서만 하던 일을 다른 앱이나 엑셀에서 대신 할 수 있게 해 줍니다.
  • 카카오맵의 버스 도착 시간도 공공기관이 API로 내보내는 정보를 받아 보여 주는 것입니다.
  • 그 통로를 쓰려면 서로 약속된 열쇠가 필요한데, 그게 API 키(인증키)입니다. 오픈다트 인증키는 40자리 문자열입니다.

인증키는 비밀번호처럼 다룹니다. 노출되면 다른 사람이 내 키로 호출해 하루 호출 한도를 다 써 버릴 수 있고, 유료 API라면 비용까지 생깁니다.

1. 오픈다트 인증키 발급 (1~21단계)

준비물

  • 인증 메일을 받을 수 있는 이메일 주소
  • 발급받은 키를 적어 둘 메모장

신청하기

  1. 검색창에 "오픈다트"를 검색합니다.
    • 확인: 검색 결과에 오픈다트(opendart.fss.or.kr)가 보입니다.
  2. 오픈다트 사이트에 들어갑니다.
    • 확인: 첫 화면이 열립니다.
  3. 화면 왼쪽의 "인증키 신청"을 누릅니다.
    • 확인: 신청 화면으로 넘어갑니다.
  4. 필수 약관에 동의합니다.
  5. 신청 구분에서 "개인"을 누릅니다.
    • 확인: 개인 신청 입력 화면이 나옵니다.
  6. 이메일 주소를 입력합니다.
  7. 비밀번호를 설정합니다.
  8. API 사용 환경을 고릅니다. 챗GPT 같은 외부 서비스에서 부를 계획이면 "외부"에 해당하는 항목을 고릅니다.
  9. 사용 용도에 "기업 분석"처럼 쓰려는 목적을 적습니다.
  10. URL 칸은 필수가 아니면 비워 둡니다.
    • 확인: 비워도 다음으로 진행됩니다.
  11. 등록을 누릅니다.
    • 확인: 입력한 메일로 인증키 신청 확인 메일이 옵니다.

메일 인증과 키 확인

  1. 메일함에서 금융감독원이 보낸 인증키 신청 확인 메일을 엽니다.
  2. 메일 안의 인증 링크를 누릅니다.
    • 확인: 본인 확인이 끝나고 인증이 완료됩니다.
  3. 오픈다트 사이트에 다시 들어갑니다.
  4. 등록한 이메일 주소를 입력합니다.
  5. 비밀번호를 입력해 로그인합니다.
    • 확인: 로그인 상태가 됩니다.
  6. "인증키 신청⁠·관리" 메뉴로 들어갑니다.
  7. "인증키 관리" 탭을 누릅니다.
    • 확인: 승인된 항목이 보입니다.
  8. 바로 아래 "오픈API 이용현황"으로 들어갑니다.
    • 확인: 40자리 API 키가 보입니다.
  9. 키를 복사합니다.
  10. 메모장에 붙여 넣고 저장합니다.
    • 주의: 이 키는 블로그, 공유 문서, 남에게 보이는 프롬프트에 붙여 넣지 않습니다.

메뉴 이름과 위치는 사이트 개편으로 조금 달라질 수 있습니다. 같은 이름이 안 보이면 "인증키"가 들어간 메뉴를 찾습니다.

2. 회사 고유번호(corp_code) 찾기 (22~24단계)

오픈다트 재무 API는 회사 이름이 아니라 8자리 고유번호로 회사를 찾습니다. 종목코드(6자리)와는 다른 번호입니다.

  1. 개발가이드의 "공시정보 → 고유번호" 항목을 엽니다.
    • 확인: 요청 주소가 https://opendart.fss.or.kr/api/corpCode.xml이고 인증키 하나만 넣으면 된다고 적혀 있습니다.
  2. 브라우저 주소창에 아래 주소를 넣고 엽니다. 내키는 메모장의 40자리 키로 바꿉니다.
프롬프트
https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=내키
  • 확인: 파일이 내려받아집니다. 결과는 XML이 담긴 ZIP 파일입니다. 브라우저가 XML로 저장하면 확장자를 .zip으로 바꿔 압축을 풉니다.
  1. 압축을 푼 XML 파일을 열어 회사 이름으로 검색합니다.
    • 확인: corp_name 옆의 corp_code(8자리)가 찾던 고유번호입니다. 상장사는 stock_code(6자리 종목코드)도 함께 있습니다.

파일이 크니 챗GPT에 XML을 올리고 "○○ 회사의 corp_code를 찾아 줘"라고 시켜도 됩니다.

3. 재무제표 호출 주소 만들기 (25~29단계)

  1. 개발가이드에서 "정기보고서 재무정보 → 단일회사 전체 재무제표"를 엽니다.
    • 확인: 요청 주소와 요청 인자 표가 보입니다.
  2. 요청 인자를 확인합니다. 다섯 개 모두 필수입니다.
인자 뜻 넣는 값
crtfc_key API 인증키 40자리 키
corp_code 고유번호 8자리 숫자
bsns_year 사업연도 4자리 연도(2015년 이후)
reprt_code 보고서 코드 11013 1분기, 11012 반기, 11014 3분기, 11011 사업보고서
fs_div 개별/연결 구분 OFS 개별재무제표, CFS 연결재무제표
  1. 인자를 이어 붙여 호출 주소를 만듭니다. 아래는 삼성전자(고유번호 00126380)의 2023년 사업보고서 연결재무제표를 부르는 예입니다.
프롬프트
https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json?crtfc_key=내키&corp_code=00126380&bsns_year=2023&reprt_code=11011&fs_div=CFS
  1. 내키를 내 인증키로 바꿉니다.
  2. 완성한 주소를 브라우저 주소창에 넣고 엽니다.
    • 확인: 화면에 긴 JSON 데이터가 나오고, 맨 앞쪽 status가 "000"입니다. 키가 제대로 작동한다는 뜻입니다.

개발가이드 화면의 설명이 낯설면 화면 내용을 통째로 복사해 챗GPT에 붙여 넣고 "이 API를 호출하는 주소를 만드는 방법을 비개발자 기준으로 알려 줘"라고 요청해도 됩니다. 연결재무제표는 회사가 지배하는 자회사의 실적까지 합쳐 보고하는 재무제표라고 이해하면 됩니다.

4. 응답 JSON 읽는 법

JSON은 데이터를 주고받는 형식으로, 두 가지 모양이 기본입니다.

  • 객체: 이름표를 붙여 정보를 담은 상자입니다. {"이름": "수인", "나이": 10}처럼 중괄호로 묶습니다.
  • 배열: 순서대로 나열한 묶음입니다. ["사과", "딸기", "포도"]처럼 대괄호로 묶습니다.
  • 둘을 섞으면 {"이름": "수인", "좋아하는 과일": ["사과", "딸기"]}처럼 객체 안에 배열이 들어갑니다.

JSON은 태그로 감싸는 XML보다 사람이 읽기 쉽고 가벼워서 요즘 웹 API 대부분이 씁니다. 오픈다트는 JSON과 XML 둘 다 제공하고, 주소 끝의 .json과 .xml로 고릅니다.

단일회사 전체 재무제표 응답에서 볼 항목은 이렇습니다.

  • status, message: 처리 결과. 000이면 정상입니다.
  • list: 계정과목 하나하나가 객체로 들어 있는 배열입니다.
  • sj_div: 어떤 재무제표인지. BS 재무상태표, IS 손익계산서, CIS 포괄손익계산서, CF 현금흐름표, SCE 자본변동표
  • account_nm: 계정명(매출액, 영업이익 등)
  • thstrm_amount: 이번 기 금액, frmtrm_amount: 전기 금액
  • thstrm_add_amount, frmtrm_add_amount: 분기⁠·반기 보고서의 누적 금액

자주 만나는 오류 코드도 알아 둡니다.

  • 010: 등록되지 않은 키
  • 013: 조회된 데이터 없음(연도⁠·보고서 코드를 다시 확인)
  • 020: 요청 제한 초과(일반적으로 하루 20,000건)
  • 100: 필드 값이 잘못됨

5. 맞춤형 GPT 작업(Actions) 스키마 읽는 법

챗GPT의 맞춤형 GPT에 외부 API를 붙이는 기능을 "작업(Actions)"이라고 합니다. 작업을 만들려면 그 API가 무엇을 할 수 있는지 적은 설계도, 곧 OpenAPI 형식의 스키마를 JSON이나 YAML로 넣어야 합니다. 스키마는 챗GPT에게 "이렇게 생긴 데이터를 이 주소에서 이렇게 요청하면 된다"고 미리 알려 주는 문서입니다.

손익계산서만 가져오도록 짠 스키마의 뼈대는 이렇습니다.

프롬프트
{
  "openapi": "3.1.0",
  "info": {
    "title": "DART 단일회사 재무제표",
    "version": "1.0.0",
    "description": "특정 회사의 사업연도별 재무제표 중 손익계산서 항목을 가져온다"
  },
  "servers": [{ "url": "https://opendart.fss.or.kr" }],
  "paths": {
    "/api/fnlttSinglAcntAll.json": {
      "get": {
        "summary": "단일회사 전체 재무제표 조회",
        "operationId": "getFinancialStatements",
        "parameters": [
          { "name": "corp_code", "in": "query", "required": true,
            "schema": { "type": "string", "pattern": "^[0-9]{8}$" } },
          { "name": "bsns_year", "in": "query", "required": true,
            "schema": { "type": "string", "pattern": "^[0-9]{4}$" } },
          { "name": "reprt_code", "in": "query", "required": true,
            "schema": { "type": "string", "enum": ["11013", "11012", "11014", "11011"] } },
          { "name": "fs_div", "in": "query", "required": true,
            "schema": { "type": "string", "enum": ["OFS", "CFS"] } }
        ],
        "responses": {
          "200": {
            "description": "성공",
            "content": { "application/json": { "schema": { "type": "object" } } }
          }
        }
      }
    }
  }
}

한 줄씩 읽으면 이렇습니다.

  • openapi 3.1.0: 이 스키마가 OpenAPI 3.1 형식으로 쓰였다는 뜻입니다. 형식 버전이 틀리면 작동하지 않습니다.
  • info: 이 API의 설명입니다. title은 무엇을 하는지, version은 OpenAPI 버전이 아니라 이 API 문서의 버전, description은 어떤 정보를 가져오는지 적습니다.
  • servers: 통로의 주소입니다. 정보를 주는 쪽이 정해 줍니다.
  • paths: 그 통로에서 무엇을 가져오는지입니다. 서버 주소와 패스를 합치면 최종 URL이 됩니다. 다른 오픈다트 API도 서버는 같고 패스만 다릅니다.
  • summary, operationId: 요약 설명과 작업 이름입니다. operationId는 한글 없이 영문 규칙대로 짓는 이름표로, 챗GPT에게 만들어 달라고 하면 됩니다.
  • parameters: 요청할 때 넣는 값입니다. in: query는 주소 뒤 물음표 다음에 붙는 값이라는 뜻, required: true는 반드시 넣어야 한다는 뜻, type: string은 문자열이어야 한다는 뜻입니다.
  • pattern: 값의 모양 규칙입니다. ^는 시작, [0-9]는 숫자 하나, {8}은 8자리, $는 끝을 뜻합니다. 고유번호는 숫자 8자리여야 한다는 규칙입니다.
  • responses 200: 요청이 성공했을 때의 응답입니다. 200은 모든 웹 API가 공통으로 쓰는 HTTP 성공 코드입니다. application/json은 응답이 JSON으로 온다는 뜻입니다.
  • schema와 properties: 응답 데이터의 구조를 미리 적는 곳입니다. 개발가이드의 응답 결과 표(상태, 메시지, 접수번호, 계정명, 금액 등)를 보고 채웁니다.

이걸 외울 필요는 없습니다. 다만 구조를 알아야 챗GPT에게 "손익계산서만 걸러서 가져오게 고쳐 줘"처럼 원하는 형태를 정확히 요청할 수 있습니다.

맞춤형 GPT에 붙일 때 꼭 알아 둘 점

맞춤형 GPT는 지원 종료가 예정돼 있다

OpenAI 도움말(2026년 10월 기준)에 따르면 맞춤형 GPT는 2026년 12월 11일 지원 종료가 예정돼 있고, 개인 요금제(무료⁠·Go·Plus·Pro)에서는 새 GPT를 만들거나 게시할 수 없습니다. 이미 만든 GPT는 종료일까지 쓰고 고칠 수 있습니다. 대신 쓰라고 안내하는 플러그인으로 옮길 때 지침과 지식 파일은 넘어가지만 맞춤 작업(Actions)은 자동으로 옮겨지지 않습니다. 오픈다트 연결을 계속 쓰려면 플러그인 쪽에서 앱이나 맞춤 MCP 서버로 연결을 다시 만들어야 합니다.

인증키를 스키마에 넣으면 노출된다

작업의 인증 설정은 API 키를 Basic, Bearer, 또는 사용자 지정 헤더로만 보낼 수 있습니다. 그런데 오픈다트는 인증키를 주소 뒤의 crtfc_key 값(쿼리)으로 받습니다. 그래서 인증 설정 칸으로는 키를 넘길 수 없고, 키를 스키마나 지침에 직접 적어야 겨우 작동하는 상황이 생깁니다. 이렇게 하면 GPT를 쓰는 사람이 지침을 캐물어 키를 알아낼 수 있습니다.

연습용이 아니라면 키를 숨기는 구조를 씁니다. 키를 서버 쪽에 보관하고 대신 호출해 주는 중간 서버(프록시)를 두거나, 키를 환경 변수로 숨긴 MCP 서버를 만들어 연결하는 방식입니다. 이 부분은 코덱스 같은 코딩 도구에 "오픈다트 키를 숨기는 프록시를 만들어 줘"라고 맡기는 편이 빠릅니다.

데이터가 너무 크면 불러오지 못한다

전체 재무제표는 계정 수가 많아 응답이 큽니다. 다른 도구에서는 잘 불러와지는데 GPT 작업에서만 실패한다면 응답 크기 때문일 수 있습니다. 손익계산서(sj_div가 IS 또는 CIS)만 걸러 쓰거나, 주요 계정만 주는 "단일회사 주요계정" API를 쓰면 줄어듭니다.

막혔을 때

  • 스키마를 붙여 넣자 빨간 오류가 뜬다: 오류 문구를 그대로 복사해 챗GPT에 붙이고 고쳐 달라고 합니다. 대부분 괄호나 쉼표가 빠졌거나 형식 버전이 틀린 경우입니다.
  • 테스트가 실패한다: 인증키가 요청에 들어가지 않은 경우가 많습니다. 브라우저에서 같은 주소를 직접 열어 status가 000인지 먼저 확인합니다.
  • status 013이 나온다: 그 연도⁠·보고서 조합의 데이터가 없습니다. 사업연도와 보고서 코드를 다시 봅니다.
  • status 020이 나온다: 하루 요청 한도를 넘었습니다. 다음 날 다시 시도하고, 반복 호출을 줄입니다.

다 끝낸 뒤 점검

  • 오픈다트 인증키를 발급받아 안전한 곳에 보관했다.
  • 고유번호 ZIP 파일에서 원하는 회사의 corp_code를 찾았다.
  • 호출 주소를 브라우저에서 열어 status 000과 재무 데이터를 확인했다.
  • 응답에서 sj_div, account_nm, thstrm_amount를 구분해 읽을 수 있다.
  • 인증키가 스키마⁠·지침⁠·공유 문서에 그대로 적혀 있지 않다.

자주 묻는 질문

오픈다트 인증키는 무료인가요?

오픈다트 인증키는 사이트에서 이메일로 신청해 무료로 발급받습니다. 일반적으로 하루 20,000건까지 요청할 수 있고, 넘으면 020 오류가 납니다.

회사 이름으로는 재무제표를 부를 수 없나요?

재무 API는 회사 이름이 아니라 8자리 고유번호(corp_code)로 회사를 찾습니다. 고유번호 API(corpCode.xml)로 받은 ZIP 파일에서 회사 이름을 검색해 번호를 확인합니다.

분기 실적은 어떻게 불러오나요?

reprt_code에 1분기 11013, 반기 11012, 3분기 11014를 넣습니다. 사업보고서는 11011입니다. 분기⁠·반기 보고서는 누적 금액 항목(thstrm_add_amount)도 함께 봅니다.

지금도 맞춤형 GPT에 오픈다트를 연결할 수 있나요?

이미 만든 GPT라면 지원 종료 예정일(2026년 12월 11일)까지 작업을 고쳐 쓸 수 있지만, 개인 요금제에서는 새 GPT를 만들 수 없습니다. 맞춤 작업은 플러그인으로 자동 이전되지 않으니, 계속 쓰려면 플러그인에서 MCP 서버 같은 방식으로 연결을 다시 만들어야 합니다.

이 글의 본문은 아래 원본 유튜브 영상의 내용을 바탕으로 쓸모연구소가 다시 정리해 쓴 것입니다. 세부 내용과 최신 정보는 원본 영상과 공식 안내에서 확인해 주세요.

원본 영상 보러가기 ↗