Local SEO auditing, grounded in canonical Business Profile data. 검색 가시성 진단 · 가설이 아닌 사실 기반.
OurSEO Agent is an internal command-line tool for digital marketing consultants. It crawls a merchant's website, pulls their canonical Google Business Profile record via the official APIs, and reports the discrepancies — NAP mismatches, missing schema, abandoned review streams, performance regressions.
What OurSEO Agent does
Built for the SEO consultant working with multiple client merchants. Every audit is grounded in two sources of truth: the live website (crawled fresh) and the canonical Business Profile record (pulled live from Google's APIs). The agent compares them and reports what's drifting.
Local SEO audit
NAP consistency check, LocalBusiness JSON-LD presence, GBP backlink check, contact-page audit — all cross-referenced against the merchant's canonical Business Profile fields.
Performance reports
Daily impressions, mobile-vs-desktop split, website clicks, direction requests, call clicks. Aggregated into per-client CSV / Excel / Notion deliverables.
Review monitoring
Per-property review velocity, average rating, reply rate. Surfaces chain-wide discipline gaps that no single-property tool sees.
Multi-client agency workflow
Each merchant relationship is a named profile with its own OAuth refresh token. Independent rate limits, independent storage paths, clean off-boarding.
Why we request Google Business Profile access
OurSEO Agent requests exactly one OAuth scope, only when a client engagement requires it:
| Scope | Purpose |
|---|---|
https://www.googleapis.com/auth/business.manage |
Read-only access to Business Profile accounts, locations, daily performance metrics, and reviews. Used to generate Local SEO audits and performance reports for the merchant who granted consent. |
Read-first by design. The current release of OurSEO Agent does not edit Business Profile listings, post Updates, or reply to reviews. Any future expansion of the agent's write surface will be announced in a privacy-policy update before it ships, and existing users will be re-prompted for consent if new scopes are required.
We request no other Google scopes — no Gmail, no Drive, no Calendar, no YouTube, no Photos.
How it works
- The consultant runs
our collect gbp auth start --profile <client>on their workstation, which prints a Google consent URL. - The merchant clicks the URL, signs in with their Business Profile master account, and grants the
business.managescope. - Google returns an authorization code; the consultant exchanges it for a refresh token via
our collect gbp auth callback. The token is stored locally at~/.config/secrets/ourseo/tokens/<profile>.jsonwith file mode0600. - Routine audits run from the same workstation:
our audit local <url> --gbp-profile <client>. Results are written to a per-client directory the consultant chooses. - The merchant can revoke access at any time at myaccount.google.com/permissions.
There is no OurSEO Agent backend. Tokens never leave the consultant's workstation. We do not operate a cloud service, do not collect telemetry, do not have a hosted database. The agent is a local CLI tool; the only network calls it makes are to Google's official API endpoints over TLS.
What the consultant sees
OAuth consent flow
$ our collect gbp auth start --profile shilla
Open this URL and grant Google Business Profile access:
https://accounts.google.com/o/oauth2/auth?response_type=code
&client_id=824058888552-…apps.googleusercontent.com
&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth2callback
&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbusiness.manage
&state=shilla&code_challenge=…&code_challenge_method=S256
&access_type=offline&prompt=consent
After approval, run:
our collect gbp auth callback --profile shilla --code AUTH_CODE
Local SEO audit output
$ our audit local https://www.example-merchant.com/ --gbp-profile example
Running local audit on https://www.example-merchant.com/
Loaded GBP evidence from locations/1234… (example)
Local Audit Results
Issues Found: 3
MISSING_GBP_LINK: No Google Business Profile link found.
MISSING_LOCAL_SCHEMA: No LocalBusiness schema markup found.
MISSING_CONTACT_PAGE: No contact page found.
Recommendations:
• Use Google Business Profile as the canonical source for NAP and hours.
• Add LocalBusiness schema markup to your homepage and contact page.
• Create a dedicated contact page with full address and phone.
Performance metrics (last 30 days)
$ our collect gbp performance --profile example --location locations/1234… \
--start 2026-03-28 --end 2026-04-27 --metric WEBSITE_CLICKS
WEBSITE_CLICKS total: 2,455 daily avg: 79
2026-04-10 ████████████████████████████████ 128 (peak)
2026-04-02 ██████████████████████████ 105
2026-04-16 █████████████████████████████ 104
2026-04-13 █████████████████████████ 101
… 26 more days …
Chain-wide review summary
$ our collect gbp reviews --profile example --account accounts/… \
--location locations/… --page-size 50
Total reviews: 7,477 Average rating: 4.6 ★
Reply rate (last 50): 0.0 %
Most recent: 2026-04-26T13:18:24Z
(Surface a chain-wide reply-discipline gap before the
client's competitor does — that's the audit value.)
Real screenshots from a live audit run on 2026-04-27. Merchant identifiers redacted.
Privacy at a glance
OurSEO Agent runs entirely on the consultant's workstation. There is no hosted backend,
no analytics, no telemetry. The agent requests one OAuth scope —
business.manage — and uses it read-only to generate Local SEO audits and
performance reports for the merchant who granted consent. OAuth refresh tokens are
stored locally at file mode 0600 and are never transmitted off the workstation.
Use of Google user data adheres to the Google API Services User Data Policy, including the Limited Use requirements. Merchants can revoke access any time at myaccount.google.com/permissions.