← Back to SEO Score API Log in

Changelog

Latest change: 2026-11-10 · System status · Contact

Changes people using the API and website can see, newest first: new endpoints and checks, integrations, plan and billing changes, and fixes that changed results. Each one is a change that shipped on the date shown. Release notes for the SDKs and the MCP server follow below.

API and website

November 2026

October 2026

September 2026

August 2026

July 2026

May 2026

April 2026

March 2026

SDK and MCP server releases

Release notes as published with each package.

MCP server (npm: seoscoreapi-mcp)

1.5.0 (2026-11-09)

  • Tool definitions moved to tools.json, which the hosted server at https://seoscoreapi.com/mcp serves too, so both list identical tools.
  • Every tool now has a title, annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) and an outputSchema; every input property has a description (with enums, ranges and examples where they apply), and unknown arguments are refused by the schema (additionalProperties: false).
  • Results carry structuredContent (the JSON object) next to the text. report_url returns {url} and llms_txt {llms_txt} there; the text is unchanged.
  • The server sends instructions (where to start, how to get a free key) and a title.
  • server.json lists the hosted endpoint under remotes (Streamable HTTP; API key as Authorization: Bearer or OAuth sign-in).
  • gemini-extension.json + GEMINI.md make the public mirror a Gemini CLI extension (gemini extensions install https://github.com/SeoScoreAPI/seoscoreapi-mcp): it points at the hosted server (httpUrl), and /mcp auth seoscoreapi signs in. No key in a file.

1.4.2 (2026-10-20)

  • create_citation_tracker, update_citation_tracker and citation_check now offer every engine the API accepts: gpt (one of the API's defaults, previously not selectable) and nova were missing. The engines field says which are the defaults and that chatgpt needs an OpenAI key on the server.
  • run_citation_tracker: a run over 45 seconds now comes back as {run_id, status: "running", poll} (the API answers 202 instead of timing out); poll get_citation_run until it is completed.
  • The server reports its version as 1.4.2 (lib.js still said 1.4.0 in 1.4.1).

1.4.1 (2026-10-08)

Packaging only, no behaviour change: mcpName, server.json and glama.json for the MCP registries, an MIT LICENSE file, and repository now points at the public mirror (github.com/SeoScoreAPI/seoscoreapi-mcp).

1.4.0 (2026-10-07)

Core Web Vitals are now opt-in on the API, so audits no longer wait on Google PageSpeed Insights unless asked:

  • audit and batch_audit take include_core_web_vitals (boolean, default false). When true the audit also returns measured LCP, INP, CLS, FCP and TTFB under core_web_vitals; the first measurement of a URL adds about 10 seconds and is cached for 24 hours.
  • Without it core_web_vitals.status is not_requested.
  • The option needs an API key: the keyless demo audit never measures Core Web Vitals.

1.3.0 (2026-10-06)

Catches the server up with the API. New tools:

  • accessibility_audit, ai_readability, trackers, conversion, quick_wins, llms_txt.
  • compare, competitive_audit, remove_monitor.
  • GEO: geo_audit, geo_brand_probe, add_geo_monitor, list_geo_monitors, geo_monitor_history, remove_geo_monitor.
  • Site crawl: crawl_site (waits for the result), start_crawl, get_crawl.
  • AI citations: citation_starter_prompts, citation_suggest_prompts, create_citation_tracker, list_citation_trackers, get_citation_tracker, update_citation_tracker, delete_citation_tracker, run_citation_tracker, get_citation_run, citation_tracker_history, citation_check, citation_topups, citation_topup_checkout, citation_auto_reload (read-only).
  • Not added: report file export (/audit/export returns a binary PDF) and any way to turn auto-reload on (the API has none for API keys). See the README.
  • Tests for the new tools (test/endpoints.test.js).

1.2.0 (2026-10-02)

  • Deep Audit calls go to the main host, https://seoscoreapi.com (POST /site-audit, GET /site-audit/{job_id}, GET /deep-audit/usage), instead of engine.seoscoreapi.com. The old host still works.
  • New env var SEO_SCORE_DEEP_AUDIT_URL to override the Deep Audit host (defaults to SEO_SCORE_BASE_URL; SEO_SCORE_ENGINE_URL is still honoured as a fallback).
  • New tools: start_deep_audit, get_deep_audit, deep_audit_usage.
  • deep_audit takes an optional timeout_seconds (default 600, was a fixed 5 minutes) and, on timeout, returns the job_id so the agent can keep polling with get_deep_audit.
  • Requests send a User-Agent: seoscoreapi-mcp/<version> header.
  • Handlers moved to lib.js (no behaviour change for the other tools) with tests (npm test, Node's built-in runner).

1.1.0

  • deep_audit tool (engine host).

Earlier releases: see the git history of sdks/mcp.

Python SDK (PyPI: seoscoreapi)

1.7.1 (2026-10-09)

Package metadata only: the repository and issue links point at the public SeoScoreAPI repositories. No code changes.

1.7.0 (2026-10-07)

Core Web Vitals are now opt-in on the API, so audits no longer wait on Google PageSpeed Insights unless you ask:

  • audit(url, api_key, cwv=False): pass cwv=True to get measured LCP, INP, CLS, FCP and TTFB under core_web_vitals in the same response. The first measurement of a URL adds about 10 seconds; it is cached for 24 hours.
  • batch_audit(urls, api_key, cwv=False): the same for every URL in the batch.
  • Without cwv=True, core_web_vitals["status"] is "not_requested" (metrics None), unless a measurement of that URL is already cached, which is returned as before.
  • Nothing else changed; existing calls behave as they did, only faster.

1.6.1 (2026-10-07)

Fixes signup, which has been a two-step flow on the API for some time:

  • signup(email) no longer raises KeyError after the verification email is sent. It returns the API's response ({"status": "verification_required", "message": ...}) instead of a key. POST /signup does not issue a key any more.
  • New verify(email, code): sends the emailed 6-digit code to POST /verify and returns the API key. Raises requests.HTTPError (400) on a wrong or expired code.
  • README: the two-step signup, with an example.

1.6.0 (2026-10-06)

Catches the client up with the API. New functions, no changes to existing ones:

  • Accessibility and reports: accessibility_audit (GET /audit/accessibility), audit_export (GET /audit/export, returns the PDF / Markdown / CSV as bytes).
  • Single-page analyses: ai_readability, trackers, conversion, quick_wins (POST /quick-wins), backlinks, generate_llms_txt (returns str; key optional).
  • GEO: geo_audit, geo_brand_probe, add_geo_monitor, remove_geo_monitor, list_geo_monitors, geo_monitor_history.
  • Site crawl: start_crawl, get_crawl, wait_for_crawl, crawl (start and wait).
  • AI citations: citation_starter_prompts, citation_suggest_prompts, create_citation_tracker, list_citation_trackers, get_citation_tracker, update_citation_tracker, delete_citation_tracker, run_citation_tracker, get_citation_run, citation_tracker_history, citation_check, citation_topups, citation_topup_checkout (returns the Stripe Checkout URL), citation_auto_reload (read-only: the API has no way to turn auto-reload on, and neither does this client).
  • remove_monitor (DELETE /monitors).
  • Tests for all of the above (tests/test_endpoints.py).

1.5.0 (2026-10-02)

  • Deep Site Audit calls go to the main host, https://seoscoreapi.com (POST /site-audit, GET /site-audit/{job_id}, GET /deep-audit/usage), instead of engine.seoscoreapi.com. The old host still works.
  • Base-URL override for Deep Audit: base_url= on every Deep Audit function, the module attribute DEEP_AUDIT_URL, or the SEOSCORE_DEEP_AUDIT_URL env var.
  • New wait_for_site_audit(job_id, api_key, ...): poll an existing job to completion.
  • New deep_audit_usage(api_key). engine_usage() stays as an alias (on the main host it now calls /deep-audit/usage, since /usage there is the per-URL audit allowance).
  • Tests for the Deep Audit client (tests/, run with pytest).

1.4.0

  • Deep Audit: site_audit, get_site_audit, deep_audit, engine_usage (engine host).

Earlier releases: see the git history of sdks/python.

Node.js SDK (npm: seoscoreapi)

1.7.1 (2026-10-09)

Package metadata only: the repository and issue links point at the public SeoScoreAPI repositories. No code changes.

1.7.0 (2026-10-07)

Core Web Vitals are now opt-in on the API, so audits no longer wait on Google PageSpeed Insights unless you ask:

  • audit(url, apiKey, { cwv: true }): measured LCP, INP, CLS, FCP and TTFB under core_web_vitals in the same response. The first measurement of a URL adds about 10 seconds; it is cached for 24 hours.
  • batchAudit(urls, apiKey, { cwv: true }): the same for every URL in the batch.
  • Without it, core_web_vitals.status is "not_requested" (metrics null), unless a measurement of that URL is already cached, which is returned as before.
  • Types: AuditOptions and CoreWebVitals.
  • Nothing else changed; existing calls behave as they did, only faster.

1.6.1 (2026-10-07)

Fixes signup, which has been a two-step flow on the API for some time:

  • signup(email) no longer resolves with undefined. It resolves with the API's response ({ status: "verification_required", message: ... }) instead of a key. POST /signup does not issue a key any more. Typed as SignupResult.
  • New verify(email, code): sends the emailed 6-digit code to POST /verify and resolves with the API key. Rejects (status 400) on a wrong or expired code.
  • README: the two-step signup, with an example.

1.6.0 (2026-10-06)

Catches the client up with the API. New functions (all typed in index.d.ts):

  • Accessibility and reports: accessibilityAudit (GET /audit/accessibility), auditExport (GET /audit/export, resolves with the PDF / Markdown / CSV as a Buffer).
  • Single-page analyses: aiReadability, trackers, conversion, quickWins (POST /quick-wins), backlinks, generateLlmsTxt (resolves with text; key optional).
  • GEO: geoAudit, geoBrandProbe, addGeoMonitor, removeGeoMonitor, listGeoMonitors, geoMonitorHistory.
  • Site crawl: startCrawl, getCrawl, waitForCrawl, crawl (start and wait).
  • AI citations: citationStarterPrompts, citationSuggestPrompts, createCitationTracker, listCitationTrackers, getCitationTracker, updateCitationTracker, deleteCitationTracker, runCitationTracker, getCitationRun, citationTrackerHistory, citationCheck, citationTopups, citationTopupCheckout (resolves with the Stripe Checkout URL), citationAutoReload (read-only: the API has no way to turn auto-reload on, and neither does this client).
  • listMonitors and removeMonitor (GET / DELETE /monitors).
  • Errors from every call now carry err.status (previously only the Deep Audit calls).
  • Tests for all of the above (test/endpoints.test.js).

1.5.0 (2026-10-02)

  • Deep Site Audit calls go to the main host, https://seoscoreapi.com (POST /site-audit, GET /site-audit/{job_id}, GET /deep-audit/usage), instead of engine.seoscoreapi.com. The old host still works.
  • Base-URL override for Deep Audit: baseUrl in any Deep Audit call's options, setDeepAuditBaseUrl(url) / getDeepAuditBaseUrl(), or the SEOSCORE_DEEP_AUDIT_URL env var.
  • New waitForSiteAudit(jobId, apiKey, wait): poll an existing job to completion.
  • New deepAuditUsage(apiKey). engineUsage() stays as an alias (on the main host it now calls /deep-audit/usage, since /usage there is the per-URL audit allowance).
  • HTTP errors from deepAudit now carry err.status.
  • Tests (npm test, Node's built-in runner); the published package now ships only index.js, index.d.ts, README.md and CHANGELOG.md.

1.4.0

  • Deep Audit: siteAudit, getSiteAudit, deepAudit, engineUsage (engine host).

Earlier releases: see the git history of sdks/node.

n8n community node

1.7.3 (2026-10-26)

Published from the public SeoScoreAPI/n8n-nodes-seoscoreapi repository with an npm provenance statement, which n8n requires for verified community nodes. No code changes.

1.7.2 (2026-10-20)

  • The Engines option on Create Citation Tracker and Citation Check now lists every engine the API accepts. Added GPT (one of the API's defaults) and Amazon Nova; ChatGPT is now labelled as the web-search product.
  • Run Citation Tracker: a run over 45 seconds now returns {run_id, status: "running", poll} (the API answers 202 instead of timing out); use Get Citation Run with that id until it is completed.

1.7.1 (2026-10-09)

Package metadata only: the repository and issue links point at the public SeoScoreAPI repositories. No code changes.

1.7.0 (2026-10-07)

Core Web Vitals are now opt-in on the API, so audits no longer wait on Google PageSpeed Insights unless asked:

  • Audit URL and Batch Audit have an Include Core Web Vitals switch (off by default). When on, the output carries measured LCP, INP, CLS, FCP and TTFB under core_web_vitals; the first measurement of a URL adds about 10 seconds and is cached for 24 hours.
  • With it off, core_web_vitals.status is not_requested.

1.6.0 (2026-10-06)

Catches the node up with the API. New operations:

  • Accessibility Audit, Export Audit Report (PDF / Markdown / CSV as binary data, white-label fields), AI Readability, Tracker Inventory, Conversion Score, Page-2 Quick Wins, Get Backlinks, Generate llms.txt, Competitive Audit.
  • GEO: GEO Audit, GEO Brand Probe, Add / List / Remove GEO Monitor, GEO Monitor History.
  • Site crawl: Crawl Site (waits, configurable timeout), Start Site Crawl, Get Site Crawl.
  • AI citations: Citation Starter Prompts, Citation Suggest Prompts, Create / List / Get / Update / Delete Citation Tracker, Run Citation Tracker, Get Citation Run, Citation Tracker History, Citation Check, Citation Top-Ups, Citation Top-Up Checkout, Citation Auto-Reload (Read). There is no operation that turns auto-reload on: the API does not allow it with an API key.
  • Tests for the new operations (test/endpoints.test.js).

1.5.0 (2026-10-02)

  • Deep Audit calls go to the main host, https://seoscoreapi.com (POST /site-audit, GET /site-audit/{job_id}, GET /deep-audit/usage), instead of engine.seoscoreapi.com. The old host still works.
  • New credential field Deep Audit Base URL (default https://seoscoreapi.com) to override the Deep Audit host.
  • New operations: Start Deep Audit (returns the job, optional webhook), Get Deep Audit (poll a job), Deep Audit Usage.
  • Deep Audit (wait for result) gets a configurable timeout (default 600 s, was a fixed 5 minutes).
  • Tests (npm test, Node's built-in runner, no n8n install needed).

1.4.0

  • Deep Audit operation (engine host, waits for the result).

Earlier releases: see the git history of sdks/n8n.

Apify Actor

0.4 (2026-10-08)

  • Links to seoscoreapi.com in the README, the input form and run messages carry utm_source=apify&utm_medium=directory, so a sign-up that starts here is recorded as coming from Apify. No behaviour change.

0.3 (2026-10-08)

  • The API key is now optional. A run with no key makes one demo audit of the first URL (2 checks per category, the top 2 fixes) and marks the row demo: true with a note. Nothing changes for runs with a key.

0.2 (2026-10-07)

  • New input includeCoreWebVitals (default off). When on, each SEO audit asks the API for measured Core Web Vitals (cwv=true) and the row carries a core_web_vitals summary: status, source, LCP, INP, CLS, FCP and TTFB. It uses no extra audits.
  • With it on, SEO audits run at most 3 at once and each is given at least 60 seconds, because the API waits up to 25 seconds on Google PageSpeed Insights for a URL it has not measured in the last 24 hours.
  • Every row now has a core_web_vitals field (null when the option is off).

0.1 (2026-10-07)

First version. Audits a list of URLs with the user's own SEO Score API key: SEO audit on every plan, optional accessibility (WCAG 2.1 AA) and GEO audits when the plan includes them. Reads the plan from GET /usage, paces to the per-minute limit, stops at the allowance, one dataset row per URL.

Developing

python -m venv .venv && .venv/bin/pip install -r requirements.txt -r requirements-dev.txt
.venv/bin/python -m pytest tests -q          # offline, HTTP mocked
apify run                                     # local run; input in storage/key_value_stores/default/INPUT.json
apify push                                    # upload to your Apify account (stays private until published)

The Store listing copy lives in the library repo under marketplaces/apify/.