Repository navigation
Reports Leads Sharing
Three ways to show work to people outside your workspace: client reports (frozen white-label snapshots), share links (a live read-only dashboard) and the audit widget that turns your agency site's visitors into leads.
Top menu → Clients → Reports (/reports).
Pick a site and a template, then toggle sections:
| Template | Sections |
|---|---|
| Executive | summary, traffic, queries, positions, work done |
| Detailed | executive + pages, indexing, backlinks, uptime |
| Technical | audit (with Core Web Vitals), indexing, uptime |
| Local | local positions (with NAP), reviews |
All sections: summary, traffic, queries, pages, positions, local positions, indexing, audit, uptime, backlinks, AI visibility, reviews, work done (your Markdown notes), next steps.
- Summary and next steps are deterministic: clicks vs. the previous period, the best query move, and the first priority the data shows (index losses > rank drops > audit criticals > lost links > uptime incidents). No forecasts, no AI.
- A section with no data shows a "no data" pill, never a zero.
- Language per report: the snapshot, PDF, client e-mail and share link speak the client's language, whatever your interface language.
Settings → Preferences → report branding: company name, logo (PNG/SVG/JPEG ≤ 200 KB), accent colour, footer, website. "Powered by OpenGSC" is off by default, so reports are white-label.
Every send (Send now or the schedule) stores the fully rendered HTML, plus a PDF when the server has a headless browser (Playwright). That snapshot never re-renders: not when branding changes, not when data changes. The numbers a client got in September stay those numbers. Without a server browser, open the HTML and print to PDF from any browser.
- Schedule: weekly (day of week) or monthly (day 1–28) at 09:00 UTC.
- E-mail uses the SMTP settings from Settings → Notifications → E-mail. The mail carries the client link rather than an attachment. Without SMTP, reports and snapshots still work; only mail is off (the run shows "SMTP not configured").
-
Client link
/share/report/<token>: opens exactly this report's snapshots and nothing else. Rotate or revoke it at any time.
Site → Settings → Public Link creates /share/<site>/<token>: a live, read-only view of one site's analytics, without an account. Regenerate to invalidate the old link, or revoke it. It's a different token from report links; one can't open the other.
Pair it with Privacy Blur for screenshots.
An embeddable "check your website" form for your own (agency) site. The visitor types a domain, gets a score and the top problems, leaves an e-mail, and you get a lead with the findings attached.
Settings → Integrations → Audit widget → copy the embed code:
<iframe src="https://YOUR-INSTANCE/embed/audit?key=wid_…"
style="width:100%;height:640px;border:0" loading="lazy" title="SEO audit"></iframe>-
?lang=xxfixes the widget language; otherwise the visitor's browser language is used. - Width 320–720 px; follows the visitor's light/dark theme.
-
Auto-height: the widget posts
{type: "opengsc:widget:height", height}to the parent; listen for it and set the iframe height. - Allowed origins: restrict which sites may embed it (empty = anywhere, with a warning).
-
Cloudflare Turnstile: set
TURNSTILE_SITE_KEY/TURNSTILE_SECRET_KEYin.env. Without them the widget works but can be spammed.
A "lite" audit of the homepage plus up to 4 pages, using the same rules as the Site Audit: HTTPS and certificate, status and redirects, title/description lengths, H1, canonical, noindex, viewport, lang, JSON-LD, Open Graph, security headers, response time, broken links on the homepage, mixed content, thin content, images without alt.
The widget faces anonymous internet visitors, so it sees none of your data: no GSC, no sites, no keys. Every fetch refuses private addresses. It's rate-limited (5 audits per hour and 20 per day per visitor, 200 per day per widget). IPs exist only as salted hashes in memory and are stored nowhere. A lead can only be created by a completed audit.
Top menu → Clients → Leads (/leads): filters, search, CSV export.
- Expand a lead to see every finding with evidence.
-
Write opens a ready
mailto:draft: greeting, the 3 worst problems in plain words, a call offer (or your own template). - Proposal builds a commercial proposal from the findings: about you, what we found (with plain-language consequences), scope (you tick findings), pricing table, timeline, next step. It's branded with your report branding and printable to PDF. It's deterministic, with no traffic or revenue promises by design.
- Make client marks the lead as a client and opens Reports.
- New-lead notifications go out with event
lead.
If you run the Orbitra tracker: paste its URL and a write-scope API key into the Orbitra tracker card on /leads → Test connection. Each lead then gets a → campaign in Orbitra button that creates one empty campaign for that lead.
list_reports, list_leads. Both are free reads.
OpenGSC · opengsc.org · Repository · Issues · Changelog · MIT licence
Get started
Install and run
Analytics
- Dashboard
- Site Page
- Portfolio Analytics
- Rank Tracker
- AI Visibility (AEO)
- Indexing
- Audit, Health, Uptime
- Backlinks
Providers
Tools
Delivery
Help