coords = First@Interpreter["StreetAddress"]["14 James Way, Cambridge MA"]; For the first part of the question, you can extract and post-process the callout graphics primitives from `ListPlot[Callout[..]]` and use them with `GeoGraphics`: GeoGraphics[{Polygon[Entity["City", {"Cambridge", "Massachusetts", "UnitedStates"}]], GeoMarker[coords, Style["\[FilledCircle]", 14, Blue]], Cases[ListPlot[{Callout[coords, "Hi", "CalloutStyle" -> Red]}], _GraphicsGroup, All] /. Offset[a_, b_] :> Offset[a, GeoGridPosition[GeoPosition[b], "Mercator"]]}] [![enter image description here][1]][1] [1]: https://i.sstatic.net/nfSbM.png