Search
SERP, search engine results page
SERP
Search the web using specified search engine
Authorization
AuthorizationRequiredBearer <token>JWT token for API authentication
In: header
Request Body
application/jsonRequiredenginestringThe search engine to be used
"google"queryRequiredstringThe search query string
limitnumberMaximum number of results per page. If scrape_options is provided, this also acts as a global cap on the number of result URLs to scrape across all pages.
10Minimum: 1Maximum: 100offsetnumberNumber of results to skip
0Minimum: 0pagesnumberNumber of pages to search
1Minimum: 1Maximum: 20langunknownLanguage locale for search results
countryunknownCountry locale for search results
scrape_optionsRequiredobjectOptional scraping options. If provided, the service scrapes result URLs (capped by limit across all pages) and merges outputs (e.g., html, markdown, metadata) into each item.
safe_searchnumber | null | nullSafe search filter level for Google. 0: off, 1: medium, 2: high, null: default
0Maximum: 2Value in: 0 | 1 | 2Response Body
Successful search response format containing an array of search results and suggestions (may be empty)
TypeScript Definitions
Use the response body type in TypeScript.
successRequiredbooleanIndicates the search request was successful
truedataRequiredarray<Any properties in object,object>Array of search results and suggestions - can be empty if no results found. When scrape_options is used, additional enriched fields (e.g., html, markdown, metadata, status, jobId) may be present on each result.
Standard error response format for validation errors
TypeScript Definitions
Use the response body type in TypeScript.
successRequiredbooleanIndicates the request failed
falseerrorRequiredstringError message
detailsRequiredobjectValidation error details
Unauthorized response format for authentication errors
TypeScript Definitions
Use the response body type in TypeScript.
successRequiredbooleanIndicates the request failed due to authentication issues
falseerrorRequiredstringAuthentication error message
Payment required response format with credit information
TypeScript Definitions
Use the response body type in TypeScript.
successRequiredbooleanIndicates the request failed due to insufficient credits
falseerrorRequiredstringError message
current_creditsRequirednumberCurrent credit balance of the user
Internal server error response format
TypeScript Definitions
Use the response body type in TypeScript.
successRequiredbooleanIndicates the request failed due to server error
falseerrorRequiredstringServer error message
messageRequiredstringDetailed error message describing what went wrong
curl -X POST "https://api.anycrawl.dev/v1/search" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"engine": "google",
"query": "OpenAI ChatGPT",
"limit": 10,
"offset": 0,
"pages": 1
}'const body = JSON.stringify({
"engine": "google",
"query": "OpenAI ChatGPT",
"limit": 10,
"offset": 0,
"pages": 1
})
fetch("https://api.anycrawl.dev/v1/search", {
headers: {
"Authorization": "Bearer <token>"
},
body
})package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://api.anycrawl.dev/v1/search"
body := strings.NewReader(`{
"engine": "google",
"query": "OpenAI ChatGPT",
"limit": 10,
"offset": 0,
"pages": 1
}`)
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.anycrawl.dev/v1/search"
body = {
"engine": "google",
"query": "OpenAI ChatGPT",
"limit": 10,
"offset": 0,
"pages": 1
}
response = requests.request("POST", url, json = body, headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
})
print(response.text){
"success": true,
"data": [
{
"title": "The Investment Case for Digital Infrastructure",
"url": "https://www.patrizia.ag/fileadmin/user_upload/The_Investment_Case_for_Digital_Infrastructure.pdf",
"description": "It took just five days for ChatGPT to reach one million users and just two months to reach 100 million users, the fastest of any social media platform or app in ...48 pages",
"source": "Google Search Result"
}
]
}{
"success": false,
"error": "Validation error",
"details": {
"issues": [
{
"field": "engine",
"message": "Invalid enum value. Expected 'playwright' | 'cheerio' | 'puppeteer', received 'cheeri1o'",
"code": "invalid_enum_value"
}
],
"messages": [
"Invalid enum value. Expected 'playwright' | 'cheerio' | 'puppeteer', received 'cheeri1o'"
]
}
}{
"success": false,
"error": "Invalid API key"
}{
"success": false,
"error": "Insufficient credits",
"current_credits": -2
}{
"success": false,
"error": "Internal server error",
"message": "Job 0ae56ed9-d9a9-4998-aea9-2ff5b51b2e4e timed out after 30000 seconds"
}