REST API · Pro and above

Your local search data, in your own tools

Pull Business Profile results, geo-grid scans, LLM Visibility, reviews, Search Console, Google Analytics and your Tasks board into client dashboards, sheets, warehouses and automations. 29 read-only endpoints, signed webhooks, one key.

curl "https://searchops.co/api/v1/locations/{id}/profile/performance?months=12" \
  -H "Authorization: Bearer lp_live_xxxxxxxx"
200application/json
{
  "data": {
    "reported_through": "2026-10-08",
    "months": 12,
    "current": {
      "days_reported": 365,
      "totals": {
        "calls": 412,
        "website_clicks": 1310,
        "direction_requests": 655,
        "bookings": null,
        "action_rate_pct": 4.9
      }
    },
    "comparison": {
      "comparable": true,
      "change_pct": { "calls": 8.4, "actions": 13.1 }
    },
    "series": [ ... ],
    "drops": [ ... ]
  }
}

What you can pull

Everything SearchOps measures, as JSON

Grouped the way you think about a client. Every path sits under https://searchops.co/api/v1 and every one is a GET.

Locations

  • GET/locationsEvery location, found by name, address or any town it serves
  • GET/locations/{id}One location: storefront, service area or both, and the towns it serves
  • GET/locations/{id}/summaryEvery headline for a location in one call
  • GET/locations/{id}/keywordsTracked keywords, with Search Console demand

Business Profile

  • GET/locations/{id}/weekThe last 7 days against the 7 before
  • GET/locations/{id}/profile/performanceCalls, clicks, directions and views, up to 18 months
  • GET/locations/{id}/profile/search-termsWhat people searched to find the profile
  • GET/locations/{id}/profile/resultsResults since your baseline, and action rate
  • GET/locations/{id}/postsGoogle posts and posting cadence

Geo-grids

  • GET/scansMap Pack, Google Search and AI Mode scans
  • GET/scans/{id}The result at every grid point
  • GET/scans/{id}/answersAI Overview and AI Mode answers for a scan
  • GET/locations/{id}/keywords/{keywordId}/grid-historyTop-3 share over time, with real moves flagged
  • GET/locations/{id}/geo-grid/insightsWhy you rank where you do
  • GET/locations/{id}/geo-grid/answersLatest AI answers for a keyword

LLM Visibility

  • GET/locations/{id}/ai-visibilityVisibility rate and share of voice per engine
  • GET/locations/{id}/ai-visibility/insightsWho is named instead, and ChatGPT's searches

Reviews and competitors

  • GET/locations/{id}/reviewsRatings, recent reviews and which need a reply
  • GET/locations/{id}/competitorsEvery rival seen, with share of voice

Search Console

  • GET/search-console/sitesConnected sites and their locations
  • GET/search-console/sites/{id}/search-analyticsClicks, impressions, CTR and position
  • GET/search-console/sites/{id}/insightsGainers, losers and near-page-one searches

Google Analytics

  • GET/analytics/propertiesConnected properties and their locations
  • GET/analytics/properties/{id}/reportSessions, channels, landing pages, key events
  • GET/locations/{id}/analytics/ai-referralsVisits from ChatGPT, Gemini and others

Tasks and reports

  • GET/tasksThe Tasks board, by location and status
  • GET/tasks/{id}One task, with weekly progress
  • GET/reportsSaved reports
  • GET/reports/{id}One report and its blocks

What teams build

Put the numbers where your clients already look

The API is how SearchOps data reaches the rest of your stack. A few of the things agencies use it for:

Client dashboards

Feed Looker Studio, Power BI or your own portal with profile results, Map Pack coverage and reviews, refreshed on your schedule.

Google Sheets

A short Apps Script pulls every location's week into a sheet each Monday, ready for the account team.

Your data warehouse

Land monthly performance, grid history and Search Console rows in BigQuery or Snowflake beside the rest of your client data.

Automations

Trigger Zapier, Make, n8n or GoHighLevel from a webhook the moment a bad review lands, and pull the detail from the API.

Your own agents

