Who's moving to North Carolina
Where households are arriving from and leaving for, county by county — built on official federal tax-filer data, not marketing estimates.
+39,476 net households from other states · #3 of 51 states
Arrived from other states
170,118
households, 2022-2023
Left for other states
130,642
households, 2022-2023
Moved within North Carolina
183,539
households changed county, stayed in state
+39,476 net households — For every 100 households that left North Carolina for another state, about 130 arrived. North Carolina is a net gainer.
That lead is growing — up 53% on five years ago.
Another 2,430 households arrived from abroad.
Net household change, five years
Every move in or out of North Carolina, including from abroad — so the latest bar can differ slightly from the state-to-state figure above.
Raleigh · Wake County: +7,133 net from other states, 75,813 moved in or out
Durham · Durham County: +1,411 net from other states, 30,325 moved in or out
Greensboro · Guilford County: +1,105 net from other states, 29,868 moved in or out
Fayetteville · Cumberland County: +338 net from other states, 27,994 moved in or out
Jacksonville · Onslow County: +967 net from other states, 21,545 moved in or out
Winston-Salem · Forsyth County: +1,114 net from other states, 21,422 moved in or out
Asheville · Buncombe County: +1,702 net from other states, 18,829 moved in or out
Wilmington · New Hanover County: +1,709 net from other states, 17,489 moved in or out
Concord · Cabarrus County: +815 net from other states, 16,714 moved in or out
Clayton · Johnston County: +916 net from other states, 14,898 moved in or out
Monroe · Union County: +792 net from other states, 14,270 moved in or out
Gastonia · Gaston County: +494 net from other states, 13,987 moved in or out
Mooresville · Iredell County: +1,137 net from other states, 12,801 moved in or out
Leland · Brunswick County: +2,099 net from other states, 12,474 moved in or out
Chapel Hill · Orange County: +10 net from other states, 12,488 moved in or out
Dunn · Harnett County: +378 net from other states, 11,893 moved in or out
Greenville · Pitt County: +277 net from other states, 10,160 moved in or out
Burlington · Alamance County: +483 net from other states, 10,061 moved in or out
Hickory · Catawba County: +430 net from other states, 9,169 moved in or out
Thomasville · Davidson County: +427 net from other states, 9,038 moved in or out
Salisbury · Rowan County: +160 net from other states, 7,827 moved in or out
New Bern · Craven County: +496 net from other states, 7,637 moved in or out
Hendersonville · Henderson County: +213 net from other states, 7,226 moved in or out
Pinehurst · Moore County: +446 net from other states, 6,924 moved in or out
Goldsboro · Wayne County: +183 net from other states, 6,529 moved in or out
Asheboro · Randolph County: +170 net from other states, 6,247 moved in or out
Lincolnton · Lincoln County: +285 net from other states, 6,010 moved in or out
Siler City · Chatham County: +284 net from other states, 5,254 moved in or out
Rocky Mount · Nash County: +89 net from other states, 5,249 moved in or out
Louisburg · Franklin County: +238 net from other states, 5,195 moved in or out
Burgaw · Pender County: +425 net from other states, 5,031 moved in or out
Raeford · Hoke County: +247 net from other states, 5,029 moved in or out
Shelby · Cleveland County: +61 net from other states, 4,692 moved in or out
Sanford · Lee County: +226 net from other states, 4,509 moved in or out
Morehead City · Carteret County: +156 net from other states, 4,379 moved in or out
Morganton · Burke County: +63 net from other states, 4,049 moved in or out
Lumberton · Robeson County: +126 net from other states, 4,078 moved in or out
Eden · Rockingham County: +145 net from other states, 3,952 moved in or out
Wilson · Wilson County: +126 net from other states, 3,761 moved in or out
Boone · Watauga County: -68 net from other states, 3,589 moved in or out
Waynesville · Haywood County: +219 net from other states, 3,392 moved in or out
Lenoir · Caldwell County: +207 net from other states, 3,396 moved in or out
Oxford · Granville County: +28 net from other states, 3,239 moved in or out
Albemarle · Stanly County: +111 net from other states, 3,089 moved in or out
Mount Airy · Surry County: +31 net from other states, 2,755 moved in or out
Cullowhee · Jackson County: +102 net from other states, 2,731 moved in or out
Mocksville · Davie County: +70 net from other states, 2,649 moved in or out
Tarboro · Edgecombe County: +17 net from other states, 2,699 moved in or out
Kinston · Lenoir County: +118 net from other states, 2,635 moved in or out
Forest City · Rutherford County: +90 net from other states, 2,630 moved in or out
Elizabeth City · Pasquotank County: +158 net from other states, 2,584 moved in or out
Clinton · Sampson County: +95 net from other states, 2,541 moved in or out
Kill Devil Hills · Dare County: +155 net from other states, 2,522 moved in or out
Washington · Beaufort County: +87 net from other states, 2,265 moved in or out
King · Stokes County: +73 net from other states, 2,300 moved in or out
Moyock · Currituck County: +273 net from other states, 2,119 moved in or out
Wallace · Duplin County: +79 net from other states, 2,134 moved in or out
North Wilkesboro · Wilkes County: +59 net from other states, 2,066 moved in or out
Marion · McDowell County: +87 net from other states, 1,990 moved in or out
Franklin · Macon County: +219 net from other states, 2,017 moved in or out
Henderson · Vance County: -2 net from other states, 1,985 moved in or out
Roanoke Rapids · Halifax County: +47 net from other states, 1,929 moved in or out
Whiteville · Columbus County: +49 net from other states, 1,863 moved in or out
Brevard · Transylvania County: +117 net from other states, 1,832 moved in or out
Andrews · Cherokee County: +227 net from other states, 1,657 moved in or out
Roxboro · Person County: +37 net from other states, 1,630 moved in or out
Bethlehem · Alexander County: +84 net from other states, 1,565 moved in or out
Yadkinville · Yadkin County: +24 net from other states, 1,601 moved in or out
Rockingham · Richmond County: +33 net from other states, 1,483 moved in or out
Laurinburg · Scotland County: +96 net from other states, 1,469 moved in or out
Tryon · Polk County: +97 net from other states, 1,407 moved in or out
Elizabethtown · Bladen County: +89 net from other states, 1,330 moved in or out
Mars Hill · Madison County: +31 net from other states, 1,304 moved in or out
Jefferson · Ashe County: +30 net from other states, 1,197 moved in or out
Troy · Montgomery County: +41 net from other states, 1,164 moved in or out
Yanceyville · Caswell County: -7 net from other states, 1,079 moved in or out
Banner Elk · Avery County: +19 net from other states, 948 moved in or out
Maury · Greene County: +51 net from other states, 977 moved in or out
Norlina · Warren County: +61 net from other states, 973 moved in or out
Wadesboro · Anson County: -21 net from other states, 921 moved in or out
Williamston · Martin County: +55 net from other states, 907 moved in or out
Gaston · Northampton County: +39 net from other states, 870 moved in or out
Ahoskie · Hertford County: +15 net from other states, 857 moved in or out
Hertford · Perquimans County: +105 net from other states, 833 moved in or out
Cherokee · Swain County: +97 net from other states, 841 moved in or out
Burnsville · Yancey County: +94 net from other states, 824 moved in or out
Hayesville · Clay County: +147 net from other states, 783 moved in or out
Bayboro · Pamlico County: +85 net from other states, 747 moved in or out
Windsor · Bertie County: +43 net from other states, 695 moved in or out
Camden · Camden County: +25 net from other states, 666 moved in or out
Edenton · Chowan County: +58 net from other states, 680 moved in or out
Spruce Pine · Mitchell County: +8 net from other states, 672 moved in or out
Maysville · Jones County: +12 net from other states, 511 moved in or out
Sparta · Alleghany County: +1 net from other states, 482 moved in or out
Plymouth · Washington County: +2 net from other states, 467 moved in or out
Gatesville · Gates County: +31 net from other states, 440 moved in or out
Robbinsville · Graham County: +25 net from other states, 260 moved in or out
Ocracoke · Hyde County: +0 net from other states, 143 moved in or out
Columbia · Tyrrell County: +0 net from other states, 139 moved in or out
Charlotte · Mecklenburg County: +7,445 net from other states, 82,678 moved in or out
Every county at a glance.
Gained households from other states
Lost households to other states
Circle size — households that moved in or out.
Charlotte · Mecklenburg County — the busiest moving market in North Carolina.
Where North Carolina is gaining from other states
Largest net state-to-state changes by county — same basis as the figures above, top eight only. Each city page adds the in-state picture.
#19 of 3,087 U.S. counties for total household growth
#18 of 3,087 U.S. counties for total household growth
Leland Brunswick County
+2,099
#20 of 3,087 U.S. counties for total household growth
#88 of 3,087 U.S. counties for total household growth
#111 of 3,087 U.S. counties for total household growth
#231 of 3,087 U.S. counties for total household growth
#80 of 3,087 U.S. counties for total household growth
#214 of 3,087 U.S. counties for total household growth
Where North Carolina is losing to other states
Largest net state-to-state changes by county — same basis as the figures above, top eight only. Each city page adds the in-state picture.
Yanceyville Caswell County
-7
Which states North Carolina trades households with
Each bar shows that state's in/out split — rows ranked by total volume. The IRS publishes only each county's largest partner states, so smaller streams are left out and these totals run below the headline figures.
Households arriving in North Carolina from another state report
$80,230 in average annual income;
those leaving for another state report
$74,476 .
Arrivals out-earn departures — North Carolina is trading up.
Arriving from another state $80,230
Leaving for another state $74,476
City-level breakdowns
Every city page has its own migration section — who's arriving, from how far, and what kind of mover that calls for.
How this works: IRS SOI County-to-County Migration Data, 2022-2023. The IRS compares the address on consecutive tax
returns, so every move here is a real filed household. The headline figures and county lists count moves that
crossed a state line; the five-year chart counts every move, including from abroad. The data publishes annually
with about a two-year lag, misses people who don't file a return, and leaves 33% of moves
unattributed to a specific county, because flows too small to publish are grouped into regional buckets.
100 of North Carolina's counties have published data.