SkillAgentSearch skills...

Pytickersymbols

Fundamental stock data and yahoo/google ticker symbols for several indices.

Install / Use

/learn @portfolioplus/Pytickersymbols
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Release Build PyPI - Downloads Coverage Status Codacy Badge

pytickersymbols

pytickersymbols provides access to google and yahoo ticker symbols for all stocks of the following indices:

  • [x] AEX
  • [x] BEL 20
  • [x] CAC 40
  • [x] CAC MID 60
  • [x] DAX
  • [x] DOW JONES
  • [x] EURO STOXX 50
  • [x] FTSE 100
  • [x] IBEX 35
  • [x] MDAX
  • [x] NASDAQ 100
  • [x] OMX Helsinki 25
  • [x] OMX Stockholm 30
  • [x] S&P 100
  • [x] S&P 500
  • [x] S&P 600
  • [x] SDAX
  • [x] Switzerland 20
  • [x] TECDAX

install

pip3 install pytickersymbols

quick start

Get all countries, indices and industries as follows:

from pytickersymbols import PyTickerSymbols

stock_data = PyTickerSymbols()
countries = stock_data.get_all_countries()
indices = stock_data.get_all_indices()
industries = stock_data.get_all_industries()

You can select all stocks of an index as follows:

from pytickersymbols import PyTickerSymbols

stock_data = PyTickerSymbols()
german_stocks = stock_data.get_stocks_by_index('DAX')
uk_stocks = stock_data.get_stocks_by_index('FTSE 100')

print(list(uk_stocks))

If you are only interested in ticker symbols, then you should have a look at the following lines:

from pytickersymbols import PyTickerSymbols

stock_data = PyTickerSymbols()
# the naming conversation is get_{index_name}_{exchange_city}_{yahoo or google}_tickers
dax_google = stock_data.get_dax_frankfurt_google_tickers()
dax_yahoo = stock_data.get_dax_frankfurt_yahoo_tickers()
sp100_yahoo = stock_data.get_sp_100_nyc_yahoo_tickers()
sp500_google = stock_data.get_sp_500_nyc_google_tickers()
dow_yahoo = stock_data.get_dow_jones_nyc_yahoo_tickers()
# there are too many combination. Here is a complete list of all getters
all_ticker_getter_names = list(filter(
   lambda x: (
         x.endswith('_google_tickers') or x.endswith('_yahoo_tickers')
   ),
   dir(stock_data),
))
print(all_ticker_getter_names)

Iterator Examples

Use iterator-based APIs to stream results without building large lists:

from pytickersymbols import PyTickerSymbols

stock_data = PyTickerSymbols()

# Stream indices
for index in stock_data.iter_all_indices():
   print(index)

# Stream all unique stocks
for company in stock_data.iter_all_stocks():
   print(company['name'])

# Stream industries and countries
for industry in stock_data.iter_all_industries():
   pass  # handle industry
for country in stock_data.iter_all_countries():
   pass  # handle country

# Stream Yahoo tickers for an index (flattened)
for tickers in stock_data.iter_yahoo_ticker_symbols_by_index('DAX'):
   for ticker in tickers:
      print(ticker)

# Stream tickers using exchange-specific dynamic methods
for ticker in stock_data._iter_tickers_by_index('DAX', ('FRA:',), 'yahoo'):
   print(ticker)

Development

Setting up the development environment

This project uses Poetry for dependency management. To set up your development environment:

# Install Poetry if you haven't already
curl -sSL https://install.python-poetry.org | python3 -

# Clone the repository
git clone https://github.com/portfolioplus/pytickersymbols.git
cd pytickersymbols

# Install dependencies (including dev dependencies)
poetry install

# Activate the virtual environment
poetry shell

Development Tools

The tools/ directory contains scripts for managing stock index data:

  • build_indices.py: End-to-end pipeline to parse Wikipedia, enrich with stocks.yaml, canonicalize names, and generate the Python data module.
  • wiki_table_parser.py: Utilities to parse Wikipedia tables configured via index_sources.yaml.
  • enrich_indices.py: Merge raw parsed data with stocks.yaml historical metadata and symbols.
  • canonicalize_names.py: Normalize company display names across indices using ISIN/Wikipedia.
  • sync_canonical_to_stocks.py: Propagate canonical names back to stocks.yaml.
  • enrich_with_yfinance.py: Optional enrichment helpers using Yahoo Finance.

See tools/README.md for detailed usage instructions.

Running Tests

poetry run pytest

Adding a New Index

To add a new stock index to the library:

  1. Add the index to configuration
    Edit tools/index_sources.yaml and add a new entry:

    - name: NIKKEI 225
      source:
        type: wikipedia
        url: https://en.wikipedia.org/wiki/Nikkei_225
        table_title_regex: "Components"
        extract_company_info: true
        language_fallbacks: ["ja", "en"]
        columns:
          name: ["Company", "Name"]
          symbol: ["Ticker", "Symbol"]
          isin: ["ISIN"]
          sector: ["Sector", "Industry"]
        symbol_converter:
          - pattern: "^(.+)$"
            format: "{1}.T"  # Add .T suffix for Tokyo Stock Exchange
      match:
        by: symbol
    

    Configuration options:

    • name: Display name (must match stocks.yaml if merging with historical data)
    • url: Wikipedia page URL containing the index constituents table
    • table_title_regex: (Optional) Regex to match the table title
    • extract_company_info: Set to true to fetch additional details from company Wikipedia pages
    • language_fallbacks: List of Wikipedia language codes to try for ISIN lookup
    • symbol_converter: Rules to convert Wikipedia symbols to Yahoo Finance format
    • columns: Map Wikipedia table headers to data fields
    • match.by: Field to use for matching with historical data (symbol, isin, or name)
  2. Run the build pipeline
    This will parse Wikipedia, enrich the data, and generate the Python module:

    cd tools
    python build_indices.py
    

    This creates:

    • indices_raw/<index_name>.json - Raw parsed data from Wikipedia
    • indices/<index_name>.yaml - Enriched data merged with historical records
    • Updates src/pytickersymbols/indices_data.py - Generated Python module
  3. Test the new index
    Verify the index is accessible:

    from pytickersymbols import PyTickerSymbols
    
    stock_data = PyTickerSymbols()
    nikkei_stocks = stock_data.get_stocks_by_index('NIKKEI 225')
    print(list(nikkei_stocks))
    
  4. Run tests
    Ensure everything works:

    poetry run pytest
    
  5. Update the index list
    Add a checkbox entry to the supported indices list at the top of this README.

Note: The build pipeline automatically runs weekly via GitHub Actions to keep index data up to date.

Performance Tips

  • Lookups for stocks by symbol and aggregated lists/sets are internally cached for speed. After calling load_json() or load_yaml(), caches are automatically rebuilt.
  • For large results, prefer generator variants to avoid materializing lists: iter_all_indices(), iter_all_stocks(), iter_all_countries(), iter_all_industries(), and iter_yahoo_ticker_symbols_by_index() / iter_google_ticker_symbols_by_index().
  • Dynamic ticker getters follow the naming convention get_{index_name}_{exchange_city}_{yahoo|google}_tickers and return lists. Use _iter_tickers_by_index() for streaming if needed.

issue tracker

https://github.com/portfolioplus/pytickersymbols/issues

View on GitHub
GitHub Stars135
CategoryFinance
Updated12d ago
Forks29

Languages

Python

Security Score

100/100

Audited on Mar 15, 2026

No findings