Skip to main content

seoscoreapi

Python client for SEO Score API — audit any URL for SEO issues with one function call.

Install

pip install seoscoreapi

Quick Start

from seoscoreapi import audit, signup

# Get a free API key (2 audits/day, no credit card)
key = signup("you@example.com")

# Run an audit
result = audit("https://example.com", api_key=key)
print(f"Score: {result['score']}/100 ({result['grade']})")

Functions

Function Description
signup(email) Get a free API key
audit(url, api_key) Run SEO audit on a URL
batch_audit(urls, api_key) Audit up to 10 URLs in one call (paid)
compare(urls, api_key) Compare 2–5 URLs with a structured diff (Basic+)
competitive_audit(url, competitor_url, keyword, api_key) Head-to-head audit with gap score (Pro+)
history(url, api_key, limit=100, since=None) Full audit timeseries + summary for a URL (Starter+)
history_domains(api_key) Every domain audited by this key with latest score and 30-day trend (Starter+)
usage(api_key) Check usage and limits
add_monitor(url, api_key, frequency="daily", webhook_url=None, alert_threshold=5) Set up score monitoring with optional Slack/webhook alerts (paid)
list_monitors(api_key) List active monitors
scoreboard_opt_out(api_key, opt_out=True) Opt in or out of the public scoreboard
report_url(domain) Get shareable report URL

Historical tracking

Every audit on a paid plan returns a history block on the /audit response:

result = audit("https://example.com", api_key=key)
delta = result["history"].get("delta")
if delta:
    print(f"Score change: {delta['score']:+.1f} ({delta.get('grade_change') or 'no grade change'})")

Pull the full timeseries with history() or a one-shot per-domain summary with history_domains(). Retention windows: Starter 30 days, Basic 90 days, Pro 1 year, Ultra unlimited.

Webhook alerts on score drops

add_monitor(
    "https://example.com",
    api_key=key,
    frequency="daily",
    webhook_url="https://hooks.slack.com/services/T0/B0/xxxx",
    alert_threshold=5,
)

Slack incoming-webhook URLs are auto-formatted as Block Kit messages; any other https endpoint receives the raw event JSON.

Deep Site Audit (Pro/Ultra, or credits)

A deep, AI-assisted audit scoring a URL across 9 dimensions (thousands of catalog checks plus up to 150 AI checks). It runs asynchronously, so start a job and poll it, or use deep_audit to block for the result:

import seoscoreapi as seo

# One call, waits for the result (handles the queue + backpressure for you):
result = seo.deep_audit(
    "https://yoursite.com", API_KEY,
    business_type="saas",                      # tunes which checks apply
    on_progress=lambda s: print(s["status"], s.get("queue_position", s.get("progress"))),
)
print(result["scores"]["lai_score"], result["scores"]["section_scores"])

# Or drive the job yourself:
job = seo.site_audit("https://yoursite.com", API_KEY)       # POST /site-audit
status = seo.get_site_audit(job["job_id"], API_KEY)         # GET  /site-audit/{job_id}
# status["status"] -> queued | running | completed | failed
#   queued    -> {"queue_position", "eta_seconds"}
#   completed -> {"result"}
result = seo.wait_for_site_audit(job["job_id"], API_KEY, timeout=600)

seo.deep_audit_usage(API_KEY)   # GET /deep-audit/usage -> {"site_audit": {"used", "remaining"}, ...}

Deep audits are included on Pro ($39/mo, 20/mo) and Ultra ($99/mo, 100/mo); any other key can run them on purchased credits.

Since 1.5.0 the SDK calls the main host, https://seoscoreapi.com, like every other endpoint. To point Deep Audit somewhere else (a proxy, staging, or the legacy engine.seoscoreapi.com host, which still works), pass base_url= to any Deep Audit function, assign seoscoreapi.DEEP_AUDIT_URL, or set SEOSCORE_DEEP_AUDIT_URL. engine_usage() is kept as an alias of deep_audit_usage().

Docs: seoscoreapi.com/docs (Deep Site Audit section).

Full Documentation

seoscoreapi.com/docs

Metadata

Release files for seoscoreapi 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for seoscoreapi 1.5.0
File Size Uploaded
seoscoreapi-1.5.0.tar.gz 7.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for seoscoreapi 1.5.0
File Interpreter ABI Platform
seoscoreapi-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.8 kB

Release files / seoscoreapi-1.5.0.tar.gz

Download URL seoscoreapi-1.5.0.tar.gz
Size 7.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6ccca99afa3784110a045da5f3215be6bb81e3637805bee3f91338304dc7b240
BLAKE2b-256 checksum
How to use checksums
2e75aefadf0a3c32076b7940e1713c5c6e626447e7ab2f5b68c28686a814df6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / seoscoreapi-1.5.0-py3-none-any.whl

Download URL seoscoreapi-1.5.0-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5133c53f9b7b8451a183b1c12e749d277458339230726de0062777853c9d17ce
BLAKE2b-256 checksum
How to use checksums
c9e8305457707dbe8da9fe8c588a54d7b6ffac1c686b8093576803029489ddda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.7.1

2 release files

1.7.0

2 release files

1.6.1

2 release files

1.6.0

2 release files

This release

1.5.0 This release

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page