Most modern mobile and web apps have location-based features enabled for content personalisation and customer targeting. These features are transforming the way we shop online, stream digital content, and read news. Almost all online commerce and social networks are driven by these hyper-local targeting features.

At the heart of these features, lies an algorithm that converts a user's geo-coordinates into readable location properties, called reverse geocoding. Based on this data, businesses are optimising and targeting their campaigns for maximum conversion.

There are many reverse geocoding service providers with various features and pricing models. Among them, Google has the most popular reverse geocoding API and is known to lead the industry. Upon in-depth research, you will find that these APIs have a lot of restrictions that impact the scalability and speed of your apps. 

In this blog post, we have highlighted the major advantages of BigDataCloud’s reverse geocoding API, over Google’s API, and a few other well-known service providers’ APIs.

#1 More Accurate Reverse Geocoding Technology

The fundamental difference between BigDataCloud’s reverse geocoding API and others is the method used to convert geo-coordinates into a readable address. BigDataCloud is the first to deliver administrative/non-administrative boundary-based results, making it the perfect choice for identifying a user's practical area such as county, city, state and country. 

All the other service providers resolve coordinates to the nearest street address, as a result, they aren’t always accurate and fail to provide rich locality information.

Example: Illustrating the difference in result due to the underlying algorithm.

Geo coordinates(Latitude and Longitude): 51.486782, -0.088560

The point on the map:

Reverse Geocoding Service Providers

Raw Output of the APIs

BigData Cloud

SE17 2

London Borough of Southwark

Other Information

London Low Emission Zone

Camberwell and Peckham, Westminster Constituency

Google API

139 Merrow St, London SE17 2NY, UK

129 Merrow St, London SE17 2NX, UK

10 Villa St, London SE17, UK

Villa St, London SE17 2EL, UK

Here API

45 Villa Street, London, SE17 2EJ, United Kingdom

"distance": 19

LocationIQ

Villa Street, Bermondsey Spa, Walworth, London Borough of Southwark, London, Greater London, England, SE17, United Kingdom

"important": none

Conclusion

Google’s API was the only one to return multiple street names,  whereas, Here and LocationIQ resolved to Villa street which was the closest street address, accompanied by an accuracy score. The example clearly demonstrates how resolving to the nearest street address doesn’t always provide accurate results. This can complicate the implementation of an API and increase the response time of your app. Whereas, resolving to the smallest locality area, as with BigDataCloud,  gives you accurate information in near real-time. 

#2 Better Freemium Policy

All the reverse geocoding service providers have a freemium plan with multiple features and rate limits. However, BigDataCloud is the only one to provide completely free reverse geocoding API for client-side implementation, without any rate limit or throttling. 

Reverse Geocoding API Vendors

BigDataCloud

Google API

LocationIQ

Here API

Need an Account?

None for client-side implementation

YES

YES

YES

Need Credit Card Details

NO

YES

NO

NO

Free Plan

Unlimited Client-side implementation

Free 50K queries  per month for server-side implementation

Provides $200USD worth of monthly free credit which resolves to 40K queries per month.

10K queries per day

250K queries per month

Rate Limit

None

50 requests per seconds

2 per seconds

5K Monthly Active Users for mobile SDK implementation.

No SLA

If you want to implement reverse geocoding on the client-side for identifying a user's real-time location on the web or mobile, BigDataCloud has the best plan. Even for a server-side implementation, BigDataCloud provides an affordable rate with 50K free queries per month. All the other providers have strict rate limits and restrictions.

#3 Less Restrictive Terms and Conditions

Among all the service providers, Google has the most stringent terms and conditions. This means less flexibility and more hurdles during the development stage.

Some of Google’s key limitations are (not verbatim):

  • You cannot use their API data on a map that is not a Google map.
  • Your app needs to attribute Google by displaying their logo.
  • If you build an API on top of Google’s API, then all Google's terms and conditions are transferred to your project. 
  • If you are building a mobile app, then you need to link to the TOS/Privacy Policy page on your app download page. For a web app you need to link to them in the footer.
  • You must not prefetch, index, store, or cache any content except under the limited conditions stated in the terms and conditions.

