LangChain agents can search Wikipedia, browse the web, run Python. Ask one about Toyota's revenue trend and it either hallucinates a number or says "I don't have access to financial databases."
That's because no LangChain toolkit covers Japanese financial data. The existing financial toolkits focus on US equities. None of them know what a 有価証券報告書 is.
We built langchain-axiora to fix that. 18 tools, a retriever, 4,125 Japanese companies, 10 years of XBRL-parsed EDINET filings. Your agent gets the same data a Japanese equity analyst uses — revenue, net income, ROE, health scores, peer comparisons, and English translations of filing sections.
Install and first agent in under 5 minutes.

Install
uv add langchain-axiora langchain-anthropic langgraphSet your keys:
export AXIORA_API_KEY="ax_live_..."
export ANTHROPIC_API_KEY="sk-ant-..."Your First Agent: 6 Lines
from langchain_axiora import AxioraToolkit
from langchain_anthropic import ChatAnthropic
from langgraph.prebuilt import create_react_agent
toolkit = AxioraToolkit()
agent = create_react_agent(ChatAnthropic(model="claude-sonnet-4-20250514"), toolkit.get_tools())
result = agent.invoke({"messages": [{"role": "user", "content": "Compare Toyota and Honda's financials over the last 3 years"}]})That's it. The agent searches for the companies, fetches financials, and compares them — chaining tool calls automatically.
What the Agent Actually Does
Here's what happens under the hood when you ask "Compare Toyota and Honda's financials over the last 3 years." The agent makes three tool calls:
1. axiora_get_financials → Toyota (7203)
{
"fiscal_year": 2025,
"revenue": 48036704000000,
"net_income": 4789755000000,
"operating_margin": 9.98,
"roe": 12.99,
"num_employees": 383853
}2. axiora_get_financials → Honda (7267)
{
"fiscal_year": 2025,
"revenue": 21688767000000,
"net_income": 903034000000,
"operating_margin": 5.59,
"roe": 7.15,
"num_employees": 194173
}3. The agent synthesizes
Toyota's revenue (¥48.0T) is 2.2× Honda's (¥21.7T). The gap widened — Toyota grew revenue 29% from FY2023 to FY2025, Honda grew 28%. But the margin story is sharper: Toyota's operating margin is 9.98% vs Honda's 5.59%, and Toyota's ROE of 12.99% nearly doubles Honda's 7.15%.
Real numbers. From audited EDINET filings. Not hallucinated.
18 Tools
Every tool the agent can call:
| Tool | What it does |
|---|---|
axiora_search_companies | Find companies by name (JP/EN) or code |
axiora_get_company | Company details — sector, listing, fiscal year end |
axiora_get_financials | Revenue, income, assets, equity, ratios per year |
axiora_get_growth | YoY growth rates and 3/5-year CAGRs |
axiora_get_ranking | Rank companies by any metric |
axiora_get_sector_overview | Sector stats and company counts |
axiora_compare_companies | Side-by-side financials for 2–5 companies |
axiora_screen_companies | Filter by sector, revenue, ROE, PE ratio |
axiora_get_health_score | Financial health score (0–100) with breakdown |
axiora_get_health_ranking | Rank by health score |
axiora_get_peers | Find similar companies by sector and revenue |
axiora_get_timeseries | Chart-ready time series for any metric |
axiora_list_filings | Browse filings by company or type |
axiora_get_translations | English translations of filing sections |
axiora_search_translations | Full-text search across translated filings |
axiora_get_filing_calendar | Filing volume by day |
axiora_search_companies_batch | Bulk lookup (up to 10 at once) |
axiora_get_coverage | Data coverage stats |
18 tools — because Japanese financial analysis isn't just balance sheets. It's fiscal years ending in March, three accounting standards (J-GAAP, IFRS, US-GAAP), and filings in Japanese that your LLM can't read without translations.
Use Only the Tools You Need
18 tools can be noisy for a simple agent. Pass selected_tools to keep it focused:
toolkit = AxioraToolkit(
selected_tools=[
"axiora_search_companies",
"axiora_get_financials",
"axiora_compare_companies",
],
)Three tools. The agent still answers "Compare Toyota and Honda" — it just can't screen or rank. Pass a name that doesn't exist and you get a ValueError with the valid list — no silent failures.
Real Use Case: Find Undervalued Japanese Companies
Here's a prompt that chains multiple tools:
result = agent.invoke({"messages": [{"role": "user", "content": """
Find Japanese companies with ROE above 15%.
For the top 3, get their health scores and compare their financials.
"""}]})The agent:
- Calls
axiora_screen_companieswithmin_roe=15— finds Tokio Marine (ROE 20.65%), Fast Retailing (19.73%), Recruit Holdings (25.08%) - Calls
axiora_get_health_scorefor each - Calls
axiora_compare_companiesto put them side by side - Synthesizes: which one has the best combination of profitability and financial health
Four tool calls, chained automatically. You wrote zero screening logic.
Retriever: RAG Over Japanese Filings
Not every use case needs an agent. If you're building RAG over Japanese filings, AxioraRetriever searches English translations and returns LangChain Document objects:
from langchain_axiora import AxioraRetriever
retriever = AxioraRetriever(section="risk_factors", k=5)
docs = retriever.invoke("semiconductor supply chain risk")Each document has page_content (the translated text) and metadata (company name, doc ID, section). Plug it into any chain:
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
llm = ChatAnthropic(model="claude-sonnet-4-20250514")
prompt = ChatPromptTemplate.from_template(
"Based on these Japanese filing excerpts:\n{context}\n\nAnswer: {question}"
)
chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm
result = chain.invoke("What semiconductor risks do Japanese manufacturers report?")Five companies' risk factors, retrieved and synthesized. No XBRL, no Japanese language skills required.
Use Individual Tools Without the Toolkit
If you don't need an agent or a retriever, use tools directly:
from langchain_axiora import GetFinancialsTool
tool = GetFinancialsTool() # reads AXIORA_API_KEY from env
result = tool.invoke({"code": "7203", "years": 3})Every tool accepts api_key= directly or reads AXIORA_API_KEY from the environment. No wrapper object needed.
Error Handling
All tools set handle_tool_error=True. When the API returns an error, the agent gets a helpful message instead of crashing:
Axiora API error 404. Company not found. Use axiora_search_companies to find the correct code.The agent reads this, calls axiora_search_companies, gets the right code, and retries. Self-correcting, not crashing. Most LangChain financial toolkits let the agent crash on a bad code — we return a message the LLM can act on.
What's Under the Data
Every number comes from audited EDINET filings (有価証券報告書) — the same source Bloomberg and Refinitiv use for Japanese companies. We parse the XBRL, normalize across three accounting standards, and serve it as typed JSON.
4,125 listed companies. Up to 10 years of history. Updated within 30 minutes of filing.
Get Started
uv add langchain-axiora