ZIPs covered across — markets, — readable campaigns and — stores. — are reached by a proximity radius rather than a list.
Drawn around the store, not the city. The two dashed rings already on the map are live campaign targeting and are anchored on a city point instead.
For planning a campaign centered somewhere you have no store. Google anchors its own proximity targeting on a city point like this — both live rings on the map are city-anchored, not store-anchored.
| County | Open | Of |
|---|
These Performance Max campaigns target location groups, and Google's API blocks
campaign_criterion.location_group.* — it will not say which locations a group resolves to.
They are live and spending; their geography simply cannot be read from outside the interface. Only
Grand Rapids PMax (a ZIP list) and Ann Arbor PMax (a radius) are readable, which is why the campaign
list is shorter than the campaign count.
Every ZIP the account targets, drawn to its real boundary. Switch campaigns on and choose how they bundle — by market, by campaign, by channel, or by how the ZIP was targeted. Whatever is switched on is what the map draws, and the bundle is the color. Two views: the Map, and Panels — all fourteen markets at once, each at its own scale, without the dead space between Michigan and Florida. Click a panel to open that market on the map.
How many colors a filled map can carry is measurable rather than a matter of taste: on a map every color can touch every other, so every pair has to clear a color-blindness floor and a normal-vision floor at once. The answer is six. So the first six markets you pick get their own color, and the rest get a diagonal hatch, which color-blind readers, grayscale printers and forced-colors mode all keep. All fourteen can be on screen at once.
The palette is lighter than it was, and that was not a trade against legibility: it separates better under every form of color blindness than the darker set it replaced (worst pair 10.2 rather than 8.5, and 9.0 rather than 3.4 for the rarest form). Lightness is the one channel color blindness keeps, so a palette can spend it on looking bright or on telling things apart, and a search that is asked for both finds more of each than one asked for neither. One set now serves light and dark mode; the old dark variant was separating at 5.0, below the floor this page claimed for it.
Click a group to switch it on or off; only isolates it. The campaign is the atomic unit; everything else is a way of bundling campaigns. Group by Market and Ann Arbor's two campaigns share a color; group by Campaign and they separate; group by Channel or Targeting and the same switched-on campaigns re-bundle around video versus PMax, or list versus radius. Expanding a group lets you switch a single campaign off without leaving the grouping — so "of just Detroit and Ann Arbor, which ZIPs are PMax" is one list, not two. Twelve ZIPs in the account are claimed by two groups at once; those are outlined in ink rather than given a color of their own.
Not in miles. A ZIP is one step out if its boundary touches a covered ZIP, two if it touches one of those. That keeps the ring honest in both worlds — three steps is about six miles across Detroit and about forty across rural Kentucky, which is what a trade area actually does.
Most carry an explicit ZIP list, drawn solid. Two use a radius: Grand Rapids video, 20 miles
around Portage, and Ann Arbor PMax, 15 miles around Ann Arbor. Those are drawn hatched — they
deliver, but will never appear in a ZIP-list audit. A radius carries no exclusions, which is how
48160 Milan came back after being deliberately removed.
Shapes are Census ZCTA boundaries, simplified to about a quarter-mile. A ZIP counts as radius-covered when its centroid falls inside the circle, so watch the ZIPs the dashed edge cuts through — Google serves part of them, and the map has to call them one thing or the other.
A trade area follows drive time, not distance, and a radius cannot know that. Canton was kept with
Detroit because its main roads run toward Novi rather than west to Ann Arbor — that call was made
from memory against a map with no roads on it. 48160 Milan is the same story in reverse:
it sits on the US-23 corridor running south to Toledo, which is why it trades there and why the
15-mile circle was wrong to take it back. Interstates and US highways are separate toggles because
the second one turns into noise at market scale.
All nineteen stores now carry a street address in pmax/geo/radius_targets.csv, and a
coord_source column records how good each coordinate is. A store is drawn as a
hollow dashed dot when its position cannot be trusted to the building — that is a rule, not a
list, so the next store in that state needs no code.
Troy plots exactly but has no campaign of its own; it rides 8.5 miles inside Sterling
Heights' radius, which is its only coverage. Easton opens late October 2026, so it stays hollow
until it trades. No geocoder resolves 4201 Weaverton Lane — Easton Town Center is a lifestyle
center and the street is a parking access road. Its neighbours bracket it — European Wax Center at 4199
and Pies & Pints at 4205 — but only 4205 exists in any geocoder, so the dot is that anchor
stepped about thirty metres toward 4199. Accurate to the retail block, not the storefront:
roughly ±40 m, and rounded to four decimal places to say as much.
Every coordinate here is ours rather than Google's, and gets replaced when Business Profile API
access lands and gbp.locations supplies all nineteen.
Several markets run sales-derived ZIP lists rather than tidy geography, so a gray ZIP beside a covered one is often a deliberate exclusion rather than an oversight. The county table counts only what is on screen, so it follows the padding.