Ads Max
Learn how you can use this source for maximum paid ad visibility.
The google_ads source is optimized to retrieve Google Search (SERPs) and Google AI Overviews results with paid ads at a maximum ad rate. The source will return only ten results per page, ensuring the highest chances of paid results showing up. Other than that, it supports the same parameters as regular Web Search.
Request samples
In this example, we make a request to google.nl to retrieve search results for the keyword adidas.
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "google_ads",
"domain": "nl",
"query": "adidas",
"parse": true
}'import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'google_ads',
'domain': 'nl',
'query': 'adidas',
'parse': True
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# Print prettified response to stdout.
pprint(response.json())const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "google_ads",
domain: "nl",
query: "adidas",
parse: true,
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();https://realtime.oxylabs.io/v1/queries?source=google_ads&domain=nl&query=adidas&parse=true&access_token=12345abcde<?php
$params = array(
'source' => 'google_ads',
'domain' => 'nl',
'query' => 'adidas',
'parse' => true
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "google_ads",
"domain": "nl",
"query": "adidas",
"parse": true,
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
response, _ := client.Do(request)
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new {
source = "google_ads",
domain = "nl",
query = "adidas",
parse = true
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}package org.example;
import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "google_ads");
jsonObject.put("domain", "nl");
jsonObject.put("query", "adidas");
jsonObject.put("parse", true);
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}{
"source": "google_ads",
"domain": "nl",
"query": "adidas",
"parse": true
}We use synchronous Realtime integration method in our examples. If you would like to use Proxy Endpoint or asynchronous Push-Pull integration, refer to the integration methods section.
Request parameter values
Generic
Basic setup and customization options for scraping Google ads.
source
Sets the scraper.
google_ads
query
The keyword or phrase to search for.
-
- mandatory parameter
Localization
Adapt search results to specific geographical locations, domains, and languages.
geo_location
The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures here.
-
locale
Accept-Language header value which changes your Google search page web interface language. More info.
-
Pagination
Controls for managing the pagination and retrieval of search results.
start_page
Starting page number.
1
pages
Number of pages to retrieve.
1
Filtering
Options to filter and refine search results based on various criteria.
context:
udm
udm parameter allows switching between different search tabs, such as images, places, or videos, to customize the type of results displayed. Find the accepted values here.
-
context:
tbm
To-be-matched or tbm parameter. Accepted values are: app, blg, bks, dsc, isch, nws, pts, plcs, rcp, lcl
-
context:
tbs
tbs parameter. This parameter is like a container for more obscure google parameters, like limiting/sorting results by date as well as other filters some of which depend on the tbm parameter (e.g. tbs=app_os:1 is only available with tbm value app). More info here.
-
Other
Additional advanced settings and controls for specialized requirements.
context:
nfpr
true will turn off spelling auto-correction
false
Context parameters
All context parameters should be added to the context array as objects with key and value pairs, e.g.:
...
"context": [
{
"key": "filter",
"value": "0"
}
]
...Output sample
Output dictionary
google_ads output includes fields like URL, page, results, and more. The table below presents a detailed list of each Google Ads Max element we parse, including description, data type, and relevant metadata.
url
The URL of the Google search results page.
string
page
Page number.
integer
results
An object containing all search result types.
object
results.paid
List of paid advertisement results with details like title, description, URL, and sitelinks.
array
results.organic
List of organic (non-paid) search results with title, description, URL, and sitelinks.
array
results.images
Image carousel results displayed on the search page.
object
results.knowledge
Knowledge Graph panel data including title, description, images, factoids, and related searches.
object
results.navigation
Navigation tabs for switching between search types (Images, Videos, News, etc.).
array
results.instant_answers
Special features or instant answer boxes displayed on the page.
array
results.related_searches
Related search suggestions with their queries and position.
object
results.search_information
Metadata about the search including the query and total results count.
object
results.total_results_count
Estimated total number of results for the query.
integer
parse_status_code
Status code of the parsing operation.
integer
created_at
Timestamp when the scraping job was created.
timestamp
updated_at
Timestamp when the scraping job was finished.
timestamp
job_id
ID of the job associated with the scraping job.
string
status_code
Status code of the scraping job. You can see the scraper status codes described here.
integer
Last updated
Was this helpful?

