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
keywordstringYesSearch keyword
basestringYesSearch engine base (e.g. google.fr)
prioritystringNolowlow or high (high costs 2x)
typestringNoSERP type (+2 units if set)
batchstringNoBatch identifier for grouping
postback_urlstringNoURL to POST results to when ready
filtersobjectNoResult 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
idstringYesSERP 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
keywordstringNoFilter by keyword
batchstringNoFilter 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
urlstringYesURL to check
prioritystringNolowlow or high (high costs 2x)
levelstringNoexactexact match or broader
batchstringNoBatch identifier
postback_urlstringNoURL 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
idstringYesJob 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
urlstringNoFilter by URL
batchstringNoFilter by batch
codeintegerNoFilter 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
idstringYesJob 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 bodyYesArray 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
domainstringYesDomain to query (query param)
basestringNofr_frMarket/locale code
limitintegerNo100Results per page (max 10,000)
offsetintegerNo0Offset for pagination
datestringNolatestSpecific date
conditionsobjectNoFilter conditions (p, url, keyword_title, search_volume, visibility, branded, tags)
orderobjectNoSort 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
domainstringYesDomain 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 bodyYesArray of items or domain query param
basestringNofr_frMarket/locale code
monthsintegerNo12Number of months
start_datestringNoStart date (YYYY-MM-DD)
end_datestringNoEnd 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
basestringNoMarket/locale code
Example Request
curl "https://api1.seobserver.com/organic_keywords/list_dates.json?base=fr_fr" \
  -H "X-SEObserver-key: YOUR_API_KEY"