← all tools
Data & sourcing

Shovels

Find contractors by the work they are actually doing.

Shovels is a data and sourcing tool, and one of the 53 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 27 actions, all of which look something up. Shovels runs on your own Shovels account: hyreflow charges no credits for it, and Shovels bills you as before.

Cost per callBYOK · vendor billed
Your own keyrequired
CategoryData & sourcing

Shovels reads US building permits. A contractor pulling permits in a metro has live projects and, usually, a crew to hire. For construction and the trades this beats any job board, because the permit exists before the job ad does.

Shovels is the sourcing front end for trades recruiting. Contractors come out; enrichment turns them into contacts.

What can you ask Claude or ChatGPT to do with Shovels?

With hyreflow connected, you ask for the outcome in plain language and the assistant runs Shovels for you. For example:

  • “Which electrical contractors are active in Phoenix, and what are their details per Prospeo?”
  • “Find roofing firms that pulled permits this quarter and file them in Loxo”
  • “Who is doing solar work in this county? Sanity-check them on Serper before I call”
  • “How big is this contractor's operation?”

Which tools work well with Shovels?

In a hyreflow run, Shovels is most often paired with Prospeo, Serper, Aircall and Loxo.

  • Prospeo

    contact details for the contractors the permits named

  • Serper

    a quick check that a local business is what it looks like

  • Aircall

    trades BD is phone-first, so log the calls

  • Loxo

    file the contractors as companies on your desk

Which Shovels actions can an AI agent run through hyreflow?

Through hyreflow, an AI agent can run 27 Shovels actions, all of which look something up. Shovels runs on your own Shovels account: hyreflow charges no credits for it, and Shovels bills you as before.

Shovels actionWhat it doesCost through hyreflow
Search addressesLooks something upno hyreflow credits
Search citiesLooks something upno hyreflow credits
Search contractorsLooks something upno hyreflow credits
Search countiesLooks something upno hyreflow credits
Search jurisdictionsLooks something upno hyreflow credits
Search permitsLooks something upno hyreflow credits
Search statesLooks something upno hyreflow credits
Search zipcodesLooks something upno hyreflow credits
List tagsLooks something upno hyreflow credits
List zip codesLooks something upno hyreflow credits
Show all 27 Shovels actions →
Shovels actionWhat it doesCost through hyreflow
Get address metrics currentLooks something upno hyreflow credits
Get address metrics monthlyLooks something upno hyreflow credits
Get address residentsLooks something upno hyreflow credits
Get cityLooks something upno hyreflow credits
Get city metrics currentLooks something upno hyreflow credits
Get city metrics monthlyLooks something upno hyreflow credits
Get contractorLooks something upno hyreflow credits
Get contractor employeesLooks something upno hyreflow credits
Get contractor metricsLooks something upno hyreflow credits
Get contractor permitsLooks something upno hyreflow credits
Get countyLooks something upno hyreflow credits
Get county metrics currentLooks something upno hyreflow credits
Get county metrics monthlyLooks something upno hyreflow credits
Get jurisdictionLooks something upno hyreflow credits
Get jurisdiction metrics currentLooks something upno hyreflow credits
Get jurisdiction metrics monthlyLooks something upno hyreflow credits
Get permitLooks something upno hyreflow credits

One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.

How does an AI agent know how to use Shovels?

hyreflow ships a written playbook for Shovels, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.

Read the Shovels docs →
Show the raw playbookwritten for the agent

HOW in lib/shovels.py. Paths from docs.shovels.ai (2026-06-01); index: reference/docs/shovels/raw/endpoints.md.

Auth & config

  • Base URL: https://api.shovels.ai/v2 · Auth: header X-API-Key (env SHOVELS_API_KEY; never hardcode).
  • Pagination: cursor — size (≤100, default 50) + cursor → next_cursor; iter_permits/iter_contractors auto-walk it.
  • Credit-metered — get_usage() reads your own Shovels account (Shovels is BYOK-only; connecting your own key needs the Essential plan or above). Budget against hyreflow billing balance.

Core workflow (geo_id first)

Everything keys off a geo_id. Resolve the place first — search_addresses / search_cities / search_zipcodes / search_counties / search_jurisdictions / search_states (they return geo_ids) — then pass geo_id to search_permits / search_contractors. Both searches REQUIRE geo_id + permit_from + permit_to (YYYY-MM-DD).

Operations

Geo: search_addresses/cities/counties/jurisdictions/states/zipcodes. Permits: search_permits/iter_permits, get_permit. Contractors: search_contractors/iter_contractors, get_contractor, get_contractor_employees, get_contractor_permits, get_contractor_metrics. Residents/metrics: get_address_residents, get_address_metrics_current/monthly, plus city/county/jurisdiction details + metrics. Lists/meta: list_tags, list_zip_codes, data_release_date, get_usage. CONFIRMED: the two searches + usage; per-record detail/metrics sub-paths are pattern-inferred — verify on first pilot, request() covers any that differ.

