boolean
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "metadata"],
"onlyMainContent": true
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["screenshot"],
"viewport": { "width": 1440, "height": 900 },
"waitFor": 1000
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["links"]
}'
const response = await fetch("https://lookup.proweblook.com/api/v1/scrape", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: "YOUR_API_KEY",
url: "https://example.com",
formats: ["markdown", "metadata"],
onlyMainContent: true
})
});
const result = await response.json();
if (result.status) {
console.log(result.data.markdown);
console.log(result.data.metadata.title);
}
import requests
response = requests.post(
"https://lookup.proweblook.com/api/v1/scrape",
json={
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "links", "metadata"],
"onlyMainContent": True,
},
timeout=60,
)
result = response.json()
if result["status"]:
print(result["data"]["markdown"])
print(result["data"]["metadata"]["title"])
$response = Http::timeout(60)->post('https://lookup.proweblook.com/api/v1/scrape', [
'api_key' => 'YOUR_API_KEY',
'url' => 'https://example.com',
'formats' => ['markdown', 'metadata'],
'onlyMainContent' => true,
]);
$result = $response->json();
if ($result['status']) {
echo $result['data']['markdown'];
}
{
"status": true,
"data": {
"markdown": "# Example Domain\n\nThis domain is for use in illustrative examples in documents...",
"metadata": {
"title": "Example Domain",
"description": "",
"language": "",
"keywords": "",
"ogTitle": "",
"ogDescription": "",
"ogUrl": "",
"ogImage": "",
"ogSiteName": "",
"twitterCard": "",
"twitterTitle": "",
"twitterDescription": "",
"canonical": "",
"sourceURL": "https://example.com/",
"statusCode": 200
}
},
"balance": 99
}
{
"status": true,
"data": {
"links": [
"https://www.iana.org/domains/reserved"
]
},
"balance": 98
}
{
"status": true,
"data": {
"screenshot": "iVBORw0KGgoAAAANSUhEUgAA..."
},
"balance": 97
}
{
"status": false,
"error": "api_key is required"
}
{
"status": false,
"error": "url must be a valid http or https URL"
}
{
"status": false,
"error": "Invalid format(s): pdf, docx. Allowed: markdown, html, rawHtml, links, metadata, screenshot"
}
{
"status": false,
"error": "Insufficient scraping credits"
}
{
"status": false,
"error": "Scraping failed"
}
API Reference
Scraping & Screenshot
Scrape any URL — get clean Markdown, HTML, links, SEO metadata, and full-page screenshots in a single call.
POST
/
api
/
v1
/
scrape
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "metadata"],
"onlyMainContent": true
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["screenshot"],
"viewport": { "width": 1440, "height": 900 },
"waitFor": 1000
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["links"]
}'
const response = await fetch("https://lookup.proweblook.com/api/v1/scrape", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: "YOUR_API_KEY",
url: "https://example.com",
formats: ["markdown", "metadata"],
onlyMainContent: true
})
});
const result = await response.json();
if (result.status) {
console.log(result.data.markdown);
console.log(result.data.metadata.title);
}
import requests
response = requests.post(
"https://lookup.proweblook.com/api/v1/scrape",
json={
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "links", "metadata"],
"onlyMainContent": True,
},
timeout=60,
)
result = response.json()
if result["status"]:
print(result["data"]["markdown"])
print(result["data"]["metadata"]["title"])
$response = Http::timeout(60)->post('https://lookup.proweblook.com/api/v1/scrape', [
'api_key' => 'YOUR_API_KEY',
'url' => 'https://example.com',
'formats' => ['markdown', 'metadata'],
'onlyMainContent' => true,
]);
$result = $response->json();
if ($result['status']) {
echo $result['data']['markdown'];
}
{
"status": true,
"data": {
"markdown": "# Example Domain\n\nThis domain is for use in illustrative examples in documents...",
"metadata": {
"title": "Example Domain",
"description": "",
"language": "",
"keywords": "",
"ogTitle": "",
"ogDescription": "",
"ogUrl": "",
"ogImage": "",
"ogSiteName": "",
"twitterCard": "",
"twitterTitle": "",
"twitterDescription": "",
"canonical": "",
"sourceURL": "https://example.com/",
"statusCode": 200
}
},
"balance": 99
}
{
"status": true,
"data": {
"links": [
"https://www.iana.org/domains/reserved"
]
},
"balance": 98
}
{
"status": true,
"data": {
"screenshot": "iVBORw0KGgoAAAANSUhEUgAA..."
},
"balance": 97
}
{
"status": false,
"error": "api_key is required"
}
{
"status": false,
"error": "url must be a valid http or https URL"
}
{
"status": false,
"error": "Invalid format(s): pdf, docx. Allowed: markdown, html, rawHtml, links, metadata, screenshot"
}
{
"status": false,
"error": "Insufficient scraping credits"
}
{
"status": false,
"error": "Scraping failed"
}
Overview
The Scraping & Screenshot API lets you extract content from any web page in multiple formats. Powered by Lightpanda + Chromium, it returns clean Markdown, rendered HTML, raw HTML, links, SEO metadata, and full-page screenshots — all in a single request. This endpoint accepts onlyPOST requests with a JSON body.
Request Parameters
string
required
Your ProWebLook API key. See Authentication.
string
required
The full URL to scrape. Must start with
http:// or https://.string[]
List of output formats to return. Any combination of:
markdown, html, rawHtml, links, metadata, screenshot.Defaults to ["markdown", "metadata"].When
true, strips navigation, footer, ads, and sidebars — keeping only the main article content.Defaults to true.integer
Extra milliseconds to wait after page load before extracting content. Useful for animations or lazy-loaded content.Range:
0 – 10000. Defaults to 0.integer
Maximum time in milliseconds for the entire scrape request.Range:
1000 – 120000. Defaults to 30000.object
Custom HTTP headers to send to the target website (e.g.,
Accept-Language, Cookie).Defaults to {}.object
Browser viewport size used for rendering.
width:320–3840(default1920)height:240–2160(default1080)
{ "width": 1440, "height": 900 }
array
Browser automation steps to run before extracting content. Useful for SPAs, cookie banners, infinite scroll, etc. See the Actions section below.Defaults to
[].Available Formats
| Format | Returns | Description |
|---|---|---|
markdown | string | Clean Markdown of the page content |
html | string | JS-rendered, cleaned HTML |
rawHtml | string | Exact raw HTML with no post-processing |
links | string[] | All unique absolute links found on the page |
metadata | object | Title, description, OG tags, Twitter card, canonical URL |
screenshot | string | Full-page screenshot as base64-encoded PNG |
screenshot uses a full Chromium engine and is slower (~5–15 s). All other formats use Lightpanda and are much faster (~1–5 s).Actions (Browser Automation)
Useactions to interact with the page before content is extracted:
| Type | Fields | What it does |
|---|---|---|
wait | milliseconds | Pause for N ms |
waitForSelector | selector, timeout | Wait for a CSS selector to appear |
click | selector | Click an element |
write | selector, text | Type text into an input field |
press | key | Press a keyboard key (e.g., Enter, Tab) |
scroll | x, y | Scroll the page by x/y pixels |
evaluate | script | Run a JavaScript string on the page |
Example: Dismiss a cookie banner before screenshotting
"actions": [
{ "type": "waitForSelector", "selector": "#cookie-accept", "timeout": 3000 },
{ "type": "click", "selector": "#cookie-accept" },
{ "type": "wait", "milliseconds": 500 }
]
Response
boolean
true if the scrape succeeded, false otherwise.object
Contains only the keys matching the
formats you requested.Show Data Fields
Show Data Fields
string
The page content converted to clean Markdown.
string
JS-rendered HTML, filtered through a readability engine.
string
The exact DOM HTML after JavaScript execution — no post-processing.
string[]
Array of all unique absolute
http/https links found on the page.object
SEO metadata extracted from the page.
Show Metadata Fields
Show Metadata Fields
string
Page title
string
Meta description
string
Page language
string
Meta keywords
string
Open Graph title
string
Open Graph description
string
Open Graph URL
string
Open Graph image URL
string
Open Graph site name
string
Twitter card type
string
Twitter title
string
Twitter description
string
Canonical URL
string
The URL that was scraped
integer
HTTP status code of the target page
string
Base64-encoded PNG string (no
data:image/png;base64, prefix).To embed in HTML:<img src="data:image/png;base64,{screenshot_value}" />
integer
Your remaining
scraping_balance after this request.Credit Cost
1 scraping credit is deducted from yourscraping_balance per successful request — regardless of how many formats you request. All formats are processed in a single call.
Limits & Timeouts
| Parameter | Min | Max | Default |
|---|---|---|---|
timeout | 1,000 ms | 120,000 ms | 30,000 ms |
waitFor | 0 ms | 10,000 ms | 0 ms |
viewport.width | 320 px | 3,840 px | 1,920 px |
viewport.height | 240 px | 2,160 px | 1,080 px |
When using screenshot or high timeout values, set your HTTP client timeout to at least
timeout + 10000 ms to avoid cutting off the connection before the server responds.curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "metadata"],
"onlyMainContent": true
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["screenshot"],
"viewport": { "width": 1440, "height": 900 },
"waitFor": 1000
}'
curl -X POST "https://lookup.proweblook.com/api/v1/scrape" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["links"]
}'
const response = await fetch("https://lookup.proweblook.com/api/v1/scrape", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
api_key: "YOUR_API_KEY",
url: "https://example.com",
formats: ["markdown", "metadata"],
onlyMainContent: true
})
});
const result = await response.json();
if (result.status) {
console.log(result.data.markdown);
console.log(result.data.metadata.title);
}
import requests
response = requests.post(
"https://lookup.proweblook.com/api/v1/scrape",
json={
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"formats": ["markdown", "links", "metadata"],
"onlyMainContent": True,
},
timeout=60,
)
result = response.json()
if result["status"]:
print(result["data"]["markdown"])
print(result["data"]["metadata"]["title"])
$response = Http::timeout(60)->post('https://lookup.proweblook.com/api/v1/scrape', [
'api_key' => 'YOUR_API_KEY',
'url' => 'https://example.com',
'formats' => ['markdown', 'metadata'],
'onlyMainContent' => true,
]);
$result = $response->json();
if ($result['status']) {
echo $result['data']['markdown'];
}
{
"status": true,
"data": {
"markdown": "# Example Domain\n\nThis domain is for use in illustrative examples in documents...",
"metadata": {
"title": "Example Domain",
"description": "",
"language": "",
"keywords": "",
"ogTitle": "",
"ogDescription": "",
"ogUrl": "",
"ogImage": "",
"ogSiteName": "",
"twitterCard": "",
"twitterTitle": "",
"twitterDescription": "",
"canonical": "",
"sourceURL": "https://example.com/",
"statusCode": 200
}
},
"balance": 99
}
{
"status": true,
"data": {
"links": [
"https://www.iana.org/domains/reserved"
]
},
"balance": 98
}
{
"status": true,
"data": {
"screenshot": "iVBORw0KGgoAAAANSUhEUgAA..."
},
"balance": 97
}
{
"status": false,
"error": "api_key is required"
}
{
"status": false,
"error": "url must be a valid http or https URL"
}
{
"status": false,
"error": "Invalid format(s): pdf, docx. Allowed: markdown, html, rawHtml, links, metadata, screenshot"
}
{
"status": false,
"error": "Insufficient scraping credits"
}
{
"status": false,
"error": "Scraping failed"
}
