Alternative data has transformed how institutional investors gain an edge. By analyzing non-traditional data sources—from satellite imagery to app store ratings—investors can uncover insights before they appear in quarterly reports.
What is Alternative Data?
Alternative data refers to any data used for investment decisions that doesn’t come from traditional sources like financial statements, SEC filings, or analyst reports.
Traditional data:
- Earnings reports
- Balance sheets
- Analyst ratings
- Price and volume
Alternative data:
- Satellite imagery
- Social media sentiment
- App store metrics
- Web traffic
- Employee reviews
- Credit card transactions
Why Alternative Data Matters
Traditional financial data is backward-looking—it tells you what already happened. Alternative data can provide real-time or forward-looking signals.
| Traditional Data | Alternative Data |
|---|---|
| Quarterly revenue (90-day lag) | Daily app downloads (real-time) |
| Annual headcount (in 10-K) | Weekly LinkedIn employee count |
| Earnings call sentiment | Daily news sentiment scores |
| Analyst price targets | Real-time options flow |
The Information Advantage
Markets are efficient at processing traditional data. When earnings are released, prices adjust within seconds. But alternative data sources are:
- Less accessible – Requires specialized collection and processing
- Less standardized – Harder to interpret at scale
- More timely – Available before official disclosures
Types of Alternative Data
1. App Store Data
Mobile app metrics can predict company performance:
from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
# Track app ratings and downloadsdf = fb.app_ratings.ticker("S&P 500", "UBER", as_dataframe=True)
print(df.tail())# playStoreScore playStoreRatingsCount appStoreScore playStoreInstallCount# date# 2024-01-15 4.3 32500000 4.7 500000000Use cases:
- Detect declining user satisfaction
- Track growth in emerging markets
- Compare competitors
2. LinkedIn Data
Employee and follower counts reveal company health:
# Track workforce changesdf = fb.linkedin_data.ticker("S&P 500", "META", as_dataframe=True)
print(df.tail())# employeeCount followersCount# date# 2024-01-15 67000 12500000
# Detect hiring trendsdf["employee_change"] = df["employeeCount"].pct_change()Use cases:
- Identify hiring freezes before announcements
- Track layoff impacts
- Gauge market interest via follower growth
3. Congressional Trading
Track what elected officials are buying:
# House Representatives tradeshouse_df = fb.house_trades.ticker("S&P 500", "NVDA", as_dataframe=True)
# Senate tradessenate_df = fb.senate_trades.ticker("S&P 500", "NVDA", as_dataframe=True)Use cases:
- Follow “smart money” in Congress
- Identify stocks with bipartisan interest
- Track large purchases before legislative events
4. Insider Transactions
SEC Form 4 filings reveal executive confidence:
# Track insider buying and sellingdf = fb.insider_transactions.ticker("S&P 500", "AAPL", as_dataframe=True)
# Filter for purchasespurchases = df[df["transaction"].str.contains("Buy", na=False)]Use cases:
- Detect cluster buying by multiple insiders
- Track C-suite conviction
- Identify accumulation patterns
5. News Sentiment
Quantify the mood of financial news:
# Get sentiment scoresdf = fb.sentiments.ticker("S&P 500", "TSLA", as_dataframe=True)
# Current sentimentprint(f"Current sentiment: {df['sentiment'].iloc[-1]:.2f}")Use cases:
- Gauge market mood in real-time
- Identify sentiment extremes for contrarian trades
- Confirm momentum with positive coverage
6. Options Flow
Put/call ratios reveal market positioning:
# Get options datadf = fb.options.put_call("S&P 500", "SPY", as_dataframe=True)
# Analyze put/call ratioprint(f"Current P/C ratio: {df['ratio'].iloc[-1]:.2f}")Use cases:
- Gauge hedging activity
- Identify fear/greed extremes
- Confirm directional bias
Building an Alternative Data Strategy
Step 1: Identify Your Edge
Choose data sources that align with your strategy:
| Strategy Type | Relevant Alt Data |
|---|---|
| Growth investing | App downloads, LinkedIn growth |
| Value investing | Insider buying, sentiment extremes |
| Momentum | News sentiment, options flow |
| Event-driven | Congressional trades, insider filing |
Step 2: Combine Multiple Sources
Single data sources can give false signals. Combining multiple sources increases conviction:
def combined_signal(market, ticker): """Generate signal from multiple alternative data sources""" fb = FinBrainClient(api_key="YOUR_API_KEY")
signals = []
# Sentiment sent_df = fb.sentiments.ticker(market, ticker, as_dataframe=True) if not sent_df.empty: if sent_df["sentiment"].iloc[-1] > 0.3: signals.append("sentiment_bullish") elif sent_df["sentiment"].iloc[-1] < -0.3: signals.append("sentiment_bearish")
# Insider transactions insider_df = fb.insider_transactions.ticker(market, ticker, as_dataframe=True) if not insider_df.empty: purchases = insider_df[insider_df["transaction"].str.contains("Buy", na=False)] if len(purchases) > 0: signals.append("insider_buying")
# Aggregate bullish = sum(1 for s in signals if "bullish" in s or "buying" in s) bearish = sum(1 for s in signals if "bearish" in s)
if bullish >= 2: return "strong_buy" elif bullish > bearish: return "buy" elif bearish >= 2: return "strong_sell" elif bearish > bullish: return "sell" else: return "neutral"Step 3: Backtest Before Deploying
Always validate signals with historical data before trading.
Key Takeaways
- Alternative data provides insights not found in traditional financial reports
- Common sources include app metrics, social data, insider filings, and sentiment
- Alt data is more timely but requires specialized processing
- Combining multiple data sources increases signal reliability
- Always backtest strategies before deploying capital
Explore FinBrain’s alternative data offerings: App Ratings, LinkedIn Metrics, Insider Transactions, and News Sentiment.