SEOVENTRA
Documentation

Introduction

SEOVentra is a full-stack SEO operations platform for developers, agencies, and growth teams. It combines URL indexing automation, technical site audits, AI discoverability scoring, and analytics β€” all in a single workspace running on Cloudflare's global edge.

⚑
URL Indexing
Submit to Google & Bing
πŸ”
SEO Audits
Crawl, score, fix
πŸ€–
AI Visibility
GEO / AEO / E-E-A-T
πŸ“Š
Analytics
Velocity & regressions
πŸ””
Alerts
Email, webhook, Telegram
πŸ”‘
REST API
Full programmatic access

Quick start

Get your first URL indexed in under 5 minutes.

01
Create your account
Sign up at seoventra.com β€” no credit card required. A free workspace is created instantly.
02
Add a website
Go to Websites β†’ Add Website. Enter your domain (e.g. example.com). Choose DNS TXT, HTML tag, or file verification.
03
Verify ownership
Follow the instructions for your chosen method and click "Verify now". HTML methods verify in seconds; DNS can take up to 24 hours.
04
Connect Google Search Console
Navigate to Indexing β†’ Connect GSC. Authorise SEOVentra to read and submit to your GSC property. Required for Google-specific features.
05
Submit your first URLs
Go to Indexing β†’ Submit URLs. Paste one URL per line (max 200). Select provider (GSC for Google, IndexNow for Bing + others). Hit Submit.
06
Track progress
URLs appear in the Queue tab with live status. Use URL Lifecycle to see the full discovery β†’ crawled β†’ indexed journey per URL.

How it works

SEOVentra runs entirely on Cloudflare's edge network β€” no traditional servers. Here's how the stack fits together:

β–£Next.jsFrontendβš™WorkersComputeπŸ—„D1Database⚑KVSessionsπŸ“¦R2StorageGoogle GSCIndexNowClaude APIRazorpayCloudflare Edge Network
Cloudflare Workers
All API routes and background jobs run as serverless edge functions. Zero cold starts, global distribution.
Cloudflare D1
SQLite at the edge. Primary database for accounts, domains, jobs, audits, AI scores, and metrics.
Cloudflare KV
Session tokens, rate limit counters, and short-lived cache values.
Cloudflare R2
Audit report artifacts and data exports. S3-compatible object storage at the edge.

Plans & limits

All plans include full API access. Limits reset monthly on your billing date.

PLAN SCALE COMPARISONURL Submissions5005,00050,000SEO Audits550500AI Scores105005,000FreeProBusiness
FeatureFreeProBusiness
Domains325Unlimited
URL submissions / mo5005,00050,000
URL inspections / mo505005,000
SEO audits / mo550500
AI visibility scores / mo105005,000
Indexing history7 days12 months24 months
API accessβœ“βœ“βœ“
Webhook alertsβ€”βœ“βœ“
Priority supportβ€”β€”βœ“
β„Ή
Exceeding a limit queues or throttles requests β€” never silently dropped. You'll see an in-dashboard warning at 80% usage.

Websites & verification

Before indexing or auditing, you must verify domain ownership. This links the domain to your organisation and enables GSC integration, IndexNow key generation, and crawling.

Verification methods

πŸ”‘
DNS TXTRecommended
Add a TXT record: seoventra-verify={token}. Up to 24h propagation. Survives site rebuilds β€” recommended for most setups.
🏷
HTML Meta Tag
Add <meta name="seoventra-site-verification" content="{token}"> to your <head>. Instant. Breaks if you redeploy without the tag.
πŸ“„
HTML File
Upload {token}.txt to your site root containing only the token. Accessible at https://yourdomain.com/{token}.txt.

Domain statuses

  • pending β€” domain added, awaiting verification
  • verified β€” ownership confirmed, all features active
  • failed β€” check failed; fix your DNS/tag and retry

URL indexing

