Scrape Google AI Mode search by URL
curl --request POST \
--url https://api.brightdata.com/datasets/v3/scrape \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": [
{
"url": "<string>",
"prompt": "<string>",
"country": "<string>",
"hl": "<string>",
"index": 123
}
]
}
'import requests
url = "https://api.brightdata.com/datasets/v3/scrape"
payload = { "input": [
{
"url": "<string>",
"prompt": "<string>",
"country": "<string>",
"hl": "<string>",
"index": 123
}
] }
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({
input: [
{
url: '<string>',
prompt: '<string>',
country: '<string>',
hl: '<string>',
index: 123
}
]
})
};
fetch('https://api.brightdata.com/datasets/v3/scrape', 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.brightdata.com/datasets/v3/scrape",
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([
'input' => [
[
'url' => '<string>',
'prompt' => '<string>',
'country' => '<string>',
'hl' => '<string>',
'index' => 123
]
]
]),
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.brightdata.com/datasets/v3/scrape"
payload := strings.NewReader("{\n \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\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.brightdata.com/datasets/v3/scrape")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/datasets/v3/scrape")
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 \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"url": "https://www.google.com/search?q=how+to+train+for+a+marathon&oq=how+to+train+for+a+marathon&hl=en&gl=US&udm=50&...",
"prompt": "how to train for a marathon",
"answer_html": "<html itemscope itemtype=\"http://schema.org/SearchResultsPage\" lang=\"en\" ...>...</html>",
"answer_text": "To train for a marathon, you must commit to a structured 12- to 20-week training block that builds endurance, strengthens muscles, and trains your digestive system...",
"answer_text_markdown": "To train for a marathon, you must commit to a structured **12- to 20-week training block** that builds endurance...",
"answer_text_raw": "To train for a marathon, you must \n\ncommit to a structured \n\n12- to 20-week training block\n\n...",
"links_attached": [
{
"url": "https://www.rei.com/",
"text": "REI +2",
"position": 1
},
{
"url": "https://everywomansmarathon.com/",
"text": "Every Woman's Marathon +1",
"position": 2
}
],
"citations": [
{
"url": "https://www.rei.com/",
"title": "Training For a Marathon: How To Prepare | REI Expert Advice",
"description": null,
"icon": null,
"domain": "https://www.rei.com",
"cited": true
},
{
"url": "https://www.halhigdon.com/training/marathon-training/",
"title": "Marathon Training for All Skill Levels | Hal Higdon",
"description": null,
"icon": null,
"domain": "https://www.halhigdon.com",
"cited": true
}
],
"shopping": [],
"ads": null,
"index": 1,
"country": "US",
"timestamp": "2026-10-02T00:23:44.475Z",
"input": {
"url": "https://www.google.com/search?udm=50&q=how+to+train+for+a+marathon",
"prompt": "how to train for a marathon",
"index": 1,
"country": "US",
"hl": "en"
}
}
]
Google
Scrape Google AI Mode search by URL
Use the Bright Data Scraper API to collect Google AI Mode search answers and citations by URL. POST /datasets/v3/scrape returns records as JSON.
POST
/
datasets
/
v3
/
scrape
Scrape Google AI Mode search by URL
curl --request POST \
--url https://api.brightdata.com/datasets/v3/scrape \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": [
{
"url": "<string>",
"prompt": "<string>",
"country": "<string>",
"hl": "<string>",
"index": 123
}
]
}
'import requests
url = "https://api.brightdata.com/datasets/v3/scrape"
payload = { "input": [
{
"url": "<string>",
"prompt": "<string>",
"country": "<string>",
"hl": "<string>",
"index": 123
}
] }
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({
input: [
{
url: '<string>',
prompt: '<string>',
country: '<string>',
hl: '<string>',
index: 123
}
]
})
};
fetch('https://api.brightdata.com/datasets/v3/scrape', 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.brightdata.com/datasets/v3/scrape",
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([
'input' => [
[
'url' => '<string>',
'prompt' => '<string>',
'country' => '<string>',
'hl' => '<string>',
'index' => 123
]
]
]),
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.brightdata.com/datasets/v3/scrape"
payload := strings.NewReader("{\n \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\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.brightdata.com/datasets/v3/scrape")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/datasets/v3/scrape")
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 \"input\": [\n {\n \"url\": \"<string>\",\n \"prompt\": \"<string>\",\n \"country\": \"<string>\",\n \"hl\": \"<string>\",\n \"index\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"url": "https://www.google.com/search?q=how+to+train+for+a+marathon&oq=how+to+train+for+a+marathon&hl=en&gl=US&udm=50&...",
"prompt": "how to train for a marathon",
"answer_html": "<html itemscope itemtype=\"http://schema.org/SearchResultsPage\" lang=\"en\" ...>...</html>",
"answer_text": "To train for a marathon, you must commit to a structured 12- to 20-week training block that builds endurance, strengthens muscles, and trains your digestive system...",
"answer_text_markdown": "To train for a marathon, you must commit to a structured **12- to 20-week training block** that builds endurance...",
"answer_text_raw": "To train for a marathon, you must \n\ncommit to a structured \n\n12- to 20-week training block\n\n...",
"links_attached": [
{
"url": "https://www.rei.com/",
"text": "REI +2",
"position": 1
},
{
"url": "https://everywomansmarathon.com/",
"text": "Every Woman's Marathon +1",
"position": 2
}
],
"citations": [
{
"url": "https://www.rei.com/",
"title": "Training For a Marathon: How To Prepare | REI Expert Advice",
"description": null,
"icon": null,
"domain": "https://www.rei.com",
"cited": true
},
{
"url": "https://www.halhigdon.com/training/marathon-training/",
"title": "Marathon Training for All Skill Levels | Hal Higdon",
"description": null,
"icon": null,
"domain": "https://www.halhigdon.com",
"cited": true
}
],
"shopping": [],
"ads": null,
"index": 1,
"country": "US",
"timestamp": "2026-10-02T00:23:44.475Z",
"input": {
"url": "https://www.google.com/search?udm=50&q=how+to+train+for+a+marathon",
"prompt": "how to train for a marathon",
"index": 1,
"country": "US",
"hl": "en"
}
}
]
Some Google AI Mode requests run longer than the 1-minute
/scrape window. When that happens, the response is HTTP 202 with a snapshot_id instead of records, and collection continues. Branch on the status code as shown in How to handle a 202 response, or send many prompts at once with the async /trigger endpoint.Query Parameters
string
default:"gd_mcswdt6z2elth3zqr2"
required
The dataset ID used for this request.
Must be set to
gd_mcswdt6z2elth3zqr2 to collect Google AI Mode Search by URL.boolean
default:false
Whether to send notifications when the request is completed.
boolean
default:true
Whether to include errors in the response.
Request Body
object[]
required
An array of input objects.
Show properties
Show properties
string
required
The Google AI Mode Search URL to scrape (includes the
udm=50 parameter).string
required
The prompt used in the AI Mode Search query.
string
ISO 3166-1 alpha-2 country code for localized results.
string
Google interface language code, such as
en, de or fr. Sets the language of the AI Mode answer, independent of the prompt language. For example, an English prompt with "hl": "de" returns the answer in German.number
A number you assign to each input to track it. The same value is returned in the
index field of the output record.Example
{
"input": [
{
"url": "https://www.google.com/search?udm=50&q=how+to+train+for+a+marathon",
"prompt": "how to train for a marathon",
"country": "US",
"hl": "en",
"index": 1
}
]
}
[
{
"url": "https://www.google.com/search?q=how+to+train+for+a+marathon&oq=how+to+train+for+a+marathon&hl=en&gl=US&udm=50&...",
"prompt": "how to train for a marathon",
"answer_html": "<html itemscope itemtype=\"http://schema.org/SearchResultsPage\" lang=\"en\" ...>...</html>",
"answer_text": "To train for a marathon, you must commit to a structured 12- to 20-week training block that builds endurance, strengthens muscles, and trains your digestive system...",
"answer_text_markdown": "To train for a marathon, you must commit to a structured **12- to 20-week training block** that builds endurance...",
"answer_text_raw": "To train for a marathon, you must \n\ncommit to a structured \n\n12- to 20-week training block\n\n...",
"links_attached": [
{
"url": "https://www.rei.com/",
"text": "REI +2",
"position": 1
},
{
"url": "https://everywomansmarathon.com/",
"text": "Every Woman's Marathon +1",
"position": 2
}
],
"citations": [
{
"url": "https://www.rei.com/",
"title": "Training For a Marathon: How To Prepare | REI Expert Advice",
"description": null,
"icon": null,
"domain": "https://www.rei.com",
"cited": true
},
{
"url": "https://www.halhigdon.com/training/marathon-training/",
"title": "Marathon Training for All Skill Levels | Hal Higdon",
"description": null,
"icon": null,
"domain": "https://www.halhigdon.com",
"cited": true
}
],
"shopping": [],
"ads": null,
"index": 1,
"country": "US",
"timestamp": "2026-10-02T00:23:44.475Z",
"input": {
"url": "https://www.google.com/search?udm=50&q=how+to+train+for+a+marathon",
"prompt": "how to train for a marathon",
"index": 1,
"country": "US",
"hl": "en"
}
}
]
Was this page helpful?