Hello everyone,
I am working on a scientific research project and need to retrieve historical Officers & Directors (OFFD) titles/positions/affiliations for ~600 companies for the years 2020–2024. I also contactet the Helpdesk and they said i should ask these questions in the Developer Forum.
In Refinitiv Workspace (OFFD – Officers & Directors detail page) I can clearly see multiple historical titles/positions/affiliations for the same person within the same company (with start/end dates).
However, when using the Refinitiv Data Library for Python, I am only able to retrieve the latest position record, not the full historical list shown in Workspace.
What works
Using a Platform/RDP session (platform.rdp) and rd.get_data, the following fields return data correctly:
TR.ODOfficerFullNameTR.ODOfficerPermIDTR.ODPersonPermIDTR.ODOfficerPositionDescTR.ODOfficerPositionStartDateTR.ODOfficerPositionEndDateTR.ODOfficerPositionRoleCodeTR.ODOfficerBiography
Filtering by Person PermID confirms that the data is stable at the person level.
Observed problem
For example, Dr. Herbert Diess at Volkswagen AG:
- Workspace OFFD shows multiple historical titles/roles for the same person.
- Python API returns only one record (the most recent one).
Even when:
- using
ODRnk=ALL - using
ODStatus=Active,Inactive - filtering by Person PermID (not Officer PermID)
only the last position is returned.
Minimal reproducible example (Python)
from pathlib import Path
import pandas as pd
import refinitiv.data as rd
RIC = "VOWG.DE"
PERSON_PERMID = 34413798346 # Dr. Herbert Diess (example)
def main():
cfg = Path("lseg-data.config.json")
rd.open_session(config_name=str(cfg), name="platform.rdp")
df = rd.get_data(
universe=[RIC],
fields=[
"TR.ODOfficerFullName",
"TR.ODOfficerPermID",
"TR.ODPersonPermID",
"TR.ODOfficerPositionDesc",
"TR.ODOfficerPositionStartDate",
"TR.ODOfficerPositionEndDate",
"TR.ODOfficerPositionRoleCode",
],
parameters={
"ODRnk": "ALL",
"ODStatus": "Active,Inactive",
},
)
rd.close_session()
# Filter by person (stable identifier)
df = df[df["Person PermID"] == PERSON_PERMID]
print(df.to_string(index=False))
if __name__ == "__main__":
main()
Actual output (simplified)
Only one row is returned, e.g.:
Full Name Position Description Start End
Dr. Herbert Diess Chairman of the Management Board, Group CEO 2020-07-01 2022-08-31
Expected behavior
All historical titles/positions for this person within the same company, as visible in Workspace OFFD.
Additional note on affiliations
I also attempted to retrieve structured OFFD Affiliations (as shown in Workspace) using fields such as:
TR.ODOfficerCompanyAffiliationNameTR.ODOfficerCompanyAffiliationRICTR.ODOfficerAffiliationNameTR.ODOfficerAffiliationRIC
But any request including affiliation fields returns a dummy response (columns only, <NA> values).
Questions
- Which data items (Python and/or Excel) return the full historical OFFD title/position/affiliations history as shown in Workspace?
- Is the complete OFFD history available via a different endpoint or dataset (not
rd.get_data with TR.ODOfficerPosition*)? - Are additional entitlements/content packages required to access the full historical OFFD data?
- Is there a supported way to query historical positions by Person PermID across all titles within a company?
Any guidance would be highly appreciated. Exporting OFFD pages manually is not feasible at this scale.
Thank you very much in advance.
Kind regards
R