Everything you need to integrate WebScraping.AI into your applications.
Get started with WebScraping.AI in under 5 minutes. Here's a simple example to extract data from any webpage.
Sign up at webscraping.ai to get your free API key with 2,000 credits.
Try the AI question endpoint to ask a question about any webpage:
curl -G "https://api.webscraping.ai/ai/question" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode "question=What is this page about?"
# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
answer = client.question("https://example.com", question="What is this page about?")
print(answer)
// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const answer = await client.question({
url: 'https://example.com',
question: 'What is this page about?',
});
console.log(answer);
<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$answer = $client->question('https://example.com', 'What is this page about?');
echo $answer;
# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
answer = client.question('https://example.com', question: 'What is this page about?')
puts answer
// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
answer, _ := client.Question(context.Background(), &webscrapingai.QuestionOptions{
URL: "https://example.com",
Question: "What is this page about?",
})
fmt.Println(answer)
}
// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.QuestionOptions;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
String answer = client.question(QuestionOptions.builder()
.url("https://example.com")
.question("What is this page about?")
.build());
System.out.println(answer);
// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var answer = await client.QuestionAsync(new QuestionRequest {
Url = "https://example.com",
Question = "What is this page about?",
});
Console.WriteLine(answer);
The API returns the AI-generated answer as plain text:
All API requests require an API key. Pass your key as a query parameter:
GET https://api.webscraping.ai/html?url=https://example.com&api_key=YOUR_API_KEY
All API endpoints use this base URL:
timeout parameter to control duration.| Configuration | Credits | Notes |
|---|---|---|
| Basic (no JS, datacenter proxy) | 1 | Fastest, for static sites |
| With JS rendering | 2 | Default setting, headless Chrome |
| Residential proxy (no JS) | 5 | For anti-bot protected sites |
| Residential proxy + JS | 10 | Maximum compatibility |
| Stealth proxy | 50 | For sites with the strongest anti-bot protection |
| AI endpoints (/ai/question, /ai/fields) | 5 | Per request, plus proxy costs |
All costs are per successful request. Failed requests are free.
Our API typically achieves 80%+ success rate for most websites. If you encounter failures:
timeout to 20000-30000ms for slow-loading websitesproxy=residential if datacenter proxies are blockedjs_timeout for pages with slow-loading dynamic contentJavaScript Rendering
JS rendering is enabled by default (js=true) using headless Chrome. Keep enabled for SPAs (React, Vue, Angular), AJAX content, and dynamic pages. Disable (js=false) for static sites, faster responses, or server-rendered content.
Proxy Strategy
Start with datacenter proxies (default) for speed and cost. Switch to residential proxies if: website blocks datacenter IPs, getting 403 errors, need to bypass anti-bot protection, or scraping geo-restricted content.
Use our official SDKs for easier integration in your preferred language.
pip install webscraping_ai
npm install webscraping-ai
composer require webscraping-ai/webscraping-ai-php
gem install webscraping_ai
go get github.com/webscraping-ai/webscraping-ai-go/v4
ai.webscraping:webscraping-ai
dotnet add package WebScrapingAI
npx -y webscraping-ai-mcp
Need an SDK for another language? Let us know!
Integrate WebScraping.AI with AI assistants and LLM platforms.
Our open-source MCP server integrates WebScraping.AI directly with AI assistants that support the Model Context Protocol:
Use our OpenAPI specification to integrate with AI tools that support API schemas, such as GPT Actions or custom agents.
Use WebScraping.AI as a proxy server for your existing tools. Route requests through our infrastructure without changing your code.
| Host | proxy.webscraping.ai |
| Port | 8888 |
| Username | Your API key |
| Password | Parameters (e.g., js=true&proxy=residential) |
Proxy Mode is designed for tools you already use — HTTP clients, headless browsers, scraping frameworks. The snippets below show the most common integrations. For a more idiomatic, code-first integration, see our official SDKs instead.
# https://curl.se/docs/manpage.html#-x
curl -x "http://YOUR_API_KEY:js=true&proxy=residential@proxy.webscraping.ai:8888" \
-k "https://example.com"# pip install requests
# https://pypi.org/project/requests/
import requests
proxy_url = "http://YOUR_API_KEY:js=true&proxy=residential@proxy.webscraping.ai:8888"
response = requests.get(
"https://example.com",
proxies={"http": proxy_url, "https": proxy_url},
verify=False, # proxy uses a self-signed cert
)
print(response.text)# pip install scrapy
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.httpproxy
import scrapy
PROXY = "http://YOUR_API_KEY:js=true&proxy=residential@proxy.webscraping.ai:8888"
class ExampleSpider(scrapy.Spider):
name = "example"
custom_settings = {
# the proxy presents a self-signed cert
"DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING": False,
}
def start_requests(self):
yield scrapy.Request(
"https://example.com",
meta={"proxy": PROXY},
callback=self.parse,
)
def parse(self, response):
yield {"title": response.css("title::text").get()}# pip install selenium-wire
# https://pypi.org/project/selenium-wire/ (vanilla Selenium can't pass proxy credentials)
from seleniumwire import webdriver
PROXY = "http://YOUR_API_KEY:js=true&proxy=residential@proxy.webscraping.ai:8888"
seleniumwire_options = {
"proxy": {"http": PROXY, "https": PROXY, "no_proxy": "localhost,127.0.0.1"},
"verify_ssl": False,
}
driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
driver.get("https://example.com")
print(driver.page_source)
driver.quit()// npm install playwright
// https://playwright.dev/docs/network#http-proxy
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: {
server: 'http://proxy.webscraping.ai:8888',
username: 'YOUR_API_KEY',
password: 'js=true&proxy=residential',
},
});
const context = await browser.newContext({ ignoreHTTPSErrors: true });
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.content());
await browser.close();
})();// npm install puppeteer
// https://pptr.dev/api/puppeteer.page.authenticate
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: [
'--proxy-server=proxy.webscraping.ai:8888',
'--ignore-certificate-errors',
],
});
const page = await browser.newPage();
await page.authenticate({
username: 'YOUR_API_KEY',
password: 'js=true&proxy=residential',
});
await page.goto('https://example.com');
console.log(await page.content());
await browser.close();
})();-k in cURL, verify=False in requests/Scrapy, ignoreHTTPSErrors: true in Playwright, --ignore-certificate-errors in Puppeteer.
Use AI to answer questions about any webpage. Perfect for extracting specific information without parsing HTML.
/ai/question
| Parameter | Type | Description |
|---|---|---|
| url required | string | URL of the webpage to analyze |
| question required | string | Question to ask about the page content |
| api_key required | string | Your API key |
curl -G "https://api.webscraping.ai/ai/question" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://news.ycombinator.com" \
--data-urlencode "question=What are the top 3 stories on this page?"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
answer = client.question(
"https://news.ycombinator.com",
question="What are the top 3 stories on this page?",
)
print(answer)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const answer = await client.question({
url: 'https://news.ycombinator.com',
question: 'What are the top 3 stories on this page?',
});
console.log(answer);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$answer = $client->question(
'https://news.ycombinator.com',
'What are the top 3 stories on this page?',
);
echo $answer;# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
answer = client.question(
'https://news.ycombinator.com',
question: 'What are the top 3 stories on this page?'
)
puts answer// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
answer, _ := client.Question(context.Background(), &webscrapingai.QuestionOptions{
URL: "https://news.ycombinator.com",
Question: "What are the top 3 stories on this page?",
})
fmt.Println(answer)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.QuestionOptions;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
String answer = client.question(QuestionOptions.builder()
.url("https://news.ycombinator.com")
.question("What are the top 3 stories on this page?")
.build());
System.out.println(answer);// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var answer = await client.QuestionAsync(new QuestionRequest {
Url = "https://news.ycombinator.com",
Question = "What are the top 3 stories on this page?",
});
Console.WriteLine(answer);Extract specific data fields from any webpage as structured JSON. Ideal for scraping product details, articles, profiles, and more.
/ai/fields
| Parameter | Type | Description |
|---|---|---|
| url required | string | URL of the webpage to extract from |
| fields required | object | Object with field names as keys and extraction instructions as values |
| api_key required | string | Your API key |
curl -G "https://api.webscraping.ai/ai/fields" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://amazon.com/dp/B08N5WRWNW" \
--data-urlencode "fields[title]=Product title" \
--data-urlencode "fields[price]=Current price with currency" \
--data-urlencode "fields[rating]=Average star rating"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
result = client.fields(
"https://amazon.com/dp/B08N5WRWNW",
fields={
"title": "Product title",
"price": "Current price with currency",
"rating": "Average star rating",
},
)
print(result)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const result = await client.fields({
url: 'https://amazon.com/dp/B08N5WRWNW',
fields: {
title: 'Product title',
price: 'Current price with currency',
rating: 'Average star rating',
},
});
console.log(result);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$result = $client->fields('https://amazon.com/dp/B08N5WRWNW', [
'title' => 'Product title',
'price' => 'Current price with currency',
'rating' => 'Average star rating',
]);
print_r($result);# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
result = client.fields(
'https://amazon.com/dp/B08N5WRWNW',
fields: {
title: 'Product title',
price: 'Current price with currency',
rating: 'Average star rating'
}
)
puts result.inspect// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
result, _ := client.Fields(context.Background(), &webscrapingai.FieldsOptions{
URL: "https://amazon.com/dp/B08N5WRWNW",
Fields: map[string]string{
"title": "Product title",
"price": "Current price with currency",
"rating": "Average star rating",
},
})
fmt.Println(result.Result)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.FieldsOptions;
import ai.webscraping.result.FieldsResult;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
FieldsResult result = client.fields(FieldsOptions.builder()
.url("https://amazon.com/dp/B08N5WRWNW")
.addField("title", "Product title")
.addField("price", "Current price with currency")
.addField("rating", "Average star rating")
.build());
System.out.println(result.getResult());// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var result = await client.FieldsAsync(new FieldsRequest {
Url = "https://amazon.com/dp/B08N5WRWNW",
Fields = new Dictionary<string, string> {
["title"] = "Product title",
["price"] = "Current price with currency",
["rating"] = "Average star rating",
},
});
Console.WriteLine(result.Result);Fetch the full HTML content of any webpage. Includes JavaScript rendering via headless Chrome and automatic proxy rotation.
/html
| Parameter | Type | Description |
|---|---|---|
| url required | string | URL of the webpage to fetch |
| api_key required | string | Your API key |
| js optional | boolean | Enable JavaScript rendering (default: true) |
| proxy optional | string | Proxy type: "datacenter" (default) or "residential" |
curl -G "https://api.webscraping.ai/html" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode "js=true"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
html = client.html("https://example.com", js=True)
print(html)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const html = await client.html({ url: 'https://example.com', js: true });
console.log(html);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$html = $client->html('https://example.com', js: true);
echo $html;# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
html = client.html('https://example.com', js: true)
puts html// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
js := true
html, _ := client.HTML(context.Background(), &webscrapingai.HTMLOptions{
URL: "https://example.com",
CommonOptions: webscrapingai.CommonOptions{JS: &js},
})
fmt.Println(html)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.HtmlOptions;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
String html = client.html(HtmlOptions.builder()
.url("https://example.com")
.js(true)
.build());
System.out.println(html);// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var html = await client.HtmlAsync(new HtmlRequest {
Url = "https://example.com",
Js = true,
});
Console.WriteLine(html);/html
Use POST requests to send data to the target page (e.g., form submissions, API calls).
| body optional | string | Request body to send to the target URL |
# Submit form data to a target page
curl -X POST "https://api.webscraping.ai/html" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "api_key=YOUR_API_KEY" \
-d "url=https://httpbin.org/post" \
-d "body=username=test&password=demo"import requests
# Submit form data to a target page
response = requests.post("https://api.webscraping.ai/html", data={
"api_key": "YOUR_API_KEY",
"url": "https://httpbin.org/post",
"body": "username=test&password=demo"
})
print(response.text)const response = await fetch('https://api.webscraping.ai/html', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
api_key: 'YOUR_API_KEY',
url: 'https://httpbin.org/post',
body: 'username=test&password=demo'
})
});
console.log(await response.text());Extract only the visible text content from a webpage. Perfect for feeding content to LLMs or text analysis.
/text
| Parameter | Type | Description |
|---|---|---|
| url required | string | URL of the webpage |
| text_format optional | string | "plain" (default), "json", or "xml" |
| return_links optional | boolean | Include links in JSON response (default: false) |
curl -G "https://api.webscraping.ai/text" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode "text_format=json"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
result = client.text("https://example.com", text_format="json")
print(result)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const result = await client.text({
url: 'https://example.com',
text_format: 'json',
});
console.log(result);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$result = $client->text('https://example.com', textFormat: 'json');
print_r($result);# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
result = client.text('https://example.com', text_format: 'json')
puts result.inspect// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
text, _ := client.Text(context.Background(), &webscrapingai.TextOptions{
URL: "https://example.com",
TextFormat: "json",
})
fmt.Println(text)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.TextOptions;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
String text = client.text(TextOptions.builder()
.url("https://example.com")
.textFormat("json")
.build());
System.out.println(text);// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var text = await client.TextAsync(new TextRequest {
Url = "https://example.com",
TextFormat = "json",
});
Console.WriteLine(text);Extract HTML from specific page elements using CSS selectors. Useful when you only need a portion of the page.
/selected
| Parameter | Type | Description |
|---|---|---|
| url required | string | URL of the webpage |
| selector required | string | CSS selector (e.g., "h1", ".price", "#main") |
curl -G "https://api.webscraping.ai/selected" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode "selector=h1"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
html = client.selected("https://example.com", selector="h1")
print(html)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const html = await client.selected({
url: 'https://example.com',
selector: 'h1',
});
console.log(html);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$html = $client->selected('https://example.com', 'h1');
echo $html;# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
html = client.selected('https://example.com', selector: 'h1')
puts html// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
html, _ := client.Selected(context.Background(), &webscrapingai.SelectedOptions{
URL: "https://example.com",
Selector: "h1",
})
fmt.Println(html)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.SelectedOptions;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
String html = client.selected(SelectedOptions.builder()
.url("https://example.com")
.selector("h1")
.build());
System.out.println(html);// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var html = await client.SelectedAsync(new SelectedRequest {
Url = "https://example.com",
Selector = "h1",
});
Console.WriteLine(html);/selected-multiple endpoint with a selectors[] array parameter to extract multiple elements in one request.
Check your remaining API credits and account status.
/account
curl "https://api.webscraping.ai/account?api_key=YOUR_API_KEY"# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client
client = Client(api_key="YOUR_API_KEY")
info = client.account()
print(info)// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';
const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const info = await client.account();
console.log(info);<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';
use WebScrapingAI\Client;
$client = new Client('YOUR_API_KEY');
$info = $client->account();
print_r($info);# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'
client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
info = client.account
puts info.inspect// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main
import (
"context"
"fmt"
webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)
func main() {
client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
info, _ := client.Account(context.Background())
fmt.Printf("%s - %d calls left\n", info.Email, info.RemainingAPICalls)
}// Maven: ai.webscraping:webscraping-ai:4.0.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.result.AccountInfo;
Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
AccountInfo info = client.account();
System.out.println(info);// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;
var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var info = await client.AccountAsync();
Console.WriteLine($"{info.Email} - {info.RemainingApiCalls} calls left");Every successful API response includes helpful headers with request metadata.
| Header | Description | Example |
|---|---|---|
X-Credits-Used |
Number of credits consumed by this request | 2 |
X-Credits-Remaining |
Your remaining credit balance | 1850 |
X-Target-Status |
HTTP status code from the target website | 200 |
X-Target-Url |
Final URL after redirects (if any) | https://example.com/page |
Content-Type |
Response content type | text/html; charset=utf-8 |
# Use -i flag to include headers in output
curl -i "https://api.webscraping.ai/html?api_key=YOUR_API_KEY&url=https://example.com"
# Response includes:
# X-Credits-Used: 2
# X-Credits-Remaining: 1850
# X-Target-Status: 200import requests
response = requests.get("https://api.webscraping.ai/html", params={
"api_key": "YOUR_API_KEY",
"url": "https://example.com"
})
# Access response headers
credits_used = response.headers.get('X-Credits-Used')
credits_remaining = response.headers.get('X-Credits-Remaining')
target_status = response.headers.get('X-Target-Status')
print(f"Credits used: {credits_used}")
print(f"Credits remaining: {credits_remaining}")const response = await fetch(
'https://api.webscraping.ai/html?api_key=YOUR_API_KEY&url=https://example.com'
);
// Access response headers
const creditsUsed = response.headers.get('X-Credits-Used');
const creditsRemaining = response.headers.get('X-Credits-Remaining');
const targetStatus = response.headers.get('X-Target-Status');
console.log(`Credits used: ${creditsUsed}`);X-Credits-Remaining to monitor your quota and implement alerts when credits are running low.
Understanding API error responses and how to handle them.
| Code | Description | Solution |
|---|---|---|
| 400 | Invalid parameters | Check parameter values and format |
| 402 | Insufficient credits | Upgrade your plan or wait for credit reset |
| 403 | Invalid API key | Verify your API key is correct |
| 429 | Too many concurrent requests | Reduce request rate or upgrade for higher concurrency |
| 500 | Target website error | Try again or check if target site is available |
| 504 | Request timeout | Increase timeout parameter value |
Complete documentation for all API parameters. Click on any parameter to see detailed information and examples.
| Parameter | Type | Default | Description |
|---|---|---|---|
| url | string | required | Target webpage URL |
| api_key | string | required | Your API key for authentication |
| js | boolean | true | Enable JavaScript rendering |
| js_timeout | integer | 2000 | JavaScript rendering timeout (ms) |
| timeout | integer | 10000 | Total request timeout (ms) |
| wait_for | string | - | CSS selector to wait for |
| proxy | string | datacenter | Proxy type |
| country | string | us | Proxy country |
| device | string | desktop | Device emulation |
| headers | object | - | Custom HTTP headers |
| js_script | string | - | Custom JavaScript to execute |
| custom_proxy | string | - | Your own proxy URL |
| error_on_404 | boolean | false | Return error for 404 pages |
| error_on_redirect | boolean | false | Return error on redirects |
The URL of the target webpage to scrape or analyze. Must be a valid HTTP or HTTPS URL.
Detailsurl=https://example.com/page?id=123
Your unique API key for authentication. Get your key from the dashboard.
Enable JavaScript rendering using a headless Chromium browser. Required for SPAs, dynamic content, and modern web applications.
When to use js=true# With JS rendering (default)
curl "https://api.webscraping.ai/html?api_key=KEY&url=https://spa-app.com&js=true"
# Without JS rendering (faster, cheaper)
curl "https://api.webscraping.ai/html?api_key=KEY&url=https://static-site.com&js=false"
Maximum time in milliseconds to wait for JavaScript execution after the page loads. Increase this value if you see loading indicators instead of actual content.
Detailsjs=truewait_for for more precisionMaximum total time in milliseconds for the entire request, including page retrieval, JavaScript rendering, and processing.
Detailstimeout=15000
Sets a 15-second timeout for slow-loading pages
CSS selector to wait for before returning the page content. The request will wait until this element appears in the DOM, then return the content. This overrides js_timeout.
wait_for=.product-pricewait_for=#search-resultswait_for=[data-loaded="true"]wait_for=.reviews-container# Wait for product grid to load before scraping
curl -G "https://api.webscraping.ai/html" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://shop.com/products" \
--data-urlencode "wait_for=.product-grid"
Type of proxy to use for the request. Choose based on your target website's anti-bot measures.
| Value | Description | Best for | Cost |
|---|---|---|---|
datacenter |
Fast datacenter proxies with rotating IPs | Most websites, APIs, general scraping | 1 credit |
residential |
Real residential IPs from ISPs | Anti-bot protected sites, sneaker sites, social media | 5 credits |
stealth |
Premium proxies with advanced anti-bot bypass | The most heavily protected sites where residential is not enough | 50 credits |
Country code for geo-targeting. The request will be made from a proxy in the specified country.
| Code | Country | Code | Country |
|---|---|---|---|
us |
United States | ru |
Russia |
gb |
United Kingdom | jp |
Japan |
de |
Germany | kr |
South Korea |
fr |
France | in |
India |
ca |
Canada | it |
Italy |
es |
Spain |
# Scrape from a UK IP address
curl "https://api.webscraping.ai/html?api_key=KEY&url=https://uk-shop.com&country=gb"
Device type emulation. Affects viewport size, user agent, and touch capabilities.
| Value | Viewport | Use case |
|---|---|---|
desktop |
1920x1080 | Desktop websites, full layouts |
mobile |
375x812 (iPhone X) | Mobile sites, responsive layouts, AMP pages |
tablet |
768x1024 (iPad) | Tablet-optimized layouts |
Custom HTTP headers to send with the request. Useful for authentication, cookies, or custom user agents.
Format optionsheaders={"Cookie":"session=abc"}headers[Cookie]=session=abcCookie - Session cookiesAuthorization - Bearer tokensReferer - Referrer URL# Pass custom headers as JSON
curl -G "https://api.webscraping.ai/html" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode 'headers={"Cookie":"session=abc123","Authorization":"Bearer token"}'
Custom JavaScript code to execute on the page after it loads. Useful for clicking buttons, scrolling, filling forms, or extracting data.
Use casesreturn_script_result=true to get the return value of your script instead of the page HTML.
# Click a button
js_script=document.querySelector('.load-more-btn').click()
# Scroll to bottom
js_script=window.scrollTo(0, document.body.scrollHeight)
# Extract data and return it
js_script=return JSON.stringify(window.__INITIAL_DATA__)
Use your own proxy server instead of our built-in proxy pool. Useful if you have specific proxy requirements or existing proxy subscriptions.
Formathttp://username:password@host:port
Example
custom_proxy=http://user:pass@proxy.example.com:8080
Return an error response when the target page returns a 404 status code, instead of returning the 404 page content.
Return an error when the target page redirects, instead of following the redirect.
For the complete machine-readable API specification — every endpoint, parameter, and response schema — download our OpenAPI 3.1 spec.
Download OpenAPI Spec