
NVIDIA 내부자들이 주식을 매도하고 있는지 AI 에이전트에게 물어보았습니다. 에이전트는 공시 서류를 읽고 이사 한 명을 찾아냈습니다.
요약
Claude와 Apify MCP 서버를 활용하여 SEC 공시 서류를 실시간으로 분석하는 AI 에이전트 구축 사례를 소개합니다. 단순한 정보 검색을 넘어, 에이전트가 직접 구조화된 데이터를 가져와 내부자 거래의 실질적인 의미를 추론하는 과정을 다룹니다.
핵심 포인트
- Apify MCP 서버를 통해 Claude에 실시간 SEC 데이터 추출 도구 연결
- 단순 텍her 검색이 아닌 구조화된 공시 데이터(SEC Form 4) 기반의 추론
- Rule 10b5-1 계획 여부 등 핵심 필드를 통한 데이터 노이즈 구분
- 에이전트가 직접 도구를 호출하여 금융 분석 업무를 수행하는 워크플로우
저는 소규모 이벤트 드리븐(event-driven) 북을 운영하고 있으며, 유명 기업에 대해 가장 많이 받는 질문이자 정직하게 답하기 가장 어려운 질문은 바로 이것입니다. 내부자들이 매도하고 있는가? 단순히 "내부자 매도에 관한 무서운 헤드라인이 있는가"가 아니라, 진짜 실체를 묻는 것입니다. 누가, 얼마나 팔았는지, 그것이 결정에 의한 것인지 아니면 형식적인 절차인지, 그리고 그것이 실제로 어떤 의미를 갖는지 말입니다.
언어 모델(Language Model)에게 이 질문을 아무런 정보 없이 던지면, 쓸모없는 수준을 넘어 해로운 유창한 문단을 얻게 됩니다. 확신에 찬 어조로 말하지만, 몇 달 전의 데이터이거나 때로는 지어낸 이야기일 수도 있습니다. 내부자 거래는 공공 기록의 문제이며, 거래 후 영업일 기준 2일 이내에 SEC Form 4에 의해 공시됩니다. 공시 서류에는 정답이 들어 있습니다. 그래서 이번에는 Claude에게 답을 알고 있으라고 요구하지 않았습니다. 대신 공시 서류를 주고 나를 대신해 그것을 읽어달라고 요청했습니다.
다음은 실제 세션 내용입니다. 아래의 모든 숫자는 채팅 중에 공식 Apify MCP 서버를 통해 실시간 SEC 데이터에서 추출되었습니다. 조작된 화면도, 선별된 기록도 아닙니다. 흥미로운 점은 에이전트가 데이터를 가져왔다는 사실이 아닙니다. 가져온 데이터를 가지고 무엇을 했느냐 하는 점입니다.
사전에 미리 연결해 둔 한 가지
설정은 부끄러울 정도로 간단합니다. Apify Store에는 SEC Form 4 공시를 읽고 각 내부자 거래를 깔끔하고 구조화된 기록으로 반환하는 Actor가 있습니다. 저는 이를 공식 Apify MCP 서버를 통해 Claude의 도구(tool)로 연결했습니다. 이 서버는 어떤 Apify Actor든 모델이 대화 도중에 호출할 수 있는 기능으로 변환해 줍니다. 설정 한 줄, 재시작 한 번이면 끝납니다. 그 후 Claude는 질문이 필요할 때마다 스스로 내부자 공시를 가져올 수 있습니다.

