Map where your leads are looking
https://api.ruuster.com/v1/leads/mapWhere your leads are looking for homes, as map-ready points. Listing views, favorites and tour requests from the last 30 days, grouped by the viewed listings' locations into clusters, ZIP codes, cities or single listings, with the top areas and the map bounds. One call for a heatmap, dot map or market map; no need to page through leads.
- Authentication:
x-api-keyandx-emailheaders of an owner or admin - Rate limit: 120 requests per minute per key
Every listing view, favorite and tour request your leads made on your sites, placed at the location of the listing they looked at (any listing, yours or not) and grouped for a map. Use it for "where are my buyers looking?", a heatmap or dot map of demand, or to compare areas. It is one call: there is no need to list leads and read each one's activity.
In Claude (claude.ai and Claude desktop) and other assistants that show MCP Apps, the leads_map tool's answer comes with an interactive map of these points: zoom, click a circle for its counts, and click a row in the top-areas table to fly there. Nothing extra to call.
The response is counts only. It never names a lead, so it doesn't count against your daily lead-row quota. For who is behind the activity, use List active leads; for one listing's viewers, List a listing's viewers.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
from |
date | 30 days before to |
First day, YYYY-MM-DD in America/Chicago, included. Activity is kept for 30 days, so no earlier than 30 days ago |
to |
date | tomorrow | Day after the last day, YYYY-MM-DD, excluded. The default includes today |
groupBy |
cluster | zip | city | listing |
cluster |
How points are grouped: cluster is a grid sized to the area your leads cover, best for a heatmap; zip and city give one point per ZIP code or city; listing gives one point per listing with its address |
agentId |
string | Only leads assigned to this agent (an agentId from List agents) |
|
limit |
integer | 300 |
Most points returned, 1 to 1000. The most active points are kept |
sources |
0 | 1 |
0 |
1 adds, for every point and area, how many listing views happened on Ruuster versus on other sources your CRM recorded (portals, IDX sites). Not with agentId |
Response
| Field | Description |
|---|---|
groupBy |
The grouping used |
cellDegrees |
Grid cell size in degrees when groupBy is cluster (0.005 to 0.25), otherwise null |
totals.views, favorites, tourRequests |
All activity in the range, mapped or not |
totals.leads |
Distinct leads behind that activity |
totals.listings |
Distinct listings they looked at |
totals.mappedListings, unmappedListings |
Listings placed on the map, and those with no location on record |
bounds |
south, west, north, east of every mapped listing; null when nothing was mapped |
focus |
The same four edges around the core of the activity (the middle 95% of mapped listings), so a few far-away views don't zoom the map out. Fit the map to this; clusters are sized from it |
points |
One per group, most distinct leads first: lat, lng (the activity-weighted center), views, favorites, tourRequests, leads, listings, medianPrice (asking price), label ("City, ST ZIP"); with groupBy=listing also propertyId and address |
pointsOmitted |
Points left out by limit |
areas |
The top 20 cities by distinct leads, whatever the grouping: city, state, lat, lng, views, favorites, tourRequests, leads, listings, medianPrice |
ruusterViews, outsideViews, ruusterShare |
With sources=1, on totals, each point and each area: listing views on Ruuster (the same as views), listing views your CRM recorded from other sources, and Ruuster's share of the two (0 to 1, null with no views). totals also has ruusterLedPoints and ruusterLedAreas, how many returned points and areas have a share above 0.5 |
meta.range echoes the days mapped and meta.eventsAvailableFrom the earliest day you can ask for. If a range holds more than 60,000 events, the first 60,000 are mapped and meta.truncated is true; ask for fewer days to see the rest.