Skip to main content

What you’ll build

A basic flow that takes user text like Seattle and returns:
  • a stable geo_id
  • current permits for that geo
  • permit-scoped leads and stats for that geo
  • active geo-scoped signals for that geo
For a complete signal list and timing guide, see Signals Catalog.

Prerequisites

  • API key
  • curl

0. Set environment variables

1. Resolve user input to geo_id

Pick one candidates[].geo_id. For permit-scoped signals, pick a non-property geo_id such as a city, county, zip, jurisdiction, or state.

2. Fetch permits for that geo

If next_cursor is not null, request the next page:

3. Fetch permit-scoped leads for that geo

Use the same geo_id for permit signal reads.
By default, permit leads return only rows inside the freshness window. Add include_stale=true to include older rows.

4. Fetch permit-scoped stats for that geo

If you want the more conservative timing variants, swap in:
  • framing_window_late
  • rough_in_window_late

5. Fetch active geo-scoped signals for that geo

6. Search geo-scoped signals across a state

Common first-run issues

  • 403: missing/invalid API key
  • 422: invalid query format, unsupported permit-scoped geo type, or bad cursor
  • 404: valid request but no matching resource
See Troubleshooting. Want more detail on signal fields and scoring behavior? See Signals Catalog and Signals & Methodology.