Hi everyone,
I’m working with Refinitiv Workspace and the Refinitiv Data Library for Python (refinitiv.data) for academic research on analyst EPS consensus.
My goal is to retrieve analyst-level EPS broker estimates over time for an equity (here: ASSAb.ST), so that I can study how individual analyst contributions to the consensus evolve relative to various factors. I do not necessarily need the real broker/analyst names – stable anonymous identifiers would be fine – but I do need to be able to track individual contributors over time.
Based on an example provided by Refinitiv Support, I am using the following Python code:
#1. activate
import os
import pandas as pd
pd.set_option("future.no_silent_downcasting", True)
import numpy as np
import refinitiv.data as rd
from refinitiv.data import get_data
from datetime import datetime, date
import matplotlib.pyplot as plt
rd.open_session()
# 2. Parameters
RIC = "ASSAb.ST"
PERIOD = "1FQ2019" # e.g. "FY1", "1FQ2024", etc.
FRQ = "FQ" # "FQ" = quarterly, "FY" = yearly
START = "2017-10-01"
END = "2019-01-29"
# 3. Analyst-level EPS history with time window
df = get_data(
universe=[RIC],
fields=[
"TR.EPSEstValue", # EPS estimate
"TR.EPSEstValue.BrokerName",
"TR.EPSEstValue.AnalystName",
"TR.EPSEstValue.AnalystCode",
"TR.EPSEstValue.FPeriod", # fiscal period
"TR.EPSEstValue.Date",
],
parameters={
"Period": PERIOD,
"Frq": FRQ,
"SDate": START,
"EDate": END,
# "Curn": "USD", # optional, if you need a specific currency
}
)
# 4. Clean + order
if "Date" in df.columns:
df["Date"] = pd.to_datetime(df["Date"], errors="coerce")
if "Broker Name" in df.columns and "Date" in df.columns:
df = df.sort_values(["Broker Name", "Date"])
df
This works in the sense that it returns analyst-level rows over time.
However, the result looks like this (simplified):
- some rows:
Broker Name = "PARETO SECURITIES AS"Analyst Name = "Roslund, Anders"Analyst Code = "7JD2"
- other rows for the same RIC / period:
Broker Name = "Permission Denied 1120"Analyst Name = "Permission Denied"Analyst Code is empty
This is the same pattern I see in Workspace Excel: some contributors are fully visible, others show as "Permission Denied ####".
For my research, I am not asking to reveal the hidden names.
What I really need is:
- Analyst-level EPS estimates over time (which this query already provides), and
- Some way to track each hidden contributor consistently over time, even if anonymous.
So my questions are:
- Do the
"Permission Denied ####" codes correspond to stable anonymous identifiers (i.e., does the same number always refer to the same hidden broker/analyst across time and instruments), or are they just generic placeholders with no stability guarantee? - Is there any recommended API approach or alternative fields that would allow me to obtain stable, anonymous contributor IDs for EPS estimates, suitable for research on analyst consensus, without revealing actual names?
- If this is not possible via
TR.EPSEstValue and related fields, are there other datasets or APIs within refinitiv.data that are better suited for analyst-level historical consensus research?
Environment details (if helpful):
- Workspace desktop session +
refinitiv.data Python library - Python 3.11 (Windows)
- Data requested via
rd.open_session() (Workspace) and refinitiv.data.get_data(...) as above.
Any guidance or clarification on how to handle these "Permission Denied ####" rows for research purposes would be greatly appreciated. I am happy to provide a small sample of the DataFrame or the equivalent Excel output if needed.
Many thanks in advance,
Aleksandar