Start Free
SEO API · Scraper

Scraper

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

Send a URL and get its page content back as clean markdown (or raw HTML), with 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 Rate limit exceeded (fixed-window default: 30 requests / 3 seconds).
 

Other endpoints

Explore the rest of the SEO API.

 

API Balance

Add funds once and use them anytime. Your balance never expires. New accounts start with $1 free.

Starter

$10 to spend

$ 10 one-time

 
Balance never expires.

A first top-up to kick the tires.

Most popular

Pro

$115 to spend

$ 100 one-time

+15% bonus
$100 + $15 free

The sweet spot for steady production traffic.

Scale

$1,300 to spend

$ 1,000 one-time

+30% bonus
$1,000 + $300 free

Best rate per dollar for high-volume workloads.

 

FAQ

Simple answers for developers using the API.

Pricing & Balance

Every API endpoint has a fixed price in USD. Your requests are charged directly against your API balance, so you always know what each call costs.
No. Seonio does not use abstract credits for API pricing. You add dollars to your account and spend that balance directly on API usage.
No. Your API balance never expires, so you can use it whenever your workflows need it.
Paid API requests stop until you add more balance. This keeps spend predictable and prevents unexpected charges.

API & Integration

You can create and manage API keys from your account. Use your key to authenticate requests from your app, scripts, or internal tools.
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
Our support team responds to email inquiries within 1 business day. We can help with account, billing, and API integration questions.
We enforce a global rate limit per API-Key of 10 requests per second across all endpoints to ensure system stability. If you exceed this, our servers will return an HTTP 429 Too Many Requests status code. To handle this seamlessly in production, we recommend building rate-limiting logic or an exponential backoff (briefly pausing before retrying) directly into your application code.
 
blurry shape
shape line circles

Start Researching for Free

$1 free balance included • No credit card required • Access all features