SEObserver API v1

Comprehensive SEO data API covering backlinks (powered by Majestic), SERP tracking, indexation checking, and organic keyword monitoring.

Authentication

All API requests require an API key. Pass it via the X-SEObserver-key HTTP header (recommended) or as a api_key query parameter.

curl -H "X-SEObserver-key: YOUR_API_KEY" https://api1.seobserver.com/backlinks/metrics.json

Your API key is available in your SEObserver dashboard under Settings > API.

Base URL

All endpoints are relative to: https://api1.seobserver.com/

All responses are JSON. Append .json to the endpoint path.

Rate Limits & Billing

Each API call consumes SEObserver Units from your account balance. The cost depends on the endpoint and the amount of data returned.

Cost Types

TypeFormulaDescription
FlatFixed amountSame cost regardless of data returned
Variablefactor × rowsScales with number of rows returned, subject to minimum
Mixedbase + factor × rowsFixed base cost plus variable component, subject to minimum
Free0No cost

Full Cost Table

EndpointTypeBaseFactorMin
backlinks/metricsVariable01—
backlinks/metrics_archiveVariable05—
backlinks/anchorsVariable0110
backlinks/topMixed40150
backlinks/refdomainsVariable0110
backlinks/pagesMixed40150
backlinks/historyVariable0110
backlinks/newlost_calendarFlat10——
backlinks/refdomaininfoVariable0110
backlinks/linkprofileMixed20130
backlinks/relatedsitesMixed40150
backlinks/queryestimateFlat1——
backlinks/searchbykeywordVariable0110
backlinks/keywordinfoVariable0110
backlinks/submitcrawlVariable0510
serps/addVariable01—
indexeds/addVariable01—
organic_keywords/metricsVariable01—
organic_keywords/indexVariable01—
organic_keywords/urlsVariable01—
organic_keywords/visibility_historyMixed12—

Check your current balance at any time using the subscription endpoint.

Input Format

Most Backlinks endpoints accept items as a JSON array in the request body, or as query parameters.

JSON Body (recommended)

[
  {"item_type": "domain", "item_value": "example.com"},
  {"item_type": "url", "item_value": "https://example.com/page"}
]

Query Parameters

?item_type=domain&item_value=example.com

Valid item_type values

item_typeDescription
domainRoot domain (e.g. example.com)
subdomainSubdomain (e.g. blog.example.com)
siteSite-level query
urlExact URL
pathURL path with wildcard matching
keywordKeyword string (only for keywordinfo endpoint)

Use Cases

Common workflows combining multiple endpoints to solve real SEO problems.

Backlinks Analysis

Monitor competitor backlink acquisition

Track how competitors gain links over time. Use history for trends and newlost_calendar for daily new/lost link activity.

Audit your link profile quality

Assess your backlink health by combining overall metrics, CF/TF distribution matrix, and anchor text analysis.

Find link building opportunities

Discover related sites in your niche and find domains ranking for your target keywords.

Bulk domain authority check

Check TrustFlow and CitationFlow for up to 100 domains at once. Use refdomaininfo for detailed referring domain data.

Detect negative SEO attacks

Spot sudden spikes in new backlinks or lost links that may indicate a negative SEO attack.

Keywords Research

Find content gaps

Get keyword popularity data and discover which domains rank for terms you're missing.

Content audit

Analyze which keywords and URLs drive organic visibility for your domain.

SERP Tracking

Track rankings for key terms

Submit keywords for SERP tracking and retrieve results once processed.

Monitor local SERP

Track rankings for specific locations using custom base and UULE parameters.

Indexation Monitoring

Verify new pages are indexed

Submit recently published URLs and check their indexation status in Google.

Site-wide indexation audit

Submit URLs in batch to audit indexation coverage across your entire site.

Subscription Endpoints

GET /api1/api_users/subscription.json Free

Get your current API subscription status including remaining units.

Example Request
curl https://api1.seobserver.com/api_users/subscription.json \
  -H "X-SEObserver-key: YOUR_API_KEY"
Example Response
{
  "status": "ok",
  "data": {
    "enabled": true,
    "TotalUnits": 485000,
    "MaxUnits": 500000
  }
}
GET /api1/api_users/costs.json Free

Get the full cost table for all API endpoints. Useful for building cost estimates in your integration.

ParameterTypeRequiredDefaultDescription
outputstringNostandardstandard (nested) or absolute (flat key-value)
Example Request
curl https://api1.seobserver.com/api_users/costs.json \
  -H "X-SEObserver-key: YOUR_API_KEY"

SERP Endpoints

Submit keywords for SERP (Search Engine Results Page) tracking. Results are processed asynchronously.

POST /api1/serps/add.json Variable: 1/keyword

Submit keywords for SERP checking. Each keyword+base pair creates a SERP job processed asynchronously.

ParameterTypeRequiredDefaultDescription
keywordstringYes—Search keyword
basestringYes—Search engine base (e.g. google.fr)
prioritystringNolowlow or high (high costs 2x)
typestringNo—SERP type (+2 units if set)
batchstringNo—Batch identifier for grouping
postback_urlstringNo—URL to POST results to when ready
filtersobjectNo—Result filters
Example Request
curl -X POST https://api1.seobserver.com/serps/add.json \
  -H "X-SEObserver-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"keyword":"seo tools","base":"google.fr","priority":"low"}]'
Example Response (201)
{
  "status": "ok",
  "data": [
    {
      "id": "64a1b2c3d4e5f6a7b8c9d0e1",
      "keyword": "seo tools",
      "base": "google.fr",
      "status": -1,
      "created": "2025-01-15T10:30:00+00:00"
    }
  ]
}
GET /api1/serps/view/{id}.json Free

Get the status and results of a specific SERP job by its ID.

