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
npm install -g webscraping-ai-cli
n8n-nodes-webscraping-ai
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:
Our command-line tool wraps every endpoint for use in scripts and terminals, and ships an AI agent skill your coding assistant can install:
# Install the CLI
npm install -g webscraping-ai-cli
# Install the agent skill into your editor(s)
webscraping-ai setup skill --allThe skill teaches AI coding assistants — Claude Code, Cursor, Windsurf, Kiro, OpenCode, Gemini CLI, GitHub Copilot, Augment, and Factory — when and how to fetch live page content through the CLI.
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