I am mapping the geographic data of different IP Addresses using 2 different APIs and python

Ipstack
IPAPI

However, some of the results are showing different locations for a given IP. How does this happen?
what is the difference which I may encounter when using 2 or more different methodologies?
These APIs work by having a massive database of IP Addresses. When you send a request, they either look up the IP address that you sent in, or they guess an approximate location using similar IP addresses that they know the location of. Because the two databases don't communicate, as two separate companies own them, it is natural to expect that there will be some variation. It's important to note too that the locations are only approximate. Sometimes they don't even get the city right, much less the address. ISP companies try as best they can to preserve the privacy of their customers.
Getting different locations as the source for a given IP when using 2 different APIs?