findata について
findata は、ブラウザー経由で Yahoo Finance と SEC EDGAR から株価や財務諸表を取得するコマンドラインスキルです。キー不要の構造化データを提供し、JSON 出力と SEC 提出書類への追跡に対応します。
主な機能
- 01現在価格のスナップショット取得
- 02過去の OHLCV 価格データ取得
- 03年次・四半期財務諸表の取得
- 04JSON または整形済みテーブル出力
- 05SEC 提出書類への追跡
活用シーン
- 01銘柄の最新価格の確認
- 02指定期間の過去価格の確認
- 03損益計算書・貸借対照表・キャッシュフロー計算書の取得
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ monotykamary/ browser-harness-js --skill findataインストール後、Claude Code で/findataを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/findatasetuptest詳細
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/同意画面を回避できます。 |
| ティッカー→CIK | www.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ですでに必要です)。