Try It Free
SEO API · Scraper

Scraper

Scrape a supported URL to clean, LLM-ready markdown in one call.

Send a supported URL and get available page content back as clean markdown (or raw HTML), with available title and meta description. Results are cached and served from storage while fresh, so repeat lookups are fast. Ideal for content research, briefs and feeding pages into LLM pipelines.

POST /api/v1/scraper $0.002 / request
Get API Key

Use your Seonio API key instantly.

curl
curl -X POST https://seonio.com/api/v1/scraper \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $SEONIO_API_KEY" \
  -d '{"format": "md", "max_age_days": 7, "url": "https://moz.com/blog"}'

Sample response

{
  "html": null,
  "length": 18342,
  "markdown": "# The Moz Blog\n\nThe latest SEO news, tips and research from the Moz team ...",
  "meta_description": "Read the latest SEO news, tips and research from the Moz team.",
  "scraped_at": "2026-07-05T12:00:00",
  "title": "The Moz Blog | SEO Insights, Tips \u0026 Best Practices",
  "url": "https://moz.com/blog"
}
 

Request and response

The full contract for /api/v1/scraper — what to send and what comes back.

Request body

url string required

A full URL, e.g. "https://moz.com/blog".

max_age_days integer optional

Cache freshness window in days (default 7). Cached pages younger than this are served from storage; older pages are re-scraped. Use 0 to force a fresh scrape.

format string optional

Output format: "md" (markdown, the default), "html" (raw HTML) or "both". Unknown values fall back to "md".

Response fields

url string

The URL that was scraped.

title string | null

Page title, or null if nothing was scraped.

meta_description string | null

Meta description, or null if unavailable.

length integer | null

Character length of the page's markdown content, or null if nothing was scraped.

markdown string | null

The page content as markdown. Present for format "md" and "both"; null otherwise.

html string | null

The page as HTML. Present for format "html" and "both"; null otherwise.

scraped_at string | null

Timestamp of the stored scrape, or null if nothing was scraped.

 

Code examples

Copy, paste, swap in your API key.

curl -X POST https://seonio.com/api/v1/scraper \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"format": "md", "max_age_days": 7, "url": "https://moz.com/blog"}'
 

Playground

Run a real /api/v1/scraper request. No key? We show the real sample result so you can still inspect the shape.

Leave the API key empty to load the built-in sample response.

Request

POST /api/v1/scraper

sample mode

        
 

What developers build with it

Common ways Scraper ends up in production.

Feeding page content into LLM and analysis pipelines as markdown.

Building content briefs from competitor pages.

Extracting article text without running your own scraper.

 

Status codes

The same predictable contract on every endpoint.

200 Success. The lookup completed and was charged, even if the response is empty.
401 Missing or unknown API key.
402 Not enough balance on the account.
422 Invalid request body (wrong shape or types).
429 Account rate limit exceeded (20 requests per second).
 

Other endpoints

Explore the rest of the SEO API.

$0.001 / keyword

Keyword Research

/api/v1/keywords/global

Volume, CPC, competition and a 12-month trend for up to 100 keywords in one call.

View API docs
$0.01 / request

Keyword Countries

/api/v1/keywords/countries

Top five countries by keyword volume.

View API docs
$0.005 / request

Keyword Difficulty

/api/v1/keywords/difficulty

Country-specific ranking difficulty.

View API docs
$0.001 / request

Keyword Intent

/api/v1/keywords/intent

Search-intent classification.

View API docs
$0.01 / request

Keyword Demographics

/api/v1/keywords/demographics

Age and gender demand distribution.

View API docs
$0.25 / request

Keyword Clustering

/api/v1/keywords/clustering

Group a keyword's universe into topic clusters by SERP overlap.

View API docs
$0.02 / request

Keyword Suggestions

/api/v1/keywords/suggestions

Up to 100 related keyword ideas — each with full metrics — from one seed keyword.

View API docs
$0.01 / request + $0.001 / started 10 keywords

Keyword Metrics by Country

/api/v1/keywords/country

Localized metrics for up to 1000 keywords in one country.

View API docs
$0.001 / request

SERP

/api/v1/serp/country

Google organic results, People Also Ask and related searches for a keyword and country.

View API docs
$0.001 / request + $0.002 / scraped URL

SERP Scraper

/api/v1/serp/scraper

Run a Google search and get the top results scraped to clean markdown in one call.

View API docs
$0.01 / request

Website Traffic

/api/v1/website/traffic

Monthly organic traffic history for any domain.

View API docs
$0.02 / request

Website Ranking

/api/v1/website/ranking

A domain's full ranking footprint: countries, distribution, movers, top keywords and pages.

View API docs
$0.001 / request

Website Category

/api/v1/website/category

Taxonomy classification for a domain.

View API docs
$0.01 / request

Website Competitors

/api/v1/website/competitors

Ordered organic competitors.

View API docs
$0.001 / request

Similar Websites

/api/v1/website/similar

Traffic-ranked sites in the same category.

View API docs
$0.002 / request

URL Stats

/api/v1/url/stats

Page- and domain-level authority metrics for a specific URL.

View API docs
$0.02 / request

URL Keywords

/api/v1/url/keywords

Top organic keywords for one URL.

View API docs
$0.002 / request

Website Stats

/api/v1/website/stats

Domain-level authority metrics for a bare domain.

View API docs
$0.02 / request

Backlink History

/api/v1/backlink/history

Historical backlink counts for a domain.

View API docs
$0.02 / request

Backlink Table

/api/v1/backlink/table

Detailed backlinks for a domain or URL.

View API docs
$0.005 / request

SEO Page Checker

/api/v1/audit/page-checker

On-page SEO report and response timing.

View API docs
 

FAQ

Simple answers for developers using the API.

Pricing & Balance

Every endpoint has a published USD price or formula. Requests draw from the same included and Extra Usage balance as website and MCP actions.
Testing balance is spent first. Active subscribers then use included usage and Extra Usage expiring soonest. Every amount is displayed in dollars.
New Extra Usage is valid for one year. Included usage is replaced at each subscription-month boundary based on the active tier.

API & Integration

API actions require a verified account with a testing balance or active subscription balance. Create and manage API keys from your account, then send the key in the X-API-Key header.
Yes. Your dashboard shows your API usage and remaining balance, so you can track costs while building and running automated workflows.
We currently cover 50 markets. We add new countries regularly.
Algeria Argentina Australia Austria Bangladesh Belgium Brazil Bulgaria Canada Czechia Denmark Egypt Finland France Germany Ghana Greece Hungary India Indonesia Ireland Italy Japan Kenya Malaysia Mexico Morocco Netherlands New Zealand Nigeria Norway Pakistan Philippines Poland Portugal Romania Saudi Arabia Serbia Singapore South Africa Spain Sri Lanka Sweden Switzerland Thailand Turkiye United Arab Emirates United Kingdom United States Vietnam
Email support is available for account, billing, and API integration questions at [email protected].
The account-wide limit is 20 requests per second across website, REST API, and MCP data actions. Requests above it return HTTP 429.
 
blurry shape
shape line circles

Start free

$1 testing balance • No card required • Subscribe when ready