Get yahoo finance ticker only with approximate company name

106 Views Asked by At

I have been given approximate company names like Mercedes-Benz or Apple (i.e., not exact company names not exact company names like Mercedes-Benz Group AG or Apple Inc.).

Is there a way to retrieve the most likely yahoo finance ticker?

Unfortunately, the following code doesn´t work:

import yfinance as yf

company_name = "Mercedes-Benz"

def find_ticker(company_name):
    search_results = yf.Ticker(company_name).info
    if search_results:
        return search_results['symbol']
    else:
        return None
2

There are 2 best solutions below

0
Andrej Kesely On

You can simulate the Ajax requests the web-page is doing when user types the string to the Yahoo Finance search bar, e.g.:

import pandas as pd
import requests

url = "https://query1.finance.yahoo.com/v1/finance/search"

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0"
}

params = {
    "q": "mercedes-benz",
    "lang": "en-US",
    "region": "US",
}

data = requests.get(url, params=params, headers=headers).json()
df = pd.DataFrame(data["quotes"])
print(df)

Prints:

  exchange                        shortname quoteType   symbol   index    score typeDisp                                                    longname     exchDisp             sector         sectorDisp            industry        industryDisp dispSecIndFlag  isYahooFinance    prevName nameChangeDate
0      GER        MERCEDES-BENZ GRP NA O.N.    EQUITY   MBG.DE  quotes  24513.0   Equity                                      Mercedes-Benz Group AG        XETRA  Consumer Cyclical  Consumer Cyclical  Auto Manufacturers  Auto Manufacturers           True            True  Daimler AG     2024-02-01
1      PNK           MERCEDES-BENZ GROUP AG    EQUITY    MBGAF  quotes  21254.0   Equity                                      Mercedes-Benz Group AG  OTC Markets  Consumer Cyclical  Consumer Cyclical  Auto Manufacturers  Auto Manufacturers            NaN            True  Daimler AG     2024-02-01
2      PNK  MERCEDES-BENZ GROUP AG UNSP ADR    EQUITY    MBGYY  quotes  20601.0   Equity                                      Mercedes-Benz Group AG  OTC Markets  Consumer Cyclical  Consumer Cyclical  Auto Manufacturers  Auto Manufacturers            NaN            True  Daimler AG     2024-02-01
3      FRA           MERCEDES BENZ GROUP AG    EQUITY    MBG.F  quotes  20093.0   Equity                                      Mercedes-Benz Group AG    Frankfurt  Consumer Cyclical  Consumer Cyclical  Auto Manufacturers  Auto Manufacturers            NaN            True  Daimler AG     2024-02-01
4      STU           Mercedes-Benz Group AG    EQUITY   MBG.SG  quotes  20013.0   Equity                                                         NaN    Stuttgart         Healthcare         Healthcare       Biotechnology       Biotechnology            NaN            True         NaN            NaN
5      LSE  LEVERAGE SHARES PUBLIC LIMITED     EQUITY   3MBE.L  quotes  20005.0   Equity  Leverage Shares 3x Long Mercedes Benz (MBG) ETP Securities       London                NaN                NaN                 NaN                 NaN            NaN            True         NaN            NaN
6      CXE           Mercedes-Benz Group AG    EQUITY  MBGD.XC  quotes  20004.0   Equity                                                         NaN          CXE                NaN                NaN                 NaN                 NaN            NaN            True         NaN            NaN
0
MiFischer22 On

Based on the yahooquery package, this also works:

import yfinance as yf
#pip install yahooquery
import yahooquery as yq

def find_ticker(name):
    try:
        data = yq.search(name)
    except ValueError: # Will catch JSONDecodeError
        print(name)
    else:
        quotes = data['quotes']
        if len(quotes) == 0:
            return 'No Symbol Found'

        symbol = quotes[0]['symbol']
        
        return symbol

company_names = ["Apple Inc.", "Microsoft Corporation", "Alphabet", "Tesla", "Amazon", "Mercedes-Benz", "Apple", "BMW"]
tickers = {}

for name in company_names:
    ticker = find_ticker(name)
    if ticker:
        tickers[name] = ticker

for name, ticker in tickers.items():
    print(f"Company: {name}, Ticker: {ticker}")