이 액터(Actor)는 SEC Form 4 내부자 거래 스크래퍼 (SEC Form 4 Insider Trading Transactions Scraper)입니다. 티커(ticker)를 입력하면 거래당 다음 정보를 반환합니다: 내부자의 이름과 역할, 거래 코드 및 유형 (장내 매수, 장내 매도, 부여, 증여, 세금 원천징수), 주식 수, 가격, 총 가치, 내부자 지분의 변동 폭, 그리고 Rule 10b5-1 계획에 따라 실행되었는지 여부입니다. 마지막 필드는 실제 신호(signal)와 소음(noise)을 구분하는 핵심 요소이며, 이에 대해서는 나중에 다시 다루겠습니다. 핵심은 에이전트가 헤드라인을 읽는 것이 아니라, 공시 서류와 동일한 필드들을 가져와 그 데이터들을 바탕으로 추론해야 한다는 점입니다.
진짜 질문 던지기
그래서 저는 주니어 분석가에게 질문하듯 진짜 질문을 던졌습니다.
그 40개의 서류 전체에서 "내부자가 주식을 처분했다"는 문구를 읽고 패닉에 빠지는 분석가가 있다면, 그는 공시 서류를 잘못 읽은 것입니다. 에이전트는 그렇지 않았습니다. 에이전트는 사실상 다음과 같이 말했습니다. 부수적인 잡음(housekeeping)을 걷어내면, 정직한 헤드라인은 "내부자들이 주식을 투매하고 있다"가 아니라, 살펴볼 가치가 있는 18건의 실제 매도가 존재하며 이들이 집중되어 있다는 것입니다. 그러고 나서 에이전트는 더 깊이 파고들 것을 제안했습니다. 이러한 프레이밍(노이즈를 먼저 처리하고 시그널을 나중에 제시하는 방식)은 제가 정확히 원하는 방식이며, 자동화된 도구로부터 얻기 매우 어려운 결과입니다.
패턴을 특징짓게 만들기
매도 건수를 세는 것만으로는 여전히 답이 되지 않습니다. 18건의 매도는 경영진(C-suite) 전체가 조금씩 비중을 줄이는 것일 수도 있고, 혹은 한 사람이 이례적인 행동을 하는 것일 수도 있습니다. 이 두 가지는 완전히 상반된 의미를 갖습니다. 그래서 저는 에이전트에게 공개 시장 매도(open-market selling) 데이터를 개인별로 합산하고, 각 매도가 재량적(discretionary)이었는지 아니면 미리 설정된 Rule 10b5-1 계획에 따라 진행되었는지 알려달라고 요청했습니다.

