Questions, answered with data
North Carolina Groceries · COVID and after

Groceries Left the City, and Didn't Come Back

City grocery stores in North Carolina lost about a sixth of their footing between 2019 and 2021, while rural stores gained a third. Phone data and card data agree, and five years on the cities have not won it back.

Data analysis · October 2026 · Sources: Advan Weekly Patterns (phone foot traffic) and SafeGraph Spend (card transactions), both via Dewey; ACS 2019–2023; Census 2023 boundaries
Analysis: Python, pandas, DuckDB · Visualization: D3.js · Methods: category-relative visit index, balanced store panels, density classes from block-group population, cross-source validation
City stores, 2021 vs 2019 ●
—
phones · — by card spend
Rural stores, 2021 vs 2019 ●
—
phones · — by card spend
City stores' share of NC grocery visits
—
2019 → 2026 (phones)
Stores tracked
—
grocery stores in the 2023–26 panel (2,200 in 2017–22)

When the pandemic hit, people did not stop buying groceries. They changed where they bought them. We tracked about 2,200 North Carolina grocery stores from 2017 to 2026 and split them by how built-up their neighbourhood is.

First, how we compare stores fairly

Phone panels grow and shrink, and every store gets busier in December. So we never compare raw visit counts. We compare each store with the average North Carolina store of the same kind in the same week.

Two ideas carry the whole story: a fair yardstick, and three kinds of place

Top: how one store's week becomes an index (example numbers). Bottom: how stores are sorted into city, suburban and rural. Hover a band for its numbers.

Density: people per square mile of land in the census block group nearest the store (ACS 2019–2023, Census 2023 boundaries).

City stores lost their share of the state's grocery trips

In 2019, stores in city neighbourhoods drew 17.7% of the visits to the grocery stores we track. By 2021 it was 15.0%, and it has stayed there. Card spending tells the same story from a separate dataset.

City stores' share of NC grocery visits fell during COVID, and stayed down

Share of all visits (or card spend) to tracked grocery stores that went to stores in each kind of place. Pick a place type. Lines are 3-month averages; hover for any month.

Phones: Advan, balanced panel of 2,200 stores (2017–2022) and 2,542 stores (2023–2026). The gap marks Advan's method change in January 2023; the two periods are not joined. Cards: SafeGraph, 1,530 stores with spend in 90%+ of months, 2019–2025.

Caveat: the city share was already slipping before 2020, by about a point a year. COVID sped it up: against similar stores, city stores lost ground nearly three times as fast in 2019–21 as in 2017–19.

All three kinds of place, side by side

Indexed to 2019, the gap opens within months. By 2022, city stores sat 17% below their 2019 level against similar stores, and rural stores 20% above.

From spring 2020, city and rural stores moved in opposite directions

Each line: stores in one kind of place, against similar NC stores; 100 = that group's 2019 average; 3-month averages. Switch between phones and cards. Hover to compare.

Phones: Advan relative index (store visits ÷ NC visits per store in the same Advan category and week), summed by place type, monthly. Cards: SafeGraph share of spend, indexed to each group's 2019 share.

The denser the neighbourhood, the bigger the drop

This is not just three buckets. Sort all 2,262 stores by how dense their neighbourhood is and the change slides smoothly from big gains in the countryside to losses in the densest blocks.

A smooth slope: +39% in the emptiest places, −17% in the densest

Stores split into ten equal groups by neighbourhood density. Dot: median change 2021 vs 2019, against similar stores. Bar: middle half of stores. Diamond: the same stores by card spend.

Phones (median, bar = middle 50%)Cards (median)
Density deciles of 2,262 stores with a 2019 baseline. Card values use the 1,486 of them matched to SafeGraph.

Watch it spread across the map

Month by month, each store against the same month of 2019

Each dot is a store. Green: busier than in the same month of 2019 (against similar stores); orange: quieter. Press play, or drag through 2020–2022. Hover a dot.

—
2,196 stores in the 2017–2022 balanced panel. County outlines from Census 2023 tracts.

