Your clients don't care about your tools. They care about their results. That's why the best agency reports don't look like they came from a third-party platform — they look like they came from you.
The problem is that most white-label SEO reporting involves expensive enterprise tools ($200-500/mo per seat), clunky PDF generators, or hours of manual copy-pasting into branded templates. There's a simpler way.
Every domain audited through SEO Score API automatically gets a public report page:
https://seoscoreapi.com/report/acmecorp.com
Send that link to your client. They see their score, grade, category breakdowns, and prioritized fixes — all in a clean, interactive format. No PDF to generate, no template to maintain, no attachment to email.
The report updates every time you re-audit the domain, so the link always shows the latest data.
Want to give clients something they can put on their own site? Every domain also gets an SVG badge:
<a href="https://seoscoreapi.com/report/acmecorp.com">
<img src="https://seoscoreapi.com/badge/acmecorp.com"
alt="SEO Score for acmecorp.com">
</a>
The badge shows the current score and grade, updates automatically, and links back to the full report. Clients love putting these in their footer or on their marketing pages — and it's a subtle backlink to your work.
If you need full control over the branding, use the API to pull raw audit data and render it however you want:
from seoscoreapi import audit
result = audit("https://acmecorp.com", api_key="YOUR_KEY")
# result contains:
# - score (0-100)
# - grade (A+ to F)
# - checks (28 individual results)
# - priorities (top issues sorted by severity)
Feed that data into your own HTML template, PDF generator, or dashboard. The API gives you structured JSON — you decide how it looks.
from seoscoreapi import audit, report_url
clients = {
"Acme Corp": "https://acmecorp.com",
"Beta Co": "https://betaco.io",
}
for name, url in clients.items():
result = audit(url, api_key="YOUR_KEY")
domain = url.split("//")[1].rstrip("/")
print(f"""
<h2>{name}</h2>
<p>Score: <strong>{result['score']}/100</strong> ({result['grade']})</p>
<p><a href="{report_url(domain)}">Full Report</a></p>
<h3>Top Issues</h3>
<ul>
""")
for p in result["priorities"][:5]:
print(f" <li>[{p['severity']}] {p['issue']}</li>")
print("</ul>")
Run that monthly, wrap it in your agency's email template, and you have branded client reports generated in seconds.
For agencies that want a lightweight client dashboard without building anything:
import gspread
from seoscoreapi import audit
gc = gspread.service_account()
sheet = gc.open("Client SEO Dashboard").sheet1
clients = sheet.col_values(1)[1:] # URLs from column A
for i, url in enumerate(clients, start=2):
result = audit(url, api_key="YOUR_KEY")
sheet.update_cell(i, 2, result["score"])
sheet.update_cell(i, 3, result["grade"])
sheet.update_cell(i, 4, len(result.get("priorities", [])))
Share the Google Sheet with your client. They see their score update every time you run the script. Zero infrastructure, zero hosting costs.
Combine the API with email to send reports on autopilot:
from seoscoreapi import audit, report_url
import smtplib
from email.mime.text import MIMEText
clients = {
"ceo@acmecorp.com": "https://acmecorp.com",
"marketing@betaco.io": "https://betaco.io",
}
for email, url in clients.items():
result = audit(url, api_key="YOUR_KEY")
domain = url.split("//")[1].rstrip("/")
link = report_url(domain)
body = f"""Hi,
Here's your monthly SEO report:
Score: {result['score']}/100 ({result['grade']})
Issues found: {len(result.get('priorities', []))}
View your full report: {link}
Best,
Your Agency Name
"""
msg = MIMEText(body)
msg["Subject"] = f"Monthly SEO Report: {result['score']}/100 ({result['grade']})"
msg["From"] = "reports@youragency.com"
msg["To"] = email
# Send via your SMTP provider
Schedule that as a cron job or GitHub Action on the 1st of every month.
For a 15-client agency auditing 5 pages per client monthly:
You're paying for audit data. How you present it to clients is entirely up to you.
Try SEO Score API free