Give an internal bot or agent the same data. The API is described in OpenAPI, so most frameworks can read it directly.

Multi-location roll-ups

Loop through hundreds of branches and rank them by calls, rating or Map Pack coverage for a head-office view.

Webhooks

Don't poll. Get told the moment something happens.

Webhooks send a signed JSON event to any URL you choose when a review lands, a scan finishes or a profile changes. Point them at Zapier, Make, n8n or GoHighLevel and route each one to Slack, email, your CRM or a client's inbox.

  • A new review arrives
  • A 1 or 2-star review arrives
  • A geo-grid scan finishes
  • A real move on the grid, beyond normal swing
  • Someone else changes a Business Profile
  • A task is added, or marked done (task.completed)
Works withZapierMaken8nGoHighLevelYour own server
Signed

Every request is signed with the Standard Webhooks scheme, so you can prove it came from SearchOps.

Retried

Failed deliveries are retried for about a day, then logged. Replay any delivery from the log.

Testable

Send a test event from Developers before you rely on it, and see every attempt with its response.

Set up webhooks
What your endpoint receivesreview.negative
POST https://hooks.example.com/searchops
webhook-id: evt_3m9QxR2bVt0aYw1Lk8sZpA
webhook-timestamp: 1760261412
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=

{
  "type": "review.negative",
  "created_at": "2026-10-12T09:30:12.418Z",
  "location": { "business_name": "Northgate Dental" },
  "data": {
    "rating": 2,
    "text_excerpt": "Waited 40 minutes past my appointment...",
    "reviewer_name": "Jamie R.",
    "has_reply": false,
    "reply_url": "https://searchops.co/dashboard/gbp/reply-inbox?..."
  }
}

Built for developers

Predictable, documented and safe to share

OpenAPI 3.1
A full description at /api/v1/openapi.json. Generate a typed client instead of writing one.
Simple keys
Create and revoke keys under Developers. Send one as a Bearer token; the full key shows once.
120 requests a minute
Per key, with standard RateLimit headers so your code knows when to slow down.
Honest data
Every response is { data }. A missing reading is null, never a fake zero, and errors say what to do next.
Warned before it changes
An endpoint being retired sends Deprecation and Sunset headers, so nothing disappears without notice.
Read-only, account-scoped
Keys see one account and change nothing. No scans run, no credits spent.
Rather ask than code?
The same data, in ChatGPT and Claude, through the SearchOps MCP server.
See the MCP server

FAQ

Frequently asked questions

What can I read?

Your locations, Business Profile results (the last week and up to 18 months of history), the searches people used to find each profile, posts, geo-grid scans on Google Maps, Google Search and AI Mode with their history and insights, LLM Visibility for ChatGPT and Gemini, reviews, competitors, Search Console, Google Analytics, your Tasks board and saved reports.

How do I authenticate?

Create an API key under Developers in SearchOps and send it as a Bearer token. Keys are scoped to your account and can be revoked at any time.

Are there rate limits?

Each key can make 120 requests a minute. Responses carry standard RateLimit headers.

Can I write data or trigger scans?

No. The API is read-only: it returns your data but never starts scans, spends credits or changes your account. Webhooks are how SearchOps tells your systems when something changes.

Which webhook events are there?

A new review, a 1 or 2-star review, a finished geo-grid scan, a real move on the grid, a change to a Business Profile that SearchOps did not make, and tasks added or marked done. Each is signed, retried for about a day if your endpoint fails, and kept in a delivery log you can replay from.

Is there a Looker Studio or Google Sheets connector?

Not a packaged one yet. Most teams use a short Apps Script or a community REST connector to pull from the API on a schedule.

How is this different from the MCP server?

Same data, different use. The API is for code: dashboards, warehouses and automations. The MCP server is for chatting with your data in ChatGPT, Claude and other assistants.

What happened to the rankings endpoint?

It is deprecated, because the Google rank tracker behind it has been retired. It still answers with Deprecation and Sunset headers. For Google results, read your geo-grid scans instead.

Which plans include it?

API access is included on Pro, Agency and Enterprise.

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.