| name | lseg-data |
| version | 1 |
| description | Use when "query LSEG/Refinitiv", "fundamentals or market data from LSEG", "ESG scores", "RIC/ISIN symbology", "corporate governance or activism (poison pills, campaigns)", "M&A or IPO deals", "syndicated loans or project finance", "PE/VC investments", "joint ventures", "municipal bonds", "Lipper fund details", "stock screening (fscreen)", "Refinitiv news", or any use of the `lseg.data` Python API. (For academic loan/PE data, WRDS DealScan/PitchBook may be the better source â the wrds skill covers those.) |
| user-invocable | false |
Contents
LSEG Data Library
Access financial data from LSEG (London Stock Exchange Group), formerly Refinitiv, via the lseg.data Python library.
Query Enforcement
IRON LAW: NO DATA CLAIM WITHOUT SAMPLE INSPECTION
Before claiming ANY LSEG query succeeded, follow these steps:
- VALIDATE field names exist (check prefixes: TR., CF_)
- VALIDATE RIC symbology is correct (.O, .N, .L, .T)
- EXECUTE the query
- INSPECT sample rows with
.head() or .sample()
- VERIFY critical columns are not NULL
- VERIFY date range matches expectations
- CLAIM success only after all checks pass
This is not negotiable. Skipping result inspection is NOT HELPFUL â the user builds analysis on data with undetected quality problems.
LSEG API Facts
- The API does not raise errors for invalid field names or wrong RICs â it returns empty results or NULL columns. Treating returned rows as correct data is an unverified claim presented as fact: inspect for NULLs, wrong dates, and invalid values before returning anything.
- Field-name typos are common and fail silently (TR.EPS vs TR.Eps). Validate field names against the documentation before executing.
- User-supplied RICs often carry the wrong exchange suffix. Verify against the RIC Symbology section (
.O, .N, .L, .T) before querying.
- Market data has T-1 availability â today's data arrives tomorrow. Querying through today produces silent gaps; see the Date Awareness section.
- Rate limits bind per session (500 requests/minute) and per request (
get_data() 10,000 data points, get_history() 3,000 rows) â many small queries still hit the session cap. Batch instead of looping.
Red Flags â STOP If About To:
- Execute a query without validating field names and RIC suffixes first â STOP. The API will not error for you.
- Return a dataframe without
.head() or .sample() inspection â STOP. Handing over uninspected data gives the user undetected quality problems â unhelpful on its own terms.
Data Validation Checklist
Before EVERY data retrieval claim, verify the following:
For ld.get_data() (fundamentals/ESG):
For ld.get_history() (time series):
For symbol_conversion.Definition() (mapping):
For ALL queries:
Quick Start
To get started with LSEG Data Library, initialize a session and execute queries:
import lseg.data as ld
ld.open_session()
df = ld.get_data(
universe=[âAAPL.Oâ, âMSFT.Oâ],
fields=[âTR.CompanyNameâ, âTR.Revenueâ, âTR.EPSâ]
)
print(df.head())
prices = ld.get_history(
universe=âAAPL.Oâ,
fields=[âOPENâ, âHIGHâ, âLOWâ, âCLOSEâ, âVOLUMEâ],
start=â2023-01-01â,
end=â2023-12-31â
)
print(prices.head())
ld.close_session()
Authentication
Configure LSEG authentication using either a config file or environment variables.
Config File Method
Create lseg-data.config.json:
{
âsessionsâ: {
âdefaultâ: âplatform.ldpâ,
âplatformâ: {
âldpâ: {
âapp-keyâ: âYOUR_APP_KEYâ,
âusernameâ: âYOUR_MACHINE_IDâ,
âpasswordâ: âYOUR_PASSWORDâ
}
}
}
}
Environment Variables Method
Set the following environment variables for LSEG authentication:
export RDP_USERNAME=âYOUR_MACHINE_IDâ
export RDP_PASSWORD=âYOUR_PASSWORDâ
export RDP_APP_KEY=âYOUR_APP_KEYâ
Core APIs
| API | Use Case | Example |
|---|
ld.get_data() | Point-in-time data | Fundamentals, ESG scores |
ld.get_history() | Time series | Historical prices, OHLCV |
ld.news.get_headlines() | News headlines | Company news, topic filtering |
symbol_conversion.Definition() | ID mapping | RIC â ISIN â CUSIP |
Key Field Prefixes
| Prefix | Type | Example |
|---|
TR. | Refinitiv fields | TR.Revenue, TR.EPS |
TR.MnA | Mergers & Acquisitions | TR.MnAAcquirorName, TR.MnADealValue |
TR.NI | Equity/New Issues (IPOs) | TR.NIIssuer, TR.NIOfferPrice |
TR.JV | Joint Ventures/Alliances | TR.JVDealName, TR.JVStatus |
TR.SACT | Shareholder Activism | TR.SACTLeadDissident |
TR.PP | Poison Pills | TR.PPPillAdoptionDate |
TR.LN | Syndicated Loans | TR.LNTotalFacilityAmount |
TR.PJF | Infrastructure/Project Finance | TR.PJFProjectName |
TR.PEInvest | Private Equity/Venture Capital | TR.PEInvestRoundDate |
TR.Muni | Municipal Bonds | TR.MuniIssuerName |
CF_ | Composite (real-time) | CF_LAST, CF_BID |
RIC Symbology
| Suffix | Exchange | Example |
|---|
.O | NASDAQ | AAPL.O |
.N | NYSE | IBM.N |
.L | London | VOD.L |
.T | Tokyo | 7203.T |
Rate Limits
| Endpoint | Limit |
|---|
get_data() | 10,000 data points/request |
get_history() | 3,000 rows/request |
| Session | 500 requests/minute |
Additional Resources
Reference Files
references/fundamentals.md - Financial statement fields, ratios, estimates
references/esg.md - ESG scores, pillars, controversies
references/symbology.md - RIC/ISIN/CUSIP conversion
references/pricing.md - Historical prices, real-time data
references/screening.md - Stock screening with Screener object
references/fscreen.md - Fund screening (ETFs, mutual funds) with FSCREEN app
references/fund-details.md - Fund details and characteristics
references/news.md - News headlines, pagination, query syntax
references/mna.md - Mergers & acquisitions deals (SDC Platinum, 2,683 fields)
references/equity-new-issues.md - IPOs, follow-ons, equity offerings (SDC Platinum, 1,708 fields)
references/joint-ventures.md - Joint ventures, strategic alliances (SDC Platinum, 301 fields)
references/corporate-governance.md - Shareholder activism, poison pills (SDC Platinum)
references/syndicated-loans.md - Syndicated loan deals (SDC Platinum)
references/infrastructure.md - Infrastructure/project finance deals (SDC Platinum)
references/private-equity.md - Private equity/venture capital investments (SDC Platinum)
references/municipal-bonds.md - Municipal bond issuances (SDC Platinum)
references/api-discovery.md - Reverse-engineering APIs via CDP network monitoring
references/troubleshooting.md - Common issues and solutions
references/wrds-comparison.md - LSEG vs WRDS data mapping
Example Files
examples/historical_pricing.ipynb - Historical price retrieval
examples/fundamentals_query.py - Fundamental data patterns
examples/stock_screener.ipynb - Dynamic stock screening
Scripts
scripts/test_connection.py - Validate LSEG connectivity
Local Sample Repositories
LSEG API samples at ~/resources/lseg-samples/:
Example.RDPLibrary.Python/ - Core API examples
Examples.DataLibrary.Python.AdvancedUsecases/ - Advanced patterns
Article.DataLibrary.Python.Screener/ - Stock screening
Refinitiv Codebook
Interactive JupyterLab environment with pre-configured LSEG access:
- URL:
https://workspace.refinitiv.com/codebook/
- Environment: JupyterHub with Python 3.8, pre-installed
refinitiv.data library
- Session: Auto-authenticated via Workspace credentials (
{name=âcodebookâ})
import refinitiv.data as rd
rd.open_session()
df = rd.news.get_headlines(âR:AAPL.O AND SUGGACâ, count=10)
Note: Codebook uses refinitiv.data (older name) rather than lseg.data. Both APIs are equivalent.
Date Awareness
When querying market data, account for current date context and market data lag.
Market Data Lag
Market data typically has T-1 availability, meaning todayâs data becomes available tomorrow. Adjust date ranges accordingly.
Date Range Example
Use current date context when querying historical prices:
from datetime import datetime, timedelta
end_date = datetime.now()
start_date = end_date - timedelta(days=365)
end_date = end_date - timedelta(days=1)
df = ld.get_history(
universe=âAAPL.Oâ,
fields=[âCLOSEâ],
start=start_date.strftime(â%Y-%m-%dâ),
end=end_date.strftime(â%Y-%m-%dâ)
)
Remember: Always account for the T-1 lag in market data availability.