Any page. Any data. Clean JSON.

Web scraping that returns what you actually want.

Dynamic - POST /v1/extract - 812ms - headless

REQUEST

curl -X POST https://api.runo.dev/v1/extract \
-H "X-API-Key: sk_live_9b1c" \
-H "Content-Type: application/json" \
-d '{
"url": "https://imdb.com/nm0001570/",
"schema": [
{
"field": "firstName",
"type": "string",
"example": "John"
},
{
"field": "netWorth",
"type": "float",
"example": 12500000.0
}
]
}'

RESPONSE

{
"status": "success",
"render_mode": "headless",
"data": {
"firstName": "Rachel",
"lastName": "McAdams",
"age": 45,
"netWorth": 8000000.00,
"isVerified": true
}
}


FEATURES

Scraping made easy.

Built for developers tired of babysitting broken scrapers and parsing raw HTML.

Typed JSON, Always

Strict coercion on every field: strings, integers, floats, booleans, dates, and arrays. Made to ensure no more ambiguous values slip through.

Plain JSON Schema

No CSS selectors, XPath, or complex DSLs. Simply define your field names, types, and examples to create a schema any developer can write in 30 seconds.

Static & Dynamic Keys

Bind a schema to a static key once in the dashboard. Requests require only a URL, with no schema attached. Or alternatively, attach a custom schema to every request using your dynamic API key, enabling higher flexibility.

Three Methods of Scraping

Scrape a single URL with /extract, fan-out to multiple URLs with /batch, or crawl recursively with /crawl using the same schema and a singular API key.

Semantic Extraction

Runo extracts by meaning, not DOM position. Site redesigns and HTML changes won't ever break your pipeline.

Explicit Nulls

Unresolvable fields return null. Runo never silently drops, never omitts and never foolheartedly guesses a wrong response. You always know exactly what was and was not found.

Field Hints

In the case of a very specific request, add a hint string to any field to have it injected directly into Runo's extraction instructions, ensuring you get exactly what you need.

Auto JS Rendering

Transparent fetch-first strategy. Auto-escalates to Playwright headless when JS detection or 403 triggers. "render_mode" in the response tells you exactly which path ran.

Bot Bypass

CAPTCHA solving and residential proxy access included with Pro & Scale plan. ~3-8% of requests trigger these layers. Amortized cost ~$0.00005-0.0001/req. Kill-switches prevent runaway spend.

HOW MUCH DOES RUNO COST?

Request Counting

/extract = 1 req. /batch = 1 req per URL. /crawl reserves max_pages upfront and refunds unused pages after completion.

Overage Policy

$0.002 per request beyond quota. Opt-in for Pro and Scale. Default is to reject requests at the limit.

HOW IT WORKS

01

Define your schema

List the fields you want. Name, type, example and add a hint if necessary.

02

Call the API

POST to /extract, /batch, or /crawl with your key and schema and Runo handles the rest.

03

Runo fetches and renders

Plain HTTP first. Auto-escalates to headless if JS-gating or empty response detected.

04

Get typed JSON back

Runo extracts and coerces every field. Clean validated JSON. Unresolvable fields return null.

VS. COMPETITORS

Why choose Runo?

With Runo, we attempted to find every API scraper pain-point and turn them around into an advantage. Here's how we compare to our competitors.

Competitors

Runo

Not scientifically proven. This is more of a guesstimate ;).

Other APIs Runo
Requests return raw HTML or Markdown, meaning you still have to parse it. Returns ready-to-use typed JSON. Zero post-processing needed on your end.
Schema requires CSS selectors, XPath, or proprietary DSL. Runo schemas are plain JSON: field name, type, and example.
Our competitors are brittle. Applications break when site HTML structure changes. Runo extracts by semantic meaning, not DOM position.
Silent failures occur relentlessly. Empty or wrong data returned with 200 OK. Unresolvable fields return null explicitly.
JS-heavy sites silently return empty content. Runo solves that through auto-escalation to headless rendering, transparent to you, the caller.
Crawling requires a separate product or extra setup. Runo is one API, three modes: /extract, /batch, /crawl.
Inconsistent returns per call. E.g. price comes back as a string, number, or null Runo has enforced type coercion: float, integer, string, boolean, date, array.

10-14s

median response time (p50)

98.4%

extraction success rate

8+

enforced output field types

3

extraction modes

PRICING

Choose what works for you.

All plans share the exact same features and are differentiated by usage (including overage) only. If the free tier doesn't fit your needs, you can choose to upgrade through one of our paid plans.

Runo Free

$0

/month


  • 500 requests/month.
  • 1 request/min rate limit.
  • Enhanced bot detection + bypassing.
  • Overage opt-in.
Get Started for Free

Runo Starter

$17

/month


  • 15,000 requests/month.
  • 30 requests/min rate limit.
  • Enhanced bot detection + bypassing.
  • Overage opt-in.
Get Started

Runo Pro

$59

/month


  • 50,000 requests/month.
  • 120 requests/min rate limit.
  • Enhanced bot detection + bypassing.
  • Overage opt-in.
Get Started

Runo Scale

$449

/month


  • 500,000 requests/month.
  • 500 requests/min rate limit.
  • Enhanced bot detection + bypassing.
  • Overage opt-in.
Get Started

OVERAGE PRICING

Tier Deposit Total Requests Cost Per 1k/req
Pro
$5 3,300 $1.515
Pro
$500 440,000 $1.136
Scale
$5 4,500 $1.11
Scale
$500 525,000 $0.952

Rate decreases linearly between $5 and $500.

AM

PR

LJ

RM

WW

KK

Loved by 1,305 users.

FAQs

If you can't find the answer to your question below, email us at hello@scrapewithruno.com

Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


Yes. Any schema field can include an optional hint string injected directly into the Gemini prompt — for example: use the sale price if present, otherwise the regular price.


GET STARTED

Stop parsing HTML. Start shipping.

500 free requests. No credit card. Set up in under 5 minutes.

✓ 500 free requests/mo

✓ Lorem ipsum dolor sit.

✓ Lorem, ipsum dolor.

✓ Cancel anytime