Auto populate a country select field

If you live in the UK like us, you're probably sick of scrolling through a country list to pick the UK.
We think websites should make this easier, and this tool could help. Below is a country select that should automatically be set to your country:



This tool uses a free geolocation API from https://extreme-ip-lookup.com/

It's easy to make this work on your site:

  • Go to https://extreme-ip-lookup.com/ and get a free API key
  • Copy and paste the below HTML and JS, from where it says <!--beginning of code to copy, to the point where it says <!--end of code to copy -->
  • Find the line that says 'const key='JElgs71yd3H1JncBoA0Z' and exchange that key value for the API key you've setup in the first step
  • You can put your own code in the function 'countrySelected', if you want to react when a country is chosen
  • You can access the country name by document.getElementById('country-select').options[document.getElementById('country-select').selectedIndex].text
  • ... and the country code by document.getElementById('country-select').value
                            
                                <!--beginning of area to copy -->
                                <!-- Auto populating country select from https://geektools.org/auto_populate_country_select.html -->
                                <span id="error-message">
                                <select id="country-select" onclick="countrySelected(this);"></select>
                            
                            
                                <script>
                                    const key='JElgs71yd3H1JncBoA0Z';
                                    const countries = [
                                    {'code': 'DZ', 'name' : 'Algeria'},
                                    {'code': 'AD','name':'Andorra'},
                                    {'code': 'AF', 'name' : 'Afghanistan'},
                                    {'code': 'AG', 'name' : 'Antigua and Barbuda'},
                                    {'code': 'AI', 'name' : 'Anguilla'},
                                    {'code': 'AL', 'name' : 'Albania'},
                                    {'code': 'AS', 'name' : 'American Samoa'},
                                    {'code': 'AM', 'name' : 'Armenia'},
                                    {'code': 'AO', 'name' : 'Angola'},
                                    {'code': 'AQ', 'name' : 'Antarctica'},
                                    {'code': 'AR', 'name' : 'Argentina'},
                                    {'code': 'AW', 'name' : 'Aruba'},
                                    {'code': 'AU', 'name' : 'Australia'},
                                    {'code': 'AT', 'name' : 'Austria'},
                                    {'code': 'AX', 'name' : 'Åland Islands'},
                                    {'code': 'AZ', 'name' : 'Azerbaijan'},
                                    {'code': 'BS', 'name' : 'Bahamas'},
                                    {'code': 'BH', 'name' : 'Bahrain'},    
                                    {'code': 'BD', 'name' : 'Bangladesh'},
                                    {'code': 'BB', 'name' : 'Barbados'},
                                    {'code': 'BY', 'name' : 'Belarus'},
                                    {'code': 'BE', 'name' : 'Belgium'},
                                    {'code': 'BZ', 'name' : 'Belize'},
                                    {'code': 'BT', 'name' : 'Bhutan'},
                                    {'code': 'BA', 'name' : 'Bosnia and Herzegovina'},    
                                    {'code': 'BW', 'name' : 'Botswana'},
                                    {'code': 'IO', 'name' : 'British Indian Ocean Territory'},
                                    {'code': 'BV', 'name' : 'Bouvet Island'},
                                    {'code': 'BG', 'name' : 'Bulgaria'},
                                    {'code': 'BF', 'name' : 'Burkina Faso'},
                                    {'code': 'BI', 'name' : 'Burundi'},
                                    {'code': 'BJ', 'name' : 'Benin'},
                                    {'code': 'BM', 'name' : 'Bermuda'},
                                    {'code': 'BO', 'name' : 'Bolivia (Plurinational State of)'},
                                    {'code': 'BQ', 'name' : 'Bonaire, Sint Eustatius and Saba'},
                                    {'code': 'BR', 'name' : 'Brazil'},
                                    {'code': 'BN', 'name' : 'Brunei Darussalam'},    
                                    {'code': 'CV', 'name' : 'Cabo Verde'},
                                    {'code': 'KH', 'name' : 'Cambodia'},
                                    {'code': 'CM', 'name' : 'Cameroon'},
                                    {'code': 'CA', 'name' : 'Canada'},
                                    {'code': 'KY', 'name' : 'Cayman Islands'},
                                    {'code': 'CF', 'name' : 'Central African Republic'},
                                    {'code': 'TD', 'name' : 'Chad'},
                                    {'code': 'CL', 'name' : 'Chile'},
                                    {'code': 'CN', 'name' : 'China'},
                                    {'code': 'CX', 'name' : 'Christmas Island'},
                                    {'code': 'CC', 'name' : 'Cocos (Keeling) Islands'},
                                    {'code': 'KM', 'name' : 'Comoros'},
                                    {'code': 'CD', 'name' : 'Congo, Democratic Republic of the'},
                                    {'code': 'CO', 'name' : 'Colombia'},
                                    {'code': 'CG', 'name' : 'Congo'},
                                    {'code': 'CK', 'name' : 'Cook Islands'},
                                    {'code': 'CR', 'name' : 'Costa Rica'},
                                    {'code': 'CI', 'name' : 'Côte d\'Ivoire'},  
                                    {'code': 'HR', 'name' : 'Croatia'},  
                                    {'code': 'CU', 'name' : 'Cuba'},
                                    {'code': 'CW', 'name' : 'Curaçao'},
                                    {'code': 'CY', 'name' : 'Cyprus'},
                                    {'code': 'CZ', 'name' : 'Czechia'},
                                    {'code': 'DK', 'name' : 'Denmark'},
                                    {'code': 'DJ', 'name' : 'Djibouti'},
                                    {'code': 'DM', 'name' : 'Dominica'},
                                    {'code': 'DO', 'name' : 'Dominican Republic'},
                                    {'code': 'EC', 'name' : 'Ecuador'},
                                    {'code': 'GQ', 'name' : 'Equatorial Guinea'},
                                    {'code': 'EG', 'name' : 'Egypt'},
                                    {'code': 'SV', 'name' : 'El Salvador'},
                                    {'code': 'ER', 'name' : 'Eritrea'},
                                    {'code': 'EE', 'name' : 'Estonia'},
                                    {'code': 'SZ', 'name' : 'Eswatini'},
                                    {'code': 'ET', 'name' : 'Ethiopia'},
                                    {'code': 'FK', 'name' : 'Falkland Islands (Malvinas)'},
                                    {'code': 'FO', 'name' : 'Faroe Islands'},
                                    {'code': 'FJ', 'name' : 'Fiji'},
                                    {'code': 'FI', 'name' : 'Finland'},
                                    {'code': 'FR', 'name' : 'France'},
                                    {'code': 'GF', 'name' : 'French Guiana'},
                                    {'code': 'PF', 'name' : 'French Polynesia'},
                                    {'code': 'TF', 'name' : 'French Southern Territories'},
                                    {'code': 'GA', 'name' : 'Gabon'},
                                    {'code': 'GM', 'name' : 'Gambia'},
                                    {'code': 'GE', 'name' : 'Georgia'},
                                    {'code': 'DE', 'name' : 'Germany'},
                                    {'code': 'GH', 'name' : 'Ghana'},
                                    {'code': 'GI', 'name' : 'Gibraltar'},
                                    {'code': 'GR', 'name' : 'Greece'},
                                    {'code': 'GL', 'name' : 'Greenland'},
                                    {'code': 'GD', 'name' : 'Grenada'},
                                    {'code': 'GP', 'name' : 'Guadeloupe'},
                                    {'code': 'GU', 'name' : 'Guam'},
                                    {'code': 'GT', 'name' : 'Guatemala'},
                                    {'code': 'GG', 'name' : 'Guernsey'},
                                    {'code': 'GN', 'name' : 'Guinea'},
                                    {'code': 'GW', 'name' : 'Guinea-Bissau'},
                                    {'code': 'GY', 'name' : 'Guyana'},
                                    {'code': 'HT', 'name' : 'Haiti'},
                                    {'code': 'HM', 'name' : 'Heard Island and McDonald Islands'},
                                    {'code': 'VA', 'name' : 'Holy See'},
                                    {'code': 'HN', 'name' : 'Honduras'},
                                    {'code': 'HK', 'name' : 'Hong Kong'},    
                                    {'code': 'HU', 'name' : 'Hungary'},
                                    {'code': 'IS', 'name' : 'Iceland'},
                                    {'code': 'IN', 'name' : 'India'},
                                    {'code': 'ID', 'name' : 'Indonesia'},
                                    {'code': 'IR', 'name' : 'Iran (Islamic Republic of)'},
                                    {'code': 'IQ', 'name' : 'Iraq'},
                                    {'code': 'IE', 'name' : 'Ireland'},
                                    {'code': 'IM', 'name' : 'Isle of Man'},
                                    {'code': 'IL', 'name' : 'Israel'},
                                    {'code': 'IT', 'name' : 'Italy'},
                                    {'code': 'JM', 'name' : 'Jamaica'},
                                    {'code': 'JP', 'name' : 'Japan'},
                                    {'code': 'JE', 'name' : 'Jersey'},
                                    {'code': 'JO', 'name' : 'Jordan'},
                                    {'code': 'KZ', 'name' : 'Kazakhstan'},
                                    {'code': 'KE', 'name' : 'Kenya'},
                                    {'code': 'KI', 'name' : 'Kiribati'},
                                    {'code': 'KP', 'name' : 'Korea (Democratic People\'s Republic of)'},
                                    {'code': 'KR', 'name' : 'Korea, Republic of'},
                                    {'code': 'KG', 'name' : 'Kyrgyzstan'},
                                    {'code': 'KW', 'name' : 'Kuwait'},
                                    {'code': 'LA', 'name' : 'Lao People\'s Democratic Republic'},
                                    {'code': 'LB', 'name' : 'Lebanon'},
                                    {'code': 'LI', 'name' : 'Liechtenstein'},
                                    {'code': 'LR', 'name' : 'Liberia'},
                                    {'code': 'LS', 'name' : 'Lesotho'},
                                    {'code': 'LT', 'name' : 'Lithuania'},
                                    {'code': 'LU', 'name' : 'Luxembourg'},
                                    {'code': 'LV', 'name' : 'Latvia'},
                                    {'code': 'LY', 'name' : 'Libya'},
                                    {'code': 'MO', 'name' : 'Macao'},
                                    {'code': 'MG', 'name' : 'Madagascar'},
                                    {'code': 'MW', 'name' : 'Malawi'},
                                    {'code': 'MY', 'name' : 'Malaysia'},
                                    {'code': 'MV', 'name' : 'Maldives'},
                                    {'code': 'ML', 'name' : 'Mali'},
                                    {'code': 'MT', 'name' : 'Malta'},
                                    {'code': 'MH', 'name' : 'Marshall Islands'},
                                    {'code': 'MQ', 'name' : 'Martinique'},
                                    {'code': 'MR', 'name' : 'Mauritania'},
                                    {'code': 'MU', 'name' : 'Mauritius'},
                                    {'code': 'YT', 'name' : 'Mayotte'},
                                    {'code': 'MX', 'name' : 'Mexico'},
                                    {'code': 'FM', 'name' : 'Micronesia (Federated States of)'},
                                    {'code': 'MD', 'name' : 'Moldova, Republic of'},
                                    {'code': 'MC', 'name' : 'Monaco'},
                                    {'code': 'MN', 'name' : 'Mongolia'},
                                    {'code': 'ME', 'name' : 'Montenegro'},
                                    {'code': 'MS', 'name' : 'Montserrat'},
                                    {'code': 'MA', 'name' : 'Morocco'},
                                    {'code': 'MZ', 'name' : 'Mozambique'},
                                    {'code': 'MM', 'name' : 'Myanmar'},
                                    {'code': 'NA', 'name' : 'Namibia'},
                                    {'code': 'NR', 'name' : 'Nauru'},
                                    {'code': 'NP', 'name' : 'Nepal'},
                                    {'code': 'NL', 'name' : 'Netherlands'},
                                    {'code': 'NC', 'name' : 'New Caledonia'},
                                    {'code': 'NZ', 'name' : 'New Zealand'},
                                    {'code': 'NI', 'name' : 'Nicaragua'},
                                    {'code': 'NE', 'name' : 'Niger'},
                                    {'code': 'NG', 'name' : 'Nigeria'},
                                    {'code': 'NU', 'name' : 'Niue'},
                                    {'code': 'NF', 'name' : 'Norfolk Island'},
                                    {'code': 'MK', 'name' : 'North Macedonia'},
                                    {'code': 'MP', 'name' : 'Northern Mariana Islands'},
                                    {'code': 'NO', 'name' : 'Norway'},    
                                    {'code': 'OM', 'name' : 'Oman'},
                                    {'code': 'PK', 'name' : 'Pakistan'},
                                    {'code': 'PW', 'name' : 'Palau'},
                                    {'code': 'PS', 'name' : 'Palestine, State of'},
                                    {'code': 'PA', 'name' : 'Panama'},
                                    {'code': 'PG', 'name' : 'Papua New Guinea'},
                                    {'code': 'PY', 'name' : 'Paraguay'},
                                    {'code': 'PE', 'name' : 'Peru'},
                                    {'code': 'PH', 'name' : 'Philippines'},
                                    {'code': 'PN', 'name' : 'Pitcairn'},
                                    {'code': 'PL', 'name' : 'Poland'},
                                    {'code': 'PT', 'name' : 'Portugal'},
                                    {'code': 'PR', 'name' : 'Puerto Rico'},    
                                    {'code': 'QA', 'name' : 'Qatar'},
                                    {'code': 'RE', 'name' : 'Réunion'},
                                    {'code': 'RO', 'name' : 'Romania'},
                                    {'code': 'RU', 'name' : 'Russian Federation'},
                                    {'code': 'RW', 'name' : 'Rwanda'},
                                    {'code': 'BL', 'name' : 'Saint Barthélemy'},   
                                    {'code': 'SH', 'name' : 'Saint Helena, Ascension and Tristan da Cunha'},
                                    {'code': 'KN', 'name' : 'Saint Kitts and Nevis'},
                                    {'code': 'LC', 'name' : 'Saint Lucia'},
                                    {'code': 'MF', 'name' : 'Saint Martin (French part)'}, 
                                    {'code': 'PM', 'name' : 'Saint Pierre and Miquelon'},
                                    {'code': 'VC', 'name' : 'Saint Vincent and the Grenadines'},
                                    {'code': 'WS', 'name' : 'Samoa'},
                                    {'code': 'SM', 'name' : 'San Marino'},
                                    {'code': 'ST', 'name' : 'Sao Tome and Principe'},
                                    {'code': 'SA', 'name' : 'Saudi Arabia'},
                                    {'code': 'SN', 'name' : 'Senegal'},
                                    {'code': 'RS', 'name' : 'Serbia'},    
                                    {'code': 'SC', 'name' : 'Seychelles'},
                                    {'code': 'SL', 'name' : 'Sierra Leone'},
                                    {'code': 'SG', 'name' : 'Singapore'},
                                    {'code': 'SX', 'name' : 'Sint Maarten (Dutch part)'},
                                    {'code': 'SK', 'name' : 'Slovakia'},
                                    {'code': 'SI', 'name' : 'Slovenia'},
                                    {'code': 'SB', 'name' : 'Solomon Islands'},
                                    {'code': 'SO', 'name' : 'Somalia'},
                                    {'code': 'ZA', 'name' : 'South Africa'},
                                    {'code': 'GS', 'name' : 'South Georgia and the South Sandwich Islands'},
                                    {'code': 'SS', 'name' : 'South Sudan'},
                                    {'code': 'ES', 'name' : 'Spain'},
                                    {'code': 'LK', 'name' : 'Sri Lanka'},
                                    {'code': 'SD', 'name' : 'Sudan'},
                                    {'code': 'SR', 'name' : 'Suriname'},
                                    {'code': 'SJ', 'name' : 'Svalbard and Jan Mayen'},
                                    {'code': 'SE', 'name' : 'Sweden'},    
                                    {'code': 'CH', 'name' : 'Switzerland'},
                                    {'code': 'SY', 'name' : 'Syrian Arab Republic'},
                                    {'code': 'TW', 'name' : 'Taiwan, Province of China'},
                                    {'code': 'TZ', 'name' : 'Tanzania, United Republic of'},
                                    {'code': 'TJ', 'name' : 'Tajikistan'},
                                    {'code': 'TH', 'name' : 'Thailand'},
                                    {'code': 'TL', 'name' : 'Timor-Leste'},
                                    {'code': 'TG', 'name' : 'Togo'},
                                    {'code': 'TK', 'name' : 'Tokelau'},
                                    {'code': 'TO', 'name' : 'Tonga'},
                                    {'code': 'TT', 'name' : 'Trinidad and Tobago'},
                                    {'code': 'TN', 'name' : 'Tunisia'},
                                    {'code': 'TR', 'name' : 'Turkey'},
                                    {'code': 'TM', 'name' : 'Turkmenistan'},
                                    {'code': 'TC', 'name' : 'Turks and Caicos Islands'},
                                    {'code': 'TV', 'name' : 'Tuvalu'},
                                    {'code': 'UG', 'name' : 'Uganda'},
                                    {'code': 'UA', 'name' : 'Ukraine'},
                                    {'code': 'AE', 'name' : 'United Arab Emirates'},
                                    {'code': 'GB', 'name' : 'United Kingdom'},
                                    {'code': 'UM', 'name' : 'United States Minor Outlying Islands'},
                                    {'code': 'US', 'name' : 'United States of America'},
                                    {'code': 'UY', 'name' : 'Uruguay'},
                                    {'code': 'UZ', 'name' : 'Uzbekistan'},
                                    {'code': 'VU', 'name' : 'Vanuatu'},    
                                    {'code': 'VE', 'name' : 'Venezuela (Bolivarian Republic of)'},
                                    {'code': 'VN', 'name' : 'Vietnam'},
                                    {'code': 'VG', 'name' : 'Virgin Islands (British)'},
                                    {'code': 'VI', 'name' : 'Virgin Islands (U.S.)'},
                                    {'code': 'WF', 'name' : 'Wallis and Futuna'},
                                    {'code': 'EH', 'name' : 'Western Sahara'},
                                    {'code': 'YE', 'name' : 'Yemen'},
                                    {'code': 'ZM', 'name' : 'Zambia'},
                                    {'code': 'ZW', 'name' : 'Zimbabwe'}
                                    ];
                                    
                                    if ((document.location.href!='https://geektools.org/auto_populate_country_select.html')&&(key == 'JElgs71yd3H1JncBoA0Z')){
                                        document.getElementById('error-message').innerHTML="<font color='red'>You will need to change the key for this script to work on your site!</font><br/>Go to <a href='https://extreme-ip-lookup.com/'>https://extreme-ip-lookup.com/</a> to generate a key.<br/>Access is free for <10,000 requests a month.<br/>Then put your key value in the script where it  currently says:\n'const key=\'JElgs71yd3H1JncBoA0Z\''<br/><br/>";
                                    }
                                    else {        
                                        fetch('https://extreme-ip-lookup.com/json/?key='+key)
                                        .then( res => res.json())
                                        .then(response => {
                                            populateCountrySelect(response.countryCode);
                                        })
                                        .catch((data, status) => {
                                            console.log('Request failed' +data+"..."+status);
                                        })
                                    }
                                    function populateCountrySelect(countryCode){
                                        var x = document.getElementById("country-select");
                                        countries.forEach(function(aCountry){            
                                            x.add(new Option(aCountry['name'], aCountry['code']));            
                                        });
                                        x.value=countryCode;
                                        countrySelected(x);
                                    }
                            
                                function countrySelected(inData){
                                    console.log("just an example of handling the selected country code, if needed. Country code is "+inData['value']);        
                                }        
                                </script>
                                
                                <!--end of area to copy -->