mcpField
F
findata

findata

github.com/monotykamaryデータ・データベース456 回インストール今日更新
リポジトリ

findata について

findata は、ブラウザー経由で Yahoo Finance と SEC EDGAR から株価や財務諸表を取得するコマンドラインスキルです。キー不要の構造化データを提供し、JSON 出力と SEC 提出書類への追跡に対応します。

主な機能

  1. 01現在価格のスナップショット取得
  2. 02過去の OHLCV 価格データ取得
  3. 03年次・四半期財務諸表の取得
  4. 04JSON または整形済みテーブル出力
  5. 05SEC 提出書類への追跡

活用シーン

  1. 01銘柄の最新価格の確認
  2. 02指定期間の過去価格の確認
  3. 03損益計算書・貸借対照表・キャッシュフロー計算書の取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/monotykamary/browser-harness-js --skill findata

インストール後、Claude Code で/findataを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
findata
setup
test

詳細

findata — CDP 経由で無料の金融データを取得

CDP 経由で実際のブラウザーを使ってスクレイピング/取得する、無料でキー不要の金融データです。有料の financialdatasets.ai API が販売するデータと同じものを、無料の公開ソース(財務諸表は SEC EDGAR、株価は Yahoo Finance)から直接取得します。呼び出しごとに専用のタブと WebSocket セッションを開くため、並行して安全に利用できます。

コマンド

findata price    <ticker>                                          # live/last price snapshot
findata prices   <ticker> [--range 1mo|--start S --end E] [--interval 1d] [--limit N]
findata income   <ticker> [--period annual|quarterly] [--limit N]  # income statement
findata balance  <ticker> [--period annual|quarterly] [--limit N]  # balance sheet
findata cashflow <ticker> [--period annual|quarterly] [--limit N]  # cash flow statement
findata --json   <command> ...                                     # raw JSON instead of pretty table
フラグ適用対象意味
--jsonすべて整形済みテキストではなく、生の JSON を出力します
--period annual|quarterly財務諸表報告期間(デフォルトは annual)
--limit N財務諸表/株価財務諸表:表示する期間数(デフォルトは 4、0 = 最大 40)。株価:直近の N 本のバー(デフォルトはすべて)
--range R株価Yahoo の期間:1d 5d 1mo 3mo 6mo 1y 2y 5y 10y ytd max(デフォルトは 1mo)
--start/--end YYYY-MM-DD株価正確な日付範囲(--range の代替。node が必要)
--interval R株価バー間隔:1m 2m 5m 15m 30m 60m 1d 5d 1wk 1mo(デフォルトは 1d)
例
findata price AAPL
findata prices TSLA --range 3mo --interval 1wk
findata prices MSFT --start 2025-01-01 --end 2025-06-30 --limit 5
findata income AAPL --period quarterly --limit 4 --json
findata balance NVDA --limit 2
findata cashflow AAPL

# Parallel — each call uses its own tab
findata price AAPL &  findata price MSFT &  wait

結果の形式

price(スナップショット):

{"ticker":"AAPL","name":"Apple Inc.","price":310.05,"previous_close":308.63,
 "change":1.42,"change_percent":0.46,"currency":"USD","exchange":"NMS",
 "time":"2026-07-06T14:16:41Z"}

previous_close は、期間の開始時点の終値ではなく、前取引日の終値(2 本目から数えて最後の日足バーから算出)です。そのため、change は実際の日次変動を示します。price は現在の/直近の取引価格(regularMarketPrice)です。

prices(過去の OHLCV):

{"ticker":"AAPL","name":"Apple Inc.","currency":"USD","interval":"1d","prices":[
  {"date":"2026-07-02","open":294.12,"high":309.42,"low":293.68,"close":308.63,"volume":75352800,"adj_close":308.63}
]}

income / balance / cashflow(財務諸表):

{"ticker":"AAPL","name":"Apple Inc.","cik":320193,"period":"annual","statement":"income",
 "statements":[{
   "period_end":"2025-09-27","fiscal_year":2025,"fiscal_period":"FY","form":"10-K",
   "filed":"2025-10-31","accession":"0000320193-25-000079",
   "filing_url":"https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
   "revenue":416161000000,"cost_of_revenue":220960000000,"gross_profit":195201000000,
   "operating_income":133050000000,"net_income":112010000000,
   "eps_basic":7.49,"eps_diluted":7.46,"shares_basic":14948500000,"shares_diluted":15004697000
 }]}

各財務諸表オブジェクトには、SEC 提出書類との照合に使える period_end、fiscal_year、fiscal_period、form、filed、accession、filing_url と、各項目のフィールドが含まれます。cashflow には、算出された free_cash_flow = operating_cf + capex も含まれます。

財務諸表のフィールド
  • income:revenue, cost_of_revenue, gross_profit, operating_expenses, sgna, rnd, operating_income, interest_expense, income_tax, net_income, eps_basic, eps_diluted, shares_basic, shares_diluted, dividends_per_share
  • balance:total_assets, current_assets, cash, inventory, investments, total_liabilities, current_liabilities, long_term_debt, total_debt, equity, retained_earnings, shares_outstanding
  • cashflow:net_income, operating_cf, capex, investing_cf, financing_cf, dividends_paid, share_repurchases, debt_repayment, free_cash_flow