The indexing engine submits URLs to search engines and tracks status over time through a job queue with automatic retries and exponential backoff.

queuedsubmitteddiscoveredcrawledindexedβœ“ GoalURL INDEXING JOURNEY

Providers

πŸ”Google (GSC)

Uses Google Search Console URL Inspection API. Requires GSC to be connected. Accurate but rate-limited by Google (~200 req/day per property).

⚑IndexNow (Bing + others)

Pings Bing, Yandex, Seznam, and api.indexnow.org in parallel. No user setup needed. Fast, free, no hard limits.

Job statuses

queuedWaiting to be processed by the next worker run.
retryingAttempt failed; scheduled for retry with exponential backoff (5m β†’ 15m β†’ 1h β†’ 6h β†’ 24h).
submittedSubmitted to IndexNow. Awaiting search engine processing (usually 24–72h).
crawledGoogle crawled the URL but hasn't decided to index it yet (often thin or duplicate content).
discoveredGoogle found the URL but hasn't crawled it (crawl budget issue). Add internal links.
indexedConfirmed in Google's index. βœ“ Final successful state.
failedMax retries reached. Check for server errors, noindex tags, or blocked robots.txt.
blockedBlocked by robots.txt, noindex directive, or canonical mismatch.

Sitemap management

When you add a sitemap, SEOVentra submits it to both Google Search Console and all IndexNow-compatible engines simultaneously β€” no separate steps needed.

  • Add a sitemap URL in Indexing β†’ Sitemaps. Bing, Yandex, and api.indexnow.org are pinged immediately.
  • If GSC is connected, the sitemap is submitted to your GSC property in the same operation.
  • Submission results are recorded per-endpoint so you can see which engines accepted it.
  • Sitemaps can be removed at any time. Removal from SEOVentra does not delete from search engines.
πŸ’‘
Submit both /sitemap.xml and /sitemap-index.xml separately if your site uses a sitemap index file.

URL lifecycle

The URL Lifecycle tab visualises the full state history of each URL from first submission to indexing. Click any URL to see every status transition, the provider used, and failure explanations with actionable fixes.

Discovered
Crawled
Submitted
Indexed

URLs don't always progress linearly β€” some skip directly to indexed, others stall at crawled. The lifecycle tracker shows exactly where each URL is stuck and why, with per-status fix recommendations.

SEO audits

The audit engine crawls your verified domain and produces a comprehensive technical SEO report with an overall score, six category sub-scores, a prioritised issue list, and AI-generated fix recommendations.

Technical82On-page68Performance71Structured Data55Accessibility88Mobile7974SCORE

Score dimensions

Technical β€” Crawlability, status codes, redirects, robots.txt
On-page β€” Titles, meta descriptions, headings, content quality
Performance β€” Core Web Vitals signals, page speed indicators
Structured Data β€” Schema.org markup completeness and validity
Accessibility β€” Alt text, ARIA labels, heading hierarchy
Mobile β€” Viewport, responsive design signals

Issue severity levels

Critical
Directly harms indexing or rankings. Fix immediately.
Warning
Reduces SEO effectiveness. Fix in next sprint.
Info
Best practice violations. Fix when convenient.

AI visibility scoring

AI Visibility measures how likely your content is to be cited by AI-powered search engines β€” ChatGPT, Google AI Overviews, Perplexity, Claude, Bing Copilot, and You.com.

AI ENGINE CITATION PROBABILITYChatGPT72%CITEDGoogle AIO68%CITEDPerplexity65%CITEDClaude61%MAYBEBing55%MAYBEYou.com44%MAYBE

Scoring dimensions

GEOGenerative Engine Optimisation
How well your content is structured for AI extraction. Scores clarity, completeness, factual density, and answer-first writing style.
AEOAnswer Engine Optimisation
Likelihood of appearing in direct-answer results. Evaluates FAQ structure, structured data, and featured snippet signals.
EEATExperience Β· Expertise Β· Authoritativeness Β· Trust
Google's quality rater framework as a score. Evaluates author signals, citations, credentials, and site trust.
β„Ή
AI scores consume monthly quota. Check Settings β†’ Billing for your limit.

