diff --git a/getBoundaryData.R b/getBoundaryData.R
new file mode 100644
index 0000000000000000000000000000000000000000..eb41391b739b02a3400dae5ea7038ee43cf591a8
--- /dev/null
+++ b/getBoundaryData.R
@@ -0,0 +1,70 @@
+# get some geo data and pre-save it
+
+library(sf) # install first if needed
+library(data.table)
+library(here)
+
+# Local Authority boundaries for the Solent region ----
+# see https://medium.com/@traffordDataLab/pushing-the-boundaries-with-the-open-geography-portal-api-4d70637bddc3
+
+geo_query <- "https://ons-inspire.esriuk.com/arcgis/rest/services/Administrative_Boundaries/Local_Authority_Districts_December_2018_Boundaries_UK_BGC/MapServer/0/query?where=lad18nm%20IN%20(%27Southampton%27,%27Portsmouth%27,%27Winchester%27,%27Eastleigh%27,%27Isle%20of%20Wight%27,%27Fareham%27,%27Gosport%27,%27Test%20Valley%27,%27East%20Hampshire%27,%27Havant%27,%27New%20Forest%27,%27Hart%27,%27Basingstoke%20and%20Deane%27)&outFields=lad18cd,lad18nm,long,lat&outSR=4326&f=geojson"
+
+message("Loading LA geometry from ONS Open Geography API")
+la_sf_data <- sf::st_read(geo_query)
+head(la_sf_data)
+outf <- path.expand(paste0(here::here("data", "boundaries", "la_solent.shp")))
+sf::write_sf(la_sf_data, outf)
+
+# MSOA boundaries for the Solent region ----
+# middle-layer-super-output-areas-december-2011-boundaries-full-clipped-bfc-ew-v3
+
+# manually downloaded for now
+# load all MSOAs from file
+
+# NB this 'all MSOAs' file has been removed from the repo due to size
+# the code is included here for reference
+inFile <- path.expand(paste0(here::here("data", "boundaries", "msoa_all", 
+"Middle_Layer_Super_Output_Areas__December_2011__Boundaries_Full_Clipped__BFC__EW_V3.shp")))
+msoa_all_sf <- sf::read_sf(inFile)
+
+# load the look up table so we can filter
+lutFile <- here::here("data", "Output_Area_to_Lower_Layer_Super_Output_Area_to_Middle_Layer_Super_Output_Area_to_Local_Authority_District_(December_2011)_Lookup_in_England_and_Wales.csv")
+
+oa_lut <- data.table::fread(lutFile)
+
+# las_to_load <- c("Southampton","Portsmouth","Winchester",
+#                  "Eastleigh","Isle of Wight","Fareham",
+#                  "Gosport","Test Valley","East Hampshire",
+#                  "Havant","New Forest","Hart","Basingstoke and Deane")
+
+# select the OAs we want via LAs
+oa_solentLut <- oa_lut[LAD11NM == "Southampton" | 
+                   LAD11NM == "Portsmouth" |
+                   LAD11NM == "Winchester" |
+                   LAD11NM == "Eastleigh" |
+                   LAD11NM == "Isle of Wight" |
+                   LAD11NM == "Fareham" |
+                   LAD11NM == "Gosport" |
+                   LAD11NM == "Test Valley" |
+                   LAD11NM == "East Hampshire" |
+                   LAD11NM == "Havant" |
+                   LAD11NM == "New Forest" |
+                   LAD11NM == "Hart" |
+                 LAD11NM == "Basingstoke and Deane"]
+
+oa_solentLut[, .(nOAs = .N), keyby = .(LAD11NM)]
+
+# collapse the OA level file to an MSOA level file
+msoa_solentLut <- oa_solentLut[, .(nOAs = .N), 
+                               keyby = .(MSOA11CD, MSOA11NM , LAD11CD, LAD11NM )]
+msoa_solentLut[, .(nOAs = .N), keyby = .(LAD11NM)]
+
+# merge the MSOA level file with the MSOA level shape file
+msoa_solent <- merge(msoa_all_sf, msoa_solentLut)
+
+# check
+table(msoa_solent$LAD11NM)
+
+# save it out for re-use
+outf <- path.expand(paste0(here::here("data", "boundaries", "msoa_solent.shp")))
+sf::write_sf(msoa_solent, outf)