curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions', 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://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"geo_targets": [
{
"canonical_name": "Dublin,County Dublin,Ireland",
"country_code": "IE",
"name": "Dublin",
"reach": "1300000",
"resource_name": "geoTargetConstants/1007339"
}
],
"keyword_themes": [
"phone screen repair",
"iphone battery replacement"
],
"conversion_categories": [
"BOOK_APPOINTMENT",
"PHONE_CALL_LEAD"
],
"language_code": "en",
"limits": {
"max_keyword_themes": 25,
"max_excluded_terms": 25,
"term_max_len": 80,
"term_max_words": 10
}
}Suggest Google Ads setup targeting
Suggests where to advertise, which keyword themes to target, and which conversions to track for the app’s first campaign, read from the app itself.
A language model reads the app’s name, description, pages, data entities and page source once, then Base44 resolves the places it names to real Google locations. Everything here is a suggestion for someone to confirm. Nothing is saved, and the app does not need a Google Ads account yet.
The call never fails on the suggestions themselves. When the app has nothing to read, the model fails or answers with nothing usable, or Google can’t resolve a place, the affected lists come back empty under a 200, so an empty list means “no suggestion” rather than “none apply”. conversion_categories in particular is empty unless the app already has the flow behind a goal, such as a booking page or a checkout. Expect it to take 30 seconds or more.
Once the app has a provisioned Google Ads account, Suggest Google Ads setup keyword themes gets Google’s own themes for the locations you settle on. Use those first and fill up from keyword_themes.
It is refused with a 409 while the workspace is on a Google Ads billing hold. Running the model does not spend credits.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions', 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://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/google-ads/setup-suggestions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"geo_targets": [
{
"canonical_name": "Dublin,County Dublin,Ireland",
"country_code": "IE",
"name": "Dublin",
"reach": "1300000",
"resource_name": "geoTargetConstants/1007339"
}
],
"keyword_themes": [
"phone screen repair",
"iphone battery replacement"
],
"conversion_categories": [
"BOOK_APPOINTMENT",
"PHONE_CALL_LEAD"
],
"language_code": "en",
"limits": {
"max_keyword_themes": 25,
"max_excluded_terms": 25,
"term_max_len": 80,
"term_max_words": 10
}
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app you are setting up Google Ads for.
Response
Suggested locations, keyword themes and conversion goals.
Suggested targeting and conversion goals for a first campaign.
Up to 10 locations worth advertising in, one per place the model named. Empty when it couldn't tell.
Show child attributes
Show child attributes
[
{
"canonical_name": "Dublin,County Dublin,Ireland",
"country_code": "IE",
"name": "Dublin",
"reach": "1300000",
"resource_name": "geoTargetConstants/1007339"
}
]
Up to 25 search themes a buyer might type, best first, in the app's own language.
[
"phone screen repair",
"iphone battery replacement"
]
Conversion goals worth tracking because the app already has the flow behind them, from PURCHASE, ADD_TO_CART, BEGIN_CHECKOUT, SUBSCRIBE_PAID, SUBMIT_LEAD_FORM, BOOK_APPOINTMENT, REQUEST_QUOTE, CONTACT, PHONE_CALL_LEAD and SIGNUP. Often empty.
["BOOK_APPOINTMENT", "PHONE_CALL_LEAD"]
Two-letter code of the language keyword_themes is written in, as the model reported it. Empty when it couldn't tell. Pass it to Suggest Google Ads setup keyword themes.
"en"
The limits the themes and excluded terms you save have to fit.
Show child attributes
Show child attributes
Was this page helpful?