salesforce ttm revenue, net income, operating cash flow, investing cash flow. give major line items 3-4 in cash flow further. last 4 years. and total net debt.

Calling: search_ticker - query="Salesforce"

I'll help you with this Salesforce financial data. Let me load the necessary information.

Calling: load - tickers=["CRM"], metrics=["total_revenue", "net_income", "operating_cashflow", "cashflow_from_investment", "capital_expenditures", "payments_for_repurchase_of_common_stock", "dividend_payout", "long_term_debt", "short_long_term_debt_total", "cash_and_cash_equivalents_at_carrying_value", "short_term_investments", "long_term_investments"] DataFrame 249 OK crm_financial_statements (25 rows)

Calling: compute - code="\ndf = df_249.copy()\ndf['date'] = pd.to_datetime(df['date'])\nfor col in df.columns[3:]:\n df[col] = pd.to_numeric(df[col], errors='coerce')\n\nq = df[df['period_type'] == 'quarterly'].sort_values('date').reset_index(drop=True)\n\nttm = q.tail(4).agg({\n 'total_revenue': 'sum',\n 'net_income': 'sum',\n 'operating_cashflow': 'sum',\n 'cashflow_from_investment': 'sum',\n 'capital_expenditures': 'sum',\n 'dividend_payout': 'sum',\n}).to_frame(name='TTM').T\nttm['as_of'] = 'Apr 26 TTM'\nttm = ttm[['as_of', 'total_revenue', 'net_income', 'operating_cashflow', 'cashflow_from_investment', 'capital_expenditures', 'dividend_payout']]\n\na = df[df['period_type'] == 'annual'].sort_values('date').reset_index(drop=True)\na = a[a['date'] >= '2022-01-31'].copy()\na['fiscal_year'] = a['date'].dt.year - 1\na['fiscal_year'] = a['fiscal_year'].astype(str) + '/' + a['fiscal_year'].add(1).astype(str).str[-2:]\n\ninv_rows = a[['fiscal_year', 'cashflow_from_investment', 'capital_expenditures', 'dividend_payout']].rename(columns={\n 'cashflow_from_investment': 'Investing CF',\n 'capital_expenditures': 'CapEx',\n 'dividend_payout': 'Dividends Paid',\n})\n\nannual_summary = a[['fiscal_year', 'total_revenue', 'net_income', 'operating_cashflow', 'cashflow_from_investment']].rename(columns={\n 'total_revenue': 'Revenue',\n 'net_income': 'Net Income',\n 'operating_cashflow': 'Operating CF',\n 'cashflow_from_investment': 'Investing CF',\n})\n\nlatest_q = q.iloc[-1]\ndebt = float(latest_q['short_long_term_debt_total'])\ncash = float(latest_q['cash_and_cash_equivalents_at_carrying_value'])\nsti = float(latest_q['short_term_investments'])\nlti = float(latest_q['long_term_investments'])\nnet_debt = debt - cash - sti\n\nnd = pd.DataFrame([{\n 'Metric': ['Short+Long Term Debt', 'Cash & Equivalents', 'Short-Term Investments', 'Long-Term Investments', 'Net Debt (debt - cash - ST inv)'],\n 'Value ($B)': [debt/1e9, cash/1e9, sti/1e9, lti/1e9, net_debt/1e9]\n}])\n\nprint('=== ANNUAL SUMMARY (FY) ===')\nfor _, r in annual_summary.iterrows():\n print(f\"{r['fiscal_year']}: Rev=${r['Revenue']/1e9:.2f}B NI=${r['Net Income']/1e9:.2f}B OpCF=${r['Operating CF']/1e9:.2f}B InvCF=${r['Investing CF']/1e9:.2f}B\")\n\nprint('\\n=== CASH FLOW LINE ITEMS (Investing detail) ===')\nfor _, r in inv_rows.iterrows():\n print(f\"{r['fiscal_year']}: InvCF=${r['Investing CF']/1e9:.2f}B CapEx=${r['CapEx']/1e9:.2f}B Div=${r['Dividends Paid']/1e9:.2f}B\")\n\nprint('\\n=== TTM (Q2FY26 = Apr 26) ===')\nprint(ttm.to_string(index=False))\n\nprint('\\n=== NET DEBT (as of Apr 30, 2026) ===')\nprint(nd.to_string(index=False))\n\nresult = annual_summary\n", dataframe_ids=[249], name="CRM summary" DataFrame 250 OK CRM summary (26 rows)

I have the data. Now let me compute TTM figures, annual summaries, and net debt.

I have the numbers. Let me present them clearly.

Salesforce (CRM) — Key Financials

Note on fiscal year: Salesforce's fiscal year ends Jan 31, so "FY24" = year ending Jan 31, 2024.

TTM (as of Apr 30, 2026 — Q2 FY26, last 4 reported quarters)

Metric TTM
Revenue $41.34B
Net Income $7.41B
Operating Cash Flow $14.74B
Investing Cash Flow -$8.37B

Last 4 Fiscal Years — Headline P&L + Cash Flow

