Code Examples
OmniScrape is a plain REST API, so any language that can send an HTTP POST works — no SDK required. Below is the same request (POST /v1/scrape) in the most common languages. Set your key in an environment variable named OMNISCRAPE_KEY and never hard-code it.
- cURL
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
curl -X POST https://api.omniscrape.io/v1/scrape \
-H "X-API-Key: $OMNISCRAPE_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"mode": "auto",
"output_format": "markdown"
}'
import os
import requests
resp = requests.post(
"https://api.omniscrape.io/v1/scrape",
headers={"X-API-Key": os.environ["OMNISCRAPE_KEY"]},
json={
"url": "https://example.com",
"mode": "auto",
"output_format": "markdown",
},
timeout=120,
)
data = resp.json()
if data["success"]:
print(data["data"]["content"])
else:
print("Error:", data["error"])
const res = await fetch("https://api.omniscrape.io/v1/scrape", {
method: "POST",
headers: {
"X-API-Key": process.env.OMNISCRAPE_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://example.com",
mode: "auto",
output_format: "markdown",
}),
});
const json = await res.json();
if (json.success) {
console.log(json.data.content);
} else {
console.error("Error:", json.error);
}
<?php
$ch = curl_init("https://api.omniscrape.io/v1/scrape");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: " . getenv("OMNISCRAPE_KEY"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"url" => "https://example.com",
"mode" => "auto",
"output_format" => "markdown",
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $response["data"]["content"];
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"url": "https://example.com",
"mode": "auto",
"output_format": "markdown",
})
req, _ := http.NewRequest("POST",
"https://api.omniscrape.io/v1/scrape", bytes.NewReader(body))
req.Header.Set("X-API-Key", os.Getenv("OMNISCRAPE_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}
require "net/http"
require "json"
require "uri"
uri = URI("https://api.omniscrape.io/v1/scrape")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri)
req["X-API-Key"] = ENV["OMNISCRAPE_KEY"]
req["Content-Type"] = "application/json"
req.body = {
url: "https://example.com",
mode: "auto",
output_format: "markdown"
}.to_json
res = JSON.parse(http.request(req).body)
puts res.dig("data", "content")
import java.net.URI;
import java.net.http.*;
public class Scrape {
public static void main(String[] args) throws Exception {
String body = """
{ "url": "https://example.com", "mode": "auto", "output_format": "markdown" }
""";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.omniscrape.io/v1/scrape"))
.header("X-API-Key", System.getenv("OMNISCRAPE_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
}
}
Tip: copy the snippet from your dashboard
The Web Unlocker playground generates a ready-to-paste cURL, Python, and Node snippet from whatever options you toggle — the fastest way to get an exact request for your use case.
Recommended client settings
- Timeout — set your HTTP client timeout to at least 120 seconds.
js_renderingrequests can take several seconds, and the connection stays open until the page is ready. - Retries — retry on
429,500,502,503with exponential backoff. See Errors. - Concurrency — respect your plan's concurrency limit. See Rate limits.