Polling watches recently linked Google accounts until `sites_fetched_at` is stamped and SiteTeams exist.
Search analytics refresh is queued per usable site with a first-fetch spinner for empty cards.
Search and tag filters can collapse the grid into a clear-filters empty state before showing connect prompts.
Combined Metrics
Shown when a tag filter is active; mirrors the My Sites grouped-metrics card.GSC performance chart
Current solid, comparison dashed, annotations on hover, daily / weekly / monthly granularity.Branded vs Non-Branded Clicks
Driven by branded keyword settings.Query Counting
Position distribution histogram.When GA4 is missing, the app loads Analytics properties grouped by connected Google account email and dispatches a 420-day backfill after linking.
GA4 performance chart
Sessions, engagement rate, and key events with comparison tooltip.GSC sitemap status is cached hourly; fetch errors surface before URL coverage so daily sitemap processing issues are visible.
Index coverage history
Cumulative bucket counts by last inspection date; filtered to the table below.Pages
URL, clicks, impressions, position, coverage status, rich results, and inspection actions.| URL | Clicks | Impr. | Position | Status | Last crawl | Rich Results | Last Inspection | Actions |
|---|
Annotated performance
Chart notes are scoped to all pages, specific pages, or content groups.Branded Keywords
Add chips used by the global branded/non-branded filter.Topic Clusters
Rule-based query groups with preview and cached membership pivot.best ai tools · ai software companies · startup ideas 2026
Content Groups
Rule-based URL groups; supports contains, does not contain, and equals.Saving busts dashboard cache and recomputes content group URL pivots.
Google Accounts
Connect, revoke, reconnect, and refetch GSC sites.| Google Account | Name | Search Console | Analytics | Status | Connected | Actions |
|---|---|---|---|---|---|---|
| ari@example.com | Ari Cohen | Yes | Yes | Active | 2 weeks ago | |
| ops@example.com | Ops Account | Yes | No | Revoked | 1 month ago |
About Google Account Access
Read-only Search Console and Analytics scopes, plus Google permissions revoke path.Used for site discovery, GSC metrics, and URL Inspection.
Used for GA4 properties, sessions, engagement rate, and key events.
Local revoke marks the account revoked; Google-side access can be removed externally.
My Profile
Tenant-scoped account page at `/{tenant}/account`.Google sign-in
Login shortcut is separate from connected analytics accounts.Disconnecting keeps the underlying GoogleAccount row so sites connected through it keep working.
| Name | Role | Sites | Joined | Actions | |
|---|---|---|---|---|---|
| Ari Cohen | ari@example.com | Owner | All | Mar 27 | |
| Maya Lee | maya@example.com | Admin | All | Apr 02 | |
| Jon Bell | jon@example.com | Contributor | 3 | Apr 18 | |
| Priya Shah | priya@example.com | Viewer | 2 | May 01 |
Permission matrix
Role boundaries from `UserRole` and `Permission` enums.| Role | Site access | Data | Annotations | Settings | Admin guardrails |
|---|---|---|---|---|---|
| Owner | All sites | View/export | Create/edit/delete | Manage | Cannot be demoted/removed |
| Admin | All sites | View/export | Create/edit/delete | Manage | Owner-only admin changes |
| Contributor | Scoped | View/export | Create/edit | View | No billing/team admin |
| Viewer | Scoped | View only | View only | View | Read-only |
Invitations
Pending invite tokens can be copied, resent, or canceled.| Role | Sites | Expires | Actions | |
|---|---|---|---|---|
| sam@example.com | Contributor | 3 scoped sites | 6 days | |
| jules@example.com | Viewer | 2 scoped sites | 2 days |
Billing actions
Source shows state-specific Filament header actions.Credit buckets
Rendered billing page shows subscription and rolling balances; ledger is backend-only.| Bucket | Balance | Behavior | Last reset |
|---|---|---|---|
| Subscription Credits | 62 | Renew monthly with subscription | May 1 |
| Rolling Credits | 100 | Purchased credits never expire | — |