各フィールドは、候補となる 1 つ以上の US-GAAP XBRL 概念に対応します(優先順)。直近の期間が最も新しい概念が採用されるため、古い概念(たとえば、企業が Revenues から RevenueFromContractWithCustomerExcludingAssessedTax に切り替えた後の Revenues)が現行の概念より優先されることはありません。

仕組み

データソースCDP の手法
価格query1.finance.yahoo.com/v8/finance/chart/<ticker>?interval=&range=&period1=&period2=イベント駆動型フェッチ:JSON URL に移動し、Page.frameNavigated のコミットを待ちます(application/json では発火しますが、loadEventFired/networkIdle では発火しません)。その後、同一オリジンの fetch(window.location.href) で、Chrome の JSON ビューアーが DOM に描画するのを待たずに生の本文を取得します。非同期の射影 IIFE は awaitPromise を使って実行されます。Yahoo のチャートエンドポイントは、regularMarketPrice を含むクリーンな OHLCV を JSON として返すため、DOM のスクレイピングは不要です。ブラウザー経由にすることで、curl を妨げる crumb/同意画面を回避できます。
ティッカー→CIKwww.sec.gov/files/company_tickers.json同じイベント駆動型フェッチを使用します。解析結果はマップに変換され、サーバーの稼働中は globalThis.__secTickerMap にキャッシュされます(セッションごとにフェッチは 1 回)。
財務諸表data.sec.gov/api/xbrl/companyfacts/CIK<padded>.json(SEC EDGAR XBRL)準備完了ポーリング(フェッチ経路ではありません。以下を参照)。JSON URL に移動し、ページ内の射影 IIFE が {ready:true} を報告するまで約 80 ミリ秒ごとにポーリングします。トップレベルのナビゲーションで CORS を回避し、CDP を経由するのは小さな射影だけなので、数 MB の companyfacts オブジェクトはページ内にとどまります。

2 つの取得方法を使い分ける理由。 JSON へのナビゲーションでは、Page.loadEventFired も networkIdle も発火しないことを確認済みです。そのため、gsearch/xsearch で使うイベント駆動型の待機方法はそのまま適用できません。Page.frameNavigated はコミット時に発火し、その後の同一オリジンの fetch で、ダウンロードが完了した瞬間に生の本文を取得できるため、JSON ビューアーの描画を完全に省略できます。価格(約 0.3 秒)やティッカーマップ(約 0.25 秒)のような小さなエンドポイントでは、再利用できる解析結果がほとんどないため、ビューアーの描画は純粋なオーバーヘッドとなり、この方法が明確に有利です。

数 MB の companyfacts では逆になります。document.body.innerText が準備できる頃には、Chrome の JSON ビューアーがすでに 3.7 MB の本文を解析済みであるため、射影側での JSON.parse はほとんど時間がかかりません(約 16 ミリ秒)。一方、コールド状態での fetch+解析には約 800 ミリ秒かかるため、ポーリング(合計約 1.1 秒)のほうがフェッチ経路(約 1.5 秒)より高速です。ここでビューアーの描画を省略する最も簡潔な方法は、loadingFinished 時点での Network.getResponseBody(約 0.56 秒)ですが、数 MB の本文ではハーネスの WebSocket がクラッシュするため、companyfacts にはポーリングを採用しています。

呼び出しごとに、Target.createTarget(about:blank, background) → Target.attachToTarget → 呼び出し単位の sessionId → ナビゲーション+(フェッチ | ポーリング)→ finally で fire-and-forget の closeTab を実行します。gsearch/xsearch と同じパターンなので、並列実行しても安全で、activeSessionId が上書きされることはありません。

一般的なレイテンシ(サーバーはウォーム状態、HTTP キャッシュはコールド状態):price/prices は約 0.3 秒、財務諸表は約 1.1~1.4 秒です(companyfacts のダウンロードと解析が大部分を占めます。セッションごとの最初の財務諸表呼び出しでは、ティッカーマップを一度だけ取得するため、さらに約 0.25 秒かかります)。HTTP キャッシュがウォーム状態なら、価格の取得は約 0.25 秒まで短縮されます。

これらのソースを選ぶ理由

  • 財務諸表には SEC EDGAR:SEC EDGAR は正規のデータソースです。financialdatasets.ai の財務諸表も SEC EDGAR から派生したものであり、同じ SEC の accession_number と filing_url が JSON に含まれています。無料で、API キー不要、構造化 JSON 形式で、年次(10-K)と四半期(10-Q)の両方に対応しています。他のソースを使う理由はありません。
  • 価格には Yahoo Finance v8 chart:OHLCV を(HTML テーブルではなく)構造化 JSON で返し、スナップショット、履歴、日中データを 1 つのエンドポイントで提供する、唯一の無料ソースです。無料の価格情報サイトではすべて、ボット対策によって curl がブロックされますが、ブラウザー経由なら回避できます。(stockanalysis.com は curl に 403 を返し、通常のブラウザーにも Cloudflare の「Just a moment…」画面を表示します。Yahoo の株価ページは EU の同意画面へのリダイレクトにより動作が不安定ですが、JSON のチャートエンドポイントはブラウザー経由で問題なく動作します。)