Recruitment use (why it's here)

Construction/trades recruiting: find active contractors pulling permits in a metro + date window (search_contractors by trade) → they're the hiring companies; get_contractor_employees for contacts → enrich → outreach/ATS. Or search_permits for project activity as a hiring signal. job value is in cents.

Handoff

Sourcing/signal layer (construction): Shovels finds active contractors/permits → qualify vs ICP → enrich contacts (waterfall) → sequence / push to ATS. Pairs with the standard pipeline.

Callable surface — lib/shovels.py

Import: from lib.shovels import Shovels → instantiate Shovels() (reads key from env). Base: https://api.shovels.ai/v2. Generic passthrough: request(method, path, *, params, json).

  • data_release_date() -> Any — GET /meta/release — latest data release date (inferred sub-path).
  • get_address_metrics_current(geo_id: str, **params) -> Any — GET /addresses/{geo_id}/metrics/current (inferred).
  • get_address_metrics_monthly(geo_id: str, **params) -> Any — GET /addresses/{geo_id}/metrics/monthly (inferred).
  • get_address_residents(geo_id: str, **params) -> Any — GET /addresses/{geo_id}/residents — residents at an address (homeowner field) (inferred).
  • get_city(geo_id: str) -> Any — GET /cities/{geo_id} — city details (inferred).
  • get_city_metrics_current(geo_id: str, **params) -> Any
  • get_city_metrics_monthly(geo_id: str, **params) -> Any
  • get_contractor(contractor_id: str) -> Any — GET /contractors/{id} — contractor profile (inferred path; verify).
  • get_contractor_employees(contractor_id: str, **params) -> Any — GET /contractors/{id}/employees — employee/contact data (inferred).
  • get_contractor_metrics(contractor_id: str, **params) -> Any — GET /contractors/{id}/metrics — filtered metrics for a contractor (inferred).
  • get_contractor_permits(contractor_id: str, **params) -> Any — GET /contractors/{id}/permits — permits a contractor worked on (inferred). May need permit_from/to.
  • get_county(geo_id: str) -> Any
  • get_county_metrics_current(geo_id: str, **params) -> Any
  • get_county_metrics_monthly(geo_id: str, **params) -> Any
  • get_jurisdiction(geo_id: str) -> Any
  • get_jurisdiction_metrics_current(geo_id: str, **params) -> Any
  • get_jurisdiction_metrics_monthly(geo_id: str, **params) -> Any
  • get_permit(permit_id: str) -> Any — GET /permits/{id} — a single permit by id.
  • get_usage() -> Any — GET /usage — API usage / credits on your own Shovels account (Shovels is BYOK-only).
  • iter_contractors(*, geo_id: str, permit_from: str, permit_to: str, **params) -> Iterator[dict]
  • iter_permits(*, geo_id: str, permit_from: str, permit_to: str, **params) -> Iterator[dict] — Auto-paginate /permits/search across all cursor pages.
  • list_tags(**params) -> Any — GET /lists/tags — all available permit tags (inferred sub-path).
  • list_zip_codes(**params) -> Any — GET /lists/zipcodes — all available zip codes (inferred sub-path).
  • search_addresses(**params) -> Any — GET /addresses/search — resolve an address → geo_id (+ details).
  • search_cities(**params) -> Any — GET /cities/search — resolve cities → geo_ids.
  • search_contractors(*, geo_id: str, permit_from: str, permit_to: str, **params) -> Any — GET /contractors/search — REQUIRES geo_id + permit_from + permit_to. Ordered by most-recent
  • search_counties(**params) -> Any — GET /counties/search.
  • search_jurisdictions(**params) -> Any — GET /jurisdictions/search.
  • search_permits(*, geo_id: str, permit_from: str, permit_to: str, **params) -> Any — GET /permits/search — REQUIRES geo_id + permit_from + permit_to (YYYY-MM-DD). One page.
  • search_states(**params) -> Any — GET /states/search.
  • search_zipcodes(**params) -> Any — GET /zipcodes/search.

Questions about Shovels and hyreflow

Can I use Shovels inside Claude or ChatGPT?

Yes. hyreflow is a connector for Claude, ChatGPT and other AI assistants. Once hyreflow is connected, you ask for the outcome in plain language and the assistant calls Shovels for you. hyreflow exposes 27 Shovels actions this way.

Do I need my own Shovels account to use it with hyreflow?

Yes. Shovels runs on your own Shovels account. You connect it to hyreflow once, hyreflow charges no credits for the calls, and Shovels bills you as before.

What does Shovels cost through hyreflow?

Shovels runs on your own Shovels account: hyreflow charges no credits for it, and Shovels bills you as before.

How do I connect Shovels to an AI agent over MCP?

Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the Shovels API directly and exposes its actions as tools the assistant can run, so there is no separate Shovels server to install.

Connect hyreflow to your assistant →

Put Shovels to work from one prompt

Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.