SearchOps + Slack
Start each week with every location's results in Slack, celebrate real Map Pack wins in #wins, and keep clients in the loop in shared channels.
Built in, SearchOps posts a Monday digest to Slack (each location's week with its Business Profile results and the tasks done) and high-priority tasks as they land. Through Zapier, Make or n8n you can go further: real Map Pack gains in #wins for sales and case studies, weekly grid results in a client's shared channel, and Google's edits to a listing in #ops.
The week, without opening a dashboard
"Your week in SearchOps" every Monday: calls, clicks and directions per location beside the tasks done.
A #wins channel that feeds sales
Only confirmed Map Pack gains post, with the keyword and points won: material for case studies and pitches.
Clients see the work
Weekly grid results post in the client's Slack Connect channel, so they watch progress happen.
Google's edits caught
When Google changes a client's listing, #ops gets the before and after.
Recipes
What agencies build with Slack
Monday results digest (built in)
Built inEvery team using Tasks
- 1Create a Slack incoming webhook for the channel.
- 2In SearchOps, Tasks, Connect: paste it and save. A test message arrives.
- 3Every Monday: each location's week with its Business Profile results and the tasks done. High-priority tasks post as they are created.
#wins: confirmed Map Pack gains
geo_grid.movedAgencies that sell on results
- 1Relay fed geo_grid.moved, filtered to data.direction equals up.
- 2Slack: ":trophy: {{location.business_name}}: {{data.keyword}} on {{data.engine_label}} won {{data.points_gained}} grid points. {{data.keyword_url}}".
- 3Sales pin the best ones for case studies.
Weekly grid results in the client's shared channel
scan.completedAgencies using Slack Connect with clients
- 1Relay fed scan.completed, filtered to data.scheduled equals true and routed by location.
- 2Slack message: "{{data.keyword}} on {{data.engine_label}}: {{data.points_in_top_3_or_named}} of {{data.points_answered}} points in the top 3 this week." with {{data.scan_url}}.
Google edited a listing: #ops
profile.changed- 1Relay fed profile.changed, filtered to data.severity equals high.
- 2Slack: "{{location.business_name}}: {{data.field_label}} changed from {{data.before}} to {{data.after}} (by {{data.changed_by}}). {{data.profile_url}}".
Setup
Connect Slack, step by step
- 1
Built in: create a Slack incoming webhook
In Slack, create an app for your workspace, turn on Incoming Webhooks and add one for the channel you want. Copy its URL.
- 2
Built in: connect it in Tasks
In SearchOps, open Tasks and press Connect at the top of the board. Paste the URL into the Slack section and save: SearchOps posts a test message. The Monday digest and high-priority tasks now post there.
- 3
For everything else: start a relay
Create a Zap with Webhooks by Zapier Catch Hook, a Make Custom webhook, or an n8n Webhook node, and copy its URL. Don't paste a SearchOps webhook straight into Slack: Slack needs a message with a text field, and its Workflow Builder can't read our nested fields.
- 4
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.
- 5
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.
- 6
Add the Slack step
In Zapier use Slack, Send Channel Message; in Make or n8n use their Slack module. Build the message from the fields below and route by location for client channels.
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
- Built-in digest and task cards: any SearchOps plan with Tasks, and a Slack incoming webhook.
- Wins, grid results and Profile Guard posts: SearchOps Pro, Agency or Enterprise. Webhooks and the API are included; an owner or admin sets them up.
- A relay for those: Zapier (paid plan for webhooks), Make or n8n.
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 Slack
What does the built-in Slack integration send?
A weekly digest on Monday ("Your week in SearchOps": each location's week with its Business Profile results and the tasks done) and high-priority task cards as they are created, to one channel through an incoming webhook you create.
Can I paste a SearchOps webhook URL into Slack directly?
No. Slack incoming webhooks need a message with a text field, and Workflow Builder's webhook trigger only reads top-level fields, while ours are nested. Zapier, Make or n8n build the message for you.
Why only confirmed wins?
Grids wobble between runs. SearchOps sends geo_grid.moved only when a scan moves beyond that normal swing, so #wins never celebrates noise.