MENU navbar-image

🤖 ScrapeFlow

Web scraping API. Send a URL and get the page back as HTML, text, markdown, or JSON.

POST /v1/scraper

requires authentication

Fetch one URL and return the page. A plain request is a fast browser-fingerprinted fetch; a real browser is used when render_js or wait_for_selector is set, or when the fast fetch does not return HTTP 200.

A fetched page always returns HTTP 200; the target site's own status code (for example 404) is in meta.status. HTML is returned exactly as received. Errors from ScrapeFlow itself (invalid request, blocked URL, page could not be loaded) use 4xx/5xx codes with success: false.

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/scrapeflow/scraper'
payload = {
    "url": "https:\/\/api.steadyapi.com\/",
    "method": "GET",
    "headers": {
        "Accept-Language": "en-US"
    },
    "geo": "US",
    "render_js": false,
    "timeout": 10
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/scrapeflow/scraper';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
        ],
        'json' => [
            'url' => 'https://api.steadyapi.com/',
            'method' => 'GET',
            'headers' => [
                'Accept-Language' => 'en-US',
            ],
            'geo' => 'US',
            'render_js' => false,
            'timeout' => 10,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/scrapeflow/scraper"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:\/\/api.steadyapi.com\/",
    "method": "GET",
    "headers": {
        "Accept-Language": "en-US"
    },
    "geo": "US",
    "render_js": false,
    "timeout": 10
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
curl --request POST \
    "https://api.steadyapi.com/v1/scrapeflow/scraper" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --data "{
    \"url\": \"https:\\/\\/api.steadyapi.com\\/\",
    \"method\": \"GET\",
    \"headers\": {
        \"Accept-Language\": \"en-US\"
    },
    \"geo\": \"US\",
    \"render_js\": false,
    \"timeout\": 10
}"

Example response (200, Success):


{
    "meta": {
        "version": "v1.0",
        "status": 200,
        "copywrite": "https://steadyapi.com",
        "status_code": 200,
        "headers": {
            "date": "Sat, 14 Feb 2026 19:57:52 GMT",
            "content-type": "application/json",
            "content-length": "136",
            "server": "cloudflare",
            "cache-control": "private, must-revalidate",
            "pragma": "no-cache",
            "expires": "-1",
            "set-cookie": "XSRF-TOKEN=eyJpdiI6ImhuQW1TVnl6RldDUkF4UElyQ3JnTWc9PSIsIn...",
            "content-encoding": "br",
            "x-frame-options": "SAMEORIGIN",
            "x-xss-protection": "1; mode=block",
            "x-content-type-options": "nosniff",
            "nel": "{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}",
            "vary": "accept-encoding",
            "cf-cache-status": "DYNAMIC",
            "report-to": "{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=WHSxhKns%2BOQEimKsvvZ7%2BcVbVhvMa4wnhvh3RF2Gr86blUaQB%2B5FRMPtoqIPSrGJHmH5aw8JXEh2gSDt4SrFFDn4wL79cy%2BBaiYGVM%2FdNebtrONlFbcybnUjRigd\"}]}",
            "cf-ray": "9cdf23146c4aea6c-DEN",
            "alt-svc": "h3=\":443\"; ma=86400"
        }
    },
    "body": {
        "message": "Welcome to SteadyAPI! Please refer to our API documentation to learn how to interact with our API: https://docs.steadyapi.com"
    }
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

POST v1/scrapeflow/scraper

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Content-Type application/json

Body Parameters

url   string   

The webpage URL to fetch. Only public http and https addresses are allowed. Example: https://api.steadyapi.com/

method   string  optional  

HTTP method (GET, POST, PUT). Default: GET. Example: GET

headers   object  optional  

Custom headers as key-value pairs, or a list of "Name: value" strings.

data   string  optional  

Request body data for POST/PUT requests. Can be JSON string or form-encoded string Ex: {"key":"value"}.

geo   string  optional  

Geotargeting location (US, GB, JP, BR, ZA, AU). Default: US. Example: US

render_js   boolean  optional  

Load the page in a real browser and return the HTML after JavaScript runs. Slower. Default: false. Example: false

wait_for_selector   string  optional  

With JavaScript rendering, wait for this CSS selector before returning. Setting it turns on render_js.

device   string  optional  

Browser device for JavaScript rendering (mobile, desktop). Default: mobile.

timeout   integer  optional  

Maximum wait time in seconds. Range: 10 to 30 seconds. Default: 10. Example: 10

output   string  optional  

Body format for HTML pages (html, text, markdown). Default: html.

extract   object  optional  

Named CSS selectors; matches are returned in extracted. Up to 20.

extract_type   string  optional  

Return extracted matches as text or html. Default: text.

include_body   boolean  optional  

Set to false to return only extracted and leave body empty. Default: true.