How can I retrieve financial data from a list of bond ISINs?

Options

Hi, I've been trying out to retrieve some financial data for a quite while. I've had several problems, then solutions that unfortunately only created more problems (or at least sometimes/often). I tried to write right below what I was trying to achieve. Any help is appreciated, thanks in advance! :)

Brief description of what is needed:

The end goal would be to have a pandas DataFrame consisting of financial data from various
companies over the last x quarters (where x is the number of quarters).

Everything should be in Python code.

A bit more detailed: A list of bond ISINs (not the ISIN of the respective company) should be input, and in the next step, financial data for the last x quarters should be output.

The following problems occurred:

There is not a RIC for every company (example: Trustees of Princeton University). What would you do with such entities? Is there a workaround?

A list of y financial metrics per company, per quarter should be retrieved (where y is the number of financial metrics). Unfortunately, there were repeated read-time-out errors, but I have no idea what the cause is. I also set the HTTP Timeout Request to 120. I'm not sure but maybe it's because I'm trying to retrieve data for around 1.500 companies from 15.000 bonds and 40 financial fields. Could that be the case?

The list of ISINs could look like this (but in the end it's gonna be more close to 15.000):
['US34531XAB01', 'US96926GAC78', 'US037833EY27', 'US594918CW29', 'US85440KAC80', 'US89837LAH87']

The list of financial metrics could look like this (but in the end it's gonna be more close to 40, it's just for testing right now):
fin_fields = [‘TR.Revenue’, ‘TR.F.NetDebt’, ‘TR.F.DebtTot’, ‘TR.F.EBITDA’, ’TR.F.IntrxExpn‘]

I've seen several times that TR.Revenue.date has been used for the date. Is there a better approach or does it always work? Even with 40 different financial fields?

Maybe this process description helps a bit more:
⇒ 1. Read in the bond ISINs
⇒ 2. Convert bond ISIN to RIC (or equivalent) of the parent company (not ultimate parent)
⇒ 3. Store unique parent company RICs in a list (maybe not necessary, depending on the approach chosen ⇒ the idea behind this: 1 company can have several bonds, but 1 bond always has only 1 company)
⇒ 4. Using the list of unique parent company RICs, save the financial metrics of the x companies and y financial metrics in a pandas DataFrame

(This would be roughly the process flow)

I hope the description helps for understanding!

Again: Thank you a lot in advance! :)

Best Answers

  • Jirapongse
    Jirapongse ✭✭✭✭✭
    Answer ✓

    @martin_noob_coder

    Thank you for reaching out to us.

    Private companies don't have RICs. Typically, we can use PermIDs for private companies. You can get the company PermIDs by using the following code.

    ld.get_data(
        universe = ['US89837LAD73'],
        fields = ['TR.FiOrganizationofRiskPermID'])
    

    image.png

    Then, you can use the PermIDs to get other financial data.

    ld.get_data(
        universe = ['4297381328'],
        fields = ['TR.F.TotRevenue', 'TR.F.NetDebt', 'TR.F.DebtTot', 'TR.F.EBITDA', 'TR.F.IntrxExpn'])
    

    When requesting a lot of items or data at once, the request can be timeout as mentioned on the Usage and Limits Guideline. Therefore, you should split your request into smaller batches, such as ten or hundred RICs at a time, as shown on this discussion.

  • Jirapongse
    Jirapongse ✭✭✭✭✭
    Answer ✓

    @martin_noob_coder

    Are you using the Data Platform session (rdp or ldp)?

    I got the same error when using the Data Platform session.

    You can try this symbol_conversion instead. For example:

    response = symbol_conversion.Definition(
        symbols = ['US89837LAD73'],
        from_symbol_type = symbol_conversion.SymbolTypes.ISIN,
        to_symbol_types = [symbol_conversion.SymbolTypes.OA_PERM_ID]).get_data()
    response.data.df
    
    image.png

Answers