Analytics & metrics

The Analytics page shows indexing velocity, URL status snapshots, quota usage, and monthly activity trends β€” all derived from server-side event logs with no client-side trackers.

  • Indexing velocity β€” daily indexed URL count for the last 14 days. Red bars = β‰₯5% drop (regression alert).
  • Regression detection β€” flags days where indexed count dropped by 5%+ and shows absolute URLs lost.
  • URL status snapshot β€” current distribution of all URL statuses for a domain.
  • Monthly quota usage β€” progress bars for URL submissions, audits, and AI scores vs plan limit.
  • Monthly activity chart β€” stacked bars of all platform events grouped by month.
  • Metrics snapshots stored up to 90 days for trend analysis.

Google Search Console

GSC integration enables URL inspection and sitemap submission to Google. It is optional but required for Google-specific indexing features.

Connecting GSC

From the Indexing page header, click "Connect GSC". You'll be redirected to Google's OAuth consent screen. We request two scopes only:

  • webmasters.readonly β€” to inspect URL indexing status
  • webmasters β€” to submit URLs and sitemaps
  • We do NOT access search performance data, keyword rankings, clicks, or impressions
⚠
Each domain needs its own GSC connection. If you have multiple verified domains, connect GSC for each one separately from the Indexing page.

Token security

OAuth tokens are encrypted with AES-256 before storage. They are decrypted only at API call time and are never logged or exposed in plaintext. Revoke access any time from Google Account settings or from the SEOVentra dashboard β€” tokens are deleted immediately on revocation.

IndexNow & Bing

IndexNow is a free, open protocol supported by Bing, Yandex, and others. SEOVentra uses it automatically β€” no Bing account or API key required from you.

Your IndexNow key

Every verified domain gets a unique IndexNow key derived from its verification token via a one-way hash. The key is stable and available in Indexing β†’ Indexing Key.

πŸ’‘
For best results, host your key file at {your-key}.txt β€” this lets Bing independently verify domain ownership.

Submission endpoints

On every URL and sitemap submission, SEOVentra pings all four endpoints in parallel:

  • www.bing.com/indexnow
  • api.indexnow.org/indexnow
  • yandex.com/indexnow
  • search.seznam.cz/indexnow

Alerts & webhooks

Configure alerts in Settings β†’ Alerts. Each rule pairs an event type with a delivery channel.

Event firese.g. URL indexedAlert rulematches event typeSEOVentrasigns + dispatchesYour endpointverifies + processesHMAC-SHA256 signed Β· retry on failure Β· 10s timeout

Event types

  • indexing_failed β€” a job reached max retries
  • indexing_success β€” a URL confirmed indexed
  • audit_complete β€” audit finished
  • domain_verified β€” domain passed verification
  • quota_warning β€” 80% of a monthly limit reached
  • regression_detected β€” indexed count dropped β‰₯5%

Channels

πŸ“§
Email
Valid email address β€” comma-separate for multiple recipients.
πŸ”—
Webhook
HTTPS endpoint. POST with JSON payload. Must respond 200 within 10s.
πŸ’¬
Discord
Discord webhook URL from Server Settings β†’ Integrations.
πŸ“¨
Telegram
Your Telegram chat ID. Use @userinfobot to get yours.

Webhook payload

json
{
  "event": "indexing_failed",
  "org_id": "org_abc123",
  "domain": "example.com",
  "url": "https://example.com/page",
  "data": {
    "job_id": "job_xyz",
    "attempts": 5,
    "last_error": "GSC inspection returned no result"
  },
  "timestamp": "2026-05-23T10:30:00Z"
}

API β€” Authentication

