curl --request POST \
--url https://api.cloro.dev/v1/monitor/google \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "best laptops for programming",
"country": "US",
"url": "https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"pages": 3,
"include": {
"html": false
}
}
'import requests
url = "https://api.cloro.dev/v1/monitor/google"
payload = {
"query": "best laptops for programming",
"country": "US",
"url": "https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"pages": 3,
"include": { "html": False }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'best laptops for programming',
country: 'US',
url: 'https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30',
location: 'New York,New York,United States',
uule: 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
device: 'desktop',
pages: 3,
include: {html: false}
})
};
fetch('https://api.cloro.dev/v1/monitor/google', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloro.dev/v1/monitor/google",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'best laptops for programming',
'country' => 'US',
'url' => 'https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30',
'location' => 'New York,New York,United States',
'uule' => 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
'device' => 'desktop',
'pages' => 3,
'include' => [
'html' => false
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cloro.dev/v1/monitor/google"
payload := strings.NewReader("{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cloro.dev/v1/monitor/google")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/google")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"organicResults": [
{
"position": 1,
"title": "Best Laptops for Programming in 2024",
"link": "https://example.com/best-programming-laptops",
"displayedLink": "https://example.com",
"snippet": "Looking for the best programming laptops? We've tested and reviewed the top options...",
"date": "2 days ago",
"page": 1,
"sitelinks": {
"inline": [
{
"title": "Specifications",
"link": "https://example.com/specs"
}
]
}
}
],
"peopleAlsoAsk": [
{
"question": "What specs should I look for in a programming laptop?",
"snippet": "Key specifications include RAM, processor, storage, and display quality...",
"title": "Essential laptop specs for developers",
"link": "https://example.com/laptop-specs",
"markdown": "<string>",
"sources": [
{
"label": "Programming Laptop Guide",
"url": "https://example.com/guide",
"description": "<string>",
"position": 123
}
]
}
],
"peopleAreSaying": [
{
"position": 1,
"title": "Best running shoes 2026 - what runners are saying",
"link": "https://www.reddit.com/r/running/comments/example/",
"date": "5 days ago"
}
],
"localResults": [
{
"position": 1,
"title": "Joe's Pizza Broadway",
"placeId": "/g/11bw4ws2mt",
"rating": 4.4,
"reviews": "26K",
"price": "$10–20",
"type": "Pizza",
"yearsInBusiness": "80+ years in business",
"address": "1435 Broadway",
"phone": "(212) 555-0100",
"hours": "Open · Closes 11 PM",
"description": "\"Fast service, great atmosphere, and truly scrumptious pizza.\"",
"links": {
"website": "https://villageplumbing.com/",
"directions": "https://www.google.com/maps/dir//Village+Plumbing,+Air+%26+Electric"
}
}
],
"localResultsMoreLink": "https://www.google.com/search?q=italian+restaurants+in+toronto&udm=1",
"relatedSearches": [
{
"query": "best budget laptop for coding",
"link": "https://google.com/search?q=best+budget+laptop+for+coding"
}
],
"ads": [
{
"position": 1,
"blockPosition": "top",
"type": "RESULT",
"title": "Best Programming Laptops - Shop Now",
"url": "https://example.com/programming-laptops",
"page": 1,
"displayedUrl": "example.com/laptops",
"domain": "example.com",
"description": "Shop our selection of programming laptops with fast shipping.",
"category": "Sponsored products",
"price": {
"value": 1199,
"currency": "$",
"raw": "$1,199"
},
"oldPrice": {
"value": 1299,
"currency": "$",
"raw": "$1,299"
},
"store": "Apple",
"imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
"sitelinks": [
{
"url": "https://example.com/gaming-laptops",
"title": "Gaming Laptops",
"description": "High-performance laptops for gaming"
}
]
}
],
"aioverview": {
"sources": [
{
"position": 1,
"url": "https://example.com/programming-laptops",
"label": "Best Programming Laptops 2026",
"description": "Comprehensive guide to choosing the perfect laptop for software development"
}
],
"citationPills": [
{
"label": "Chase Personal Credit Cards",
"citationPillId": 1,
"url": "https://www.chase.com/personal/credit-cards",
"domain": "chase.com",
"description": "Personal credit cards from Chase.",
"position": 2
},
{
"label": "JustAnswer Computer Help",
"citationPillId": 1,
"url": "https://www.justanswer.com/computer/help",
"domain": "justanswer.com",
"position": 4
}
],
"relatedLinks": [
{
"label": "Compare developer laptops",
"citationPillId": 1,
"url": "https://www.google.com/search?q=developer+laptops&ibp=oshop",
"domain": "google.com"
}
],
"text": "Based on current information, the best laptops for programming typically include models from Apple MacBook Pro, Dell XPS, and Lenovo ThinkPad series...",
"markdown": "Based on current information, the best laptops for programming typically include models from Apple MacBook Pro, Dell XPS, and Lenovo ThinkPad series...",
"videos": [
{
"url": "https://www.youtube.com/watch?v=example",
"title": "Best Laptops for Programming 2024",
"thumbnail": "https://example.com/thumbnail.jpg",
"source": "Tech Channel",
"platform": "YouTube",
"date": "2 days ago",
"duration": "12:34"
}
],
"ads": [
{
"position": 1,
"title": "QA Software Testing Services - On-Demand Software Testing",
"url": "https://www.testlio.com",
"type": "TEXT",
"domain": "Testlio",
"description": "Dynamic staffing. Global coverage. Managed manual testing and test automation solutions.",
"price": {
"value": 69.99,
"currency": "$",
"raw": "$69.99"
},
"old_price": {
"value": 99.99,
"currency": "$",
"raw": "$99.99"
},
"store": "Best Buy",
"image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ..."
}
]
},
"shoppingCards": [
{
"title": "ASICS Women's Gel-Nimbus 28",
"productLink": "",
"position": 1,
"category": "More products",
"price": {
"value": 169.99,
"currency": "$",
"raw": "$169.99"
},
"oldPrice": {
"value": 199.99,
"currency": "$",
"raw": "$199.99"
},
"store": "DICK'S Sporting Goods",
"rating": 4.5,
"reviews": "384",
"thumbnail": "https://example.com/product.jpg"
}
],
"knowledgeGraph": {
"title": "Eminem",
"type": "American rapper",
"kgmid": "/m/01vs_v8",
"description": "Marshall Bruce Mathers III, known professionally as Eminem, is an American rapper, songwriter, and record producer.",
"imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
"website": "https://www.eminem.com",
"menu": "https://www.restaurant.com/menu",
"trailer": "https://www.youtube.com/watch?v=example",
"source": {
"name": "Wikipedia",
"link": "https://en.wikipedia.org/wiki/Eminem"
},
"attributes": [
{
"key": "Born",
"value": "October 17, 1972"
}
],
"profiles": [
{
"name": "Instagram",
"link": "https://www.instagram.com/eminem/"
}
],
"peopleAlsoSearchFor": [
{
"name": "Jay-Z",
"link": "https://www.google.com/search?q=Jay-Z"
}
],
"thingsToKnow": [
{
"label": "Albums",
"subtitle": "The Slim Shady LP, The Marshall Mathers LP, ..."
}
],
"ratings": [
{
"platform": "Rotten Tomatoes",
"rating": "88%",
"link": "https://www.rottentomatoes.com/m/8_mile"
}
],
"streamingOptions": [
{
"platform": "Netflix",
"link": "https://www.netflix.com/title/example"
}
],
"webRatings": [
{
"platform": "Google",
"rating": "4.5",
"link": "https://www.google.com/maps/place/...",
"votes": "1,234"
}
],
"statsCard": {
"context": "2023-24 NBA season",
"stats": [
{
"label": "Points per game",
"value": "27.1"
}
]
},
"socialPosts": [
{
"platform": "X",
"text": "New album dropping Friday 🔥",
"link": "https://x.com/eminem/status/...",
"date": "2 days ago"
}
],
"notableAlumni": [
{
"name": "Barack Obama",
"link": "https://www.google.com/search?q=Barack+Obama"
}
],
"contact": [
{
"label": "Order online",
"url": "https://www.restaurant.com/order"
}
],
"weather": {
"temperature": "72°F",
"condition": "Sunny"
},
"rating": {
"rating": "4.5",
"count": "2,847"
},
"admission": [
{
"provider": "Official website",
"price": "$17",
"link": "https://www.louvre.fr/en/tickets",
"badge": "Best price"
}
],
"artworks": [
{
"title": "Mona Lisa",
"link": "https://www.google.com/search?q=Mona+Lisa",
"author": "Leonardo da Vinci"
}
],
"has3dModel": true,
"hotelOptions": [
{
"provider": "Booking.com",
"price": "$189/night",
"link": "https://www.booking.com/hotel/...",
"note": "Includes breakfast"
}
],
"trendingProducts": [
{
"title": "Air Max 90",
"price": "$120",
"link": "https://www.nike.com/t/air-max-90"
}
],
"merchantVideos": [
{
"title": "Foot Locker Week of Greatness",
"link": "https://www.youtube.com/watch?v=...",
"platform": "YouTube",
"duration": "2:34"
}
],
"listenOn": [
{
"platform": "Spotify",
"link": "https://open.spotify.com/artist/..."
}
]
},
"html": [
"https://cdn.cloro.dev/results/b83e8dfd-c3a1-4b98-83b9-af91adc21e26/page-1.html"
]
}
}{
"success": false,
"error": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
]
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Insufficient permissions",
"details": {
"requiredScopes": [
"read:monitor",
"write:monitor"
]
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Route not found",
"details": {
"id": "/v1/invalid-endpoint"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_CONFLICT",
"message": "Resource conflict",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "CONCURRENT_LIMIT_EXCEEDED",
"message": "Concurrent limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Request was canceled"
}{
"success": false,
"error": "Maximum retries exceeded"
}{
"error": {
"code": "EXTERNAL_SERVICE_ERROR",
"message": "External service error: OpenAI",
"details": {
"service": "OpenAI"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}Extract Google Search
Extract structured data from Google Search including organic results, People Also Ask, related searches, and optional AI Overview
curl --request POST \
--url https://api.cloro.dev/v1/monitor/google \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "best laptops for programming",
"country": "US",
"url": "https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"pages": 3,
"include": {
"html": false
}
}
'import requests
url = "https://api.cloro.dev/v1/monitor/google"
payload = {
"query": "best laptops for programming",
"country": "US",
"url": "https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30",
"location": "New York,New York,United States",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5",
"device": "desktop",
"pages": 3,
"include": { "html": False }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: 'best laptops for programming',
country: 'US',
url: 'https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30',
location: 'New York,New York,United States',
uule: 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
device: 'desktop',
pages: 3,
include: {html: false}
})
};
fetch('https://api.cloro.dev/v1/monitor/google', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloro.dev/v1/monitor/google",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'best laptops for programming',
'country' => 'US',
'url' => 'https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30',
'location' => 'New York,New York,United States',
'uule' => 'w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5',
'device' => 'desktop',
'pages' => 3,
'include' => [
'html' => false
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cloro.dev/v1/monitor/google"
payload := strings.NewReader("{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cloro.dev/v1/monitor/google")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloro.dev/v1/monitor/google")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"best laptops for programming\",\n \"country\": \"US\",\n \"url\": \"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30\",\n \"location\": \"New York,New York,United States\",\n \"uule\": \"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5\",\n \"device\": \"desktop\",\n \"pages\": 3,\n \"include\": {\n \"html\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"organicResults": [
{
"position": 1,
"title": "Best Laptops for Programming in 2024",
"link": "https://example.com/best-programming-laptops",
"displayedLink": "https://example.com",
"snippet": "Looking for the best programming laptops? We've tested and reviewed the top options...",
"date": "2 days ago",
"page": 1,
"sitelinks": {
"inline": [
{
"title": "Specifications",
"link": "https://example.com/specs"
}
]
}
}
],
"peopleAlsoAsk": [
{
"question": "What specs should I look for in a programming laptop?",
"snippet": "Key specifications include RAM, processor, storage, and display quality...",
"title": "Essential laptop specs for developers",
"link": "https://example.com/laptop-specs",
"markdown": "<string>",
"sources": [
{
"label": "Programming Laptop Guide",
"url": "https://example.com/guide",
"description": "<string>",
"position": 123
}
]
}
],
"peopleAreSaying": [
{
"position": 1,
"title": "Best running shoes 2026 - what runners are saying",
"link": "https://www.reddit.com/r/running/comments/example/",
"date": "5 days ago"
}
],
"localResults": [
{
"position": 1,
"title": "Joe's Pizza Broadway",
"placeId": "/g/11bw4ws2mt",
"rating": 4.4,
"reviews": "26K",
"price": "$10–20",
"type": "Pizza",
"yearsInBusiness": "80+ years in business",
"address": "1435 Broadway",
"phone": "(212) 555-0100",
"hours": "Open · Closes 11 PM",
"description": "\"Fast service, great atmosphere, and truly scrumptious pizza.\"",
"links": {
"website": "https://villageplumbing.com/",
"directions": "https://www.google.com/maps/dir//Village+Plumbing,+Air+%26+Electric"
}
}
],
"localResultsMoreLink": "https://www.google.com/search?q=italian+restaurants+in+toronto&udm=1",
"relatedSearches": [
{
"query": "best budget laptop for coding",
"link": "https://google.com/search?q=best+budget+laptop+for+coding"
}
],
"ads": [
{
"position": 1,
"blockPosition": "top",
"type": "RESULT",
"title": "Best Programming Laptops - Shop Now",
"url": "https://example.com/programming-laptops",
"page": 1,
"displayedUrl": "example.com/laptops",
"domain": "example.com",
"description": "Shop our selection of programming laptops with fast shipping.",
"category": "Sponsored products",
"price": {
"value": 1199,
"currency": "$",
"raw": "$1,199"
},
"oldPrice": {
"value": 1299,
"currency": "$",
"raw": "$1,299"
},
"store": "Apple",
"imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
"sitelinks": [
{
"url": "https://example.com/gaming-laptops",
"title": "Gaming Laptops",
"description": "High-performance laptops for gaming"
}
]
}
],
"aioverview": {
"sources": [
{
"position": 1,
"url": "https://example.com/programming-laptops",
"label": "Best Programming Laptops 2026",
"description": "Comprehensive guide to choosing the perfect laptop for software development"
}
],
"citationPills": [
{
"label": "Chase Personal Credit Cards",
"citationPillId": 1,
"url": "https://www.chase.com/personal/credit-cards",
"domain": "chase.com",
"description": "Personal credit cards from Chase.",
"position": 2
},
{
"label": "JustAnswer Computer Help",
"citationPillId": 1,
"url": "https://www.justanswer.com/computer/help",
"domain": "justanswer.com",
"position": 4
}
],
"relatedLinks": [
{
"label": "Compare developer laptops",
"citationPillId": 1,
"url": "https://www.google.com/search?q=developer+laptops&ibp=oshop",
"domain": "google.com"
}
],
"text": "Based on current information, the best laptops for programming typically include models from Apple MacBook Pro, Dell XPS, and Lenovo ThinkPad series...",
"markdown": "Based on current information, the best laptops for programming typically include models from Apple MacBook Pro, Dell XPS, and Lenovo ThinkPad series...",
"videos": [
{
"url": "https://www.youtube.com/watch?v=example",
"title": "Best Laptops for Programming 2024",
"thumbnail": "https://example.com/thumbnail.jpg",
"source": "Tech Channel",
"platform": "YouTube",
"date": "2 days ago",
"duration": "12:34"
}
],
"ads": [
{
"position": 1,
"title": "QA Software Testing Services - On-Demand Software Testing",
"url": "https://www.testlio.com",
"type": "TEXT",
"domain": "Testlio",
"description": "Dynamic staffing. Global coverage. Managed manual testing and test automation solutions.",
"price": {
"value": 69.99,
"currency": "$",
"raw": "$69.99"
},
"old_price": {
"value": 99.99,
"currency": "$",
"raw": "$99.99"
},
"store": "Best Buy",
"image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ..."
}
]
},
"shoppingCards": [
{
"title": "ASICS Women's Gel-Nimbus 28",
"productLink": "",
"position": 1,
"category": "More products",
"price": {
"value": 169.99,
"currency": "$",
"raw": "$169.99"
},
"oldPrice": {
"value": 199.99,
"currency": "$",
"raw": "$199.99"
},
"store": "DICK'S Sporting Goods",
"rating": 4.5,
"reviews": "384",
"thumbnail": "https://example.com/product.jpg"
}
],
"knowledgeGraph": {
"title": "Eminem",
"type": "American rapper",
"kgmid": "/m/01vs_v8",
"description": "Marshall Bruce Mathers III, known professionally as Eminem, is an American rapper, songwriter, and record producer.",
"imageUrl": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
"website": "https://www.eminem.com",
"menu": "https://www.restaurant.com/menu",
"trailer": "https://www.youtube.com/watch?v=example",
"source": {
"name": "Wikipedia",
"link": "https://en.wikipedia.org/wiki/Eminem"
},
"attributes": [
{
"key": "Born",
"value": "October 17, 1972"
}
],
"profiles": [
{
"name": "Instagram",
"link": "https://www.instagram.com/eminem/"
}
],
"peopleAlsoSearchFor": [
{
"name": "Jay-Z",
"link": "https://www.google.com/search?q=Jay-Z"
}
],
"thingsToKnow": [
{
"label": "Albums",
"subtitle": "The Slim Shady LP, The Marshall Mathers LP, ..."
}
],
"ratings": [
{
"platform": "Rotten Tomatoes",
"rating": "88%",
"link": "https://www.rottentomatoes.com/m/8_mile"
}
],
"streamingOptions": [
{
"platform": "Netflix",
"link": "https://www.netflix.com/title/example"
}
],
"webRatings": [
{
"platform": "Google",
"rating": "4.5",
"link": "https://www.google.com/maps/place/...",
"votes": "1,234"
}
],
"statsCard": {
"context": "2023-24 NBA season",
"stats": [
{
"label": "Points per game",
"value": "27.1"
}
]
},
"socialPosts": [
{
"platform": "X",
"text": "New album dropping Friday 🔥",
"link": "https://x.com/eminem/status/...",
"date": "2 days ago"
}
],
"notableAlumni": [
{
"name": "Barack Obama",
"link": "https://www.google.com/search?q=Barack+Obama"
}
],
"contact": [
{
"label": "Order online",
"url": "https://www.restaurant.com/order"
}
],
"weather": {
"temperature": "72°F",
"condition": "Sunny"
},
"rating": {
"rating": "4.5",
"count": "2,847"
},
"admission": [
{
"provider": "Official website",
"price": "$17",
"link": "https://www.louvre.fr/en/tickets",
"badge": "Best price"
}
],
"artworks": [
{
"title": "Mona Lisa",
"link": "https://www.google.com/search?q=Mona+Lisa",
"author": "Leonardo da Vinci"
}
],
"has3dModel": true,
"hotelOptions": [
{
"provider": "Booking.com",
"price": "$189/night",
"link": "https://www.booking.com/hotel/...",
"note": "Includes breakfast"
}
],
"trendingProducts": [
{
"title": "Air Max 90",
"price": "$120",
"link": "https://www.nike.com/t/air-max-90"
}
],
"merchantVideos": [
{
"title": "Foot Locker Week of Greatness",
"link": "https://www.youtube.com/watch?v=...",
"platform": "YouTube",
"duration": "2:34"
}
],
"listenOn": [
{
"platform": "Spotify",
"link": "https://open.spotify.com/artist/..."
}
]
},
"html": [
"https://cdn.cloro.dev/results/b83e8dfd-c3a1-4b98-83b9-af91adc21e26/page-1.html"
]
}
}{
"success": false,
"error": "Request validation failed",
"details": [
{
"field": "prompt",
"message": "Prompt cannot be empty"
}
]
}{
"error": {
"code": "MISSING_API_KEY",
"message": "Missing or invalid API key",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Insufficient permissions",
"details": {
"requiredScopes": [
"read:monitor",
"write:monitor"
]
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Route not found",
"details": {
"id": "/v1/invalid-endpoint"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "RESOURCE_CONFLICT",
"message": "Resource conflict",
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"error": {
"code": "CONCURRENT_LIMIT_EXCEEDED",
"message": "Concurrent limit exceeded",
"details": {
"limit": 10
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}{
"success": false,
"error": "Request was canceled"
}{
"success": false,
"error": "Maximum retries exceeded"
}{
"error": {
"code": "EXTERNAL_SERVICE_ERROR",
"message": "External service error: OpenAI",
"details": {
"service": "OpenAI"
},
"timestamp": "2025-01-15T12:00:00.000Z"
}
}model=aioverview, not model=google.Request parameters
Required parameters: Describe the search in one of two ways — either the standard fields, or a Google search URL:query(string) andcountry(string): The search query to execute on Google (1-10,000 characters), plus the ISO 3166-1 alpha-2 country code (uppercase) for localized results. There is no default countryurl(string): A complete Google search URL to run instead. See searching by URL
location(string): Google canonical location name for geo-targeted results (e.g.,New York,New York,United States). See Google’s geo target list for all ~100,000 supported locations. Mutually exclusive withuule. When bothlocationanduuleare omitted, cloro defaultslocationto the requested country’s canonical name (e.g.Portugalforcountry: "PT") so results pin to the country instead of the proxy’s exit IP. Passlocationoruuleexplicitly when you need city- or region-level precisionuule(string): Pre-encoded Google UULE string for precise geo-targeting. Use this when you have a pre-built UULE value instead of a location name. Mutually exclusive withlocationdevice(string): Device the search is run from. Options:desktop(default),ios,android, andmobile(an alias forandroid).iosemulates Safari on iPhone andandroidemulates Chrome on Android; all three phone values return the mobile SERP layout.pages(integer): Number of search results pages to scrape (1-10). Defaults to1include.html(boolean): Include raw HTML response. Defaults tofalseinclude.aioverview(object): Include Google AI Overview. Setmarkdown: truefor markdown formatting. Defaults tofalse(not included)include.paaAioverview(boolean): Hydrate AI-Overview-type People Also Ask items with markdown content and cited sources. Defaults tofalse
include.aioverview or include.paaAioverview adds +2 credits. The add-on is inclusive: enabling both still adds +2 credits total, not +4.Each page beyond the first adds +2 credits (e.g. pages: 3 adds +4, pages: 10 adds +18). Read the exact charge for a request from the X-Credits-Charged response header. See providers for full pricing details.Searching by URL
If you already assemble your own Google search URLs, send one asurl instead of query and the targeting fields:
{
"url": "https://www.google.com/search?q=canon+ij+scanner+software&hl=en&gl=us&num=30"
}
country is derived from the URL’s gl. Pass country explicitly to override it, or when your URL has no gl.
url is mutually exclusive with query, location, uule, and pages — the URL owns those values, and sending both is a 400. device and the include.* flags stay top level and behave exactly as they do in the standard shape. The response schema is identical, and so is the cost: a URL request is charged as the equivalent standard request, so num=30 resolves to 3 pages and is billed as pages: 3.
What cloro reads from the URL
cloro supports a fixed set of query parameters:| Parameter | Effect |
|---|---|
q | The search query. Required — a URL without it is rejected |
gl | Sets country when you don’t pass one. Uppercased, and must be a supported country |
hl | Interface language for the results. Overrides the language cloro would otherwise derive from the country, so hl and gl can differ — a Portuguese-language SERP in a US locale, for example |
uule | Geo-targets the search, same as the top-level uule |
num | Requested result depth, converted to whole pages of 10 and capped at 10 pages (num=30 → 3 pages). Google itself caps num at 10 on web search, so cloro paginates to reach the depth you asked for. Omit it and you get a single page |
start | Result offset to begin from. See starting from a given rank |
tbs | Google’s search-refinement filter, applied as written — including compound values such as cdr:1,cd_min:1/1/2026,cd_max:2/1/2026 |
safe | SafeSearch setting, applied as written (active or off) |
glp, lr and the like — don’t cause a rejection, but they’re dropped rather than applied to the search.
Starting from a given rank
start sets the rank your first page begins at, and results are labelled with the SERP page and position they actually came from. A URL with start=20 returns Google’s third page, with position counting from 21 and page reported as 3:
{
"url": "https://www.google.com/search?q=best+seo+tools&gl=us&start=20"
}
num, that returns a single page — the usual shape if you drive pagination yourself by issuing one request per start value. Add num to fetch several pages from the offset in one request: start=20 with num=30 returns ranks 21-30, 31-40 and 41-50.
Rejected URLs
A URL is rejected with a400 when it:
- Is not an absolute
http/httpsURL - Is not on a Google web search host —
google.com,google.co.uk,www.google.deand similar are accepted; subdomains such asnews.google.comare not - Has a path other than
/search - Has no
q, or an empty one - Carries
tbm, which targets a Google vertical with its own endpoint and pricing. Fortbm=nws, use Google News instead - Has a
glcloro doesn’t support, with no explicitcountryto fall back on - Has neither
glnor an explicitcountry— cloro won’t guess a target
Requesting AI Overview
{
"query": "best laptops for programming",
"include": {
"aioverview": {
"markdown": true
}
}
}
markdown (boolean, defaults to false) returns the AI Overview formatted as Markdown. Without the aioverview object, no AI Overview data is returned.
Error handling
aioverview: null in a 200 response, with all other search data intact. In a region where AI Overview isn’t supported, include.aioverview fails with an UnsupportedInputError instead — a region-level error, not a query failure.{
"success": true,
"result": {
"organicResults": [...],
"peopleAlsoAsk": [...],
"relatedSearches": [...],
"aioverview": null
}
}
Response objects
| Section | Field | Description |
|---|---|---|
| Organic results | result.organicResults | Standard non-paid search results from Google |
| Sponsored ads | result.ads | Paid ad placements with sitelinks |
| People Also Ask | result.peopleAlsoAsk | Related questions with link or AI Overview answers |
| Related searches | result.relatedSearches | Related query suggestions |
| Local Pack | result.localResults | Map-backed “3-pack” of local businesses on local-intent queries — when present |
| AI Overview | result.aioverview | Google’s AI-generated summary with sources, videos, and ads (when requested) |
| Knowledge Graph | result.knowledgeGraph | Structured entity panel (person, place, organization, film, etc.) — when present |
| Product results | result.productResults | Merchant offers from the SERP right-rail product panel — direct URL, price, installments, stock, delivery, returns. Emitted when the panel appears, no flag needed, no extra credits |
result.html is also returned when include.html is true. It is an array of URLs — one per scraped page, so a pages: 3 request returns three entries — not a single URL string. Each URL expires after 24 hours.
result.knowledgeGraph, result.shoppingCards, result.productResults, result.peopleAreSaying, and result.localResults are omitted from result when the corresponding panel does not appear on the SERP. Treat them as optional rather than expecting null or an empty array.Usage examples
Scrape multiple pages
{
"query": "best laptops for programming",
"pages": 3,
"country": "US"
}
peopleAlsoAsk entry carries a page field marking which page it appeared on.
City and state-level geo-targeting
location accepts any Google canonical location name, including states and regions — not just cities.
{
"query": "best restaurants",
"country": "US",
"location": "New York,New York,United States"
}
{
"query": "best electricians",
"country": "US",
"location": "California,United States"
}
UULE geo-targeting
When you generate your own UULE values, passuule instead of location — the two are mutually exclusive:
{
"query": "best restaurants",
"country": "US",
"uule": "w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5"
}
Hydrate People Also Ask with AI Overview content
AI-Overview-type People Also Ask items come back with markdown content and cited sources:{
"query": "best laptops for programming",
"include": {
"paaAioverview": true
}
}
{
"query": "best laptops for programming",
"include": {
"aioverview": {
"markdown": true
},
"paaAioverview": true
}
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Request parameters for monitoring Google search results
- Option 1
- Option 2
The search query to execute on Google. Required unless you supply 'url' instead — the two are mutually exclusive.
1 - 10000"best laptops for programming"
ISO 3166-1 alpha-2 country code for localized search results. Required in the standard request shape. When you supply 'url' instead, country is derived from the URL's 'gl' — pass it explicitly to override that, or when the URL has no 'gl'.
"US"
A complete Google web search URL to run instead of building the request from 'query' and the targeting fields. Must be an absolute http(s) URL on a Google web search host (google.com, google.co.uk, www.google.de, ...), with the path '/search' and a non-empty 'q'. Mutually exclusive with 'query', 'location', 'uule' and 'pages' — the URL owns those values. cloro applies a fixed set of query parameters — 'q', 'gl', 'hl', 'uule', 'num' (read as result depth), 'start', 'tbs' and 'safe' — and drops anything else. URLs carrying 'tbm' are rejected, because they target a Google vertical with its own endpoint and pricing (use POST /v1/monitor/google/news for tbm=nws).
"https://www.google.com/search?q=best+laptops+for+programming&hl=en&gl=us&num=30"
Google canonical location name for geo-targeted results, in comma-separated format: 'City,Region,Country' (see https://developers.google.com/google-ads/api/reference/data/geotargets for all ~100,000 supported locations). Use alongside 'country' for city-level precision. Mutually exclusive with 'uule' — provide one or the other, not both. Cannot be combined with 'url'.
"New York,New York,United States"
Pre-encoded Google UULE string for precise geo-targeting. Use this when you have a pre-built UULE value instead of a location name. Mutually exclusive with 'location' — provide one or the other, not both. Cannot be combined with 'url'; put 'uule' in the URL's query string instead.
"w+CAIQICIeV2VzdCBOZXcgWW9yayxOZXcgSmVyc2V5"
Device the search is run from. 'desktop' returns the desktop SERP; 'ios' (Safari on iPhone), 'android' (Chrome on Android) and 'mobile' (alias for 'android') all return the mobile SERP.
desktop, mobile, ios, android "desktop"
Number of search results pages to scrape (1-10). Cannot be combined with 'url' — in that shape, depth comes from the URL's 'num' (rounded up to whole pages of 10, capped at 10 pages).
1 <= x <= 103
Optional flags for including additional response data
Show child attributes
Show child attributes
Was this page helpful?