Directory / plugin

TurtleReport – SEO Client Monitoring & Reporting

v1.5.0 · by Abul Khoyer

Monitor all your SEO clients from one dashboard. See Search Console and GA4 changes, what needs attention, and automate branded client reports.

About this plugin

All Your SEO Clients. One Clear View.

TurtleReport helps SEO agencies monitor clients, spot important changes, and automate reports from one dashboard.

It connects Google Search Console, Google Analytics 4 (GA4), and optionally Google Business Profile, so you can see what’s happening without checking multiple tools.

Client Monitor: See What Needs Attention

Get a clear overview of all your clients in one place.

  • See which clients are performing well and which need attention.
  • Detect important drops in traffic, rankings, pages, and leads.
  • Understand what changed, with real numbers and suggested next steps.
  • Prioritize important pages and conversion events.
  • Mark issues as handled, snooze them, or share them with your team through Slack.
  • Get optional weekly summaries of clients needing attention.

SEO Reports: Understand What Happened

Turn Google data into clear, organized reports.

  • Search Console: Clicks, impressions, rankings, keyword changes, and page performance.
  • GA4: Website traffic, engagement, leads, and conversions.
  • AI traffic: See visits from AI assistants reported in GA4.
  • Google Business Profile: Track calls, website clicks, directions, and profile views.
  • Comparisons: Compare different periods, search terms, page types, and custom segments.

Choose which metrics and sections appear in each client’s report.

AI Advisor: Ask Questions About Your Data

Instead of manually reviewing every chart, ask questions such as:

  • Why did this client’s traffic drop?
  • Which pages need attention?
  • What improved this month?
  • What should we investigate next?

AI Advisor uses connected reporting data to explain changes and suggest next steps. It supports your own OpenAI, Claude, Gemini, or Grok API key.

AI Advisor is optional, disabled by default, and does not make changes to your websites.

Automated Client Reports

Spend less time preparing reports manually.

  • Create branded reports with your agency logo and colors.
  • Automatically email PDF reports on your chosen schedule.
  • Review reports before sending when needed.
  • Track email delivery status and retry failed sends.
  • Give clients secure access to their own reports.

Your Data, Your WordPress Website

TurtleReport runs on your own WordPress installation.

Google reporting data is fetched directly from your server. Sign in with Google in a few clicks through TurtlePlugins Connect, or use your own Google Cloud credentials. Access to client reports is controlled by WordPress permissions, and credentials are stored encrypted.

No tracking scripts are added to your public website.

Optional AI and Slack features send relevant data to their selected services only when configured and used.

Useful Links

External services