The SEOVentra REST API uses bearer token authentication. Generate keys from Settings β†’ API Keys.

bash
curl https://api.seoventra.com/api/v1/orgs \
  -H "Authorization: Bearer sv_live_your_api_key_here" \
  -H "Content-Type: application/json"

Key scopes

  • read β€” GET endpoints only; cannot create, update, or delete
  • write β€” full access to all org endpoints
  • admin β€” write + admin panel endpoints (internal use)
🚨
Never commit API keys to source control. Keys are shown only once β€” if lost, revoke and regenerate.

Base URL

https://api.seoventra.com

All endpoints are prefixed with /api/v1. All requests and responses use JSON.

Domains API

GET/api/v1/orgs/:orgId/domainsauthβ–Ύ
POST/api/v1/orgs/:orgId/domainsauthβ–Ύ
POST/api/v1/orgs/:orgId/domains/:id/verifyauthβ–Ύ
DELETE/api/v1/orgs/:orgId/domains/:idauthβ–Ύ

Example: add a domain

bash
curl -X POST https://api.seoventra.com/api/v1/orgs/org_abc/domains \
  -H "Authorization: Bearer sv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "example.com",
    "projectId": "proj_xyz",
    "verificationMethod": "dns_txt"
  }'
json
{
  "success": true,
  "data": {
    "id": "dom_abc123",
    "domain": "example.com",
    "status": "pending",
    "instructions": {
      "type": "dns_txt",
      "name": "@",
      "value": "seoventra-verify=abc123def456"
    }
  }
}

Indexing API

POST/api/v1/orgs/:orgId/indexing/submitauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/jobsauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/statsauthβ–Ύ
POST/api/v1/orgs/:orgId/indexing/inspectauthβ–Ύ
POST/api/v1/orgs/:orgId/indexing/processauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/historyauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/lifecycleauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/metricsauthβ–Ύ
GET/api/v1/orgs/:orgId/indexing/indexnow-keyauthβ–Ύ
POST/api/v1/orgs/:orgId/indexing/indexnow/sitemapauthβ–Ύ
POST/api/v1/orgs/:orgId/sitemapsauthβ–Ύ
GET/api/v1/orgs/:orgId/sitemapsauthβ–Ύ
DELETE/api/v1/orgs/:orgId/sitemaps/:sitemapIdauthβ–Ύ

Example: submit URLs

bash
curl -X POST https://api.seoventra.com/api/v1/orgs/org_abc/indexing/submit \
  -H "Authorization: Bearer sv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "domainId": "dom_abc123",
    "provider": "indexnow",
    "priority": 8,
    "urls": [
      "https://example.com/new-post",
      "https://example.com/updated-page"
    ]
  }'
json
{
  "success": true,
  "data": { "queued": 2, "skipped": 0, "skippedUrls": [] }
}
ParameterTypeRequiredDescription
urlsstring[]YesAbsolute URLs to submit. Max 200. Must belong to the domainId.
domainIdstringYesID of the verified domain the URLs belong to.
providerstringYesgsc_inspect (Google, needs GSC) or indexnow (Bing + others, no setup).
prioritynumberNoJob priority 1–10. Higher = processed first. Default: 5.

Audits API

POST/api/v1/orgs/:orgId/auditsauthβ–Ύ
GET/api/v1/orgs/:orgId/auditsauthβ–Ύ
GET/api/v1/orgs/:orgId/audits/:auditIdauthβ–Ύ
GET/api/v1/orgs/:orgId/audits/:auditId/issuesauthβ–Ύ
GET/api/v1/orgs/:orgId/audits/:auditId/recommendationsauthβ–Ύ

Response structure

json
{
  "id": "audit_abc",
  "domain": "example.com",
  "status": "complete",
  "overall_score": 74,
  "scores": {
    "technical": 82, "on_page": 68,
    "performance": 71, "structured_data": 55,
    "accessibility": 88, "mobile": 79
  },
  "issue_counts": { "critical": 3, "warning": 12, "info": 24 },
  "pages_crawled": 148,
  "completed_at": "2026-05-23T10:04:33Z"
}