ParameterTypeRequiredDefaultDescription
idstringYes—SERP job MongoDB ID (in URL path)
Example Request
curl https://api1.seobserver.com/serps/view/64a1b2c3d4e5f6a7b8c9d0e1.json \
  -H "X-SEObserver-key: YOUR_API_KEY"
GET /api1/serps/index.json Free

List all your SERP jobs with pagination and filtering.

ParameterTypeRequiredDefaultDescription
limitintegerNo100Results per page (max 10,000)
pageintegerNo1Page number
keywordstringNo—Filter by keyword
batchstringNo—Filter by batch
Example Request
curl "https://api1.seobserver.com/serps/index.json?limit=50&batch=campaign1" \
  -H "X-SEObserver-key: YOUR_API_KEY"

Indexed Endpoints

Check if URLs are indexed in Google. Jobs are processed asynchronously.

POST /api1/indexeds/add.json Variable: 1/URL

Submit URLs for indexation checking. Each URL creates an async job.

ParameterTypeRequiredDefaultDescription
urlstringYes—URL to check
prioritystringNolowlow or high (high costs 2x)
levelstringNoexactexact match or broader
batchstringNo—Batch identifier
postback_urlstringNo—URL to POST results to
Example Request
curl -X POST https://api1.seobserver.com/indexeds/add.json \
  -H "X-SEObserver-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"url":"https://example.com/page","priority":"low"}]'
GET /api1/indexeds/view/{id}.json Free

Get the status and result of a specific indexation check job.

ParameterTypeRequiredDefaultDescription
idstringYes—Job MongoDB ID (in URL path)
Example Request
curl https://api1.seobserver.com/indexeds/view/64a1b2c3d4e5f6a7b8c9d0e1.json \
  -H "X-SEObserver-key: YOUR_API_KEY"
GET /api1/indexeds/index.json Free

List all your indexation check jobs with pagination and filtering.

ParameterTypeRequiredDefaultDescription
limitintegerNo100Results per page (max 10,000)
pageintegerNo1Page number
urlstringNo—Filter by URL
batchstringNo—Filter by batch
codeintegerNo—Filter by HTTP status code
Example Request
curl "https://api1.seobserver.com/indexeds/index.json?limit=50&batch=batch1" \
  -H "X-SEObserver-key: YOUR_API_KEY"
DELETE /api1/indexeds/delete/{id}.json Free

Delete an indexation check job.

ParameterTypeRequiredDefaultDescription
idstringYes—Job MongoDB ID (in URL path)
Example Request
curl https://api1.seobserver.com/indexeds/delete/64a1b2c3d4e5f6a7b8c9d0e1.json \
  -H "X-SEObserver-key: YOUR_API_KEY"

Organic Keywords Endpoints

Access SEObserver's organic keyword tracking data. Covers visibility metrics, keyword rankings, and historical trends.

GET /api1/organic_keywords/metrics.json Variable: 1/item

Get organic visibility metrics for up to 100 domains. Returns aggregated SEO visibility scores.

ParameterTypeRequiredDefaultDescription
itemsJSON bodyYes—Array of items (max 100)
basestringNofr_frMarket/locale code
datestringNolatestSpecific date
Example Request
curl -X POST https://api1.seobserver.com/organic_keywords/metrics.json?base=fr_fr \
  -H "X-SEObserver-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"item_type":"domain","item_value":"example.com"}]'
GET /api1/organic_keywords/index.json Variable: 1/row

List organic keyword rankings for a domain with advanced filtering and sorting.

ParameterTypeRequiredDefaultDescription
domainstringYes—Domain to query (query param)
basestringNofr_frMarket/locale code
limitintegerNo100Results per page (max 10,000)
offsetintegerNo0Offset for pagination
datestringNolatestSpecific date
conditionsobjectNo—Filter conditions (p, url, keyword_title, search_volume, visibility, branded, tags)
orderobjectNo—Sort order (p, url, keyword_title, search_volume, cpc, competition, visibility, branded, tags)
Example Request
curl "https://api1.seobserver.com/organic_keywords/index.json?domain=example.com&base=fr_fr&limit=50" \
  -H "X-SEObserver-key: YOUR_API_KEY"
GET /api1/organic_keywords/urls.json Variable: 1/row

Get URLs for a domain grouped by aggregated visibility and keyword count.

ParameterTypeRequiredDefaultDescription
domainstringYes—Domain to query
basestringNofr_frMarket/locale code
limitintegerNo100Results per page (max 10,000)
offsetintegerNo0Offset for pagination
Example Request
curl -X POST "https://api1.seobserver.com/organic_keywords/urls.json?base=fr_fr&limit=100" \
  -H "X-SEObserver-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"item_type":"domain","item_value":"example.com"}]'
GET /api1/organic_keywords/visibility_history.json Mixed: 1 + 2/month

Get month-by-month visibility history for domains.

ParameterTypeRequiredDefaultDescription
itemsJSON bodyYes—Array of items or domain query param
basestringNofr_frMarket/locale code
monthsintegerNo12Number of months
start_datestringNo—Start date (YYYY-MM-DD)
end_datestringNo—End date (YYYY-MM-DD)
Example Request
curl -X POST "https://api1.seobserver.com/organic_keywords/visibility_history.json?base=fr_fr&months=6" \
  -H "X-SEObserver-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"item_type":"domain","item_value":"example.com"}]'
GET /api1/organic_keywords/list_dates.json Free

List all available data dates for a given market. Useful to know which dates you can query in the index endpoint.

ParameterTypeRequiredDefaultDescription
basestringNo—Market/locale code
Example Request
curl "https://api1.seobserver.com/organic_keywords/list_dates.json?base=fr_fr" \
  -H "X-SEObserver-key: YOUR_API_KEY"