TL;DR - Sorry for the long post (trying to be thorough for folks coming in from google later). Short version: No easy, non-technical way that I’m aware of aside from what was mentioned previously by so_damn_low. But since I already had notes for doing it from scripts on the desktop… I reran them and included a couple results below in the output of some fairly technical queries from Nord’s programming api.
Unfortunatly, I am unaware of an easy / user-friendly way to simply go to Nord’s site and say “I want an opvn file for ____ city” and get a list of matching ovpns.
But there are a few ways to get them for specific locations and I’m a little surprised that no one mentioned them … I’ll attempt to list out the ways that I know of but that will mean this will probably be a fairly long post.
First, As mentioned here, you can download a zip file containing ovpn files for many locations. If you are interested in having your exit point be in a particular city, this isn’t the greatest option as the servers are all specified by IPv4 address only and so it would require manually loading and then testing each config with something like whatmyip or Nord’s IP checker, one by one. But it is easy to download and figure out.
You can also find this page where you can download nord ovpn files one by one, but it is slow to load and you will have the same issue as above if you are trying to find an exit node in a particular city.
Second, there is another option not requiring a lot of technical know-how (but one I have not tried personally in quite some time) would be to google for free VPN services online and find one with an exit node in the City you want (or alternately, if you have a 2nd paid VPN provider or don’t mind signing up for a free trial with one, that would work too). Then use Nord’s Recommended Server tool which should find one close to “you” (but really to the exit node you’re using).
This is essentially the same thing so_damn_low was saying to do, only he was using the Nord mobile app + Recommended server tool instead of a separate VPN. Either way should work, but TBH his is probably less work unless you already have a 2nd VPN setup.
A third option, albeit one requiring a bit more technical finesse, is to use Nord’s api to download a JSON file, then use utilities to query that. This is probably quite difficult for the average user to do and is more something for programmers and the tech-types. That said, I included a couple results for each query that you could just pick out of the code block below.
I’m on Linux and don’t know a good Windows tool for doing JSON queries. I will show how to use the jq
tool in Linux, which I assume should be doable in tools like WSL or cygwin (with jq
and curl
installed) but again this is more for technical types… This is mostly based on this excellent blog as well as a good bit of trial and error on my part. Luckily, as a Linux user, I can’t resist the urge to share what I’ve found with others 
There are at least 2 versions of the API. There is https://api.nordvpn.com/server which contains a country
as well as latitude and longitude… but you’d have to look those up and cross-reference which seems like too much work for my tastes.
There’s also https://api.nordvpn.com/v1/servers which has all the same info plus a city
field. Neither API allows querying by US states directly (so can’t search by “Connecticut” … I did try plugging in the names of a few of the bigger cities there but didn’t get any hits so it’s possible that Nord doesn’t have any servers in Connecticut; or that I just picked bad locations).
The queries are also different depending on the type of server you’re looking for, so I’ll try to show examples of a few different query types.
curl --silent "https://api.nordvpn.com/v1/servers?limit=16354" | jq . > all-nord-servers.json;
# list all unique Nord server types
$ jq ".[] | select(.groups != null) | select(.groups | length >= 1) | .groups[] | .title" all-nord-servers.json | grep -Pv 'America|Europe|Africa|Asia'| sort -u
"Dedicated IP"
"Double VPN"
"Obfuscated Servers"
"Onion Over VPN"
"P2P"
"Standard VPN servers"
# list all unique Nord Technologies
$ jq ".[] | select(.technologies != null) | select(.technologies | length >= 1) | .technologies[] | .identifier" all-nord-servers.json | sort -u
"ikev2"
"ikev2_v6"
"mesh_relay"
"openvpn_dedicated_tcp"
"openvpn_dedicated_udp"
"openvpn_tcp"
"openvpn_tcp_v6"
"openvpn_udp"
"openvpn_udp_v6"
"openvpn_xor_tcp"
"openvpn_xor_udp"
"proxy_ssl"
"proxy_ssl_cybersec"
"skylark"
"socks"
"wireguard_udp"
# display all P2P servers in Seattle that support OpenVPN on UDP - since tcp is slow anyway
# 94 results, showing first and last
$ city='Seattle';
$ jq ".[] | select(.groups != null and .locations != null and .services != null and .technologies != null) | select(.groups | length >= 1) | select(.locations | length >= 1) | select(.services | length >= 1) | select(.technologies | length >= 1) | select(.services[] | .identifier == \"vpn\") | select(.technologies[] | .identifier == \"openvpn_udp\") | select(.groups[] | .title == \"P2P\") | select(.locations[0].country != null and .locations[0].country.city != null) | select(.locations[0].country.code == \"US\") | select(.locations[0].country.city.name == \"${city}\" ) | .hostname" all-nord-servers.json | sort --version-sort
"us5086.nordvpn.com"
...
"us8961.nordvpn.com"
# display all P2P servers in New York that support Wireguard on UDP
# note - I ran this query for OpenVPN also and got back the same number of results
# as well as the same first and last server (I'm assuming all of their NY servers support both protocols)
# 398 results, showing first and last
$ city='New York';
$ jq ".[] | select(.groups != null and .locations != null and .services != null and .technologies != null) | select(.groups | length >= 1) | select(.locations | length >= 1) | select(.services | length >= 1) | select(.technologies | length >= 1) | select(.services[] | .identifier == \"vpn\") | select(.technologies[] | .identifier == \"wireguard_udp\") | select(.groups[] | .title == \"P2P\") | select(.locations[0].country != null and .locations[0].country.city != null) | select(.locations[0].country.code == \"US\") | select(.locations[0].country.city.name == \"${city}\" ) | .hostname" all-nord-servers.json | sort --version-sort
"us4735.nordvpn.com"
...
"us9364.nordvpn.com"
# display all 'Double VPN' servers in New York
# 22 results, showing first and last
$ city='New York';
$ jq ".[] | select(.groups != null and .locations != null) | select(.groups | length >= 1) | select(.locations | length >= 1) | select(.groups[] | .title == \"Double VPN\") | select(.locations[0].country != null and .locations[0].country.city != null) | select(.locations[0].country.code == \"US\") | select(.locations[0].country.city.name == \"${city}\" ) | .hostname" all-nord-servers.json | sort --version-sort
"us-ca38.nordvpn.com"
...
"us-ca61.nordvpn.com"
# display all 'Onion Over VPN' servers (there are only 2 and none in the US)
$ jq '.[] | . as $parent | select(.groups != null and .locations != null) | select(.groups | length >= 1) | select(.locations | length >= 1) | select(.groups[] | .title == "Onion Over VPN") | select(.locations[0].country != null and .locations[0].country.city != null) | [$parent.hostname, $parent.locations[0].country.name, $parent.locations[0].country.city.name] | "\(.[0]) : \(.[2]), \(.[1])"' all-nord-servers.json | sort --version-sort
"ch-onion2.nordvpn.com : Zurich, Switzerland"
"nl-onion4.nordvpn.com : Amsterdam, Netherlands"
I know it’s kind of a bear if you’re not technical (or even if you are but haven’t played with Linux before). OTOH, I’d imagine that for most techies, it’s still easy enough to be able to script. Hopefully, that’ll be helpful to someone wandering in from google, or maybe sleeplessbeatie will see this and do me the honor of adding my snippets above to the already excellent collection on his site.
Anyway, after you’ve determined which usXXXX.nordvpn.com server name(s) you’re interested in, then you can either construct the ovpn manually from the API results, find and download the matching ovpn from this page or find the matching ovpn file from the zip file mentioned in the first option (note: for me, there were a few that were missing in the zip).