Release notes
Changelog
Every customer-visible change to the API, webhooks, scanner, dashboard, and pricing — newest first. Pin your integration against a date, audit breaking changes here, and follow the API docs for current shape.
- toolsdocs
Research reports launched — live leaderboard of the most common audit findings
New section at /reports. First report: a live leaderboard of the most common SEO / security / accessibility issues we find across real customer audits, refreshed daily via ISR. Every entry links to its fix guide. Built on our own scan database — no scraping of strangers. Future reports (llms.txt adoption, Open Graph hygiene, security-header grades, hreflang reciprocity, robots.txt patterns) will draw from aggregated, anonymized usage of our free tools.
- proagency
Competitor benchmarking — track up to 10 competitor sites weekly
New panel under Settings → Domains. Add competitor URLs (3 on Pro, 10 on Agency), get a weekly scan against the same 20-category audit as your own site, and see the score delta on the dashboard. Each row shows their latest score, when it last ran, and whether you're leading or trailing. Competitor scans draw from your monthly scan budget — heavy trackers naturally upgrade to Agency. Marketing page: /use-cases/competitor-monitoring.
- proagency
Embeddable scanner widget — drop a one-liner on any agency site
Mint a public widget token in Settings → API. Paste a <script> tag on your portfolio / landing page; visitors get a "Scan your site free" button that opens Seoxpert with their URL pre-filled and your workspace tracked as the referrer. Pro = 5 tokens, Agency = 20 tokens + white-label rendering (no "Powered by Seoxpert" footer). Smart-redirect — no server-side scan budget per visitor, so viral usage doesn't burn your quota. Marketing page: /use-cases/embedded-scanner.
- ui
Issues board — persistent Kanban for triaging findings
New tab under the dashboard sidebar. Every current issue across every domain in one view, with status columns (Open / In progress / Blocked / Deferred / Done / Won't fix / False positive). One-click status-change dropdown on every card, severity + category + domain filters. When you fix a severe finding on your site, the next scan auto-marks it as Done with an "Auto-fixed" badge — the dopamine moment baked into the workflow.
- uiemail
Score-climb celebration on scan results
When you re-scan and the health score went up vs the previous scan, a teal banner above the score hero celebrates the win loudly: "+6 health score · 3 severe issues fixed." Lists exactly which findings were resolved. The scan-completed email subject already led with the delta arrow (▲ +6 / acme.io · 3 issues resolved) — this is the dashboard counterpart.
- tools
Five new free tools — Open Graph, Schema, Hreflang, Security Headers, llms.txt
Each takes a URL, runs the same checks our main scanner uses, and shows fix guidance: /tools/og-preview (Twitter / LinkedIn / Facebook card render + content-type sniffing), /tools/schema-validator (23+ Schema.org types with rich-result eligibility), /tools/hreflang-checker (reciprocity probe up to 10 alternates — the check most validators skip), /tools/security-headers (A-F grade, recognises strict-dynamic CSP upgrade), /tools/llms-txt (validates llms.txt + cross-checks robots.txt for 17 AI crawlers). All free, no signup, rate-limited per IP.
- apiwebhooksdeploy-hookdocs
API rate-limit headers, Idempotency-Key, per-event payload schemas, 5-provider deploy snippets
Token-authed routes (POST/GET /api/scans, GET /api/scans/[id]/report, GET/POST /api/domains) now return X-RateLimit-Limit / -Remaining / -Reset on every response and Retry-After on 429s — CI scripts can self-throttle. POST /api/scans now honors the Idempotency-Key header (Stripe convention, 24h replay window) so a CI retry doesn't burn a fresh credit. /webhooks doc page rewritten with accurate per-event payload schemas (was prose-described); also fixed a stale "overallHealthScore" reference in the Slack handler example. /deploy-hooks doc page now renders all 5 CI provider snippets (curl / GitHub Actions / Vercel / Netlify / GitLab CI) — same builder the dashboard uses.
- uidocs
DomainCombobox primitive — typeahead picker for the schedules tab
Replaced the Radix select on the schedules tab with a keyboard-navigable combobox; substring-matches against rootUrl + parsed hostname. The Start Scan tab keeps its radio-card list but adds an inline search above the list when domains.length > 8. Real win for Agency-tier customers managing 50 domains.
- api
API tokens are no longer just decorative — 4 routes wired
POST /api/scans, GET /api/scans, GET /api/scans/[id]/report, and GET/POST /api/domains now accept Bearer sxp_live_… tokens with the appropriate scope (scans:write / scans:read / reports:read / domains:read / domains:write). Token paths skip the workspace RBAC matrix because tokens can only be minted by Pro+ admins/owners. A May 2026 review caught a cross-workspace leak and we now pin every token query to its mint-time workspaceId.
- emailbilling
Scan-completed emails on the free tier — and an auto-schedule on signup
Removed the Pro+ gate on scan-completed emails. ALL plans now receive the email (per-send ~€0.0003 via Brevo). New signups now also auto-create a weekly scheduled scan on the same weekday, 9am, with regression alerts to their email. Together these turn one-shot users into a weekly-engaged base. **Marketing copy on 22 public pages was reworded** to remove the "scheduled scans are Pro+" claim.
- email
Day-3, Day-14, Day-30 lifecycle emails
Hourly cron sweeps (staggered 0/10/20 past every hour) now find customers stuck at 1 completed scan after 72h / 14d / 30d and send a tone-appropriate re-engagement email. Each customer gets each stage at most once (idempotency keyed on lifecycle:<stage>:<customerId>). Three template files at src/lib/email/templates/day-{3,14,30}-*.ts.
- deploy-hook
One-click integration snippets for 5 CI providers
Mint a deploy hook from Settings → Domains and the reveal banner now includes copy-paste snippets for curl, GitHub Actions, Vercel, Netlify, and GitLab CI. Source builder at src/lib/deploy-hook-snippets.ts — each provider is a single editable case.
- emailui
Email templates redesigned — top brand strip, refined CTA, accent-bordered highlights
New visual primitives: brand accent strip on the panel head, logo dot in the wordmark, 26px heading, beefier CTA. New ContentBlock kinds: divider (horizontal rule) and secondaryLink (the "or do this instead" link below the primary CTA). All 12 transactional templates inherit automatically.
- webhooks
All 6 webhook event types are now wired end-to-end
scan.started, scan.completed, scan.failed, score.dropped, issue.new_critical, credits.low. score.dropped fires on a 5-point regression vs the most recent completed scan; issue.new_critical fires once per new critical finding (deduplicated by canonical issue id); credits.low fires on the way down at thresholds 3, 1, and 0.
- billing
Pricing migration — €19.99 Pro, €89 Agency, EUR currency
Public ladder is now Free / Pro €19.99/mo / Agency €89/mo. Free tier: 4 scans/month, 1 domain, weekly+ scheduled scans, regression alerts. Pro: 100 scans, 10 domains, API access, deploy hooks, signed webhooks, client portals. Agency: 500 scans, 50 domains, daily + weekday schedules, white-label PDFs. Legacy USD plans (starter/pro/agency-monthly + annual + once) remain resolvable for grandfathered subscriptions.
- scanner
20-scanner audit + 150 new findings
Schrems II / AI Act §50 / EAA / Consumer Rights Directive compliance findings, multi-language URL path banks for 19 EU languages, language-aware word-counting for CJK/Thai content, per-language stopword fingerprinting (was producing false near-duplicate flags on German/Spanish/French sites), softer severity for non-actionable signals.
- webhooksapi
Signed event webhooks (Stripe-compatible HMAC)
Per-workspace signing secret (sxw_… format), X-Seoxpert-Signature header with t=… ,v1=… encoding, 5-minute replay window. Verify-signature snippet in the /webhooks docs is copy-pasteable Node.js. Rotation endpoint: POST /api/account/webhook-secret/rotate.
- security
Removed the pre-signup background scan path
**Breaking** for any caller of /api/guest-scan or /api/teaser. The whole pre-signup background-scan path was deleted; users now sign up first, then the auto-scan runs. Eliminates a bunch of signup-flow abuse vectors and ~200 lines of UI state.
Need to compare API surfaces by date? Each entry's date is stable. Older entries (pre April 2026) are not surfaced here yet — most material changes from before that period were small enough to roll into the launch entry.