Products API & Data Search Coverage Property History Alerts Contractor Leads Data Exports
Solutions Solar & Energy Solar Permit Data Roofing HVAC Real Estate Insurance Contractors
Pricing API Docs Sign In Get Started
Integration guide

Send permit leads to GoHighLevel

Every new permit that matches your filters can land in your GoHighLevel sub-account as a workflow trigger — within about a minute of it appearing in our data. No custom code, no polling, no Zapier tax. The same recipe works for Make, n8n, and Webhooks by Zapier.

Works with: PermitStack webhooks (Developer plan and above) and PermitStack Leads subscriptions

What you can pipe in

Step 1 — Create an inbound webhook trigger in GoHighLevel

  1. In your sub-account, go to Automation → Workflows → Create Workflow.
  2. Choose the Inbound Webhook trigger (availability depends on your GoHighLevel plan).
  3. Copy the generated webhook URL — it looks like https://services.leadconnectorhq.com/hooks/....
Keep that URL private. GoHighLevel inbound webhooks don't verify signatures, so the URL itself is the credential. If it ever leaks, regenerate it in GHL and update your PermitStack webhook. For strict HMAC verification, put a small middleware (a Cloudflare Worker, or Make/n8n) between us and GHL — the signature scheme is documented in the webhook reference.

Step 2 — Register the URL with PermitStack

One API call. Filter as narrowly as you like — this example feeds a roofing pipeline for Tampa:

curl -X POST "https://api.permit-stack.com/v1/webhooks" \
  -H "X-API-Key: pk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://services.leadconnectorhq.com/hooks/YOUR-HOOK-ID",
    "city": "Tampa",
    "state": "FL",
    "category": "ROOFING"
  }'

Or track a competitor instead of a territory — every permit they pull, in any covered market:

curl -X POST "https://api.permit-stack.com/v1/webhooks" \
  -H "X-API-Key: pk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://services.leadconnectorhq.com/hooks/YOUR-HOOK-ID",
    "contractor_name": "ABC Roofing"
  }'

Send yourself a sample event any time with POST /v1/webhooks/{id}/test, which is also the easiest way to get GHL's field-mapping screen to see the payload shape.

Step 3 — Map the payload to GHL fields

Every delivery is a JSON POST shaped like this:

{
  "event": "permit.created",
  "delivered_at": "2026-07-20T14:02:11Z",
  "data": {
    "permit_number": "2026-040187",
    "category": "ROOFING",
    "status": "ISSUED",
    "address": { "street": "812 W Bay St", "city": "Tampa", "state": "FL", "zip": "33606" },
    "description": "Tear off and re-roof, shingle to shingle",
    "estimated_value": 18400,
    "date_filed": "2026-07-19",
    "date_issued": null,
    "jurisdiction": "Tampa",
    "contractor": "SUNCOAST ROOFING LLC"
  }
}

Useful mappings in the GHL workflow builder:

GHL fieldJSON path
Contact / opportunity namedata.address.street
Addressdata.address.street, data.address.city, data.address.state, data.address.zip
Opportunity valuedata.estimated_value
Tag / pipeline stagedata.category
Note bodydata.description
Custom field: permit numberdata.permit_number
Custom field: contractor of recorddata.contractor

From there it's standard GHL: create an opportunity in a "New permits" pipeline stage, fire a task for your canvasser, or kick off a mail sequence.

Zapier, Make, and n8n

No marketplace app needed — the generic webhook receivers work as-is:

FAQ

Do I need to write code for any of this?
One curl command (Step 2), which you can run from any terminal — or ask us at support@permit-stack.com and we'll register the webhook for you. Everything else is point-and-click in your CRM.
Which PermitStack plan do I need?
Webhooks (including contractor tracking) are on Developer ($49/mo) and above. PermitStack Leads ZIP subscriptions include delivery webhooks at no extra cost. If you just want a daily email instead of a CRM push, saved-search digests are on every plan, including free.
Does the payload include homeowner contact info?
No. Webhook payloads carry the permit's public record: address, work description, value, dates, and contractor of record. Owner name and mailing address are exclusive to the PermitStack Leads product.
What happens if my endpoint is down?
Deliveries retry with backoff, failures are logged, and a webhook that fails repeatedly is paused rather than dropped silently. Details in the webhook reference.

Put permits in your pipeline this afternoon

Self-serve API key, no sales call. Webhooks are on Developer ($49/mo); exclusive ZIP lead territories from $79/mo.

See pricing Browse ZIP territories