| name | stock-drivers | |||||
|---|---|---|---|---|---|---|
| description | Use when analyzing why a stock is moving. Given a ticker symbol, identifies news, earnings, analyst actions, and market conditions from the last few minutes to the last day, with recency verification for every source. | |||||
| version | 0.0.5 | |||||
| author | Xavier Collantes | |||||
| license | MIT | |||||
| platforms |
|
|||||
| tags |
|
Analyze the factors behind a stock's recent price movement using free web data sources. Prioritizes real-time and same-day data, no API key required.
Given a ticker symbol (e.g., AAPL, TSLA, NVDA), this skill identifies why the stock is moving right now. It prioritizes data from the last few minutes to hours, with explicit recency verification on every source. The workflow relies on publicly accessible endpoints and browser-based news extraction, so it works out of the box with zero credentials.
- User just sends message with a ticker symbol, no other context
- User asks "Why is X up/down today?" or "What's moving X?"
- User asks "What just happened to X?" or "Any news on X?"
- User wants a quick intraday or same-day movement analysis
- User asks about pre-market / after-hours price action
The guiding principle: the market prices in news within seconds to minutes. A story from yesterday may be stale. A story from an hour ago may be the sole driver.
Primary: Yahoo Finance quote page (browser-based, reliable)
browser_navigate: "https://finance.yahoo.com/quote/{TICKER}/"
Extract from the snapshot:
- Current price and $ / % change
- Timestamp ("As of HH:MM:SS [timezone]")
- Previous close for context
Fallback: If Yahoo is unavailable, use:
browser_navigate: "https://www.marketwatch.com/investing/stock/{TICKER}"
Record the timestamp. Every analysis must state: "As of [time], [ticker] is at $X ([change])."
Primary: Yahoo Finance News tab
browser_navigate: "https://finance.yahoo.com/quote/{TICKER}/news/"
What to look for:
- Headlines with timestamps: "2h ago", "30m ago", "Just now"
- Press releases vs. third-party articles
- SEC filings tab for 8-K or form 4 (insider trades)
Cross-reference with Google News:
browser_navigate: "https://news.google.com/search?q={TICKER}+stock+today"
Recency rule: Only extract articles dated today or within the last 6 hours. If a headline says "yesterday" or shows a calendar date older than today, flag it as context, not as the driver.
For each headline that is ≤ 4 hours old:
browser_click: [article link ref]
browser_snapshot (full page)
Read the article body for:
- Specific numbers (earnings beats/misses, guidance changes, contract values)
- Named analyst firms and rating changes
- Quotes from management or regulators
- Timestamps within the article (e.g., "announced at 9:30 AM")
If the article is paywalled or blocked: Note the headline and source, then search for a free mirror:
web_search: "{headline text}"
From the Yahoo quote page, click Analysis or Earnings tab:
browser_click: ["Analysis" menuitem ref]
Look for:
- Next earnings date
- Recent EPS surprises
- Analyst rating changes in the last 24–48 hours
Pre-market / after-hours special case: If the user asks before 9:30 AM ET or after 4:00 PM ET, check if the move is earnings-driven:
web_search: "{TICKER} earnings {today's date}"
Always check the broad market at the same time as the stock price:
- S&P 500, Nasdaq, sector ETF (e.g., XLK for tech, XLF for financials)
From Yahoo Finance sidebar or dedicated search:
browser_navigate: "https://finance.yahoo.com/quote/%5EGSPC" # S&P 500
browser_navigate: "https://finance.yahoo.com/quote/%5EIXIC" # Nasdaq
Key question: Is the stock moving with the market, against it, or disproportionately to it?
Give some highlights of the balance sheet, and any changes from the last earnings report.
The CIK is a 10-digit central index key, including leading zeros. You need this for every API call to find a company's SEC filings.
Look up a company's CIK by ticker at:
web_search: "TSLA CIK"
browser_navigate: "https://www.sec.gov/cgi-bin/browse-edgar?company=&CIK=AAPL&type=10-K&action=getcompany"
Or use the ticker-to-CIK mapping file:
web_search: "Ticker-to-CIK mapping"
browser_navigate: "https://www.sec.gov/files/company_tickers.json"
Pad the CIK to 10 digits with leading zeros (e.g., 320193 becomes 0000320193).
Each entity's current filing history is available at https://data.sec.gov/submissions/CIK##########.json.
Example for Apple: https://data.sec.gov/submissions/CIK0000320193.json
This JSON contains metadata like current name, former name, stock exchanges, and ticker symbols. The recentFilings property contains at least one year or up to 1,000 of the most recent filings in a compact columnar data array.
In the response, the recent object has parallel arrays: form, filingDate, accessionNumber, primaryDocument, etc. Filter where form === "10-K" to get the 10-K entries.
Once you have the accessionNumber and primaryDocument filename from the submissions JSON, build the document URL: https://www.sec.gov/Archives/edgar/data/{CIK}/{accessionNumber-no-dashes}/{primaryDocument}
The accession number needs dashes stripped (e.g., 0000320193-23-000106 becomes 000032019323000106).
The XBRL company facts API returns all company concepts data in a single call: https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json. This gives you parsed financial line items (revenue, net income, assets, etc.) across all filings, so you don't have to parse the 10-K HTML yourself.
When you have the balance sheet, you can examine the changes from the last earnings report for highlights such as large changes in cash, accounts receivable, accounts payable, inventory, and other current assets and liabilities.
Format the answer for maximum temporal clarity:
- Ticker + Snapshot Time, "As of 2:45 PM ET, GOOGL is $385.64 (-0.77%)"
- Move magnitude vs. benchmark, "Nasdaq is -1.70%, so GOOGL is outperforming by ~93 bps"
- Headline driver, The single biggest catalyst, with source and timestamp
- Example: "12:15 PM, Reuters reports Alphabet is exploring a yen-denominated bond sale (TipRanks, 1h ago)"
- Supporting factors, 2–4 bullets, each with recency noted:
- "This morning, Profit-taking after 52-week high run (+159% YoY)"
- "Today, Broader tech selloff on inflation fears"
- Stale vs. live distinction, Clearly separate:
- "Today's catalyst: [X]"
- "Background context: Q1 earnings beat last week, CapEx doubled"
- Upcoming near-term catalysts, Events in the next 24–72 hours if known
browser_navigate: "https://finance.yahoo.com/quote/AAPL/news/"
# Read timestamps on top 3 headlines
# Click any headline < 1h old
# Check if AAPL is moving with or against SPY/QQQ
web_search: "TSLA earnings today"
browser_navigate: "https://finance.yahoo.com/quote/TSLA"
# Read "As of" timestamp, if pre-market, note the session
# Click top news headline
web_search: "NVDA news after hours today"
browser_navigate: "https://finance.yahoo.com/quote/NVDA/news/"
# Filter headlines by time, after-hours catalysts often hit 4:05–5:00 PM
-
Reporting stale news as today's driver, A headline from "yesterday" about earnings is not why the stock is moving at 11 AM today unless the market is just reacting (e.g., pre-market). Always check the article dateline.
-
Ignoring the timestamp on the quote, "GOOGL is down 2%" means nothing without knowing if that's as of 9:45 AM (early volatility) or 3:30 PM (confirmed trend). Always state the snapshot time.
-
Missing pre-market / after-hours, Moves at 7:00 AM ET and 4:30 PM ET have different news cycles. Specify the market session when quoting price.
-
Attributing macro moves to company news, If the Nasdaq is down 3% and GOOGL is down 2.8%, the driver is macro. Don't invent a company-specific story.
-
Trusting aggregator timestamps, Google News sometimes shows "2h ago" for a reprint of a 2-day-old story. Click through and verify the original dateline inside the article.
-
Yahoo Finance blocking from cloud IPs, If curl / terminal-based API calls timeout, pivot immediately to
browser_navigateon finance.yahoo.com. The browser stack handles JavaScript-rendered pages.
- Ticker symbol verified (no look-alike confusion: GOOGL vs GOOG)
- Price data includes exact timestamp and market session (regular / pre / after-hours)
- News sources are dated today or within the last 6 hours
- Article datelines verified (not just aggregator timestamps)
- Broad market and sector context checked at the same time
- Stocks moving with the market are flagged as macro-driven
- Stocks moving disproportionately to the market have a specific catalyst identified
- Upcoming 24–72 hour catalysts noted if known