Every big metro core turns orange. By 2021, stores within about 7 km of the centre were down 26% in Charlotte, 30% in Raleigh, 33% in Durham, 21% in Greensboro and 15% in Winston-Salem. The ring 25–60 km out was up 18–21% around Charlotte, Greensboro and Winston-Salem, and roughly flat around the Triangle.

It happened inside the same chains

Maybe cities just have different stores? No. The same chain, with the same prices and the same shelves, lost ground in cities and gained it in the countryside.

Food Lion, Dollar General, Walmart: city stores down, rural stores up

Median change 2021 vs 2019 for each chain's stores, by kind of place, against similar NC stores. Only groups of 3+ stores shown. Switch source; hover a dot for store counts.

Chains as named in the Dewey store list. Card values come from SafeGraph's own panel. Dollar General's card spend grew everywhere, so its card-based numbers sit high across the board.

Every kind of grocery store moved the same way

Supermarkets, dollar stores, small grocers: all down in cities, up in the country

Median change 2021 vs 2019 against similar stores, by store type and kind of place. Hover a bar for the number of stores.

Store types from the POI list: full-service (supermarkets, supercenters, clubs), dollar, small grocery (independent grocers, markets), specialty (ethnic, butcher, health food). Small and specialty stores are under-matched outside chains.

Two datasets, one answer

Phones count visits; cards count money. They come from different companies and different people. Store by store, they line up.

Stores that lost visits also lost spending

Each dot is one store: change in visits (across) and in card spend (up), 2021 vs 2019, both against similar NC stores. Click a place type to isolate it.

1,486 stores in both datasets; values beyond the chart's range are counted on the chart but not drawn (their medians still count). Rank correlation (Spearman) printed on the chart.

It never came back

After Advan's 2023 method change we restart the clock at 2023 = 100. City stores keep losing a little ground every year; rural stores keep gaining. Card spending, with no break at all, shows the city share still falling in 2024 and 2025.

Since 2023: a slow, steady drift in the same direction

Left: yearly index against similar stores, 2023 = 100 (phones). Right: each place type's share of card spend, 2019–2025. Hover a point.

2026 covers January to September. Card data ends September 2025.

Why? What we could check

We can see where people shopped, not why. One popular theory is that city stores lost commuters and office workers. The data does not show that clearly: weekday share barely moved, and city stores' visitors came from about as far away as before.

The commuter theory doesn't show up clearly

2019 against 2021 for the same balanced stores. Hover a bar.

Weekday share of visits (%)

Median visitor distance from home (km)

Median minutes in store

20192021
Advan, 2,200-store balanced panel. Visitor distance is Advan's median distance from home per store-week; time in store is the store-week median dwell.

That leaves the explanations this data can't separate: people moving out to the suburbs and small towns, working from home and shopping close to home, and new stores opening where the growth is. For food access, the lesson is the same either way: the map of where North Carolina buys groceries changed in 2020 and has kept changing since.

Method and caveats

Stores. 4,452 grocery-type stores from the NC POI list, of which those matched to Advan foot traffic (98% of chains, 37% of independents) form the panels. Balanced panels keep only stores seen in 80%+ of weeks in each Advan era, so openings and closures don't drive the trend.

Place types. Each store takes the density of its nearest census block group: city 3,000+ people per square mile of land, suburban 500–3,000, rural under 500.

Fair comparison. A store's index is its visits divided by the average visits per store in the same Advan category across North Carolina that week. Advan changed its method in January 2023, so 2017–2022 and 2023–2026 are indexed separately and never compared.

Cards. SafeGraph Spend, monthly, for 1,834 of the same stores matched by placekey; the balanced card panel is 1,530 stores. It is an independent panel of card transactions, so agreement with the phone data is real cross-validation.

Limits. Phone and card panels are samples, not counts. Independent and ethnic grocers are under-represented. The pre-2020 drift means not all of the change is COVID. Data: Advan Weekly Patterns and SafeGraph Spend via Dewey (deweydata.io); ACS 2019–2023 5-year; Census TIGER 2023.