jpskill.com
🛠️ 開発・MCP コミュニティ

fmp-api

株式、財務諸表、SECファイリング、機関投資家の保有状況などの金融データを取得したり、DCF評価やインサイダー取引情報を確認したり、銘柄スクリーニングを行う際に活用できるFinancial Modeling Prep APIを利用するSkill。

📜 元の英語説明(参考)

Financial Modeling Prep API for stocks, fundamentals, SEC filings, institutional holdings (13F), and congressional trading. Use when fetching financial statements, ratios, DCF valuations, insider/institutional ownership, or screening stocks.

🇯🇵 日本人クリエイター向け解説

一言でいうと

株式、財務諸表、SECファイリング、機関投資家の保有状況などの金融データを取得したり、DCF評価やインサイダー取引情報を確認したり、銘柄スクリーニングを行う際に活用できるFinancial Modeling Prep APIを利用するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o fmp-api.zip https://jpskill.com/download/9425.zip && unzip -o fmp-api.zip && rm fmp-api.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9425.zip -OutFile "$d\fmp-api.zip"; Expand-Archive "$d\fmp-api.zip" -DestinationPath $d -Force; ri "$d\fmp-api.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して fmp-api.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → fmp-api フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Financial Modeling Prep (FMP) API Integration

包括的な財務データAPIで、ファンダメンタル分析、SEC filing、機関投資家の保有状況(13F)、議会の取引データ、および事前計算された評価に特化しています。

クイックスタート

認証

# 環境変数 (推奨)
export FMP_API_KEY="your_api_key"

# または .env ファイル内
FMP_API_KEY=your_api_key

基本的な使い方 (Python)

import requests
import os

API_KEY = os.getenv("FMP_API_KEY")
BASE_URL = "https://financialmodelingprep.com/stable"

def get_quote(symbol: str) -> dict:
    """Get real-time quote for a symbol."""
    response = requests.get(
        f"{BASE_URL}/quote",
        params={"symbol": symbol, "apikey": API_KEY}
    )
    data = response.json()
    return data[0] if data else {}

# Example
quote = get_quote("AAPL")
print(f"AAPL: ${quote['price']:.2f} ({quote['changePercentage']:+.2f}%)")

重要: 新しいエンドポイント形式

FMPは/stable/エンドポイントに移行しました。従来の/api/v3/エンドポイントは、既存のサブスクリプションが必要です。

# 新しい形式 (こちらを使用)
BASE_URL = "https://financialmodelingprep.com/stable"

# 古い形式 (レガシーのみ)
# BASE_URL = "https://financialmodelingprep.com/api/v3"

APIエンドポイントリファレンス

株価と価格

Endpoint Description Free
/quote リアルタイム株価
/quote-short クイックプライス
/historical-price-eod/full 過去のEOD
/historical-price-intraday 日中の価格 ⚠️ Paid
/pre-post-market-quote 時間外取引 ⚠️ Paid

財務諸表

Endpoint Description Free
/income-statement 損益計算書
/balance-sheet-statement 貸借対照表
/cash-flow-statement キャッシュフロー計算書
/income-statement-growth 収益成長率
/key-metrics 主要指標
/financial-ratios 財務比率
/enterprise-values 企業価値

評価と分析

Endpoint Description Free
/discounted-cash-flow DCF評価
/historical-discounted-cash-flow 過去のDCF
/rating 会社評価
/historical-rating 評価履歴
/company-outlook 完全な会社データ

機関投資家とインサイダーデータ

Endpoint Description Free
/institutional-holder 機関投資家の保有 ⚠️ Paid
/mutual-fund-holder 投資信託の保有 ⚠️ Paid
/insider-trading インサイダー取引 ⚠️ Paid
/form-13f 13F filing ⚠️ Paid
/senate-trading 上院の取引 ⚠️ Paid
/house-trading 下院の取引 ⚠️ Paid

スクリーニングとディスカバリー

Endpoint Description Free
/stock-screener 株式スクリーニング ⚠️ Paid
/stock-grade 株式グレード
/search シンボル検索
/search-name 名前で検索
/profile 会社概要

カレンダーとイベント

Endpoint Description Free
/earnings-calendar 決算日
/ipo-calendar IPO日
/stock-dividend-calendar 配当
/stock-split-calendar 株式分割
/economic-calendar 経済イベント

SEC Filing

Endpoint Description Free
/sec-filings すべてのSEC filing
/rss-feed-sec-filings SEC RSSフィード

レート制限

Tier Calls/Day Calls/Min Price
Free 250 N/A $0
Starter Unlimited 300 $22/mo
Premium Unlimited 750 $59/mo
Ultimate Unlimited 3,000 $149/mo