Compared to this, BigDataCloud’s reverse geocoding implementation is easier and doesn’t have as many limitations. If you are using BigDataCloud’s client-side geocoding you don’t even need to attribute it. However, if you use LocationIQ’s free API for commercial projects you have to attribute and link back to the LocationIQ’s website. Here’s API has comparatively fewer restrictions as well. 

#4 More Flexible Pricing Model

How does the pricing change with the growth of your business? This is important to understand so that you don’t end up paying too much in the future or realising that you cannot afford the service anymore. 

Most service providers have different pro-level packages which either restrict features or usage. 

Reverse Geocoding API Vendors

Pricing (USD)

Cost for

1 Million requests per month.

BigDataCloud

FREE 50K requests per month for Server-side API.

$2/month for additional 50K.

$38

Google API

Pay-per-use model

0-100K $0.005

100K - 500K $0.004

500K + Contact Sales

(50/sec)

Approx $800 to $3000

LocationIQ

20K/day (12/sec limit) $100/month

50K/day (15/sec) $200/month

1M/day (35/sec) $950/month

$200

Here

Freemium Plan

pay $1 per 1K

Pro Plan (1M/mon)

$449/month

$449

(limited to 5K MAU)

BigDataCloud provides the most affordable and scalable pricing. If we assume that we need 1 Million requests per month, then you will notice that BigDataCloud’s pricing is far more reasonable compared to all other providers.

Furthermore, BigDataCloud’s pricing is not based on features; hence, all packages have access to all of the features. However, the pricing for Google API, LocationIQ, and Here increases significantly for higher API requests.

#5 Richer Location Dataset at Higher Speeds.

Regarding the quality and response rate of the APIs. Besides BigDataCloud, all the other APIs have inherent API hit limits per second which increases the overall data latency. 

Using external API explorers, like Insomnia and Postman, we tested each of these APIs for the same input query. We executed the APIs multiple times and noted the variations in the response time. The table below provides an approximate of those response times.

The response time of BigDataCloud’s API is incredibly faster compared to other APIs.

Reverse Geocoding API Vendors

BigDataCloud

Google API

LocationIQ

Here API

Response Time

(As reported on Insomnia API explorer)

32.8ms

148ms

434ms

464s

Comparison of the output results among various service providers.

Vendor/Quality

BigDataCloud

Google API

Here API

LocationIQ

Output format

JSON

JSON

JSON

JSON

Language Support

Yes. BigDataCloud supports 147 languages.

Yes

Yes

NO

Output data parsing

Provides exact locality region name and administrative level breakdown. Also provides aWikiID for each region.

Provides multiple street addresses.

Provides a single street address closest to the point. 

Provides a single street address closest to the point.

Accuracy metrics

Doesn’t contain accuracy metrics because the API provides the smallest area that resolves to a coordinate.

Provide postal code level accuracy for the U.S, Great Britain, and Australia. 

Provides coordinates of a polygon area along with the street addresses.

Provides the distance between the point and the address in meters.

Provides an accuracy score between 0 to 1.

Sample JSON Output 

Input: 36.672886, -109.730101 (Latitude, Longitude)

Location IQ Output

//Location IQ
    {
        "place_id": "120406974",
        "licence": "https:\/\/locationiq.com\/attribution",
        "osm_type": "way",
        "osm_id": "145835222",
        "lat": "36.6729441853216",
        "lon": "-109.732954083088",
        "display_name": "Apache County, Arizona, USA",
        "address": {
          "county": "Apache County",
          "state": "Arizona",
          "postcode": "86545",
          "country": "United States of America",
          "country_code": "us"
        },
        "boundingbox": [
          "36.6603318",
          "36.6821601",
          "-109.7352939",
          "-109.7329412"
        ]
      }
    

BigDataCloud Output

