SearchOps + HubSpot
Keep each client's local search health on their HubSpot company record, open a renewal-risk deal when they slip, and log every piece of work you did.
If your agency runs on HubSpot, that's where account health should live. A monthly Zap writes each client's Business Profile results and ChatGPT visibility to company properties, so HubSpot lists, reports and health scores can use them. Confirmed Map Pack losses open deals in a retention pipeline, and every finished SearchOps task becomes a note on the timeline your account team already reads.
Health on the company record
Calls, direction requests, action rate and ChatGPT visibility as company properties, updated monthly.
Churn risk before renewal
A confirmed Map Pack loss opens a deal in your retention pipeline with the evidence attached.
Upsell lists that build themselves
Filter companies whose ChatGPT visibility is low: that's your AI visibility campaign list.
A timeline of the work
Each completed SearchOps task lands as a note, ready for QBRs and renewals.
Recipes
What agencies build with HubSpot
Monthly local search health on the company
GET /profile/performance, /ai-visibilityAgencies that score account health in HubSpot
- 1Create company properties: SearchOps calls (month), direction requests, action rate, ChatGPT visibility.
- 2Zapier Schedule monthly; API by Zapier GET /locations/{id}/profile/performance?months=1 and /ai-visibility?engine=chatgpt.
- 3HubSpot: Find Company by the client's name or domain, then Update Company with the numbers.
- 4Use the properties in lists, dashboards and your health score.
Map Pack loss opens a retention deal
geo_grid.movedAccount directors protecting renewals
- 1Catch Hook fed geo_grid.moved, filtered to Data Direction equals down.
- 2HubSpot: Find Company by {{location.business_name}}.
- 3HubSpot: Create Deal "{{data.keyword}}: lost {{data.points_lost}} grid points" in the retention pipeline, associated with the company, {{data.keyword_url}} in the description.
Every task done, on the client's timeline
task.completed- 1Relay fed task.completed.
- 2Find the company, then create a note: "Done: {{data.title}}" with {{data.task_url}}.
Setup
Connect HubSpot, step by step
- 1
Start a relay
For events, create a Zap with Webhooks by Zapier Catch Hook (or a Make or n8n webhook). For monthly health, start with Schedule by Zapier and API by Zapier, sending your SearchOps API key as a Bearer header.
- 2
Add the webhook in SearchOps
In SearchOps, open Developers, then Webhooks, and choose Add webhook. Paste the URL from the relay, tick the events you want and, for a client-specific workflow, pick that client's locations. Save, and copy the signing secret somewhere safe: it is shown once.
- 3
Send a test event
Back in SearchOps, press Send test on the endpoint. The test event has the same envelope as real events but a short sample body. To map review or scan fields, wait for a real event of that type or replay one from Deliveries, then use that as your sample.
- 4
Match the client company
Add HubSpot, Find Company, searching by the business name from location.business_name or by domain. Keeping company names in HubSpot in line with your SearchOps locations makes this reliable.
- 5
Write the record
Add HubSpot Update Company, Create Deal or Create Engagement (note), associated with the company found in the last step.
Field reference
The fields you'll map most
From the SearchOps webhook payload. Every event also carries type, id, created_at and the location's id and business name.
| Field | Use it for |
|---|---|
| type | Route by event: geo_grid.moved, scan.completed, profile.changed, task.created, task.planned, task.completed, review.created |
| location.business_name | Which client or branch it is about |
| data.direction | up or down: a grid move beyond normal re-run swing (geo_grid.moved) |
| data.points_gained / data.points_lost | How many grid points entered or left the top 3 (geo_grid.moved) |
| data.keyword / data.engine_label | The keyword and engine: Google Maps, Google Search or AI Mode |
| data.share / data.share_low / data.share_high | Share of answered grid points in the top 3 (or named, for AI Mode), with its likely range |
| data.keyword_url / data.scan_url | Open the keyword's grid history or the scan in SearchOps |
| data.field_label / data.before / data.after | What changed on the Business Profile (profile.changed) |
| data.changed_by | google or someone_else: who changed the profile |
| data.kind / data.severity | verification or duplicate, and how serious the change is |
| data.title / data.completed_at / data.task_url | A task and when it was done: your proof of work (task.created, task.planned, task.completed) |
What you need
- SearchOps Pro, Agency or Enterprise. Webhooks and the API are included; an owner or admin sets them up.
- A relay: Zapier (paid plan for webhooks), Make or n8n.
- HubSpot: custom company properties and deals work on any HubSpot plan the relay can connect to.
Steps checked against the vendor's own documentation on 12 October 2026. Tools change their menus often; if a step no longer matches, the help article has the latest.
Works well alongside
FAQ
SearchOps and HubSpot
Can SearchOps numbers feed a HubSpot health score?
Yes. Write them to custom company properties monthly through Zapier, Make or n8n, and HubSpot can use them in lists, reports and scoring like any other property.
Why not HubSpot's own webhook trigger?
It needs a Professional or Enterprise plan and only enrols records that already match a property you send, so it can't look a company up by name. A relay finds the company and updates it reliably.
Can I use Make or n8n instead of Zapier?
Yes. Both connect to HubSpot, and both can call HubSpot's API directly with a private app token if you prefer.