SearchOps + GoHighLevel
Let HighLevel email every client the results you produced, flag accounts slipping in the Map Pack, and open the upsell when a rival moves in.
Your clients live in HighLevel sub-accounts; their local search lives in SearchOps. Connect the two and your workflows can act on things only SearchOps knows: a confirmed Map Pack loss in part of a client's area, Google quietly editing their listing, or a week of calls and direction requests your work produced. HighLevel's Inbound Webhook trigger picks up our events, and its Scheduler can pull any SearchOps report on a timetable.
Clients see results without asking
Every Monday HighLevel emails each client their calls, website clicks and direction requests beside the work you finished that week.
At-risk accounts flagged early
When a client loses Map Pack ground beyond the normal swing, an opportunity opens in your Retention pipeline before the client notices.
Upsells that sell themselves
A confirmed loss on a keyword is the moment to pitch a wider grid, more posts or a new service page, with the evidence attached.
You spot Google's edits first
When Google changes a client's hours, category or name, the account manager hears about it first, and the client hears it from you.
AI visibility in the client's numbers
Monthly, pull how often ChatGPT names the client and drop it into their report email: a line competitors can't show.
One snapshot, every client
Build each workflow once with Custom Values, ship it in your snapshot, and point each sub-account's webhook at its own client.
Recipes
What agencies build with GoHighLevel
Monday proof-of-results email to every client
GET /locations/{id}/weekAgencies that want clients to see value every week
- 1Trigger: Scheduler, weekly on Monday morning.
- 2Custom Webhook: GET https://searchops.co/api/v1/locations/{id}/week (the location id as a Custom Value), Authentication Bearer Token with your SearchOps API key, Save response ticked.
- 3Find Contact for the client owner, then Send Email using the saved response: this week's calls, website clicks and direction requests against last week, and the tasks you completed.
- 4Test the contact and saved-response steps in one sub-account first, then add the workflow to your snapshot.
Map Pack loss opens a Retention opportunity
geo_grid.movedAccount managers protecting renewals
- 1Trigger: Inbound Webhook fed geo_grid.moved for the client's locations; delete the default contact step.
- 2If/Else: data.direction equals down.
- 3Find Contact for the client owner, then Create Opportunity in a Retention pipeline: "{{data.keyword}}: lost {{data.points_lost}} grid points on {{data.engine_label}}", with {{data.keyword_url}} in the notes.
- 4Add Task for the account manager: "Review the grid and the rival now on top, call the client this week".
Turn a loss into an upsell proposal
geo_grid.movedAgencies that grow accounts, not just keep them
- 1Same trigger and If/Else as above, in an Upsell pipeline instead.
- 2Custom Webhook: GET /api/v1/locations/{id}/geo-grid/insights to fetch why the top three win (distance, categories, reviews, listing gaps).
- 3Create Opportunity "{{data.keyword}} recovery" with the insight in the notes, so the proposal (new category, service page, review drive) writes itself.
Google edited the listing: tell the client before they find it
profile.changedAgencies that manage profiles for clients
- 1Trigger: Inbound Webhook fed profile.changed; If/Else on data.severity equals high.
- 2Add Task: "Check {{data.field_label}} for {{location.business_name}}: {{data.before}} became {{data.after}} ({{data.changed_by}})".
- 3Once checked, the account manager messages the client: we spotted it, here's what we've done. Clients remember who caught it.
Setup
Connect GoHighLevel, step by step
- 1
Create the workflow in HighLevel
In the client's sub-account, open Automation, then Workflows, and create a workflow. For event workflows choose Add New Trigger, then Inbound Webhook, and copy its URL. For scheduled reports choose the Scheduler trigger instead.
- 2
Add the webhook in SearchOps
In SearchOps, open Developers, then Webhooks, and choose Add webhook. Paste the URL from HighLevel, 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
Pick the sample in HighLevel
In the Inbound Webhook trigger, choose the request under Mapping Reference and save. Its fields, such as location.business_name and data.points_lost, now appear in the Custom Value picker for every later step. Pick it again whenever you add a new event type.
- 5
Remove the default contact step
HighLevel adds a Create Update Contact action after the trigger, which needs an email or phone. SearchOps events have neither, so delete it. Where a step needs the client owner, add Find Contact for them first.
- 6
Call the SearchOps API with Custom Webhook
For reports, add a Custom Webhook action: method GET, a URL under https://searchops.co/api/v1, Authentication Bearer Token with your SearchOps API key (Developers, API & MCP Credentials), and tick Save response from this Webhook so later steps can use the numbers.
- 7
Publish and add it to your snapshot
Use Custom Values (location id, client owner, pipeline) so the same workflow works in every sub-account. Publish, add it to your snapshot, and paste each sub-account's own Inbound Webhook URL into a SearchOps webhook filtered to that client's locations.
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.
- HighLevel: Inbound Webhook and Custom Webhook are workflow premium features, about $0.01 per run after 100 free runs per sub-account, or a Workflow Pro bundle. The agency switches them on under Settings, Company, Workflow Premium Features.
- One SearchOps webhook per client sub-account, filtered to that client's locations. You can have up to 100.
- Grid moves need scheduled Geo-Grid Scans on the keywords that matter to the client.
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 GoHighLevel
Can HighLevel send clients their results automatically?
Yes. A Scheduler workflow calls the SearchOps API with a Custom Webhook, saves the response and emails the client owner their week: calls, website clicks, direction requests and the tasks you finished. Test it in one sub-account, then ship it in your snapshot.
What counts as a real Map Pack move?
SearchOps compares each scan with the last on the same grid and keyword, and only sends geo_grid.moved when the change is bigger than the normal swing between two runs. That keeps your Retention and Upsell pipelines free of noise.
Is there a SearchOps app in the HighLevel Marketplace?
Not yet. Today you connect with the Inbound Webhook trigger and the Custom Webhook action, a few minutes per sub-account. A Marketplace app that removes the copy and paste is on our list.
Does it cost anything in HighLevel?
Inbound Webhook and Custom Webhook are premium workflow features: about a cent per run after 100 free runs per sub-account, or a monthly Workflow Pro bundle. A weekly report plus a handful of grid events costs pennies a month per client.
Can I put these workflows in a snapshot?
Yes. Build them with Custom Values, add them to your snapshot, and after loading it into a sub-account paste that sub-account's own Inbound Webhook URL into SearchOps.