Integrations · HubSpot
Storm leads in your HubSpot pipeline
Minutes after NOAA radar confirms hail in your territory, a storm record lands in HubSpot — hail size, county, and a link to every affected property. Two honest paths: Zapier (works on every HubSpot tier) or HubSpot's native webhook trigger (needs Operations Hub — now sold as Data Hub — Professional or Enterprise).
Get a free Swath key
Sign up at swathapi.com/signup — one email field, no credit card. Your key (it starts with sk_) comes back instantly and is shown once, so paste it somewhere safe. The free plan includes 100 credits a month; storm webhooks themselves cost nothing.
Pick your path and copy a webhook URL
Path A · Zapier — works on every HubSpot tier
- In Zapier, click Create Zap
- Trigger app: Webhooks by Zapier → event: Catch Hook (this is a Zapier premium trigger — it needs a paid Zapier plan)
- Zapier shows a unique webhook URL — copy it; that's the URL for step 3
A native Swath app for Zapier is built and headed for the Zapier directory — until it's live, Webhooks by Zapier does the same job with one extra copy-paste.
Path B · HubSpot's native webhook trigger — Operations Hub / Data Hub Pro or Enterprise
- Go to Automation → Workflows and click Create workflow
- In the trigger panel, expand Custom events & external events and choose Received a webhook from an external app
- Click + Add a webhook, name it (e.g. "Swath storm alert"), and continue — HubSpot generates a unique webhook URL; copy it
HONEST CAVEAT: HubSpot's native webhook trigger only enrolls existing records whose unique property matches a value in the payload — it cannot create a new contact or deal from a storm. It fits teams that keep a standing "territory" or "market" record per area. If you want each storm to create something new in HubSpot, use Path A. (It also accepts JSON bodies only — Swath sends application/json, so that part just works.)
Tell Swath to watch your territory
Path A · Ask your AI — no code, recommended
Connect Swath to Claude or ChatGPT first (a 2-minute paste-one-URL setup — steps here), then say:
Create a Swath storm monitor covering [YOUR COUNTY OR CITY] for hail 1 inch and up. Use this webhook URL: [PASTE THE WEBHOOK URL FROM STEP 2]. Name it "[TERRITORY NAME]".
The AI draws the box around your territory, creates the monitor, and confirms. Ask it to save the webhook_secret it gets back.
Path B · Or paste this in any terminal
curl -X POST https://swathapi.com/v1/monitors \ -H "Authorization: Bearer sk_YOUR_KEY" \ -H "content-type: application/json" \ -d '{ "name": "My territory", "bbox": [-97.5, 32.5, -96.4, 33.3], "hail_min_in": 1.0, "webhook_url": "PASTE_THE_WEBHOOK_URL_FROM_STEP_2" }'
Swap in your sk_ key and the webhook URL from step 2. The bbox is the [west, south, east, north] corners of a box around your territory — the example roughly covers Dallas–Fort Worth. The response includes a webhook_secret, shown once — save it.
Send a test storm so the fields get mapped
Both Zapier and HubSpot map fields from a request they've actually seen — and you can't make it hail on demand. Send a realistic sample to your webhook URL: either ask your AI ("Send a test POST to [the webhook URL] with this exact JSON: …") or paste this in any terminal:
curl -X POST "PASTE_THE_WEBHOOK_URL_FROM_STEP_2" \
-H "content-type: application/json" \
-d '{
"event": "storm.verified",
"storm_id": "sw_db69f3ae",
"monitor_id": "mon_1a2b3c4d",
"type": "hail",
"mesh_in": 1.75,
"wind_mph": null,
"verified_at": "2026-07-24T19:42:00Z",
"county": "Dallas, TX",
"swath_geometry_url": "/v1/swaths/sw_db69f3ae/geometry",
"report_url": "/v1/swaths/sw_db69f3ae/properties",
"parcels_in_swath_est": null
}'
Zapier: the test shows up as the sample record — use its fields when you add HubSpot action steps.
HubSpot native: the payload appears under Review your test event; map each field by setting a
HubSpot property label and a Data type (map verified_at as a string —
HubSpot asks for datetime values as strings here).
Every field Swath sends, and what it means:
| Field | What it is |
|---|---|
| event | Always storm.verified — the only event Swath sends today |
| storm_id | The storm's permanent ID, e.g. sw_db69f3ae |
| monitor_id | Which of your territories it hit, e.g. mon_1a2b3c4d |
| type | hail or wind |
| mesh_in | Largest radar-measured hail in the swath, in inches (null on wind events) |
| wind_mph | Peak measured wind, mph (null on hail events) |
| verified_at | When radar confirmed it, UTC — e.g. 2026-07-24T19:42:00Z |
| county | County the swath centers on — e.g. Dallas, TX (null only offshore / outside the US) |
| swath_geometry_url | Path to the storm's shape on a map: /v1/swaths/{storm_id}/geometry |
| report_url | Path to the affected-property list: /v1/swaths/{storm_id}/properties |
| parcels_in_swath_est | Reserved for a future estimate — currently always null |
Finish the automation
Path A (Zapier): add HubSpot action steps to the Zap — typical recipe:
- Create Record (deal or ticket) — title it from county + mesh_in (e.g. "Storm — Dallas, TX — 1.75″ hail") in your storm pipeline
- Create Task — "Pull the Swath Report and work the list", assigned to the territory rep
- Optionally a Slack or email step so the team hears about it instantly
Path B (native): the workflow runs against the enrolled record — add actions like setting storm properties, creating tasks, or internal notifications.
HONEST NOTE: the webhook is the storm, not a homeowner list — you get one new record per verified storm, with hail size and county. The leads live behind report_url: the Swath Report lists every affected property with the hail size measured at that address (billed per property — ask for a quote first). Easiest pull: ask your AI "Pull the Swath Report for storm sw_… and give me a CSV."
The fine print (plain English)
One storm, one POST. Each verified storm that crosses a monitor produces exactly one webhook to that monitor — no duplicates. If your endpoint is down, Swath retries with increasing delays.
Every POST is signed. Swath adds an X-Swath-Signature header (t=<unix>,v1=<HMAC-SHA256>, keyed by the webhook_secret you got when the monitor was created) plus X-Swath-Event: storm.verified. HubSpot (and Zapier) doesn't check signatures on inbound webhooks — that's normal for this kind of setup; the long, unguessable webhook URL is the gate.
Turning it off. Delete the monitor any time — ask your AI ("delete my Swath monitor") or call DELETE /v1/monitors/{id}.
HubSpot steps verified against the HubSpot Knowledge Base — Set 'When a webhook is received' workflow triggers — as of July 24, 2026, including the Operations Hub / Data Hub Professional-or-Enterprise requirement and the existing-records-only enrollment limit. HubSpot renames hubs and menus periodically; if a label here doesn't match your screen, look for the webhook-received trigger under external events. Webhook payload fields on this page are copied verbatim from the Swath dispatcher and stay current with the docs.