Do not apply this method to long lists, where Batch mode would be more efficient and less abusive to the API provider. See [this other answer][1].

3 API Integrated solution (One API call per IP)
-------------------

    ClearAll[IP2Location];
    Options[IP2Location] = {Method -> Automatic};
    SetAttributes[IP2Location, Listable]
    IP2Location[ip_String | IPAddress[ip_String], OptionsPattern[]] := 
     Block[{url, response, methodlist, method, latlon},
      methodlist = {"nekudo", "freegeoip", "ip-api"};
      method = If[
        OptionValue[Method] === Automatic || FreeQ[methodlist, OptionValue[Method]],
        RandomChoice[methodlist],
        OptionValue[Method]
        ];
      url = URLBuild@Switch[method,
         "nekudo", <|"Scheme" -> "http", "Domain" -> "geoip.nekudo.com", "Path" -> {"api", ip}|>,
         "freegeoip", <|"Scheme" -> "http", "Domain" -> "freegeoip.net", "Path" -> {"json", ip}|>,
         "ip-api", <|"Scheme" -> "http", "Domain" -> "ip-api.com", "Path" -> {"json", ip}|>
         ];
      response = Import[url, "RawJSON"];
      latlon = ToExpression@Values[
         Switch[method,
           "nekudo", Query["location", {"latitude", "longitude"}],
           "freegeoip", Query[{"latitude", "longitude"}],
           "ip-api", Query[{"lat", "lon"}]
           ][response]
         ];
      (*Echo[response,method];*)
      GeoLocation[latlon]
      ]


Performance
-----------

    First@AbsoluteTiming@IP2Location[iplist]
    (*37.6867*)

Failed in 7 sites.



  [1]: https://mathematica.stackexchange.com/a/155112/10397