🤖 ScrapeFlow
Web scraping API. Send a URL and get the page back as HTML, text, markdown, or JSON.
GET,POST, andPUT- Custom headers
- Geotargeting for
US,GB,JP,BR,ZA, andAU - Fast fetch by default, with optional JavaScript rendering
- Wait for a CSS selector before the page is returned
- Extract elements with CSS selectors
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."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.