Technical SEO · API-first · JSON responses

Technical SEO
analysis via API

Send a URL. Get a structured audit report.
9 technical SEO checks in a single HTTP call.

Get free API key View API docs
Request
# Run a full technical SEO audit
POST https://seonar.io/api/v1/check
Authorization: Bearer sk_live_••••••••

{
  "url": "https://example.com"
}

↓ 200 OK · 4.2s

{
  "summary": {
    "overall_score": 74,
    "passed": 6,  "warnings": 2,  "failed": 1
  },
  "results": {
    "robots_txt":      { "status": "pass",  "score": 100 },
    "sitemap":         { "status": "pass",  "score": 100 },
    "meta_tags":       { "status": "warn",  "score": 70  },
    "canonical":       { "status": "pass",  "score": 100 },
    "structured_data": { "status": "warn",  "score": 60  },
    "security_headers":{ "status": "pass",  "score": 90  },
    "redirect_chain":  { "status": "pass",  "score": 100 },
    "hreflang":        { "status": "pass",  "score": 100 },
    "internal_links":  { "status": "fail",  "score": 40  }
  }
}

9 checks. One call.

Every check returns a status, a score, actionable issues, and raw data.

🤖

robots.txt

robots_txt

Existence, Disallow rules, Sitemap directive, syntax errors.

🗺️

Sitemap

sitemap

XML validity, URL count, lastmod dates, sitemap index support.

🏷️

Meta Tags

meta_tags

Title length, meta description, Open Graph, Twitter Card.

🔗

Canonical

canonical

Presence, self-referencing, multiple conflicting canonicals.

📊

Structured Data

structured_data

JSON-LD presence, schema types, validity, rich snippet eligibility.

🔒

Security Headers

security_headers

HSTS, X-Frame-Options, CSP, X-Content-Type-Options, Referrer-Policy.

↪️

Redirect Chain

redirect_chain

Chain length, redirect loops, HTTPS final destination.

🌐

Hreflang

hreflang

Language tags, valid BCP-47 codes, x-default, duplicates.

🔍

Internal Links

internal_links

Broken internal links (404s), total link count, sampling.

Simple, predictable API

One endpoint. Bearer token auth. Every response follows the same shape — easy to parse, easy to integrate.

Run all 9 checks at once

Omit the checks array and all checks run by default.

Run specific checks

Pass ["robots_txt", "sitemap"] to run only what you need.

Consistent response shape

Every check returns status, score, issues[], and data.

Rate limits

20 checks/minute per API key. Headers tell you exactly where you stand.

Partial check — robots.txt only
POST /api/v1/check
Authorization: Bearer {token}

{
  "url":    "https://example.com",
  "checks": ["robots_txt"]
}
Response for robots_txt check
{
  "url": "https://example.com",
  "checked_at": "2026-02-22T10:00:00Z",
  "results": {
    "robots_txt": {
      "status": "warn",
      "score": 70,
      "issues": [{
        "severity": "warning",
        "message": "No Sitemap directive",
        "detail": "Add Sitemap: https://..."
      }],
      "data": {
        "exists": true,
        "blocks_all": false,
        "sitemaps": []
      }
    }
  },
  "summary": {
    "overall_score": 70,
    "passed": 0, "warnings": 1, "failed": 0
  }
}
List available checks (no auth required)
GET /api/v1/checks

Simple pricing

Pay per check or subscribe for volume.

Free
$0
forever
  • 100 checks / month
  • All 9 check types
  • JSON responses
  • Priority support
Get started
Popular
Starter
$29
per month
  • 5,000 checks / month
  • All 9 check types
  • JSON responses
  • Email support
Get started
Pro
$99
per month
  • 30,000 checks / month
  • All 9 check types
  • JSON responses
  • Priority support
Get started

Need more? Contact us for custom plans.

Documentation

Full reference for the Seonar API.

Authentication

All write endpoints require a Bearer token. Register at seonar.io to get yours — no credit card required for the free plan.

Pass the token in the Authorization header of every authenticated request.

POST /api/v1/check
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
Content-Type: application/json

Endpoints

Method Path Auth Description
GET /api/v1/checks List all available check keys
POST /api/v1/check Bearer Run SEO checks on a URL

Request body POST /api/v1/check

JSON body, Content-Type: application/json

Field Type Required Description
url string required Fully qualified URL to audit (must include scheme: https://)
checks string[] optional Subset of check keys to run. Omit to run all 9 checks. See available checks.

Response schema

Top-level fields
url string The audited URL
checked_at ISO 8601 Timestamp of the audit
results object Keyed by check name
summary object Aggregate scores across all checks
results[key] fields
status string pass · warn · fail · error
score integer 0 – 100
issues array List of findings (may be empty)
data object Raw check-specific data
issues[n] fields
severity string critical · warning · info
message string Short human-readable finding
detail string Actionable fix suggestion
Example response (meta_tags check)
{
  "url": "https://example.com",
  "checked_at": "2026-02-22T10:00:00Z",
  "results": {
    "meta_tags": {
      "status": "warn",
      "score": 70,
      "issues": [
        {
          "severity": "warning",
          "message": "Title too long",
          "detail": "Keep title under 60 chars"
        }
      ],
      "data": {
        "title": "My Very Long Page Title That Exceeds...",
        "title_length": 82,
        "description": "Page meta description",
        "og_title": "My Page",
        "og_description": "...",
        "twitter_card": "summary_large_image"
      }
    }
  },
  "summary": {
    "total_checks": 1,
    "passed": 0,
    "warnings": 1,
    "failed": 0,
    "errors": 0,
    "overall_score": 70
  }
}

Error codes

HTTP When Body key
401 Missing or invalid Bearer token message
422 Validation error — invalid URL format or unknown check key errors
429 Rate limit exceeded (20 checks / minute per token) message
500 Unexpected server error message

Code examples

curl
curl -X POST \
  https://seonar.io/api/v1/check \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'
JavaScript
const res = await fetch(
  'https://seonar.io/api/v1/check',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      url: 'https://example.com',
    }),
  }
);
const data = await res.json();
Python
import requests

resp = requests.post(
  "https://seonar.io/api/v1/check",
  headers={
    "Authorization": f"Bearer {token}",
  },
  json={
    "url": "https://example.com",
  },
)
data = resp.json()

Built for developers & agencies

SaaS products

Add an SEO health score to your product dashboard without building the crawler yourself.

SEO agencies

Automate the technical audit layer of your service. Feed results into your reporting pipeline.

CI/CD pipelines

Gate deployments on SEO health. Fail the build if canonical tags break or robots.txt blocks crawlers.

Start in 30 seconds

Register, grab your API key, and run your first check. No credit card required for the free plan.

# 1. Get your free API key at seonar.io
# 2. Run your first check

curl -X POST https://seonar.io/api/v1/check \
  -H "Authorization: Bearer {your_token}" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-site.com"}'
Create free account