Skip to main content
The most valuable property question is often about what hasn’t happened: which homes have no solar permit on record, which buildings were never re-roofed. The Search Properties endpoint answers this with a - prefix on permit_tags—and attaches a confidence score to every answer.
Properties are currently in beta. The absence-trust surface in particular may still change in response to how the endpoint is used in practice.

Writing an Absence Query

Prefix a tag with - to exclude it:
This returns properties with no resolved solar permit on record. You can combine absence with other filters by repeating the key—for example permit_tags=roofing&permit_tags=-solar finds properties with a roofing permit but no solar permit. A comma-joined value like permit_tags=roofing,-solar is rejected with a 422. Adding permit_from changes the meaning:
  • In a pure-absence query (permit_tags=-solar&permit_from=2020-01-01), the exclusion means “no solar permit since that date.”
  • Combined with any positive filter, the exclusion means “never had a solar permit”—per-filter dates can’t be composed on a property record.

Why Absence Answers Need a Confidence Score

A property can look permit-free for reasons that have nothing to do with the property:
  • Its permits never linked to an address (they exist, but unresolved).
  • The work is recent and the permit simply hasn’t arrived yet—permits reach Shovels a median of 84 days after work starts (90% within 188 days).
  • The local jurisdiction’s coverage for that work type is thin.
Answered naively, “no permit here” would be confidently wrong. So the endpoint does two things instead:
  1. Removes what can’t be answered. Where coverage for a work type in an area is too thin, those properties are dropped from the absence result entirely rather than returned as false negatives. The response reports how many scopes were removed (suppressed_scopes).
  2. Scores what remains. Every returned absence row carries a trust object, and the page carries a trust_summary.

Reading the Trust Fields

Each row in an absence result includes a trust object: The page-level trust_summary aggregates across returned rows:
For lead generation, filter your list by trust: rows with coverage_tier=high, no flags, and a data_horizon covering your date give the most reliable “no permit on record” answers.
Shovels knows permits, not installations. “No solar permit on record” is not the same claim as “no solar panels”—unpermitted work exists. The trust fields quantify data coverage, not construction reality.

What Absence Queries Can’t Do

  • “No permit before 2020” or any closed date window—the property record keeps only the latest date per work type. Only “ever” and “since date D” are expressible. Use Search Permits instead.
  • Presence-only searches carry no trust fields. The trust object and trust_summary appear only when the query includes an absence filter.