This plugin connects to Google’s APIs to read reporting data. It only contacts Google after an administrator adds a connection, and only to read data for the sites and sections they set up. Google data is requested from your server and is never sent to the plugin author. Connections made with “Sign in with Google” use the plugin author’s sign-in service, described first below; connections with your own OAuth client or a service-account key don’t.

  • TurtlePlugins Connect (connect.turtleplugins.com), run by the plugin author – used only for connections made with “Sign in with Google” on the Connections screen. It holds TurtleReport’s Google OAuth client, so you don’t need your own Google Cloud project. When an administrator signs in, their browser visits it with this site’s TurtleReport sign-in address, a one-time state value and a PKCE challenge; it shows which website is asking, then passes Google’s one-time authorisation code back to this site. This site’s server then sends it the code and the PKCE verifier to receive the Google tokens, and later sends the connection’s refresh token whenever it needs a new access token (about once an hour while TurtleReport reads data). It adds the OAuth client secret, forwards the request to Google and returns Google’s answer. It stores and logs none of these values and receives no Google report data. The TurtlePlugins Privacy Policy and Terms of Service apply.

  • Google OAuth 2.0 (accounts.google.com, oauth2.googleapis.com) – signs in to Google, refreshes and revokes access, and exchanges service-account keys for access tokens. Sent: your OAuth client ID and secret or a signed service-account assertion, and authorisation codes or tokens. Revoking a “Sign in with Google” connection goes straight to Google too.

  • Google Search Console API (www.googleapis.com/webmasters/v3) – lists your properties and reads search performance. Sent: the property and date range.
  • Google Analytics Data API and Admin API (analyticsdata.googleapis.com, analyticsadmin.googleapis.com) – lists GA4 properties and reads event, traffic and channel reports. Sent: the property, date range, metrics and filters.
  • Google Business Profile APIs (mybusinessaccountmanagement.googleapis.com, mybusinessbusinessinformation.googleapis.com, businessprofileperformance.googleapis.com) – lists locations and reads daily performance metrics. Sent: the location and date range. Only used if you turn Business Profile on.

  • Slack incoming webhooks (hooks.slack.com) – only if an administrator saves a Slack webhook in Settings Client Monitor, and only when someone presses “Send to Slack” or “Send a test message”. Sent: the client’s name, the issue’s title, the affected address, its key numbers, what the data suggests, the recommended checks, the optional note, the name of the person sharing it and a link to the report in your WordPress admin. Slack’s Terms of Service and Privacy Policy apply.

  • AI providers – configured by an administrator in Settings AI Advisor with a provider and that provider’s API key. Switching the Advisor on, or changing provider, requires an administrator to confirm that client data will be sent to that provider; the confirmation is recorded with their name and the date. Client data is sent only while the Advisor is switched on and a manager asks a question. “Test the connection” sends a generic connection-test prompt, and “Load my models” requests model names; these setup actions can run while the Advisor is switched off. Each request goes to the chosen provider:

    Sent: your API key (as an authorisation header), the question and earlier turns of that conversation, and for the clients it’s about their name, website, Search Console, GA4 and Business Profile numbers for the dates asked, the pages and keywords that changed most, and their Client Monitor issues. WordPress account names, report-recipient email addresses and Google credentials are not included. Search queries, page addresses and other client report content may themselves contain personal data; review your client data and the provider’s terms before enabling the Advisor. Listing models sends only the API key.

Background jobs (daily connection checks, overnight report loading, the Client Monitor’s daily check and scheduled emails) make the same kinds of Google requests from your server. Scheduled emails are sent through your site’s own mail setup (wp_mail) to the addresses an administrator enters.

Google’s Terms of Service, Privacy Policy and API Services User Data Policy apply.

Third-party libraries

Bundled in assets/vendor/ (all MIT licensed, licences in assets/vendor/licenses/):

  • Chart.js 4.5.1 – source/build tools: https://github.com/chartjs/Chart.js/tree/v4.5.1 (package.json and rollup.config.js).
  • jsPDF 4.2.1 – source/build tools: https://github.com/parallax/jsPDF/tree/v4.2.1 (package.json and rollup.config.js).
  • html2canvas 1.4.1 – source/build tools: https://github.com/niklasvh/html2canvas/tree/v1.4.1 (package.json and rollup.config.js).

These vendor JavaScript files correspond to the versions’ official npm distributions. Chart.js and jsPDF omit only the trailing source-map comment and trailing blank lines; their executable content is unchanged. html2canvas matches its distribution byte for byte. Their build commands and dependency versions are provided in each pinned repository’s package.json.

PHP class loading uses Composer’s generated production autoloader. Its MIT licence is included at vendor/composer/LICENSE; Composer source is available at https://github.com/composer/composer . The plugin does not include its development Composer dependencies.

The jsPDF and html2canvas files load only when someone downloads a PDF.

Font in assets/fonts/: Inter 4.001 (variable, Latin and Latin Extended), recorded source commit https://github.com/rsms/inter/tree/66647c0bbbe41a850d79d9c76fb13add3378940f – SIL Open Font License 1.1, licence in assets/fonts/OFL.txt. The pinned repository includes font source and build tools. It is served from your own site; no font is loaded from Google. assets/fonts/pdf/ holds the static Regular and SemiBold Inter files used to draw emailed PDFs on the server (same licence, assets/fonts/pdf/OFL.txt).

The server-side PDF is written by the plugin’s own code (src/Pdf/); no PDF library or external service is used.

Each report can be emailed to up to 50 unique addresses. Viewer recipients are considered first, then individually chosen users, then typed addresses; duplicate addresses count once. This mail-processing limit does not restrict report access or grant revocation. Credits on PDFs and emails are off unless you explicitly choose to show them in Settings.

Plugin tags