SearchOps + Microsoft Teams
Give every regional manager their branches' results in Teams, and let head office see the moment Google changes a listing.
Multi-location brands run on Microsoft 365. SearchOps reaches Teams through Zapier, Make or n8n, which turn our events and reports into clean channel posts: each region's branches every Monday, confirmed Map Pack moves for the branches that slipped, and Profile Guard changes for the people who own the listings. The old Office 365 incoming webhook connector stopped working in May 2026, so this is the route to use now.
Every region, every Monday
Each regional channel gets its branches' calls, website clicks and direction requests against last week.
Slipping branches named
A confirmed Map Pack loss posts in the region's channel with the keyword and grid points lost.
Head office sees listing edits
When Google changes a branch's hours, name or category, the brand team sees the before and after.
Recipes
What agencies build with Microsoft Teams
Monday branch results per region
GET /locations, /weekMulti-location brands with regional managers
- 1Weekly schedule in Make or n8n; GET /api/v1/locations?q= with the region's town names, or keep a list of ids per region.
- 2GET /locations/{id}/week for each branch.
- 3Post one Teams message per region: each branch's calls, website clicks and directions this week against last, biggest fall first.
Branch slipped in the Map Pack
geo_grid.moved- 1Relay fed geo_grid.moved, filtered to data.direction equals down, routed by location to the region.
- 2Teams: "{{location.business_name}}: {{data.keyword}} lost {{data.points_lost}} grid points on {{data.engine_label}}." with {{data.keyword_url}}.
Listing changed by Google: head office
profile.changed- 1Relay fed profile.changed, filtered to data.severity equals high.
- 2Teams: "{{location.business_name}}: {{data.field_label}} changed from {{data.before}} to {{data.after}} (by {{data.changed_by}})."
Setup
Connect Microsoft Teams, step by step
- 1
Start a relay
Create a Zap with Webhooks by Zapier Catch Hook, a Make scenario with a Custom webhook, or an n8n Webhook node. For weekly reports, start with a schedule and an HTTP step calling the SearchOps API with your 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
Add the Teams step
Add the Microsoft Teams action (in Zapier, Send Channel Message), sign in with a Microsoft 365 account that can post to the channel, and build the message from the fields below.
- 5
Make it survive staff changes
Teams posts as the account that connected it. Use a shared or team-owned account, or add a co-owner, so posts keep coming when someone leaves.
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.
- A Microsoft 365 account that can post to the channels.
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 Microsoft Teams
Can I use a Teams incoming webhook URL?
The old Office 365 incoming webhook connector was retired in May 2026 and its URLs no longer work. Teams' replacement, the Workflows app, expects its own card format, so send SearchOps events through Zapier, Make or n8n, which build the message.
Can each region get its own channel?
Yes. Route on location.business_name in the relay, or create one SearchOps webhook per region filtered to its branches.
Does it need a premium Microsoft licence?
No. Posting to a channel through Zapier, Make or n8n uses a normal Microsoft 365 account.