Web Scraping API
Web Scraping APIsAbout this API
Scrape any public web page and get it back in the format you need: raw HTML, structured JSON, Markdown, plain text or CSV. Each format is its own endpoint.
Include your API key in the X-API-KEY request header. Each successful (HTTP 200) request uses 1 credit.
If Markdown or text comes back empty, the site probably builds its content with JavaScript. Retry with render_js=true.
Raw HTML
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| url | string | Required | Page to scrape (http/https). |
| format | string | Optional | json = wrapped in the JSON response, html = the page HTML itself. Allowed: json, html. Default: json. |
| proxy_type | string | Optional | Proxy pool to scrape through. Allowed: premium, standard. Default: premium. |
| location | string | Optional | Country to scrape from. standard has 8 countries, premium has 248. Any letter case works. See /locations. Default: United States. |
| language | string | Optional | Locale code, e.g. en-GB, de-DE, pt-BR. Any case. See /languages. Default: en-US. |
| device | string | Optional | Device to emulate. See /devices. Allowed: desktop, desktop_chrome, desktop_firefox, desktop_safari, desktop_opera, desktop_edge, mobile, mobile_android, mobile_ios, tablet, tablet_android, tablet_ios. Default: desktop. |
| render_js | boolean | Optional | true renders JavaScript before reading the page (use for JS-heavy sites). Default: false. |
Returns the full HTML of the page. Best for developers who want to process the entire page themselves. / on its own is the same as /raw.
Responses
| Status | Description |
|---|---|
200 | Page HTML. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
422 | The page could not be scraped or nothing was found (e.g. NO_DATA_FOUND). |
curl -X GET "https://apipeak.dev/api/webscraper/raw?url=https://example.com" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": {
"url": "https:\/\/example.com",
"status_code": 200,
"content_length": 1256,
"html": "<!doctype html><html><head><title>Example Domain<\/title>..."
},
"warnings": [],
"meta": {
"time_ms": 2433,
"timestamp": "2026-10-24T11:29:50+00:00",
"scraper": "htmlscraper\/raw"
}
}
Structured JSON
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| url | string | Required | Page to scrape (http/https). |
| fields | string | Optional | Comma-separated list of fields to return. Returns all fields when omitted. Allowed: title, description, language, canonical, price, meta, headings, links, images, tables, lists, structured_data. |
| proxy_type | string | Optional | Proxy pool to scrape through. Allowed: premium, standard. Default: premium. |
| location | string | Optional | Country to scrape from. standard has 8 countries, premium has 248. Any letter case works. See /locations. Default: United States. |
| language | string | Optional | Locale code, e.g. en-GB, de-DE, pt-BR. Any case. See /languages. Default: en-US. |
| device | string | Optional | Device to emulate. See /devices. Allowed: desktop, desktop_chrome, desktop_firefox, desktop_safari, desktop_opera, desktop_edge, mobile, mobile_android, mobile_ios, tablet, tablet_android, tablet_ios. Default: desktop. |
| render_js | boolean | Optional | true renders JavaScript before reading the page (use for JS-heavy sites). Default: false. |
Extracts structured fields from the page: title, description, price, meta tags, headings, links, images, tables, lists and structured data.
- links: absolute URLs, de-duplicated;
typeisinternal,external,emailorphone. - images: absolute URLs, including lazy-loaded images (
data-src). - price: from JSON-LD offers, then
product:pricemeta tags, thenitemprop="price".nullif not found. - tables: colspan/rowspan expanded; multi-row headers merged into one header row.
Responses
| Status | Description |
|---|---|
200 | Extracted page fields. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
422 | The page could not be scraped or nothing was found (e.g. NO_DATA_FOUND). |
curl -X GET "https://apipeak.dev/api/webscraper/json?url=https://example.com" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": {
"url": "https:\/\/shop.com\/product\/1",
"status_code": 200,
"title": "Coffee Mug",
"description": "A ceramic coffee mug.",
"language": "en",
"canonical": "https:\/\/shop.com\/product\/1",
"price": {
"amount": "12.99",
"currency": "USD",
"source": "structured_data"
},
"meta": {
"og:title": "Coffee Mug",
"twitter:card": "summary"
},
"headings": [
{
"level": 1,
"text": "Coffee Mug"
}
],
"links": [
{
"text": "Help",
"url": "https:\/\/shop.com\/help",
"type": "internal"
}
],
"images": [
{
"url": "https:\/\/shop.com\/mug.png",
"alt": "A mug",
"width": 600,
"height": null
}
],
"tables": [
{
"index": 1,
"headers": [
"Name",
"Price"
],
"rows": [
[
"Mug",
"12.99"
]
]
}
],
"lists": [
{
"index": 1,
"type": "unordered",
"items": [
"One",
"Two"
]
}
],
"structured_data": [
{
"@type": "Product",
"name": "Coffee Mug"
}
]
},
"warnings": [],
"meta": {
"time_ms": 2433,
"timestamp": "2026-10-24T11:29:50+00:00",
"scraper": "htmlscraper\/json"
}
}
Markdown
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| url | string | Required | Page to scrape (http/https). |
| content | string | Optional | main = article only (drops menus, sidebars, footers, comments), full = whole page. Allowed: main, full. Default: main. |
| format | string | Optional | json = wrapped in the JSON response, md = the Markdown itself (text/markdown). Allowed: json, md. Default: json. |
| proxy_type | string | Optional | Proxy pool to scrape through. Allowed: premium, standard. Default: premium. |
| location | string | Optional | Country to scrape from. standard has 8 countries, premium has 248. Any letter case works. See /locations. Default: United States. |
| language | string | Optional | Locale code, e.g. en-GB, de-DE, pt-BR. Any case. See /languages. Default: en-US. |
| device | string | Optional | Device to emulate. See /devices. Allowed: desktop, desktop_chrome, desktop_firefox, desktop_safari, desktop_opera, desktop_edge, mobile, mobile_android, mobile_ios, tablet, tablet_android, tablet_ios. Default: desktop. |
| render_js | boolean | Optional | true renders JavaScript before reading the page (use for JS-heavy sites). Default: false. |
Converts the page to Markdown. Best for AI tools, document processing and readable articles. Supports headings, bold/italic, links, images, nested lists, code blocks (with language), quotes and tables.
Responses
| Status | Description |
|---|---|
200 | Page content as Markdown. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
422 | The page could not be scraped or nothing was found (e.g. NO_DATA_FOUND). |
curl -X GET "https://apipeak.dev/api/webscraper/markdown?url=https://example.com" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": {
"url": "https:\/\/en.wikipedia.org\/wiki\/Web_scraping",
"status_code": 200,
"title": "Web scraping",
"length": 18234,
"markdown": "# Web scraping\n\n**Web scraping** is data scraping used for extracting data from websites..."
},
"warnings": [],
"meta": {
"time_ms": 3120,
"timestamp": "2026-10-24T11:29:50+00:00",
"scraper": "htmlscraper\/markdown"
}
}
Plain text
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| url | string | Required | Page to scrape (http/https). |
| content | string | Optional | main = article only (drops menus, sidebars, footers, comments), full = whole page. Allowed: main, full. Default: main. |
| format | string | Optional | json = wrapped in the JSON response, txt = the text itself (text/plain). Allowed: json, txt. Default: json. |
| proxy_type | string | Optional | Proxy pool to scrape through. Allowed: premium, standard. Default: premium. |
| location | string | Optional | Country to scrape from. standard has 8 countries, premium has 248. Any letter case works. See /locations. Default: United States. |
| language | string | Optional | Locale code, e.g. en-GB, de-DE, pt-BR. Any case. See /languages. Default: en-US. |
| device | string | Optional | Device to emulate. See /devices. Allowed: desktop, desktop_chrome, desktop_firefox, desktop_safari, desktop_opera, desktop_edge, mobile, mobile_android, mobile_ios, tablet, tablet_android, tablet_ios. Default: desktop. |
| render_js | boolean | Optional | true renders JavaScript before reading the page (use for JS-heavy sites). Default: false. |
Returns clean page content without HTML tags.
Responses
| Status | Description |
|---|---|
200 | Page content as plain text. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
422 | The page could not be scraped or nothing was found (e.g. NO_DATA_FOUND). |
curl -X GET "https://apipeak.dev/api/webscraper/text?url=https://example.com" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": {
"url": "https:\/\/example.com",
"status_code": 200,
"title": "Example Domain",
"word_count": 30,
"length": 178,
"text": "Example Domain\n\nThis domain is for use in illustrative examples in documents..."
},
"warnings": [],
"meta": {
"time_ms": 1850,
"timestamp": "2026-10-24T11:29:50+00:00",
"scraper": "htmlscraper\/text"
}
}
CSV export
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| url | string | Required | Page to scrape (http/https). |
| source | string | Optional | What to export. Allowed: tables, links, images, headings, lists. Default: tables. |
| table | string | Optional | all or a table number (1 = first table). Only used with source=tables. Default: all. |
| format | string | Optional | csv = file, json = the same rows as JSON. Allowed: csv, json. Default: csv. |
| download | boolean | Optional | true = browser saves the file, false = show it inline. Default: true. |
| proxy_type | string | Optional | Proxy pool to scrape through. Allowed: premium, standard. Default: premium. |
| location | string | Optional | Country to scrape from. standard has 8 countries, premium has 248. Any letter case works. See /locations. Default: United States. |
| language | string | Optional | Locale code, e.g. en-GB, de-DE, pt-BR. Any case. See /languages. Default: en-US. |
| device | string | Optional | Device to emulate. See /devices. Allowed: desktop, desktop_chrome, desktop_firefox, desktop_safari, desktop_opera, desktop_edge, mobile, mobile_android, mobile_ios, tablet, tablet_android, tablet_ios. Default: desktop. |
| render_js | boolean | Optional | true renders JavaScript before reading the page (use for JS-heavy sites). Default: false. |
Exports tables or lists from the page as an Excel-ready CSV (UTF-8 with BOM, quoted fields, and cells starting with = + - @ prefixed with '). File name: <site>-<source>.csv.
Columns per source:
| source | Columns |
|---|---|
tables |
The table's own headers. With table=all, each table starts with a Table N row and tables are separated by a blank row |
links |
text, url, type |
images |
url, alt, width, height |
headings |
level, text |
lists |
list, type, item |
If nothing is found, the response is NO_DATA_FOUND (422).
Responses
| Status | Description |
|---|---|
200 | CSV file, or the same rows as JSON when format=json. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
422 | The page could not be scraped or nothing was found (e.g. NO_DATA_FOUND). |
curl -X GET "https://apipeak.dev/api/webscraper/csv?url=https://example.com" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
text,url,type
"Help","https://shop.com/help","internal"
Supported locations
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
No parameters required for this endpoint.
Lists the countries you can scrape from. standard proxies support 8 countries, premium supports 248.
Responses
| Status | Description |
|---|---|
200 | List of supported values. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
curl -X GET "https://apipeak.dev/api/webscraper/locations" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": [],
"warnings": [
"string"
],
"meta": {
"time_ms": 0,
"timestamp": "string",
"scraper": "string",
"options": []
}
}
Supported languages
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
No parameters required for this endpoint.
Lists the locale codes accepted by the language parameter.
Responses
| Status | Description |
|---|---|
200 | List of supported values. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
curl -X GET "https://apipeak.dev/api/webscraper/languages" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": [],
"warnings": [
"string"
],
"meta": {
"time_ms": 0,
"timestamp": "string",
"scraper": "string",
"options": []
}
}
Supported devices
Ready to query this endpoint?
Sign up to get a free API key instantly with sandbox test credits. No card required.
Request Details
No parameters required for this endpoint.
Lists the values accepted by the device parameter.
Responses
| Status | Description |
|---|---|
200 | List of supported values. |
401 | API key missing or invalid. |
402 | Not enough credits left on the subscription. |
403 | Key not authorized for this API, or the API or subscription is inactive, suspended or expired. |
curl -X GET "https://apipeak.dev/api/webscraper/devices" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
{
"success": true,
"engine": "Scraper Engine",
"data": [],
"warnings": [
"string"
],
"meta": {
"time_ms": 0,
"timestamp": "string",
"scraper": "string",
"options": []
}
}
Flexible Subscriptions
Choose the monthly credit subscription that supports your development throughput. Cancel or shift tiers at any time.
FREE
Perfect for exploring the API
- 50 requests per month
- Developer Sandbox Credentials
- Instant API Key Activation
PRO
Best for indie developers and small projects
- 10,000 requests per month
- Developer Sandbox Credentials
- Instant API Key Activation
ULTRA
Ideal for SaaS products and tools
- 20,000 requests per month
- Developer Sandbox Credentials
- Instant API Key Activation
MEGA
Built for agencies and businesses
- 50,000 requests per month
- Developer Sandbox Credentials
- Instant API Key Activation