AI scores API

POST/api/v1/orgs/:orgId/ai/scoreauthβ–Ύ
GET/api/v1/orgs/:orgId/ai/scoresauthβ–Ύ
GET/api/v1/orgs/:orgId/ai/scores/:scoreIdauthβ–Ύ
json
{
  "url": "https://example.com/blog/post",
  "overall": 67, "geo": 71, "aeo": 63, "eeat": 58,
  "engines": {
    "chatgpt":     { "score": 72, "status": "cited"  },
    "google_aio":  { "score": 68, "status": "cited"  },
    "perplexity":  { "score": 65, "status": "cited"  },
    "claude":      { "score": 61, "status": "maybe"  },
    "bing_copilot":{ "score": 55, "status": "maybe"  },
    "you":         { "score": 44, "status": "missed" }
  },
  "suggestions": [
    "Add an author bio with credentials",
    "Include publication and last-updated dates",
    "Add FAQ schema markup"
  ]
}

Webhooks

Configure webhook endpoints in Settings β†’ Alerts using the "webhook" channel. Every delivery includes an X-SEOVentra-Signature header for verification.

Verifying signatures

typescript
import crypto from 'crypto';

function verifyWebhook(body: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(signature)
  );
}

app.post('/webhook', (req, res) => {
  const sig = req.headers['x-seoventra-signature'] as string;
  if (!verifyWebhook(req.rawBody, sig, process.env.WEBHOOK_SECRET!)) {
    return res.status(401).send('Invalid signature');
  }
  const event = JSON.parse(req.rawBody);
  // process event...
  res.status(200).send('OK');
});
⚠
Respond with HTTP 200 within 10 seconds. Timeouts are treated as failures. We retry up to 3 times with exponential backoff.

Error codes

json
{ "success": false, "error": "Human-readable message", "code": "MACHINE_CODE" }
400Bad RequestInvalid parameters or validation failure. Check the error message.
401UnauthorizedMissing or invalid API key. Include Authorization: Bearer header.
403ForbiddenValid credentials but insufficient permissions for this resource.
404Not FoundResource doesn't exist or doesn't belong to your organisation.
429Rate LimitedToo many requests. Retry after the Retry-After header value (seconds).
500Server ErrorUnexpected internal error. Retry or contact support with the request ID.
502Bad GatewayUpstream API error (Google, Bing). Usually transient β€” retry shortly.

Billing & plans

Manage your subscription from Settings β†’ Billing. Payments via Razorpay (India) or Stripe (international).

  • Upgrade takes effect immediately with prorated billing.
  • Downgrade takes effect at end of current billing period.
  • Cancellation keeps account active until period end.
  • Usage limits reset on your billing date, not the calendar month.

API keys

Create and manage API keys from Settings β†’ API Keys. Keys are shown only once β€” store them securely in an environment variable. Revoke compromised keys immediately.

Alert rules

Create rules in Settings β†’ Alerts. Each rule pairs an event type with a channel. Use the "Test" button to verify delivery before relying on it. Rules can be disabled without deletion.

Admin panel

The Admin page at /dashboard/admin is restricted to users with the admin role. It provides platform-wide oversight tools.

  • Overview β€” total users, organisations, domains, and indexing jobs across the platform
  • Organisations β€” all orgs with plan tier, domain count, and plan override capability
  • Users β€” all users with email, org membership, and join date
  • Plan override β€” change any org's plan tier instantly for manual upgrades, trials, and refunds
🚨
Admin endpoints require the admin scope and are rate-limited. Misuse may result in account suspension.
Questions not covered here?
Email support@seoventra.com β€” we respond in plain language.
System statusView pricing β†’