SearchOps

SearchOps + Microsoft Teams

Give every regional manager their branches' results in Teams, and let head office see the moment Google changes a listing.

WebhooksVia Zapier, Make or n8n

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, /week

Multi-location brands with regional managers

Weekly schedule
Iterate branches
SearchOps API
/locations/{id}/week
Regional channel
One post per region
  1. 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.
  2. 2GET /locations/{id}/week for each branch.
  3. 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
Confirmed loss
geo_grid.moved, down
Route by branch
Or Make, n8n
Regional channel
Keyword + points
  1. 1Relay fed geo_grid.moved, filtered to data.direction equals down, routed by location to the region.
  2. 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
Profile Guard
profile.changed
Filter
severity = high
Brand team
Before and after
  1. 1Relay fed profile.changed, filtered to data.severity equals high.
  2. 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. 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. 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. 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. 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. 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.

FieldUse it for
typeRoute by event: geo_grid.moved, scan.completed, profile.changed, task.created, task.planned, task.completed, review.created
location.business_nameWhich client or branch it is about
data.directionup or down: a grid move beyond normal re-run swing (geo_grid.moved)
data.points_gained / data.points_lostHow many grid points entered or left the top 3 (geo_grid.moved)
data.keyword / data.engine_labelThe keyword and engine: Google Maps, Google Search or AI Mode
data.share / data.share_low / data.share_highShare of answered grid points in the top 3 (or named, for AI Mode), with its likely range
data.keyword_url / data.scan_urlOpen the keyword's grid history or the scan in SearchOps
data.field_label / data.before / data.afterWhat changed on the Business Profile (profile.changed)
data.changed_bygoogle or someone_else: who changed the profile
data.kind / data.severityverification or duplicate, and how serious the change is
data.title / data.completed_at / data.task_urlA 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.

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.

Start tracking your real rankings today

See where you actually rank on Google Maps, not where Google tells you. Pick the plan that fits and start tracking from day one.