注意点

  • 四半期報告書の数値は四半期ごとの値ではなく、年初来の累計です。 SEC 10-Q のファクトは会計年度の年初来累計として報告されます(Q3 の数値は9か月間の累計です)。findata は報告時点の値を返し、3か月分に差し引く処理は行いません。これは提出書類の内容に準拠しています。四半期ごとの値が必要な場合は、連続する期間の値を自分で差し引いてください。予想どおり、貸借対照表の項目は累計ではなく、特定時点の値です。
  • キャッシュフローの項目の符号は正規化されます。 SEC の提出者によって報告方法に一貫性がなく、capex/dividends_paid/share_repurchases/debt_repayment を正の金額で報告する場合もあれば、負の金額で報告する場合もあります。この4項目は常に現金流出を表すため、findata は負の値に正規化します。純額の小計(operating_cf、investing_cf、financing_cf)は、報告された方向の符号を維持します。free_cash_flow は operating_cf + capex(capex は負の値に正規化済み)として算出されるため、提出者の表記方法にかかわらず operating_cf − |capex| と一致します。
  • period_end が重複するファクト。 companyfacts には、元の 10-K のファクトと、後年の 10-K で提出された比較列の修正再表示の両方が含まれることがよくあります(end と値は同一で、後者には CY2024 のような frame が付与されています)。findata は period_end で期間を重複排除し、最も早く提出された 10-K のファクトを優先します。そのため、各列は後年の比較情報ではなく、元の提出書類に対応します。
  • 概念の網羅範囲は提出者によって異なります。 会社が候補リストにない概念で項目を報告している場合、そのフィールドは -/null になります(例:Apple は配当を PaymentsOfDividends、自社株買いを PaymentsForRepurchaseOfCommonStock で報告しています)。候補リストには一般的な概念が含まれていますが、一般的でない提出者では一部のフィールドが null のままになることがあります。
  • price の previous_close は直前の取引日の終値(5日間のウィンドウ内で最後から2番目の日足バー)なので、change は前日比です。Yahoo のメタデータにある chartPreviousClose は、期間開始前(約5日前)の終値で、昨日の終値ではありません。そのため使用していません。
  • Yahoo のレート制限。 高負荷時に Yahoo が 429 や JSON ではないページを返すことがあります。その場合、findata は Yahoo Finance error … non-JSON response (possibly rate-limited) として通知します。時間をおいて再試行してください。日中足の間隔には Yahoo による制限があり、直近の期間に限られます(例:1分足は直近約7日分のみ)。
  • SEC のレート制限/User-Agent。 SEC は毎秒10リクエスト未満と、内容が明確な User-Agent を求めています。ブラウザーはこれを自動で設定します。通常の使用では呼び出しごとに1~2件のリクエスト(ティッカーマップはキャッシュされます)となり、制限内に収まります。
  • ティッカーマップは globalThis.__secTickerMap に保存され、サーバープロセスの存続中はキャッシュされます。そのため、新規上場したティッカーは browser-harness-js --restart するまで表示されません。
  • 株式クラスのティッカーではハイフンを使用します。 SEC EDGAR の company_tickers.json と Yahoo のチャートエンドポイントでは、株式クラスのシンボルに . ではなく -(BRK-B、BF-B)を使用します。findata はティッカーを大文字に変換し、. を - に正規化するため、BRK.B、brk.b、BRK-B はすべて解決されます。この処理がない場合、BRK.B は Ticker not found in SEC EDGAR というエラーになります。
  • データ取得経路は2種類あります。 価格とティッカーマップには Page.frameNavigated と同一オリジンの fetch を使用します(JSON ビューアーのレンダリングを省略できるため、小さなボディでは高速です)。数MBに及ぶ companyfacts には、準備状況のポーリングを使用します。ビューアーによる事前解析のおかげで、必要なデータへの絞り込みはほぼコストがかからず、低温時の fetch と解析より高速です。仕組みを参照してください。
  • JSON ページではライフサイクルイベントが発生しません。 Chrome は application/json のナビゲーションに対して、Page.loadEventFired も networkIdle も発行しません。fetch 経路は(コミット時に発生する)Page.frameNavigated を基準にし、ポーリング経路は document.body.innerText が解析可能になることを基準にします。JSON 以外の content-type の場合は、タイムアウトまで待たずに速やかに終了します。
  • jq への依存はありません。JSON はページ内で解析され、出力は指定どおりの形式に絞り込まれます。整形出力には JS を使用します。日付から Unix 時刻への変換には node を使用します(browser-harness-js ですでに必要です)。

コメント