{
  "snapshot_id": "approved-static-48d32b636f07abc8",
  "page_version": "bf1bfce31d1d1fc7f6049ae63c4ef7b7",
  "content_date": "2026-10-25",
  "schema_version": "immigrationdb-region-v1",
  "region_id": "region:pt:official:pt:portugal_admin_districts_autonomous_regions_20260714:13",
  "name": "Porto District",
  "name_local": "Porto",
  "country_code": "PT",
  "country": "Portugal",
  "canonical_url": "https://immigrationdb.com/countries/portugal/porto-district/",
  "summary": "Porto District has 114 published cities; the largest is Vila Nova de Gaia, with 303,824 residents. Net rent runs from €3.13 to €14.22 per m² a month across the 48 cities that publish it. The median gross salary runs from €1,141 to €1,629 a month across 6 cities.",
  "cities": [
    {
      "name": "Vila Nova de Gaia",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-nova-de-gaia/",
      "population": 303824,
      "rent_eur_per_m2_month": 10.61,
      "median_gross_salary_eur_month": 1305.7,
      "unemployment_percent": 3.13,
      "pm25_ug_m3": null
    },
    {
      "name": "Porto",
      "canonical_url": "https://immigrationdb.com/cities/pt/porto/",
      "population": 273476,
      "rent_eur_per_m2_month": 10.15,
      "median_gross_salary_eur_month": 1628.7,
      "unemployment_percent": 3.45,
      "pm25_ug_m3": 9.4277365
    },
    {
      "name": "Matosinhos",
      "canonical_url": "https://immigrationdb.com/cities/pt/matosinhos/",
      "population": 172557,
      "rent_eur_per_m2_month": 11.98,
      "median_gross_salary_eur_month": 1536.5,
      "unemployment_percent": 2.98,
      "pm25_ug_m3": null
    },
    {
      "name": "Gondomar",
      "canonical_url": "https://immigrationdb.com/cities/pt/gondomar/",
      "population": 164257,
      "rent_eur_per_m2_month": 8.82,
      "median_gross_salary_eur_month": 1141,
      "unemployment_percent": 2.87,
      "pm25_ug_m3": null
    },
    {
      "name": "Maia",
      "canonical_url": "https://immigrationdb.com/cities/pt/maia/",
      "population": 134977,
      "rent_eur_per_m2_month": 9.71,
      "median_gross_salary_eur_month": 1430.5,
      "unemployment_percent": 2.21,
      "pm25_ug_m3": 3.33
    },
    {
      "name": "Valongo",
      "canonical_url": "https://immigrationdb.com/cities/pt/valongo/",
      "population": 101464,
      "rent_eur_per_m2_month": 8.24,
      "median_gross_salary_eur_month": 1229.6,
      "unemployment_percent": 2.69,
      "pm25_ug_m3": 8
    },
    {
      "name": "Paredes",
      "canonical_url": "https://immigrationdb.com/cities/pt/paredes/",
      "population": 86854,
      "rent_eur_per_m2_month": 5.81,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.52,
      "pm25_ug_m3": null
    },
    {
      "name": "Vila do Conde",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-do-conde/",
      "population": 79533,
      "rent_eur_per_m2_month": 8.44,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.33,
      "pm25_ug_m3": null
    },
    {
      "name": "Penafiel",
      "canonical_url": "https://immigrationdb.com/cities/pt/penafiel/",
      "population": 72265,
      "rent_eur_per_m2_month": 5.62,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.09,
      "pm25_ug_m3": null
    },
    {
      "name": "Santo Tirso",
      "canonical_url": "https://immigrationdb.com/cities/pt/santo-tirso/",
      "population": 71530,
      "rent_eur_per_m2_month": 6.09,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.42,
      "pm25_ug_m3": null
    },
    {
      "name": "Rio Tinto",
      "canonical_url": "https://immigrationdb.com/cities/pt/rio-tinto/",
      "population": 65469,
      "rent_eur_per_m2_month": 9.65,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Póvoa de Varzim",
      "canonical_url": "https://immigrationdb.com/cities/pt/povoa-de-varzim/",
      "population": 63408,
      "rent_eur_per_m2_month": 8.78,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.66,
      "pm25_ug_m3": null
    },
    {
      "name": "Felgueiras",
      "canonical_url": "https://immigrationdb.com/cities/pt/felgueiras/",
      "population": 58065,
      "rent_eur_per_m2_month": 4.48,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 3.13,
      "pm25_ug_m3": null
    },
    {
      "name": "Paços de Ferreira",
      "canonical_url": "https://immigrationdb.com/cities/pt/pacos-de-ferreira/",
      "population": 56340,
      "rent_eur_per_m2_month": 5.61,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.22,
      "pm25_ug_m3": 6.33664523
    },
    {
      "name": "Marco de Canaveses",
      "canonical_url": "https://immigrationdb.com/cities/pt/marco-de-canaveses/",
      "population": 53961,
      "rent_eur_per_m2_month": 4.9,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 3.48,
      "pm25_ug_m3": null
    },
    {
      "name": "Amarante",
      "canonical_url": "https://immigrationdb.com/cities/pt/amarante/",
      "population": 52264,
      "rent_eur_per_m2_month": 4.63,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.85,
      "pm25_ug_m3": null
    },
    {
      "name": "Lousada",
      "canonical_url": "https://immigrationdb.com/cities/pt/lousada/",
      "population": 47130,
      "rent_eur_per_m2_month": 4.87,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.48,
      "pm25_ug_m3": null
    },
    {
      "name": "Trofa",
      "canonical_url": "https://immigrationdb.com/cities/pt/trofa/",
      "population": 38999,
      "rent_eur_per_m2_month": 7.4,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 2.45,
      "pm25_ug_m3": null
    },
    {
      "name": "Ermesinde",
      "canonical_url": "https://immigrationdb.com/cities/pt/ermesinde/",
      "population": 38828,
      "rent_eur_per_m2_month": 8.65,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Senhora da Hora",
      "canonical_url": "https://immigrationdb.com/cities/pt/senhora-da-hora/",
      "population": 26988,
      "rent_eur_per_m2_month": 13.38,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Águas Santas",
      "canonical_url": "https://immigrationdb.com/cities/pt/aguas-santas/",
      "population": 26632,
      "rent_eur_per_m2_month": 8.87,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "São Mamede de Infesta",
      "canonical_url": "https://immigrationdb.com/cities/pt/sao-mamede-de-infesta/",
      "population": 22844,
      "rent_eur_per_m2_month": 12.53,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Fânzeres",
      "canonical_url": "https://immigrationdb.com/cities/pt/fanzeres/",
      "population": 22556,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Baião",
      "canonical_url": "https://immigrationdb.com/cities/pt/baiao/",
      "population": 20522,
      "rent_eur_per_m2_month": 4,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": 3.27,
      "pm25_ug_m3": null
    },
    {
      "name": "São Pedro da Cova",
      "canonical_url": "https://immigrationdb.com/cities/pt/sao-pedro-da-cova/",
      "population": 15197,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Arcozelo",
      "canonical_url": "https://immigrationdb.com/cities/pt/arcozelo/",
      "population": 15144,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Alfena",
      "canonical_url": "https://immigrationdb.com/cities/pt/alfena/",
      "population": 14677,
      "rent_eur_per_m2_month": 7.74,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Canelas",
      "canonical_url": "https://immigrationdb.com/cities/pt/canelas/",
      "population": 13918,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Valbom",
      "canonical_url": "https://immigrationdb.com/cities/pt/valbom/",
      "population": 13849,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "São Félix da Marinha",
      "canonical_url": "https://immigrationdb.com/cities/pt/sao-felix-da-marinha/",
      "population": 13560,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Moreira",
      "canonical_url": "https://immigrationdb.com/cities/pt/moreira/",
      "population": 13093,
      "rent_eur_per_m2_month": 9.48,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Pedrouços",
      "canonical_url": "https://immigrationdb.com/cities/pt/pedroucos/",
      "population": 11564,
      "rent_eur_per_m2_month": 10.69,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Lavra",
      "canonical_url": "https://immigrationdb.com/cities/pt/lavra/",
      "population": 10968,
      "rent_eur_per_m2_month": 10.45,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Avintes",
      "canonical_url": "https://immigrationdb.com/cities/pt/avintes/",
      "population": 10836,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Grijó",
      "canonical_url": "https://immigrationdb.com/cities/pt/grijo/",
      "population": 10626,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Campo",
      "canonical_url": "https://immigrationdb.com/cities/pt/campo/",
      "population": 9142,
      "rent_eur_per_m2_month": 6.86,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Lordelo",
      "canonical_url": "https://immigrationdb.com/cities/pt/lordelo/",
      "population": 9051,
      "rent_eur_per_m2_month": 3.13,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Guifões",
      "canonical_url": "https://immigrationdb.com/cities/pt/guifoes/",
      "population": 9019,
      "rent_eur_per_m2_month": 10,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Rebordosa",
      "canonical_url": "https://immigrationdb.com/cities/pt/rebordosa/",
      "population": 8414,
      "rent_eur_per_m2_month": 5.96,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Aves",
      "canonical_url": "https://immigrationdb.com/cities/pt/aves/",
      "population": 7946,
      "rent_eur_per_m2_month": 5.05,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Coronado",
      "canonical_url": "https://immigrationdb.com/cities/pt/coronado/",
      "population": 7936,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Serzedo",
      "canonical_url": "https://immigrationdb.com/cities/pt/serzedo-17-1317/",
      "population": 7603,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Freamunde",
      "canonical_url": "https://immigrationdb.com/cities/pt/freamunde/",
      "population": 7557,
      "rent_eur_per_m2_month": 5.61,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Gandra",
      "canonical_url": "https://immigrationdb.com/cities/pt/gandra/",
      "population": 6874,
      "rent_eur_per_m2_month": 7.05,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Sobrado",
      "canonical_url": "https://immigrationdb.com/cities/pt/sobrado/",
      "population": 6268,
      "rent_eur_per_m2_month": 6.25,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vila Nova da Telha",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-nova-da-telha/",
      "population": 6004,
      "rent_eur_per_m2_month": 9.26,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Nogueira",
      "canonical_url": "https://immigrationdb.com/cities/pt/nogueira/",
      "population": 5753,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Olival",
      "canonical_url": "https://immigrationdb.com/cities/pt/olival-17-1317/",
      "population": 5508,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Sandim",
      "canonical_url": "https://immigrationdb.com/cities/pt/sandim/",
      "population": 5461,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vila da Lixa",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-da-lixa/",
      "population": 5102,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Negrelos",
      "canonical_url": "https://immigrationdb.com/cities/pt/negrelos/",
      "population": 3755,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Silva Escura",
      "canonical_url": "https://immigrationdb.com/cities/pt/silva-escura/",
      "population": 2627,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Foz do Sousa",
      "canonical_url": "https://immigrationdb.com/cities/pt/foz-do-sousa/",
      "population": 961,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Moreira",
      "canonical_url": "https://immigrationdb.com/cities/pt/moreira-17-1304/",
      "population": 452,
      "rent_eur_per_m2_month": 9.48,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Perafita",
      "canonical_url": "https://immigrationdb.com/cities/pt/perafita/",
      "population": 128,
      "rent_eur_per_m2_month": 9.19,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Afurada de Baixo",
      "canonical_url": "https://immigrationdb.com/cities/pt/afurada-de-baixo/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Aldoar",
      "canonical_url": "https://immigrationdb.com/cities/pt/aldoar/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Alpendurada",
      "canonical_url": "https://immigrationdb.com/cities/pt/alpendurada/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Ameal",
      "canonical_url": "https://immigrationdb.com/cities/pt/ameal/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Angeiras",
      "canonical_url": "https://immigrationdb.com/cities/pt/angeiras/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Anta",
      "canonical_url": "https://immigrationdb.com/cities/pt/anta/",
      "population": 0,
      "rent_eur_per_m2_month": 7.75,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Areosa",
      "canonical_url": "https://immigrationdb.com/cities/pt/areosa/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Árvore",
      "canonical_url": "https://immigrationdb.com/cities/pt/arvore/",
      "population": 0,
      "rent_eur_per_m2_month": 8.56,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Aver-o-Mar",
      "canonical_url": "https://immigrationdb.com/cities/pt/aver-o-mar/",
      "population": 0,
      "rent_eur_per_m2_month": 8.54,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Azenha",
      "canonical_url": "https://immigrationdb.com/cities/pt/azenha/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Azevedo",
      "canonical_url": "https://immigrationdb.com/cities/pt/azevedo/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Baguim do Monte",
      "canonical_url": "https://immigrationdb.com/cities/pt/baguim-do-monte/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Bairro Silva Braga",
      "canonical_url": "https://immigrationdb.com/cities/pt/bairro-silva-braga/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Bela Vista",
      "canonical_url": "https://immigrationdb.com/cities/pt/bela-vista/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Bonjoia",
      "canonical_url": "https://immigrationdb.com/cities/pt/bonjoia/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Bougado",
      "canonical_url": "https://immigrationdb.com/cities/pt/bougado/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Campanhã",
      "canonical_url": "https://immigrationdb.com/cities/pt/campanha/",
      "population": 0,
      "rent_eur_per_m2_month": 12.92,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Canidelo",
      "canonical_url": "https://immigrationdb.com/cities/pt/canidelo/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Castelões de Cepeda",
      "canonical_url": "https://immigrationdb.com/cities/pt/casteloes-de-cepeda/",
      "population": 0,
      "rent_eur_per_m2_month": 5.81,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Contumil",
      "canonical_url": "https://immigrationdb.com/cities/pt/contumil/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Cruz",
      "canonical_url": "https://immigrationdb.com/cities/pt/cruz/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Francos",
      "canonical_url": "https://immigrationdb.com/cities/pt/francos/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Gemunde",
      "canonical_url": "https://immigrationdb.com/cities/pt/gemunde/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Gueifães",
      "canonical_url": "https://immigrationdb.com/cities/pt/gueifaes/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Gulpilhares",
      "canonical_url": "https://immigrationdb.com/cities/pt/gulpilhares/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Jovim",
      "canonical_url": "https://immigrationdb.com/cities/pt/jovim/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Leça da Palmeira",
      "canonical_url": "https://immigrationdb.com/cities/pt/leca-da-palmeira/",
      "population": 0,
      "rent_eur_per_m2_month": 11.99,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Leça do Bailio",
      "canonical_url": "https://immigrationdb.com/cities/pt/leca-do-bailio/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Lordelo do Ouro",
      "canonical_url": "https://immigrationdb.com/cities/pt/lordelo-do-ouro/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Marco de Canavezes",
      "canonical_url": "https://immigrationdb.com/cities/pt/marco-de-canavezes/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Margaride",
      "canonical_url": "https://immigrationdb.com/cities/pt/margaride/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Massarelos",
      "canonical_url": "https://immigrationdb.com/cities/pt/massarelos/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Melres",
      "canonical_url": "https://immigrationdb.com/cities/pt/melres/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Miramar",
      "canonical_url": "https://immigrationdb.com/cities/pt/miramar/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Nevogilde",
      "canonical_url": "https://immigrationdb.com/cities/pt/nevogilde/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Noeda",
      "canonical_url": "https://immigrationdb.com/cities/pt/noeda/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Oliveira do Douro",
      "canonical_url": "https://immigrationdb.com/cities/pt/oliveira-do-douro/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Paços",
      "canonical_url": "https://immigrationdb.com/cities/pt/pacos/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Paranhos",
      "canonical_url": "https://immigrationdb.com/cities/pt/paranhos/",
      "population": 0,
      "rent_eur_per_m2_month": 14.22,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Pedras Rubras",
      "canonical_url": "https://immigrationdb.com/cities/pt/pedras-rubras/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Pedroso",
      "canonical_url": "https://immigrationdb.com/cities/pt/pedroso/",
      "population": 0,
      "rent_eur_per_m2_month": 7.75,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Pereiro",
      "canonical_url": "https://immigrationdb.com/cities/pt/pereiro/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Perozinho",
      "canonical_url": "https://immigrationdb.com/cities/pt/perozinho/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Pinheiro Manso",
      "canonical_url": "https://immigrationdb.com/cities/pt/pinheiro-manso/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Ramalde do Meio",
      "canonical_url": "https://immigrationdb.com/cities/pt/ramalde-do-meio/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Santa Cruz do Bispo",
      "canonical_url": "https://immigrationdb.com/cities/pt/santa-cruz-do-bispo/",
      "population": 0,
      "rent_eur_per_m2_month": 8.36,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Santa Maria de Avioso",
      "canonical_url": "https://immigrationdb.com/cities/pt/santa-maria-de-avioso/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Santo Ovídio",
      "canonical_url": "https://immigrationdb.com/cities/pt/santo-ovidio/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "São Miguel do Couto",
      "canonical_url": "https://immigrationdb.com/cities/pt/sao-miguel-do-couto/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "São Tiago de Custoias",
      "canonical_url": "https://immigrationdb.com/cities/pt/sao-tiago-de-custoias/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Sardão",
      "canonical_url": "https://immigrationdb.com/cities/pt/sardao/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Senhora do Porto",
      "canonical_url": "https://immigrationdb.com/cities/pt/senhora-do-porto/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Valadares",
      "canonical_url": "https://immigrationdb.com/cities/pt/valadares/",
      "population": 0,
      "rent_eur_per_m2_month": 9.88,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Valadares",
      "canonical_url": "https://immigrationdb.com/cities/pt/valadares-17-1317/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vermoim",
      "canonical_url": "https://immigrationdb.com/cities/pt/vermoim/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vila Cova",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-cova/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vila Nova da Telha",
      "canonical_url": "https://immigrationdb.com/cities/pt/vila-nova-da-telha-17-1317/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vilar de Andorinho",
      "canonical_url": "https://immigrationdb.com/cities/pt/vilar-de-andorinho/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    },
    {
      "name": "Vilar do Paraíso",
      "canonical_url": "https://immigrationdb.com/cities/pt/vilar-do-paraiso/",
      "population": 0,
      "rent_eur_per_m2_month": null,
      "median_gross_salary_eur_month": null,
      "unemployment_percent": null,
      "pm25_ug_m3": null
    }
  ],
  "rankings": [
    {
      "key": "rent",
      "title": "Lowest net rent",
      "items": [
        {
          "name": "Lordelo",
          "href": "/cities/pt/lordelo/",
          "value": "€3.13/m²",
          "year": "2026"
        },
        {
          "name": "Baião",
          "href": "/cities/pt/baiao/",
          "value": "€4.00/m²",
          "year": "2026"
        },
        {
          "name": "Felgueiras",
          "href": "/cities/pt/felgueiras/",
          "value": "€4.48/m²",
          "year": "2026"
        },
        {
          "name": "Amarante",
          "href": "/cities/pt/amarante/",
          "value": "€4.63/m²",
          "year": "2026"
        },
        {
          "name": "Lousada",
          "href": "/cities/pt/lousada/",
          "value": "€4.87/m²",
          "year": "2026"
        }
      ]
    }
  ]
}
