Measures and data sources
Connect a source once, choose the right property for each website, then add the measures your reports are built from. Anything without data says so.
The idea
A measure is a number you report on, such as organic clicks. It either comes from a connected data source or is entered by hand. Reports are built from measures, so getting these right once makes every monthly report faster.
SEO Ops follows one rule: a figure is either a real value from the provider or it says Unavailable, with the reason. It is never a zero and never a guess. A good value is never replaced by a failed refresh, and the current month is labelled “month to date” wherever it appears.
What each source provides
| Source | Figures it can fetch |
|---|---|
| Google Search Console | Clicks, impressions, click-through rate, average position |
| Google Analytics 4 | Sessions, organic sessions, users, new users, key events, engagement rate |
| Google Business Profile | Profile views, calls, website clicks, direction requests (Google must approve Business Profile API access) |
| Semrush | Organic keywords, traffic, traffic value |
| Ahrefs | Domain Rating, referring domains, backlinks, organic keywords, traffic |
These sources are Premium features. On the Free plan you can still add measures and enter their values by hand. See Free vs Premium.
Set it up
- Connect the source once under Settings › Integrations. For Google sources, create OAuth credentials in your Google Cloud project and enter them. For Semrush and Ahrefs, paste an API key. Each connection has a test button. Step-by-step guides: Search Console, GA4, Business Profile, Semrush and Ahrefs.
- Choose the property for each website. On the client page, open the website’s Data sources and pick the Search Console property, GA4 property, Business Profile location, Semrush database or Ahrefs target. A picker lists what the connected Google account can see.
- Add measures. Choose a metric from the source’s own list, or use Add standard measures to add the usual set for every connected source in one go.
- Refresh. Use Refresh data for the client, or Refresh on a single measure. A daily job also refreshes every client automatically.
When a measure says Unavailable
That is deliberate. The text tells you why: the source is not connected, the website has no property chosen, the provider returned an error, or Google has not approved access yet. Temporary failures store nothing and are retried. Fix the cause, refresh, and the real figure appears.
Measures you enter by hand
Some numbers have no source, such as open crawl issues or map-pack rankings you check yourself. Add them as measures and update them when you report. Playbooks suggest a sensible set; see Using playbooks.
How measures reach reports
When you create a report, SEO Ops pulls in the measures for the period alongside the work completed from your tasks and campaigns. See Generating reports.
Common questions
Can I check what was fetched?
Yes. On a site you can run wp seoops sync <client_id> with WP-CLI to see, for each measure, what was fetched and why anything was not.
Are my API keys safe?
Keys are stored encrypted and are never returned to the screen or written to logs. The encryption key is created automatically the first time it is needed.
Does anything leave my site without my asking?
Data is fetched only from the sources you connect. Nothing is sent to an AI provider unless someone presses an AI button.