Aerial photo of any address.
In one API call.
Sharp 0.6m aerial imagery — public-domain USGS NAIP — for any US property. Pass an address or coordinates, get back a PNG of the parcel and its surroundings.
What customers usually call "satellite" is actually aerial photography — captured by aircraft at ~25,000 ft, not satellites. NAIP's 0.6m resolution beats most satellite sources and shows individual roofs, driveways, vehicles, pools and trees. We proxy USGS on demand so you don't deal with their API surface, projections, or coverage gaps. 1 credit per render, 30-day cache, no separate vendor key.
Three ways to ask for the imagery
All backed by the same public-domain USGS NAIP imagery. All deterministic — same URL returns the same image every time, so Cloudflare absorbs repeats for 30 days.
By free-text address
Pass the address as a string, we geocode it internally (no separate charge) and return the aerial at that location. One round-trip, one credit.
GET /v1/property/image?q=3168+Beckie+Dr+SW,+Wyoming,+MI&size=350
By lat/lng coordinates
Already have the coordinates? Skip the geocode and pass them directly. Same image, same credit.
GET /v1/property/image?lat=42.86753&lng=-85.7419&size=350
Variable bbox size
Tune the framing: size=200 for a tight lot crop, size=350 default (residential block), size=1000 for a neighborhood view, up to size=2000 max.
GET /v1/property/image?lat=…&lng=…&size=1000&format=jpg
Try it on a real address
Type a US address, see the aerial photo. No signup. Same response your code would get.
Open the live demo →Three lines of code
Same call, three languages. SDKs at version 1.15.0 on PyPI and npm.
# address → aerial image, one call curl -o aerial.png "https://csv2geo.com/api/v1/property/image?q=3168+Beckie+Dr+SW,+Wyoming,+MI&size=350&api_key=geo_live_..."
from csv2geo import Client c = Client("geo_live_...") png = c.property_image( q="3168 Beckie Dr SW, Wyoming, MI", size=350) open("aerial.png", "wb").write(png)
import { Client } from "csv2geo-sdk"; const c = new Client("geo_live_..."); const png = await c.propertyImage({ q: "3168 Beckie Dr SW, Wyoming, MI", size: 350 }); fs.writeFileSync("aerial.png", png);
What people build with it
The four patterns that come up most in real-estate, insurance and CV pipelines.
Real-estate listings
Show the parcel + surroundings on every listing. Sharper than a Mapbox satellite layer, no per-listing satellite licence, no embedded vendor watermark.
Insurance underwriting
Visual property assessment without a site visit. Roof condition, surrounding tree overhang, pool presence, outbuilding count — all readable in a 0.6m frame.
Appraisal research
Compare a property to its neighbors at the same scale. Aerial year-over-year change detection when you keep older renders archived.
Computer-vision substrate
Free pixel input for roof condition, pool detection, solar panel surveys, driveway extraction, outbuilding inventory. NAIP is what Cape Analytics / ZestyAI models train on.