Tenants
Each tenant is a client workspace. Beyond content scoping, the tenant record is the canonical per-client configuration for the agency tooling — SEO platform, ads guardrails, site, social, cadence, and report branding.
Tenants are a system collection managed by NS Media administrators. Client users can see their own tenant's name but none of the agency configuration below. The automation identity (agency tooling) reads this configuration but cannot change it.
Core Fields
| Field | Required | Description | Example |
|---|---|---|---|
| Name | Yes | The display name of the tenant (client organization). | Beside Care |
| Slug | Yes | URL-friendly identifier, unique across tenants. Also used as the default for the SEO Friendly Name. | besidecare |
| Domains | No | Custom domains associated with this tenant (reserved for future domain-based routing). | besidecare.com |
| Enabled Collections | No | Which content collections this tenant can access. Defaults to all. | Posts, Events, Galleries |
SEO Group
Configuration for the SEO platform (seo-analytics-mcp). When a client is onboarded to SEO services, this group replaces the old per-machine config file as the source of truth.
| Field | Required | Description | Example |
|---|---|---|---|
| Enabled | No | Master switch: is this tenant an active SEO client? Defaults to off. | On |
| Friendly Name | No | Must match the seo-analytics-mcp property name exactly — snapshots and spend ledgers key on it. Defaults to the slug when left empty; never change it once the SEO platform is live for the client. | besidecare |
| GSC → Site URL | No | The exact Google Search Console property identifier. | sc-domain:besidecare.com |
| GA4 → Property IDs | No | Numeric GA4 property IDs (not G-… measurement IDs). One row per property. | 541675253 |
| GBP → Account / Location IDs | No | Google Business Profile account and location identifiers. | accounts/123…, locations/456… |
| Features | No | Multi-select of SEO platform capabilities enabled for this client (GSC insights, GA4 reporting, rank tracking, audits, keyword research, competitors, geo grid, GBP management, reports). | GSC insights, Reports |
| Enrichment | No | Multi-select of paid/third-party data providers this client has opted into (DataForSEO, Ahrefs, CrUX, Bing, On-Page crawl, Business Data, Backlinks, LLM). | DataForSEO, CrUX |
| Budgets | No | Per-provider USD spend caps (per run / per day / per month) for DataForSEO, LLM, and image generation. Leave blank to use the engine defaults. | 10 / 25 / 150 |
| Brand Terms | No | Branded query terms, used to split brand vs non-brand search. One row per term. | beside care |
| Report | No | Inputs for generated client reports: preset (Local or Content), services, keywords, competitors, geo center (lat/lng), and geo keywords. | Preset: Local |
Snapshots, dashboards, and spend ledgers in the SEO platform are keyed on Friendly Name. It must match the seo-analytics-mcp property name exactly, and must not change once set — renaming it orphans the client's history. It defaults to the slug for convenience; verify it before enabling SEO.
Ads Group
Google Ads management configuration and spend guardrails. Everything defaults to off / 0 — the tooling can never spend or change campaigns for a tenant that has not been explicitly configured.
| Field | Required | Description | Example |
|---|---|---|---|
| Enabled | No | Is Google Ads management on for this tenant? Defaults to off. | Off |
| Customer ID | No | The Google Ads customer ID. | 123-456-7890 |
| Cap Micros / Cap Window | No | Spend cap in micros (1 USD = 1,000,000 micros) over the cap window (monthly). | 500000000 / Monthly |
| Features | No | Multi-select: manage budgets, manage campaigns, apply recommendations. | Manage budgets |
| Auto-apply guardrails | No | Max % change a recommendation may auto-apply (0 = never), plus optional absolute (micros) and aggregate (%) caps. | 0 |
Site, Social, Cadence, Branding & Webhooks
| Field | Required | Description | Example |
|---|---|---|---|
| Site | No | The client site this tenant deploys: repo, branch (defaults to main), and live base URL. | nsmedia-io/example-site |
| Social | No | Social identities: Facebook page ID, Instagram user ID, LinkedIn org URN, GBP location IDs. | (platform IDs) |
| Cadence | No | Agency operating cadence: strategy (weekly / biweekly / monthly), review (monthly / quarterly), timezone, and an enabled switch. Defaults: weekly, monthly, America/New_York, off. | Weekly / Monthly |
| Branding | No | Branding used in agency-generated reports: agency name, client name, logo, primary and secondary colors (hex). | #1F4D5C / #E8B04B |
| Webhooks | No | Deploy-hook configuration for site rebuilds (URL, auth header, custom headers). Visible to admins only. | (deploy hook URL) |
The six agency-config groups (SEO, Ads, Site, Social, Cadence, Branding) are readable by admins and the automation identity, and editable by admins only. The Webhooks group (deploy-hook secrets) stays admin-eyes-only. Anonymous API callers cannot read tenants at all.
Onboarding a Client to the SEO Platform
- Open the tenant
Go to Tenants in the admin sidebar and open the client’s tenant record.
- Set the Friendly Name
In the SEO group, confirm the Friendly Name matches the seo-analytics-mcp property name exactly.
- Fill in Google identifiers
Enter the GSC site URL (sc-domain:… or https://…/) and the numeric GA4 property ID. Add GBP IDs if the client has a Business Profile.
- Pick features and enrichment
Select the platform capabilities and paid data providers this client has opted into. Leave budgets blank for engine defaults.
- Add brand terms and report inputs
Brand terms split brand vs non-brand search. The Report block (preset, services, keywords, competitors, geo) drives generated client reports.
- Fill Site, Cadence and Branding
Set the site repo and base URL, the operating cadence, and the report branding (client name + colors).
- Flip Enabled on and save
Turn on the SEO group’s Enabled switch. The agency tooling picks the tenant up on its next config sync.
Frequently Asked Questions
Do existing tenants need any of this filled in?
No. Every field is optional with safe defaults (everything off, no budgets). A tenant with an empty SEO group is simply not an SEO client.
Why can't I see the SEO or Ads groups?
They are visible to NS Media admins and the automation identity only. Client users never see agency configuration.
What happens if I change the Friendly Name after launch?
The SEO platform treats it as a brand-new property: historical snapshots and spend ledgers stay under the old name. Treat it as immutable once the client is live.
Can the automation identity change this configuration?
No. It reads the configuration to run the tooling, but updates are restricted to human admins — both at the collection level and per-field.