//BigDataCLoud
  {
    "latitude": 36.67288589477539,
    "longitude": -109.7301025390625,
    "localityLanguageRequested": "en",
    "continent": "North America",
    "continentCode": "NA",
    "countryName": "United States of America",
    "countryCode": "US",
    "principalSubdivision": "Arizona",
    "locality": "Apache County",
    "postcode": "86545",
    "localityInfo": {
      "administrative": [
        {
          "order": 1,
          "adminLevel": 2,
          "name": "United States of America",
          "description": "country in North America",
          "isoName": "United States of America (the)",
          "isoCode": "US",
          "wikidataId": "Q30"
        },
        {
          "order": 3,
          "adminLevel": 4,
          "name": "Arizona",
          "description": "state of the United States of America",
          "isoName": "Arizona",
          "isoCode": "US-AZ",
          "wikidataId": "Q816"
        },
        {
          "order": 5,
          "adminLevel": 6,
          "name": "Apache County",
          "description": "county in Arizona, United States",
          "wikidataId": "Q58771"
        }
      ],
      "informative": [
        {
          "order": 0,
          "name": "North America",
          "description": "continent on the Earth's northwestern quadrant",
          "isoCode": "NA",
          "wikidataId": "Q49"
        },
        {
          "order": 2,
          "name": "Colorado Plateau",
          "description": "plateau in the southwestern United States",
          "wikidataId": "Q925906"
        },
        {
          "order": 4,
          "name": "Navajo Nation",
          "description": "aboriginal_lands"
        },
        {
          "order": 6,
          "name": "86545",
          "description": "postal code"
        }
      ]
    }
  }

Google API Output