Fiscal Year Revenue Net Income Operating CF Investing CF
FY22 (end Jan-22) $26.49B $1.44B $6.00B -$14.54B
FY23 (end Jan-23) $31.35B $0.21B $7.11B -$1.99B
FY24 (end Jan-24) $34.86B $4.14B $10.23B -$1.33B
FY25 (end Jan-25) $37.90B $6.20B $13.09B -$3.16B

Cash Flow — Major Line Items (last 4 FYs)

Fiscal Year CapEx Dividends Paid
FY22 $0.72B n/a (dividend initiated FY23)
FY23 $0.80B $0.86B
FY24 $0.74B $0.77B
FY25 $0.72B $0.82B

The dominant driver of Investing CF is CapEx and net activity in marketable securities (purchases/sales/maturities of investments), which isn't broken out in the local schema. The big -$14.54B in FY22 was driven by the Slack acquisition and net investment activity. Buyback line item is not populated in the local dataset for CRM.

Net Debt (as of Apr 30, 2026)

Component Value
Short + Long-Term Debt $10.78B
Cash & Equivalents $5.95B
Short-Term Investments $4.36B
Long-Term Investments $4.16B
Net Debt (debt − cash − ST inv) $0.47B

CRM is essentially debt-neutral on a net basis — nearly all of its debt is offset by cash + short-term investments. Long-term investments (~$4.2B) provide additional liquidity buffer not netted in the standard calculation.

pe ratio chart

Calling: load - tickers=["CRM"], metrics=["adjusted_close_daily"], start_date="2021-02-01", end_date="2026-06-12" DataFrame 251 OK crm_price (1344 rows)

Calling: load - tickers=["CRM"], metrics=["net_income", "common_stock_shares_outstanding"]

I'll get the price data and EPS to calculate the PE ratio over time.

Calling: compute - code="\nprice = df_251.copy()\nprice['date'] = pd.to_datetime(price['date'])\nprice = price.sort_values('date')\n\nfs = df_252.copy()\nfs['date'] = pd.to_datetime(fs['date'])\nfs['net_income'] = pd.to_numeric(fs['net_income'], errors='coerce')\nfs['common_stock_shares_outstanding'] = pd.to_numeric(fs['common_stock_shares_outstanding'], errors='coerce')\n\nq = fs[fs['period_type'] == 'quarterly'].sort_values('date').reset_index(drop=True)\nq['ttm_ni'] = q['net_income'].rolling(4).sum()\nq['eps'] = q['net_income'] / q['common_stock_shares_outstanding']\nq['ttm_eps'] = q['ttm_ni'] / q['common_stock_shares_outstanding']\nq = q.dropna(subset=['ttm_eps'])\n\nmerged = pd.merge_asof(\n price.sort_values('date'),\n q[['date', 'ttm_eps']].sort_values('date'),\n on='date', direction='backward'\n)\nmerged = merged.dropna(subset=['ttm_eps'])\nmerged['pe'] = merged['adjusted_close_daily'] / merged['ttm_eps']\n\nmonthly = merged.set_index('date').resample('ME').last().dropna(subset=['pe']).reset_index()\nresult = monthly[['date', 'adjusted_close_daily', 'ttm_eps', 'pe']].rename(columns={\n 'date': 'Date',\n 'adjusted_close_daily': 'Price ($)',\n 'ttm_eps': 'TTM EPS ($)',\n 'pe': 'PE (TTM)',\n})\nresult = result[result['Date'] >= '2021-12-31']\n", dataframe_ids=[251, 252], name="CRM PE monthly" DataFrame 253 OK CRM PE monthly (50 rows)

Calling: show_chart - dataframe_id=253, x="Date", series=["PE (TTM)"], chart_type="line", title="Salesforce (CRM) — Trailing PE Ratio" Blob 108 DataFrame 253 OK CRM PE monthly (50 rows)

Calling: show_chart - dataframe_id=253, x="Date", series=["Price ($)"], chart_type="line", title="Salesforce (CRM) — Adjusted Close Price"

Calling: show - dataframe_id=253, rows=50

The PE values are extremely high in 2022-2023 because TTM net income was depressed. Let me also show a price chart alongside for context, and display the PE table.

Salesforce (CRM) — Trailing PE Ratio Chart

The PE chart and price chart are both displayed above. Here's the summary:

Key observations: - Late 2022 – mid 2023: PE spiked to extremely high levels (400x–900x+) because TTM net income was temporarily depressed by acquisition costs and one-time charges. These are mathematically correct but not meaningful for valuation. - FY24 onward: PE normalizes into a readable range as earnings recovered sharply. - Latest (May 2026): PE ~20.7x on TTM EPS of $9.21, stock at ~$191. TTM EPS has more than doubled YoY (from ~$6.40 in mid-2025 to ~$9.21 now) as net income has compounded. - Trajectory: PE has compressed steadily from ~70x in early 2024 to ~20x today — driven by both falling price (from ~$300+ to ~$190) and rapidly expanding TTM EPS (from ~$4.20 to ~$9.21).

Caveat: The early 2022–2023 PE readings are distorted because the 4-quarter rolling TTM at that time included quarters with unusually low net income. The current ~20x is the most representative valuation reading.

can you calculate adjusted PE ratio without one time charges and chart that.

can you calculate adjusted PE ratio without one time charges and chart that.

New