이것이 해당 기업에 대한 저의 해석을 바꾼 장면입니다. 개인별로 합산해 보니, 1월 이후 5명의 내부자가 공개 시장에서 주식을 매도했으나 그 가치는 극도로 불균형했습니다. Mark A. Stevens가 2,106,682주에 걸쳐 약 $445.6M를 매도했고, 그 뒤를 이어 Aarti S. Shah가 $3.36M, Stephen C. Neal이 $3.34M, Donald F. Robertson Jr가 $0.94M, 그리고 John Dabiri가 $0.13M로 급격히 낮아졌습니다. 에이전트는 각 이름 옆에 실제로 시그널을 담고 있는 필드, 즉 매도가 재량적이었는지 아니면 사전 계획된 Rule 10b5-1 계획에 따라 실행되었는지를 표시했습니다.
에이전트가 내린 분석은 "내부자들이 4억 6천만 달러 규모의 주식을 매도했다"와 같이 공포스러운 헤드라인을 만들어낼 법한 표현보다 훨씬 더 날카로웠습니다. 에이전트는 다음과 같이 말했습니다. 이것은 광범위한 내부자의 탈출이 아닙니다. 본질적으로는 단 한 명의 이사에 의한 것입니다. Mark A. Stevens가 공개 시장 매도 금액의 약 **99%**를 차지하며, 총 7건의 거래는 모두 계획 외 (off-plan) (10b5-1 일정이 아닌 재량적 매도) 거래였습니다. 이 거래들은 두 차례의 물결로 집중되었습니다. 3월 말에 약간의 거래가 있었고, 이후 6월에 대량의 거래가 있었습니다 (6월 2일에 500,000주, 4일에 또 다른 500,000주, 18일에 885,000주). 6월의 한 블록만으로도 그는 자신의 보유 지분 중 6.76%를 줄였습니다. 매도한 다른 모든 이들은 소규모였으며, 4명 중 3명은 구조적으로 신호 가치가 거의 없는 사전 예약된 10b5-1 계획에 따라 매도했습니다. 주가가 높을 때 매도할 것으로 예상되는 CEO와 CFO는 어떨까요? 두 사람 사이에는 공개 시장 매도가 단 한 건도 없었습니다. 그들은 세금 원천징수 목적으로만 나타납니다.
이는 총계 수치가 말해주는 것과는 진정으로 다른 이야기입니다. "이사회가 탈출하고 있다"는 틀린 말입니다. "한 명의 이사가 대규모의 재량적 블록을 매도해 왔다"가 맞는 말이며, 이는 그의 공시 이력을 읽거나 이것이 알려진 자산 다각화 패턴인지 확인하는 등 실제로 무언가를 할 수 있을 만큼 충분히 구체적입니다.
맥락, 그리고 한계에 대한 솔직함
제가 마지막으로 한 작업은 이 분석이 음모론 게시판으로 변질되는 것을 막아주는 부분이었습니다. 저는 매도 행위가 회사의 공시 내용과 일치하는지, 그리고 (명시적으로) 이 신호가 무엇을 알려주고 무엇을 알려주지 않는지에 대해 솔직하게 말해달라고 요청했습니다. 동일한 MCP 연결을 통해 하나 이상의 Actor를 노출할 수 있기 때문에, 에이전트는 어떤 도구를 사용할지 지시받지 않았음에도 두 번째 도구를 찾아 사용했습니다.
에이전트는 NVIDIA의 최근 8-K 공시 서류들을 불러와 한 가지 정직한 타이밍의 우연을 포착했습니다. Stevens의 단일 최대 일일 매도 건(2026-06-18에 두 차례에 걸쳐 약 1억 8,600만 달러 규모)은 회사가 8-K(Item 8.01, 기타 사건)를 제출한 날과 동일한 날에 발생했습니다. 에이전트는 해당 날짜를 표시하면서도, 즉시 이를 인과관계로 연결 짓는 것을 거부했습니다. 그러고 나서 에이전트는 제가 가장 듣고 싶었던 말을 먼저 제안했습니다:
이것은 공개 기록을 읽는 더 빠른 방법일 뿐입니다. 이것은 투자 조언(investment advice)이 아니며, 누군가가 잘못을 저질렀다는 주장도 아닙니다. 이사의 계획된 외부 시장 매도(off-plan open-market sales)는 합법적이며 일상적인 일입니다. 사람들은 세금, 자산 다각화, 상속 계획, 새 집 마련 등 주식에 대한 견해와는 전혀 무관한 수백 가지 이유로 주식을 매도합니다. 공시 서류상의 "재량적 매도 대 10b5-1" 항목은 사실 관계를 나타내는 칸일 뿐, 비난이 아닙니다. 우연히 8-K 제출 날짜와 겹치는 매도는 각주를 달 만한 가치가 있는 우연일 뿐, 어떤 증거도 아닙니다. 스스로 실사(diligence)를 수행하십시오.
저 또한 글로 명확히 밝히고 싶습니다. 여기에 담긴 어떤 내용도 권고 사항이 아니며, 불법성을 암시하는 것도 아닙니다. 이 작업의 가치는 판결을 내리는 데 있지 않습니다. 과거에는 EDGAR를 열고, 모든 Form 4를 가져오고, 거래 코드를 일일이 해독하여 스프레드시트에 정리해야 했던 작업이, 소음은 제거되고, 이상치(outlier)는 식별되며, 주의 사항이 명확히 언급된 세 번의 메시지 대화로 바뀌었다는 점에 그 가치가 있습니다.
에이전트가 실제로 수행한 작업
과장된 표현을 걷어내고 유용한 패턴만 살펴보면 다음과 같습니다. 에이전트는 단순히 사실을 가져온 것이 아니라, _공시 서류 세트를 바탕으로 추론(reasoned over a filing set)_했습니다. 제가 사람에게 기대하는 세 가지 단계는 다음과 같습니다:
- 해석하기 전에 신호와 소음을 분리했습니다. 보상(Grants), 증여(Gifts), 세금 원천징수(Tax withholding) 항목을 먼저 분류했기에, 실제로는 급여 관련 세금 이벤트였던 8자리 수 달러 규모의 "처분(disposal)"을 하락 신호인 매도로 오해하지 않았습니다.
- 단순 합산이 아닌 특성을 규정했습니다. "한 명의 이사가 전체 매도의 99%를 차지하며, 모두 재량적(discretionary) 결정이다"라는 것은 통찰(insight)입니다. 반면 "내부자 매도액 4억 6천만 달러"는 오해를 불러일으키는 숫자입니다.
- 자신의 한계를 명시했습니다. 타이밍상의 우연을 언급한 뒤 그것에 임의적인 의미를 부여하기를 거부했으며, 전체 출력물을 조언이 아닌 공공 기록 요약(public-record summarization)으로 분류했습니다.
저의 판단력 중 어느 것도 기계로 옮겨가지 않았습니다. Stevens의 매도가 투자 가설(thesis)에 중요한지 여부는 여전히 제가 결정합니다. 옮겨진 것은 기계적이고 오류가 발생하기 쉬운 중간 과정(데이터 가져오기, 디코딩, 노이즈 제거)이었으며, 이는 시간 압박을 받는 사람이 실수하기 딱 좋은 부분입니다.
동일한 에이전트 구축하기
여러분은 오늘 바로 무료 Apify 계정과 MCP 지원 클라이언트(Claude Desktop, Cursor 또는 자체 에이전트)를 사용하여 이를 재현할 수 있습니다:
- Apify Console의 Settings → Integrations에서 Apify API 토큰을 가져옵니다.
- 공식 Apify MCP 서버를 추가하고
tools파라미터에 원하는 Actor들을 나열합니다. 위에서 설명한 내부자 활동 에이전트의 경우, Form 4 Actor와 문맥 파악을 위한 EDGAR filings Actor가 필요합니다:
{
"mcpServers": {
"apify": {
...
- 클라이언트를 재시작한 뒤, 평이한 영어로 특정 회사의 내부자들이 매수 중인지 매도 중인지 물어보고, 실제 공개 시장 거래(open-market trades)와 보상 및 세금 원천징수를 분리해달라고 요청하십시오. 그러면 에이전트가 적절한 도구를 선택하고, 공시 서류를 가져와서, 그 패턴의 특성을 규정할 것입니다.
📌 참고: 각 도구 호출은 귀하의 Apify 계정으로 비용이 청구되는 실제 Actor 실행입니다 (이 도구는 결과당 과금 방식이며, 조회당 1센트 미만입니다). 전체 티커(ticker) 바스켓을 지속적으로 모니터링하려면, 채팅당 한 번씩 호출하는 대신 Apify API를 통해 Actor를 스케줄에 따라 실행하십시오.
🏹 확장하기: 활동이 더 활발한 이름에 대해 dateFrom을 사용하여 기간을 넓히거나, transactionCode(P는 장내 매수, S는 장내 매도)를 전달하여 에이전트가 특정 동작에 고정되도록 설정함으로써 애초에 단순 관리용 거래를 보지 않도록 할 수 있습니다. tools 목록에 더 많은 Actor를 추가하면, 단 한 줄의 새로운 코드 없이도 동일한 에이전트가 더 넓은 범위의 공시 영역을 커버할 수 있습니다.
이 글에서 사용된 Actor: SEC Form 4 Insider Trading Transactions Scraper 및 SEC EDGAR Filings Scraper. 여기에 표시된 모든 내용은 실제 실행을 통한 실제 출력값이며, 그 어떤 것도 투자 조언이 아닙니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기