//GoogleAPI
    {
        "plus_code": {
          "compound_code": "M7F9+5X Rock Point, AZ, USA",
          "global_code": "858GM7F9+5X"
        },
        "results": [
          {
            "address_components": [
              {
                "long_name": "Unnamed Road",
                "short_name": "Unnamed Road",
                "types": [
                  "route"
                ]
              },
              {
                "long_name": "Rock Point",
                "short_name": "Rock Point",
                "types": [
                  "locality",
                  "political"
                ]
              },
              {
                "long_name": "Apache County",
                "short_name": "Apache County",
                "types": [
                  "administrative_area_level_2",
                  "political"
                ]
              },
              {
                "long_name": "Arizona",
                "short_name": "AZ",
                "types": [
                  "administrative_area_level_1",
                  "political"
                ]
              },
              {
                "long_name": "United States",
                "short_name": "US",
                "types": [
                  "country",
                  "political"
                ]
              },
              {
                "long_name": "86545",
                "short_name": "86545",
                "types": [
                  "postal_code"
                ]
              }
            ],
            "formatted_address": "Unnamed Road, Rock Point, AZ 86545, USA",
            "geometry": {
              "bounds": {
                "northeast": {
                  "lat": 36.6800319,
                  "lng": -109.7240248
                },
                "southwest": {
                  "lat": 36.647811,
                  "lng": -109.7263801
                }
              },
              "location": {
                "lat": 36.6638285,
                "lng": -109.7254349
              },
              "location_type": "GEOMETRIC_CENTER",
              "viewport": {
                "northeast": {
                  "lat": 36.6800319,
                  "lng": -109.7238534697085
                },
                "southwest": {
                  "lat": 36.647811,
                  "lng": -109.7265514302915
                }
              }
            },
            "place_id": "ChIJ36CSaZKiMIcR1vrOUpmbHBM",
            "types": [
              "route"
            ]
          },
          {
            "address_components": [
              {
                "long_name": "86545",
                "short_name": "86545",
                "types": [
                  "postal_code"
                ]
              },
              {
                "long_name": "Rock Point",
                "short_name": "Rock Point",
                "types": [
                  "locality",
                  "political"
                ]
              },
              {
                "long_name": "Apache County",
                "short_name": "Apache County",
                "types": [
                  "administrative_area_level_2",
                  "political"
                ]
              },
              {
                "long_name": "Arizona",
                "short_name": "AZ",
                "types": [
                  "administrative_area_level_1",
                  "political"
                ]
              },
              {
                "long_name": "United States",
                "short_name": "US",
                "types": [
                  "country",
                  "political"
                ]
              }
            ],
            "formatted_address": "Rock Point, AZ 86545, USA",
            "geometry": {
              "bounds": {
                "northeast": {
                  "lat": 36.932033,
                  "lng": -109.367176
                },
                "southwest": {
                  "lat": 36.4654809,
                  "lng": -109.7937421
                }
              },
              "location": {
                "lat": 36.7039897,
                "lng": -109.6163185
              },
              "location_type": "APPROXIMATE",
              "viewport": {
                "northeast": {
                  "lat": 36.932033,
                  "lng": -109.367176
                },
                "southwest": {
                  "lat": 36.4654809,
                  "lng": -109.7937421
                }
              }
            },
            "place_id": "ChIJo776HimgMIcRuHPkmPerSSs",
            "types": [
              "postal_code"
            ]
          },
          {
            "address_components": [
              {
                "long_name": "Apache County",
                "short_name": "Apache County",
                "types": [
                  "administrative_area_level_2",
                  "political"
                ]
              },
              {
                "long_name": "Arizona",
                "short_name": "AZ",
                "types": [
                  "administrative_area_level_1",
                  "political"
                ]
              },
              {
                "long_name": "United States",
                "short_name": "US",
                "types": [
                  "country",
                  "political"
                ]
              }
            ],
            "formatted_address": "Apache County, AZ, USA",
            "geometry": {
              "bounds": {
                "northeast": {
                  "lat": 36.9993889,
                  "lng": -109.0452231
                },
                "southwest": {
                  "lat": 33.4754171,
                  "lng": -110.0007051
                }
              },
              "location": {
                "lat": 35.5313224,
                "lng": -109.3783206
              },
              "location_type": "APPROXIMATE",
              "viewport": {
                "northeast": {
                  "lat": 36.9993889,
                  "lng": -109.0452231
                },
                "southwest": {
                  "lat": 33.4754171,
                  "lng": -110.0007051
                }
              }
            },
            "place_id": "ChIJ-WDLw6lhJYcRcrSQ4ttk6sE",
            "types": [
              "administrative_area_level_2",
              "political"
            ]
          },
          {
            "address_components": [
              {
                "long_name": "Arizona",
                "short_name": "AZ",
                "types": [
                  "administrative_area_level_1",
                  "political"
                ]
              },
              {
                "long_name": "United States",
                "short_name": "US",
                "types": [
                  "country",
                  "political"
                ]
              }
            ],
            "formatted_address": "Arizona, USA",
            "geometry": {
              "bounds": {
                "northeast": {
                  "lat": 37.0042599,
                  "lng": -109.0452231
                },
                "southwest": {
                  "lat": 31.3325693,
                  "lng": -114.8138273
                }
              },
              "location": {
                "lat": 34.0489281,
                "lng": -111.0937311
              },
              "location_type": "APPROXIMATE",
              "viewport": {
                "northeast": {
                  "lat": 37.0042599,
                  "lng": -109.0452231
                },
                "southwest": {
                  "lat": 31.3325693,
                  "lng": -114.8138273
                }
              }
            },
            "place_id": "ChIJaxhMy-sIK4cRcc3Bf7EnOUI",
            "types": [
              "administrative_area_level_1",
              "political"
            ]
          },
          {
            "address_components": [
              {
                "long_name": "United States",
                "short_name": "US",
                "types": [
                  "country",
                  "political"
                ]
              }
            ],
            "formatted_address": "United States",
            "geometry": {
              "bounds": {
                "northeast": {
                  "lat": 71.5388001,
                  "lng": -66.885417
                },
                "southwest": {
                  "lat": 18.7763,
                  "lng": 170.5957
                }
              },
              "location": {
                "lat": 37.09024,
                "lng": -95.712891
              },
              "location_type": "APPROXIMATE",
              "viewport": {
                "northeast": {
                  "lat": 71.5388001,
                  "lng": -66.885417
                },
                "southwest": {
                  "lat": 18.7763,
                  "lng": 170.5957
                }
              }
            },
            "place_id": "ChIJCzYy5IS16lQRQrfeQ5K5Oxw",
            "types": [
              "country",
              "political"
            ]
          }
        ],
        "status": "OK"
      }
    

Here API Output

