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"{
"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
review.created - A 1 or 2-star review arrives
review.negative - A geo-grid scan finishes
scan.completed - A real move on the grid, beyond normal swing
geo_grid.moved - Someone else changes a Business Profile
profile.changed - A task is added, or marked done (task.completed)
task.created
Every request is signed with the Standard Webhooks scheme, so you can prove it came from SearchOps.
Failed deliveries are retried for about a day, then logged. Replay any delivery from the log.
Send a test event from Developers before you rely on it, and see every attempt with its response.
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
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.