Free tier の制限事項:

  • 約100個のサンプルシンボル (AAPL, TSLA, AMZN, etc.)
  • 終値データのみ
  • 500MBの帯域幅 (30日間のローリング)

一般的なタスク

タスク: 財務諸表を取得する

def get_financials(symbol: str, period: str = "annual") -> dict:
    """Get comprehensive financial statements."""

    income = requests.get(
        f"{BASE_URL}/income-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    balance = requests.get(
        f"{BASE_URL}/balance-sheet-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    cashflow = requests.get(
        f"{BASE_URL}/cash-flow-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    return {
        "income_statement": income[0] if income else {},
        "balance_sheet": balance[0] if balance else {},
        "cash_flow": cashflow[0] if cashflow else {}
    }

# Example
financials = get_financials("AAPL")
print(f"Revenue: ${financials['income_statement'].get('revenue', 0):,.0f}")

タスク: 主要な指標と比率を取得する


def get_key_metrics(symbol: str) -> dict:
    """Get important financial metrics."""

    metrics = requests.get(
        f"{BASE_URL}/key-metrics",
        params={"symbol": symbol, "period": "annual", "apikey": API_KEY}
    ).json()

    ratios = requests.get(
        f"{BASE_URL}/financial-ratios",
        params={"symbol": symbol, "period": "annual", "apikey": API_KEY}
    ).json()

    latest_metrics = metrics[0] if metrics else {}
    latest_ratios = ratios[0] if ratios else {}

    return {
        "market_cap": latest_metrics.get("marketCap"),
        "pe_ratio": latest_ratios.get("priceEarningsRatio"),
        "pb_ratio": latest_ratios.get("priceToBookRatio"),
        "roe": latest_ratios.get("returnOnEquity"),
        "roa": latest_ratios.get("returnOnAssets"),
        "debt_equity": latest_ratios.get("debtEquityRatio"),
        "current_ratio": latest_ratios.get("currentRatio"),
        "gross_margin": latest_ratios.get("grossProfitMargin"),
        "operating_margin": latest_ratios.get("operatingProfitMargin"),
        "net_margin": latest_ratios.get("n
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Financial Modeling Prep (FMP) API Integration

Comprehensive financial data API specializing in fundamental analysis, SEC filings, institutional holdings (13F), congressional trading data, and pre-computed valuations.

Quick Start

Authentication

# Environment variable (recommended)
export FMP_API_KEY="your_api_key"

# Or in .env file
FMP_API_KEY=your_api_key

Basic Usage (Python)

import requests
import os

API_KEY = os.getenv("FMP_API_KEY")
BASE_URL = "https://financialmodelingprep.com/stable"

def get_quote(symbol: str) -> dict:
    """Get real-time quote for a symbol."""
    response = requests.get(
        f"{BASE_URL}/quote",
        params={"symbol": symbol, "apikey": API_KEY}
    )
    data = response.json()
    return data[0] if data else {}

# Example
quote = get_quote("AAPL")
print(f"AAPL: ${quote['price']:.2f} ({quote['changePercentage']:+.2f}%)")

Important: New Endpoint Format

FMP migrated to /stable/ endpoints. Legacy /api/v3/ endpoints require existing subscriptions.

# NEW format (use this)
BASE_URL = "https://financialmodelingprep.com/stable"

# OLD format (legacy only)
# BASE_URL = "https://financialmodelingprep.com/api/v3"

API Endpoints Reference

Stock Quotes & Prices

Endpoint Description Free
/quote Real-time quote
/quote-short Quick price
/historical-price-eod/full Historical EOD
/historical-price-intraday Intraday prices ⚠️ Paid
/pre-post-market-quote Extended hours ⚠️ Paid

Financial Statements

Endpoint Description Free
/income-statement Income statement
/balance-sheet-statement Balance sheet
/cash-flow-statement Cash flow
/income-statement-growth Income growth
/key-metrics Key metrics
/financial-ratios Financial ratios
/enterprise-values Enterprise value

Valuations & Analysis

Endpoint Description Free
/discounted-cash-flow DCF valuation
/historical-discounted-cash-flow Historical DCF
/rating Company rating
/historical-rating Rating history
/company-outlook Full company data

Institutional & Insider Data

Endpoint Description Free
/institutional-holder Institutional owners ⚠️ Paid
/mutual-fund-holder Mutual fund owners ⚠️ Paid
/insider-trading Insider transactions ⚠️ Paid
/form-13f 13F filings ⚠️ Paid
/senate-trading Senate trades ⚠️ Paid
/house-trading House trades ⚠️ Paid

Screening & Discovery

Endpoint Description Free
/stock-screener Screen stocks ⚠️ Paid
/stock-grade Stock grades
/search Search symbols
/search-name Search by name
/profile Company profile

Calendars & Events

Endpoint Description Free
/earnings-calendar Earnings dates
/ipo-calendar IPO dates
/stock-dividend-calendar Dividends
/stock-split-calendar Stock splits
/economic-calendar Economic events

SEC Filings

Endpoint Description Free
/sec-filings All SEC filings
/rss-feed-sec-filings SEC RSS feed

Rate Limits

Tier Calls/Day Calls/Min Price
Free 250 N/A $0
Starter Unlimited 300 $22/mo
Premium Unlimited 750 $59/mo
Ultimate Unlimited 3,000 $149/mo

Free tier limitations:

  • ~100 sample symbols (AAPL, TSLA, AMZN, etc.)
  • End-of-day data only
  • 500MB bandwidth (30-day rolling)

Common Tasks

Task: Get Financial Statements

def get_financials(symbol: str, period: str = "annual") -> dict:
    """Get comprehensive financial statements."""

    income = requests.get(
        f"{BASE_URL}/income-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    balance = requests.get(
        f"{BASE_URL}/balance-sheet-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    cashflow = requests.get(
        f"{BASE_URL}/cash-flow-statement",
        params={"symbol": symbol, "period": period, "apikey": API_KEY}
    ).json()

    return {
        "income_statement": income[0] if income else {},
        "balance_sheet": balance[0] if balance else {},
        "cash_flow": cashflow[0] if cashflow else {}
    }

# Example
financials = get_financials("AAPL")
print(f"Revenue: ${financials['income_statement'].get('revenue', 0):,.0f}")

Task: Get Key Metrics & Ratios

def get_key_metrics(symbol: str) -> dict:
    """Get important financial metrics."""

    metrics = requests.get(
        f"{BASE_URL}/key-metrics",
        params={"symbol": symbol, "period": "annual", "apikey": API_KEY}
    ).json()

    ratios = requests.get(
        f"{BASE_URL}/financial-ratios",
        params={"symbol": symbol, "period": "annual", "apikey": API_KEY}
    ).json()

    latest_metrics = metrics[0] if metrics else {}
    latest_ratios = ratios[0] if ratios else {}

    return {
        "market_cap": latest_metrics.get("marketCap"),
        "pe_ratio": latest_ratios.get("priceEarningsRatio"),
        "pb_ratio": latest_ratios.get("priceToBookRatio"),
        "roe": latest_ratios.get("returnOnEquity"),
        "roa": latest_ratios.get("returnOnAssets"),
        "debt_equity": latest_ratios.get("debtEquityRatio"),
        "current_ratio": latest_ratios.get("currentRatio"),
        "gross_margin": latest_ratios.get("grossProfitMargin"),
        "operating_margin": latest_ratios.get("operatingProfitMargin"),
        "net_margin": latest_ratios.get("netProfitMargin"),
        "dividend_yield": latest_ratios.get("dividendYield"),
        "payout_ratio": latest_ratios.get("payoutRatio")
    }

Task: Get DCF Valuation

def get_dcf_valuation(symbol: str) -> dict:
    """Get pre-computed DCF valuation."""
    response = requests.get(
        f"{BASE_URL}/discounted-cash-flow",
        params={"symbol": symbol, "apikey": API_KEY}
    )
    data = response.json()

    if data:
        dcf = data[0]
        return {
            "symbol": dcf.get("symbol"),
            "dcf_value": dcf.get("dcf"),
            "stock_price": dcf.get("stockPrice"),
            "upside": ((dcf.get("dcf", 0) / dcf.get("stockPrice", 1)) - 1) * 100
        }
    return {}

# Example
dcf = get_dcf_valuation("AAPL")
print(f"DCF Value: ${dcf['dcf_value']:.2f} ({dcf['upside']:+.1f}% upside)")

Task: Get Company Profile

def get_company_profile(symbol: str) -> dict:
    """Get comprehensive company information."""
    response = requests.get(
        f"{BASE_URL}/profile",
        params={"symbol": symbol, "apikey": API_KEY}
    )
    data = response.json()

    if data:
        profile = data[0]
        return {
            "name": profile.get("companyName"),
            "symbol": profile.get("symbol"),
            "sector": profile.get("sector"),
            "industry": profile.get("industry"),
            "market_cap": profile.get("mktCap"),
            "price": profile.get("price"),
            "beta": profile.get("beta"),
            "ceo": profile.get("ceo"),
            "website": profile.get("website"),
            "description": profile.get("description"),
            "employees": profile.get("fullTimeEmployees"),
            "exchange": profile.get("exchange"),
            "ipo_date": profile.get("ipoDate")
        }
    return {}

Task: Get Earnings Calendar

def get_earnings_calendar(from_date: str, to_date: str) -> list:
    """Get upcoming earnings announcements."""
    response = requests.get(
        f"{BASE_URL}/earnings-calendar",
        params={
            "from": from_date,
            "to": to_date,
            "apikey": API_KEY
        }
    )
    return response.json()

# Example
from datetime import datetime, timedelta
today = datetime.now()
next_week = today + timedelta(days=7)

earnings = get_earnings_calendar(
    today.strftime("%Y-%m-%d"),
    next_week.strftime("%Y-%m-%d")
)

for e in earnings[:5]:
    print(f"{e['symbol']}: {e['date']} ({e.get('time', 'N/A')})")

Task: Get Historical Prices

def get_historical_prices(symbol: str, start: str = None, end: str = None) -> list:
    """Get historical end-of-day prices."""
    params = {"symbol": symbol, "apikey": API_KEY}
    if start:
        params["from"] = start
    if end:
        params["to"] = end

    response = requests.get(
        f"{BASE_URL}/historical-price-eod/full",
        params=params
    )
    data = response.json()
    return data.get("historical", [])

# Example
prices = get_historical_prices("AAPL", "2025-01-01", "2025-12-01")
print(f"Got {len(prices)} days of data")

Task: Search for Companies

def search_companies(query: str, limit: int = 10) -> list:
    """Search for companies by name or symbol."""
    response = requests.get(
        f"{BASE_URL}/search",
        params={
            "query": query,
            "limit": limit,
            "apikey": API_KEY
        }
    )
    return response.json()

# Example
results = search_companies("Apple")
for r in results[:5]:
    print(f"{r['symbol']}: {r['name']} ({r['exchangeShortName']})")

Task: Get SEC Filings

def get_sec_filings(symbol: str, filing_type: str = None) -> list:
    """Get SEC filings for a company."""
    params = {"symbol": symbol, "apikey": API_KEY}
    if filing_type:
        params["type"] = filing_type  # 10-K, 10-Q, 8-K, etc.

    response = requests.get(
        f"{BASE_URL}/sec-filings",
        params=params
    )
    return response.json()

# Example: Get 10-K filings
filings = get_sec_filings("AAPL", "10-K")
for f in filings[:3]:
    print(f"{f['type']}: {f['fillingDate']} - {f['link']}")

Error Handling

def safe_api_call(endpoint: str, params: dict) -> dict:
    """Make API call with error handling."""
    params["apikey"] = API_KEY

    try:
        response = requests.get(f"{BASE_URL}/{endpoint}", params=params)
        data = response.json()

        # Check for error messages
        if isinstance(data, dict) and "Error Message" in data:
            print(f"API Error: {data['Error Message']}")
            return {}

        # Check for empty response
        if not data:
            print(f"No data returned for {endpoint}")
            return {}

        return data

    except requests.exceptions.RequestException as e:
        print(f"Request error: {e}")
        return {}
    except ValueError as e:
        print(f"JSON decode error: {e}")
        return {}

Free vs Paid Features

Free Tier Includes

  • 250 API calls/day
  • ~100 sample symbols
  • Financial statements
  • Key metrics & ratios
  • DCF valuations
  • Company profiles
  • Earnings calendar
  • SEC filings list
  • Basic historical data

Paid Features (Starter+)

  • Unlimited symbols
  • Intraday data
  • Stock screener
  • International stocks
  • Institutional holders
  • Mutual fund holders
  • ETF holdings breakdown

Paid Features (Premium+)

  • Higher rate limits
  • 13F filings
  • Insider trading
  • Congressional trading (Senate/House)
  • Analyst estimates
  • Earnings transcripts
  • Extended hours data

Unique FMP Features

  1. Pre-computed DCF - Ready-to-use valuations
  2. Congressional Trading - Senate/House STOCK Act data
  3. 13F Filings - Institutional holdings analysis
  4. Standardized Financials - Normalized line items
  5. Company Outlook - All data in one endpoint
  6. Rating System - Proprietary company ratings

Best Practices

  1. Use stable endpoints - /stable/ not /api/v3/
  2. Cache static data - Profiles, historical data
  3. Monitor daily limits - 250 calls goes fast
  4. Batch symbol lookups - Where supported
  5. Store financials - They only update quarterly
  6. Use company-outlook - Single call for all data

Installation

# Recommended Python wrapper
pip install --upgrade FinancialModelingPrep-Python

# Basic usage
from fmp_python.fmp import FMP
fmp = FMP(api_key="your_api_key")
profile = fmp.get_company_profile("AAPL")

Related Skills

  • finnhub-api - Real-time quotes and news
  • twelvedata-api - Technical indicators
  • alphavantage-api - Economic indicators

References