Real UR5 pose vs Simulated UR5 pose

Hello everyone.

I have a Python script to compute poses of the UR5 using forward kinematics and transforms.
The data collected by the script is nearly perfect when working with URSIM but is a bit off when working with the real robot and I would like to know if someone could point me out in the right direction to fix the issue.

To make thins simple, lets narrow down the problem to the following:
Consider both real and simulated robot at home position (0, -90, 0, -90 , 0, 0).
Set TCP Configuration on both real an simulated robots as (0,0,0,0,0,0)
Looking at the TP from the real and simulated robot we get the following:
Real TP TCP(BASE)(RPY-rad) = [ -0.71, -192.66, 1001.15, -1.571, -0 , 3.139]
Simulated TP TCP(BASE)(RPY-rad) = [ -0 , -191.45, 1001.06, -1.571, -0 , 3.139]

Without even using my function, just comparing the URSIM and phisical UR5 there is already a non-negligible difference on TCP.x, a even bigger difference on TCP.y, and on spot values for orientation.
Moreover, using the IK parameters, links and joints information provided by the Universal robotics, we get values as the simulated robot, not the real one we have here.

Why is that?

I am working with a UR5 (URSoftware 3.6.0.30507) and URSIM-3.9.1.64192.

Thanks in advance

Each robot is calibrated from the factory. You will need to pull the actual kinematic values from your real robot.