Historical ownership data over time

Hi everyone, I'm kinda new in refinitiv and I wanted to get the historical ownership over time of some companies for a 20 year span.

equinor.png

I have found that data is available in workspace but I was wondering how could I get it through the api to directly export it into a .CSV file


df = ek.get_data('EQNR.OL', ['TR.PctOfSharesOutHeld', 'TR.InvestorFullName'],
                 {'SDate': '-20', 'EDate': '0', 'Frq': 'Y'})

#How can I make it so it extracts data from 1-1-2000 to 1-1-2024?


# Extract the DataFrame from the returned tuple
actual_df = df[0]
filtered_df = actual_df[actual_df['Investor Full Name'].str.contains(
"Vanguard|BlackRock|StateStreet", case=False, na=False)]


I want it to contain the information of these three investors in their multiple countries, so just rows that contain either of those three names.

My programming skills are no good, anyone can help me out please?

Also, is there any way to scalate it so I can get data for multiple companies in just one .csv?

Thanks so much in advance!

Best Answer

  • Jirapongse
    Answer ✓

    @jon.alonso

    Thank you for reaching out to us.

    I checked the Data Item Browser tool and found that the TR.PctOfSharesOutHeld field doesn't support the EDate parameter.

    You can use the SDate parameter to get the data on a specific date.

    The code look like this:

    df, err = ek.get_data('EQNR.OL', ['TR.PctOfSharesOutHeld.InvestorPermId',
                                      'TR.PctOfSharesOutHeld.Date','TR.PctOfSharesOutHeld'],
                     {'SDate': '2020-12-31', 
                      'StartNum':0, 
                      'EndNum':100})

    df["Investor Perm Id"] = df["Investor Perm Id"].astype('Int64').astype('string')
    df_company, err = ek.get_data(df["Investor Perm Id"].to_list(),['TR.CommonName'])

    df_company["Instrument"] = df_company["Instrument"].astype('Int64').astype('string')
    pd.merge(df, df_company, left_on="Investor Perm Id",right_on="Instrument")

    The TR.PctOfSharesOutHeld.InvestorPermId field contains the PermIDs of the investors so I need to send another request to get the common names of those investor PermIDs.

    df["Investor Perm Id"] = df["Investor Perm Id"].astype('Int64').astype('string')
    df_company, err = ek.get_data(df["Investor Perm Id"].to_list(),['TR.CommonName'])

    Then, I merged those two dataframes together by using the investor PermIDs.

    df_company["Instrument"] = df_company["Instrument"].astype('Int64').astype('string')
    pd.merge(df, df_company, left_on="Investor Perm Id",right_on="Instrument")

    The output looks like this:

    1710147873378.png

    You can change the value in the SDate parameter to get data on another date.

    df, err = ek.get_data('EQNR.OL', ['TR.PctOfSharesOutHeld.InvestorPermId',
                                      'TR.PctOfSharesOutHeld.Date','TR.PctOfSharesOutHeld'],
                     {'SDate': '2020-12-31', 
                      'StartNum':0, 
                      'EndNum':100})

    However, you need to have some programming skills to do it.

    If not, I suggested you to use the Excel instead. Please contact Eikon or Workspace support team directly via MyRefinitiv regarding how to retrieve those values in Excel.

Answers