Determine the county for an address

The problem

You have a US address (or GPS coordinates) and want to know which county it belongs to.

Background

US addresses show the city, state and zipcode, but not the county.

You can use the OpenCage geocoding API for forward (address to coordinates) or reverse (coordinates to address) geocoding. With each result we return the county (and other information) for the location.

In addition, we also return something known as the FIPS code, which refers to the US Federal Information Processing Standards (FIPS). FIPS codes typically (though not always) depend on the county of a location.

Technical Details

When you send a request to the OpenCage geocoding API with each result we return various fields of information about the location.

Specifically ...

within the components portion of each result we return the field county which contains the county name.
Example: Pueblo County.

and in the annotations portion of the result we return the FIPS values (state and county) for the location if they can be determined.
Example: "FIPS": { "county": "08101", "state": "08" }.

Code examples

Here's a small example of making a geocoding request to the OpenCage API in javascript to determine the county and FIPS code of the location.
We also have SDKs for over 30 other programming languages.

<script>
  var api_key = 'YOUR-API-KEY';
  var address = '215 West 10th Street, Pueblo, CO 81003, USA';  // an address in Colorado

  var api_url = 'https://api.opencagedata.com/geocode/v1/json'

  var request_url = api_url
    + '?'
    + 'key=' + api_key
    + '&q=' + encodeURIComponent(address)
    + '&pretty=1';

  // see full list of required and optional parameters:
  // https://opencagedata.com/api#required-params

  var request = new XMLHttpRequest();
  request.open('GET', request_url, true);

  request.onload = function() {
      // see full list of possible response codes:
      // https://opencagedata.com/api#codes
      var data = JSON.parse(request.responseText);
      if (request.status === 200){  // Success!
          var county = 'no county returned';
          if (data.results[0].components.county != null){
              county = data.results[0].components.county;
          }
          var fips_code = 'no FIPS code returned';                  
          if (data.results[0].annotations.FIPS.county != null){
              fips_code = data.results[0].annotations.FIPS.county;
          }
          console.log('county: ' + county);       // prints "Pueblo County"
          console.log('FIPS code: ' + fips_code); // prints "08101"
      } else {
          console.log("unable to geocode! Response code: " + request.status);
          console.log('error msg: ' + data.status.message);
      }
  };

  request.onerror = function() {
      // There was a connection error of some sort
      console.log("unable to connect to server");
  };
  request.send();  // make the request
</script>

Further Reading

Happy geocoding!

Start your free trial

2,500 geocoding API requests per day.

No credit card required.