Send a Request
Send your first WebScrapingAPI request with an API key and a target URL.
After registration, get your API key from the dashboard and include it as the api_key query parameter on every request.
Keep API keys in server-side secrets. Do not ship them in browser code, mobile apps, public repositories, logs, screenshots, or shared notebooks.
Basic scraping request
Use the /v2 endpoint for fast HTTP scraping.
curl --get "https://api.webscrapingapi.com/v2" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com"const params = new URLSearchParams({
api_key: "YOUR_API_KEY",
url: "https://example.com",
});
const response = await fetch(`https://api.webscrapingapi.com/v2?${params}`);
const body = await response.text();
console.log(body);import requests
response = requests.get(
"https://api.webscrapingapi.com/v2",
params={
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
},
)
print(response.text)<?php
$query = http_build_query([
'api_key' => 'YOUR_API_KEY',
'url' => 'https://example.com',
]);
$response = file_get_contents('https://api.webscrapingapi.com/v2?' . $query);
echo $response;package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Add("api_key", "YOUR_API_KEY")
params.Add("url", "https://example.com")
requestURL := "https://api.webscrapingapi.com/v2?" + params.Encode()
response, err := http.Get(requestURL)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "api_key=" + URLEncoder.encode("YOUR_API_KEY", StandardCharsets.UTF_8)
+ "&url=" + URLEncoder.encode("https://example.com", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.webscrapingapi.com/v2?" + query))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var apiKey = Uri.EscapeDataString("YOUR_API_KEY");
var targetUrl = Uri.EscapeDataString("https://example.com");
var requestUrl = $"https://api.webscrapingapi.com/v2?api_key={apiKey}&url={targetUrl}";
using var client = new HttpClient();
var response = await client.GetStringAsync(requestUrl);
Console.WriteLine(response);
}
}require 'net/http'
require 'uri'
uri = URI('https://api.webscrapingapi.com/v2')
uri.query = URI.encode_www_form(
api_key: 'YOUR_API_KEY',
url: 'https://example.com'
)
response = Net::HTTP.get(uri)
puts responseBrowser rendering request
Use the /v1 endpoint when the target page needs browser rendering, waits, screenshots, JavaScript actions, custom headers, or cookies.
curl --get "https://api.webscrapingapi.com/v1" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "url=https://example.com" \
--data-urlencode "wait_until=domcontentloaded"const params = new URLSearchParams({
api_key: "YOUR_API_KEY",
url: "https://example.com",
wait_until: "domcontentloaded",
});
const response = await fetch(`https://api.webscrapingapi.com/v1?${params}`);
const body = await response.text();
console.log(body);import requests
response = requests.get(
"https://api.webscrapingapi.com/v1",
params={
"api_key": "YOUR_API_KEY",
"url": "https://example.com",
"wait_until": "domcontentloaded",
},
)
print(response.text)<?php
$query = http_build_query([
'api_key' => 'YOUR_API_KEY',
'url' => 'https://example.com',
'wait_until' => 'domcontentloaded',
]);
$response = file_get_contents('https://api.webscrapingapi.com/v1?' . $query);
echo $response;package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Add("api_key", "YOUR_API_KEY")
params.Add("url", "https://example.com")
params.Add("wait_until", "domcontentloaded")
requestURL := "https://api.webscrapingapi.com/v1?" + params.Encode()
response, err := http.Get(requestURL)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "api_key=" + URLEncoder.encode("YOUR_API_KEY", StandardCharsets.UTF_8)
+ "&url=" + URLEncoder.encode("https://example.com", StandardCharsets.UTF_8)
+ "&wait_until=domcontentloaded";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.webscrapingapi.com/v1?" + query))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var apiKey = Uri.EscapeDataString("YOUR_API_KEY");
var targetUrl = Uri.EscapeDataString("https://example.com");
var requestUrl = $"https://api.webscrapingapi.com/v1?api_key={apiKey}&url={targetUrl}&wait_until=domcontentloaded";
using var client = new HttpClient();
var response = await client.GetStringAsync(requestUrl);
Console.WriteLine(response);
}
}require 'net/http'
require 'uri'
uri = URI('https://api.webscrapingapi.com/v1')
uri.query = URI.encode_www_form(
api_key: 'YOUR_API_KEY',
url: 'https://example.com',
wait_until: 'domcontentloaded'
)
response = Net::HTTP.get(uri)
puts responseProduct-specific requests
SERP and commerce APIs use the same api_key parameter, but they require product-specific fields such as engine, type, or a product identifier.
curl --get "https://serpapi.webscrapingapi.com/v2" \
--data-urlencode "api_key=YOUR_API_KEY" \
--data-urlencode "engine=google" \
--data-urlencode "q=coffee"const params = new URLSearchParams({
api_key: "YOUR_API_KEY",
engine: "google",
q: "coffee",
});
const response = await fetch(`https://serpapi.webscrapingapi.com/v2?${params}`);
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://serpapi.webscrapingapi.com/v2",
params={
"api_key": "YOUR_API_KEY",
"engine": "google",
"q": "coffee",
},
)
print(response.json())<?php
$query = http_build_query([
'api_key' => 'YOUR_API_KEY',
'engine' => 'google',
'q' => 'coffee',
]);
$response = file_get_contents('https://serpapi.webscrapingapi.com/v2?' . $query);
echo $response;package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Add("api_key", "YOUR_API_KEY")
params.Add("engine", "google")
params.Add("q", "coffee")
requestURL := "https://serpapi.webscrapingapi.com/v2?" + params.Encode()
response, err := http.Get(requestURL)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "api_key=" + URLEncoder.encode("YOUR_API_KEY", StandardCharsets.UTF_8)
+ "&engine=google"
+ "&q=" + URLEncoder.encode("coffee", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://serpapi.webscrapingapi.com/v2?" + query))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var apiKey = Uri.EscapeDataString("YOUR_API_KEY");
var query = Uri.EscapeDataString("coffee");
var requestUrl = $"https://serpapi.webscrapingapi.com/v2?api_key={apiKey}&engine=google&q={query}";
using var client = new HttpClient();
var response = await client.GetStringAsync(requestUrl);
Console.WriteLine(response);
}
}require 'net/http'
require 'uri'
uri = URI('https://serpapi.webscrapingapi.com/v2')
uri.query = URI.encode_www_form(
api_key: 'YOUR_API_KEY',
engine: 'google',
q: 'coffee'
)
response = Net::HTTP.get(uri)
puts responseReview the product section you are integrating for required parameters, examples, and response details.