Download UK Postcodes with Latitude and Longitude
Download a list of UK out code postcodes with their latitude and longitude coordinates.
Introduction

The UK postal system uses postcodes to help with automating the sorting and delivery of mail. This is made up of a 2-part code, an out code and an in code. As the out code is the most significant part of the system, it can be used to obtain a rough area level break up of the UK. There are approximately 2971 out codes and approximately 1.74M full postcodes (out code + in code).
Purpose
The uses of these out codes and lat/long values include mapping applications such as:
- Rough distance calculation
- Plot the rough location of a postcode on a map
- Simple postcode validation for input forms
List Status
Outcode Postcodes Current List : 2974
Full UK Postcode Current List : 1741532
Non Geographic Postcodes
Non geographic postcodes are listed below. Note these will have a latitude and longitude of an empty string
AB99, BT58, CA99, CM92, CM98, CR44, CR90, GIR, IM99, IV99, JE5, M61, ME99, N1C, N81, NR99, NW26, PA80, PE99, RH77, SL60, SO97, SW95, SY99, WD99, WF90
Downloads
Full UK Postcode Latitude Longitude Download
- MSSQL ukpostcodesmssql.zip (32MB zipped, 228MB unzipped)
- Uses a table called [postcodelatlng]
- Script to create table ukpostcodes_tablemssql.sql (1 KB)
- MySQL ukpostcodesmysql.zip (37MB zipped, 234MB unzipped)
- Uses a table called postcodelatlng
- Script to create table ukpostcodes_tablemysql.sql (1 KB)
- CSV ukpostcodes.zip (33MB zipped, 96MB unzipped)
- Header is in the first row : id,postcode,latitude,longitude
Outcode Area Postcodes (AB1,B2,BT7 etc..)
- MSSQL postcode-outcodes-mssql.sql (293 KB)
- Uses a table called [postcodelatlng]
- Script to create table postcode-outcodes_tablemssql (1 KB)
- MySQL postcode-outcodes-mysql (280 KB)
- Uses a table called postcodelatlng
- Script to create table postcode-outcodes_tablemysql.sql (1 KB)
- CSV postcode-outcodes.csv (82 KB)
- Header is in the first row : id,outcode,latitude,longitude
Contains Ordnance Survey data © Crown copyright and database right 2017
Contains Royal Mail data © Royal Mail copyright and database right 2017
Contains National Statistics data © Crown copyright and database right 2017
Using This Data
To import to a web based MySQL database we would recommend BigDump: Staggered MySQL Dump Importer
Relevant Links
- https://www.ordnancesurvey.co.uk/opendatadownload/products.html
- http://en.wikipedia.org/wiki/Haversine_formula
- http://mathforum.org/library/drmath/view/51879.html
- http://www.movable-type.co.uk/scripts/latlong.html
- MySQL UK post code table with corresponding longitude and latitude
- Calculating the distance between a set of postcodes and ranking them in order
Version History
- 12th July 2019 - New dataset refresh
- 19th May 2017 - General Updates. All non-geo postcoces now have an empty latitude,longitude e.g. VALUES (1682513, 'EN77 1AB', '','');
- 4th January 2017 - Updates 54 lat/lng previously set to 99.9,0
- 23rd December 2016 - Updates to data - Remove some instances of ??? O?? (O is letter O)
- 17th October 2016 - Updates to data files
- 11th August 2016 - Updates to B9 4AU, MK11 4AL & DN189AH
- 22nd July 2016 - Updates to SW11 7AS, EX6 9AA, EN77 & WV98
- 16th November 2015 - November 2015 update
- 19th October 2015 - Removed some duplicates
- 23rd September 2015 - Postcode column now has a space in the appropriate place
- 7th May 2015 - Some no loner used postcodes removed. Around 3000 corrections based on feedback
- 29th April 2015 - New update engine in place. Now provides MS SQL and MySQL script
- 5th March 2015 - Added B37 7FP
- 16th July 2014 - Added BB12 7BF
- 9th February 2014 - Added S1 4DE
- 9th February 2014 - Updated Full postcode list. 222 duplicates removed
- 9th February 2014 - Updated Outcode data. SQL script is for MSSQL
- 20th January 2014 - Removed 2 rows of incorrect data. Rows 1699835 and 1699836
- 11th September 2013 - Removed Duplicate BD98 And M60
- 1st August 2013 - Added full postcode list CSV and SQL (SQL insert) format with 1703751 rows
- 15th September 2011 - Added E20 (Olympic Park Postcodes)
- 23rd February 2011 - Added AB24, B99, BB94, BD97, BD98, BD98, BD99, BL11, BL78, BN50, BN51, BN52, BN88, BN99, BS80, BS98, CA95, CF30, CF91, CF95, CF99, CH25, CH26, CH27, CH28, CH29, CH30, CH31, CH32, CH33, CH34, CH70, CH88, CH99, CM77, CM99, CR9, CT50, CW98, DE99, DH97, DH98, DH99, DN55, E77, E98, EC1P, EC2P, EC4P, EC50, EH91, EH95, EH99, FY0, G58, G70, G75, G79, G9, G90, GU95, IP98, KY99, L67, L68, L71, L72, L73, L74, L75, LE19, LE21, LE41, LE55, LE87, LE94, LE95, LS88, LS98, LS99, M50, M60, M99, MK77, N1P, NE82, NE83, NE85, NE88, NE92, NE98, NG70, NG80, NG90, NW1W, OL95, PL95, PR0, PR11, S49, S96, S97, S98, S99, SA80, SA99, SE1P, SL95, SN38, SN99, SS22, SS99, ST55, SW99, TR93, UB18, W1A, WA55, WA88, WR78, WR99, YO90, YO91
- 27th June 2009 - Added NR7
- 22nd October 2008 - Added some Isle of Man and Jersey Postcodes. XLS format is no longer provided.
- 24th August 2008 - Added some new postcodes
- 1st July 2008 - Added List Status
- 10th June 2008 - Added SQL, CSV and XLS formats each with 2821 rows
Comments For This Page
Great resource!
Just to let you know the latest versions of MYSQL have strict mode set as default. So the entries with latitude and longitude of an empty string will throw an error.
My solution was to search and replace '' ----> '0'
Before attempting an import.
By Gary on 3rd October 2019
Sorry ... we have been making updates to the data but failing to keep the Version History updated. Last update was 12th July this year.
By Free Map Tools on 24th September 2019
Hiya - there's a number of new postcodes now which don't exist in the database as it's a few years out of date. Any news on when a new update will come out?
On 24th September 2019
Hi Paul, L2 7XS appears to a terminated postcode. So used previously, but no longer in use.
By Free Map Tools on 19th September 2019
Hi, I'm finding a few postcodes which don't seem to exist in the dataset such as L2 7XS? Any idea why they maybe missing? Much appreciate your work on this!
By Paul on 19th September 2019
Hi Rich, Our current records show NP7 1AG is an inactive (old) postcode. Also Royal Mail Postcode finder doesn't list it. Do you know if it has been reissued / new?
By Free Map Tools on 23rd June 2019
Hi, It appears the NP71AG postcode is missing, is a new release due at any point? Thanks
By Rich on 23rd June 2019
Julia, we have just pushed an update. Dated November 2018. Please try again and if you still have some not found's can you give an example?
By Free Map Tools on 20th March 2019
Hi, is the postcode database up to date? There seems to be lots of new postcodes that are not included in the downloadable version.
By Julia on 20th March 2019
Hi David, can you confirm you are using the page : Find UK Postcodes Inside a Radius?
By Free Map Tools on 12th December 2018
how do you perform a post codes inside a radius search in the uk it was easy before now it seems much harder
By David on 12th December 2018
Hi there; the update says:
"22nd October 2008 - Added some Isle of Man and Jersey Postcodes"
However, I've just downloaded the latest (2017) CSV and can't seem to find any IMx postcode at all?
By Jonathan on 10th November 2018
L13 1* at id's starting 957753 (row 910161)
By Free Map Tools on 17th September 2018
G53 6* are found in ukpostcodes.csv starting at id 1149531 (row 1093414)
By Free Map Tools on 17th September 2018
The CSV download is missing postcodes in the G53 6* and L13 1* ranges
On 29th August 2018
How can I obtain a postcode for a property that no longer exists.
By Carol on 22nd June 2018
Would it be possible to include the Town name associated to the postcodes please ?
On 19th June 2018
Where do I find postcode -coordinates for Isle of Man, Gibraltar, Jersey etc?
By Jesper on 2nd June 2018
Could you include postcode town and county in the postcode table?
By Francis on 18th March 2018
Hi, great, many thanks
By Kate on 13th March 2018
Showing the most recent 20 out of 242 comments. Click to see all the comments.
Add your own comment below and let others know what you think:
Comments
Your Name (optional)