Every retail food store licensed to operate in New York City's five counties (Manhattan, Bronx, Brooklyn, Queens, Staten Island), plotted at the address each operator filed with the State. Stores are sized and colored by reported square footage so a viewer can see at a glance where full-service supermarkets exist and where the only options are corner stores or smaller specialty shops.
| Dataset | Provider | Used for |
|---|---|---|
Retail Food Stores (resource 9a8c-vfzj) | NY State Department of Agriculture and Markets, via data.ny.gov | Store name, address, latitude/longitude, square footage, establishment type |
| 2020 Decennial Census borough totals | U.S. Census Bureau | Computing supermarkets per 100,000 residents |
| OpenStreetMap (Overpass API) | OSM contributors, ODbL license | Cross-check against the state file. OSM stores tagged shop=supermarket that aren't in the state file are flagged as "OSM-only (likely new opening)" — for example, the Lidl at 120 Fifth Avenue in Brooklyn |
| La Marqueta site location | NYC Mayor's Office, April 2026 announcement | Marker for the first announced public supermarket site |
Google Maps has cleaner business categories than the state license file (it tags supermarkets as supermarket, pharmacies as pharmacy, and so on) and updates more frequently. We do not use it for two reasons. First, Google Maps Platform terms of service prohibit storing or redistributing Place content (name, address, category) for more than 30 days outside a Google-rendered map, which would make a public, downloadable, methodology-transparent map like this one impossible. Second, OpenStreetMap offers comparable category data under an open license (ODbL) that explicitly permits redistribution, and its NYC supermarket coverage is strong — including new openings the state file misses.
The NY State retail food store license is a single license that covers any retailer selling packaged food: a corner bodega, a Whole Foods, a brewery taproom, a Walgreens, and a wholesale Restaurant Depot all hold the same license. Square footage alone is therefore not enough to identify supermarkets — a 20,000-square-foot Walgreens is not a grocery store, and a 7,000-square-foot Threes Brewing is not either.
To approximate "supermarket," we apply a name-keyword filter that excludes obvious non-grocery establishments. The filter excludes any store whose dba_name matches patterns like:
WALGREENS, RITE AID, CVS, DUANE READE, PHARMACYDOLLAR TREE, DOLLAR GENERAL, FAMILY DOLLAR, 99 CENT7-ELEVEN, EXXON, SHELL, MOBILBREWING, BREWERY, DISTILLERY, WINERY, LIQUOR, SPIRITSRESTAURANT, BISTRO, DINER, PIZZA, SUSHI, CAFE, STARBUCKS, DUNKINBAKERY, PATISSERIETOBACCO, CIGAR, VAPECHURCH, SCHOOL, HOSPITAL, RESTAURANT DEPOT, WAREHOUSEThe complete pattern list is in collectors/nyc_food_stores.py. Stores that match are reclassified as "Other licensed food retailer." The name filter is run against the operator's dba_name AND legal entity_name, since some operators file an innocuous DBA but the entity name reveals the category (e.g., "FINBACK BROOKLYN" / "FINBACK BROOKLYN LLC").
Name patterns alone are not enough — an operator can name a brewery anything. So we also pull every NYC OSM feature carrying a disqualifying tag (craft=brewery|distillery|winery, amenity=bar|restaurant|fast_food|cafe|pharmacy|fuel, shop=alcohol|bakery|tobacco|chemist, etc.) and override is_supermarket=False for any state-file store within 25 meters of one. This pass alone reclassifies about 3,000 NYC stores that the name filter missed — including bars, restaurants, cafes, bakeries, and breweries with neutral business names. The categorization-by-OSM-tag approach is not perfect either, but it is dramatically more reliable than name keywords. The OSM override category is recorded on each store's popup (e.g., "Reclassified by OSM tag: craft=brewery").
Stores that pass the name filter are bucketed by reported square footage:
Throughout the map, "full supermarket" means a store that passes the name filter and is at least 5,000 square feet.
The density view renders a choropleth across NYC's 178 Modified ZIP Code Tabulation Areas (MODZCTAs) published by the NYC Department of Health and Mental Hygiene. Each polygon is colored by full supermarkets per 10,000 residents, using the population estimates that come with the MODZCTA file. Stores are matched to a MODZCTA via the operator-filed ZIP. About 50 stores have a ZIP that does not map to any MODZCTA and are dropped from the density view; they remain in the points view.
Three collector scripts live in the project repository under collectors/:
nyc_food_stores.py — pulls the state license file, applies the name filter, classifies by square footageosm_supermarkets.py — pulls every NYC shop=supermarket|grocery|convenience from OpenStreetMap via Overpassmerge_sources.py — fuzzy-matches the two by 80 m proximity and adds OSM-only supermarkets as new features tagged source=osmnyc_zip_density.py — joins stores to NYC Modified ZCTAs and computes per-10k densityNone require API keys. Run them in order. Outputs land in data/processed/.
The OSM contribution is licensed ODbL: © OpenStreetMap contributors.
In April 2026 Mayor Mamdani announced that New York City will open one publicly owned supermarket in each borough, beginning with a 9,000-square-foot store at La Marqueta in East Harlem. The stated goal is to lower grocery prices in underserved neighborhoods by removing the rent and capital costs that strain private operators. Whether the chosen sites are in fact in supermarket-poor areas, and whether prices in those neighborhoods actually move once the stores open, are questions that require a public baseline of where supermarkets are today. This map is that baseline. It will be re-pulled monthly so the historical record stays current.
Questions or corrections: open an issue on the project repository, or email the project maintainer.
← Back to map