Skip to content

Quickstart

Five minutes from zero to your first extracted JSON.

1. Create an Account

Sign in with Google to create your account. New accounts land on the free tier (500 requests/month, 1 request/min).

2. Create an API Key

In the dashboard → API Keys → Create API Key. You'll choose between:

TypePrefixSchema Lives In…Best For
Dynamicsk_live_Each request bodyAd-hoc extraction, varying shapes
Staticsk_static_The key itself (bound at creation)Production

The full key is shown only once at creation. Copy and save it as soon as possible.

3. Make Your First Call

Set up your environment:

bash
export RUNO_API_KEY="sk_live_..."

Send a request:

bash
curl -X POST https://api.scrapewithruno.com/v1/extract \
  -H "X-API-Key: $RUNO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://news.ycombinator.com/item?id=1",
    "schema": [
      { "field": "title",  "type": "string",  "example": "Y Combinator" },
      { "field": "author", "type": "string",  "example": "pg" },
      { "field": "points", "type": "integer", "example": 57 }
    ]
  }'
js
const res = await fetch('https://api.scrapewithruno.com/v1/extract', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.RUNO_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    url: 'https://news.ycombinator.com/item?id=1',
    schema: [
      { field: 'title',  type: 'string',  example: 'Y Combinator' },
      { field: 'author', type: 'string',  example: 'pg' },
      { field: 'points', type: 'integer', example: 57 },
    ],
  }),
})
const json = await res.json()
console.log(json.data)
py
import os, requests

res = requests.post(
    "https://api.scrapewithruno.com/v1/extract",
    headers={"X-API-Key": os.environ["RUNO_API_KEY"]},
    json={
        "url": "https://news.ycombinator.com/item?id=1",
        "schema": [
            {"field": "title",  "type": "string",  "example": "Y Combinator"},
            {"field": "author", "type": "string",  "example": "pg"},
            {"field": "points", "type": "integer", "example": 57},
        ],
    },
)
print(res.json()["data"])

4. Read the Response

json
{
  "url": "https://news.ycombinator.com/item?id=1",
  "status": "success",
  "render_mode": "fetch",
  "data": {
    "title": "Y Combinator",
    "author": "pg",
    "points": 57
  }
}
  • status is "success" or "error".
  • render_mode tells you which path served the request: fetch, headless, structured, or cache.
  • data is the extracted record. Keys match the field names in your schema, values are coerced to the declared type.
  • Missing values come back as null.

Released under the terms of Runo’s Terms of Use.