//HereAPI
  {
    "items": [
      {
        "title": "86514, Teec Nos Pos, AZ, United States",
        "resultType": "street",
        "address": {
          "label": "86514, Teec Nos Pos, AZ, United States",
          "countryCode": "USA",
          "countryName": "United States",
          "state": "Arizona",
          "county": "Apache",
          "city": "Teec Nos Pos",
          "postalCode": "86514"
        },
        "position": {
          "lat": 36.67289,
          "lng": -109.7255
        },
        "access": [
          {
            "lat": 36.67289,
            "lng": -109.7255
          }
        ],
        "distance": 410,
        "mapView": {
          "west": -109.72403,
          "south": 36.64782,
          "east": -109.72791,
          "north": 36.70525
        }
      }
    ]
  }


  

More examples and comparisons of the output.

Example #1: Somewhere in the North Atlantic Ocean.

Output/

Coordinate

BigData Cloud

Google API

Here API

LocationIQ

66.752353, -28.549259

(Somewhere in the North Atlantic Ocean)

Atlantic Ocean

Atlantic Ocean

Unable to Geocode

Unable to Geocode

Conclusion:

When you provide a point that cannot be resolved to the closest street address, Here and LocationIQ fail to resolve to any address at all. 

Example #2: Somewhere in the Sahara Desert.

Output/

Coordinate

BigData Cloud

Google API

Here API

LocationIQ

24.997479, 27.129873

(Al Wahat Al Dakhla Desert, New Valley Governorate, Egypt)

Al Wādī al Jadīd, New Valley Governorate, Egypt, a republic in North Africa. 

More Info

Gilf Kebir, a mountain range

The Western Desert, Libyan desert

Sahara, desert in Africa

Al Wahat Al Dakhla Desert, New Valley Governorate, Egypt

Markaz El Wahat El Dakhla, Egypt

New Valley Governorate, Egypt

Conclusion:

BigDataCloud’s API is able to provide more locality information about the region compared to other service providers.

Example #3: Somewhere near Hudson Bay.

Output/

Coordinate

BigData Cloud

Google API

Here API

LocationIQ

54.004022, -80.765083

(Southern end of Hudson Bay, between Ontario and Quebec

James Bay, Hudson Bay, 

Qikiqtaaluk Region, Nunavut,

Canada

Baffin, Unorganized, Nunavut, Canada

Nunavut, NU, Canada

"distance": -94933,

Qikiqtaaluk Region, Nunavut, Canada

“important”:none

Conclusion

BigDataCloud’s API was the only one to identify the actual name of the bay, James Bay, and associate it as being part of Hudson Bay. Here and LocationIQ’s API wasn’t able to provide an accurate result.

Example #4: Somewhere in London

Output/

Coordinate

BigData Cloud

Google API

Here

LocationIQ

51.771637, -0.393646

(Redbourn Civil Parish, UK)

Redbourn,

AL3 6, St Albans, Redbourn, Hertfordshire, East of England, England, UK

Punchbowl Ln, St Albans AL3, UK

St Albans AL3 6RF, UK

Redbourn Civil Parish, UK

St Albans AL3, UK

Hertfordshire, UK

Punch Bowl Lane, St Albans, AL3 6, United Kingdom

Hertfordshire

"distance": 19

Punch Bowl Lane, Redbourn, St Albans, Hertfordshire, East of England, England, AL3 6RP, United Kingdom

"important": none.

Conclusion

This is yet another example of how resolving to the nearest street can give a false result. All the other APIs have identified the point being near Punchbowl Ln, St. Google, as usual, has provided multiple options. 

Example #5: Somewhere in Los Angeles

Output/

Coordinate

BigData Cloud

Google API

Here API

LocationIQ

34.123111, -118.022614

(Arcadia, CA 91006, USA)

91006

Arcadia

Los Angeles County

California, USA

1505 S 4th Ave, Arcadia, CA 91006, USA

1500 S 3rd Ave, Arcadia, CA 91006, USA

1501-1599 S 3rd Ave, Arcadia, CA 91006, USA

1505 S 4th Ave, Arcadia, CA 91006, United States

1505, South 4th Avenue, Arcadia, Los Angeles County, California, 91006, USA

Conclusion

Google has provided two street addresses - 4th Ave and 3rd Ave street. Here and LocationIQ have simply provided 4th Ave as the location. As the point is almost in equidistance from the streets the location is ambiguous and cannot be accurately resolved. The best option, in this case, is to use the smallest resolved area rather than a precise street address.