Verify listing claims
verify_claimsGrade spatial listing claims about travel times, nearby places, and distances against real routing and map data. Returns confirmed, stretched, false, or unverifiable verdicts for each claim.
Instructions
Grade spatial listing claims ("8 min to the metro", "shops on the doorstep", "green space nearby") against real routing and places data.
Free-text claim parsing needs an LLM — this tool takes already-decomposed
structured checks; the verify_listing_claims prompt teaches an agent how
to turn listing text into them. Each of claims (max 8; max 5 of kind
travel_time, since each costs a routed call) is one of:
- {"kind": "travel_time", "to_category": str|None, "to_name": str|None,
"mode": "walk"|"cycle"|"drive" (default walk), "claimed_minutes": number}
Finds the nearest place matching to_category (an Overture taxonomy
slug) and/or to_name (a substring match), then routes to it and
compares the routed minutes against claimed_minutes.
- {"kind": "count_nearby", "category": str|None, "name": str|None,
"radius_m": number (default 500, capped at 2000), "claimed_at_least": int}
Counts matching places within radius_m and compares against
claimed_at_least.
- {"kind": "distance", "to_category": str|None, "to_name": str|None,
"claimed_max_m": number}
Straight-line distance (haversine, not routed) to the nearest match,
compared against claimed_max_m.
Every kind needs at least one of its category/name fields; giving
neither is a bad_request. A category is an Overture taxonomy slug,
matched exactly (including its taxonomy descendants), never as a
substring — "park" does not match a parking garage; a name is a
substring match.
Verdict per claim: "confirmed" when the measured number is within the
claimed number x1.15 (count_nearby: measured count >= claimed),
"stretched" within x1.5 (count_nearby: count >= half the claim, floor
1), otherwise "false". A claim asserting a place exists at all, when
none is found within the search bound, is "false" with a note —
absence is a verdict, not an error. A claim the measurement cannot
decide is "unverifiable" instead of "false": a travel_time claim whose
place is found but cannot be routed to (no street graph nearby, or the
network doesn't connect the two points), or whose failing measurement
came from a size-cap-truncated street graph, and a count_nearby claim
whose claimed_at_least exceeds the row cap the count stopped at.
Returns {"results": [{"claim": <echo of the input>, "verdict":
"confirmed"|"stretched"|"false"|"unverifiable", "measured": {...
kind-appropriate minutes/count/distance_m, plus the matched place's id
and name when there is one}, "note": optional}, ...], "verdict_rule":
a one-line summary of the thresholds above}.
Returns a structured {"error": "bad_request", ...} for anything
malformed in claims (unknown/missing kind, more than 8 claims, more
than 5 travel_time claims, a missing or non-numeric claimed value,
neither target field given, or an unsupported mode), {"error":
"bad_request", ...} for invalid lat/lon, or a structured {"error": ...}
if the upstream dataset is unavailable or missing columns this tool
depends on.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| claims | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||