Natural Language
Stay organized with collections
Save and categorize content based on your preferences.
Calculate the sentiment of a piece of text
/**
*
Calculates
a
measure
of
sentiment
for
supplied
ad
text
.
*
See
:
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
features
/
third
-
party
-
apis
#refresh_token_grant
*
for
details
on
configuring
this
script
.
*
*
e
.
g
:
*
initializeOAuthClient
();
*
const
sentiment
=
getAdTextSentiment
(
'Buy our cakes today!'
);
*
*
NOTE
:
This
script
also
requires
the
OAuth2
library
to
be
pasted
at
the
end
,
*
as
obtained
from
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
examples
/
oauth20
-
library
*/
//
Service
account
email
,
e
.
g
.
'yyyy@yyyy-1234.iam.gserviceaccount.com'
const
SERVICE_ACCOUNT
=
'INSERT_SERVICE_ACCOUNT_EMAIL_HERE'
;
//
Key
taken
from
downloaded
JSON
key
file
const
KEY
=
'-----BEGIN ..... KEY-----
\n
'
;
let
authUrlFetch
;
//
Call
this
function
just
once
,
to
initialize
the
OAuth
client
.
function
initializeOAuthClient
()
{
if
(
typeof
OAuth2
===
'undefined'
)
{
const
libUrl
=
'https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library'
;
throw
Error
(
'OAuth2 library not found. Please take a copy of the OAuth2 '
+
'library from '
+
libUrl
+
' and append to the bottom of this script.'
);
}
const
tokenUrl
=
'https://accounts.google.com/o/oauth2/token'
;
const
scope
=
'https://www.googleapis.com/auth/cloud-platform'
;
authUrlFetchApp
=
OAuth2
.
withServiceAccount
(
tokenUrl
,
SERVICE_ACCOUNT
,
KEY
,
scope
);
}
/**
*
Retrieve
the
sentiment
for
a
given
piece
of
text
.
*
@
param
{
string
}
adText
The
text
to
analyze
.
*
@
return
{
Object
}
The
results
of
the
analysis
.
*/
function
getAdTextSentiment
(
adText
)
{
const
body
=
{
document
:{
type
:
'PLAIN_TEXT'
,
content
:
adText
},
encodingType
:
'UTF8'
};
//
Natural
Language
API
Sentiment
URL
const
url
=
'https://language.googleapis.com/v1beta1/documents:analyzeSentiment'
;
const
options
=
{
method
:
'POST'
,
contentType
:
'application/json'
,
payload
:
JSON
.
stringify
(
body
)
};
const
response
=
authUrlFetchApp
.
fetch
(
url
,
options
);
const
result
=
JSON
.
parse
(
response
.
getContentText
());
if
(
result
.
documentSentiment
)
{
//
return
an
object
with
'polarity'
and
'magnitude'
properties
.
return
result
.
documentSentiment
;
}
throw
Error
(
'No sentiment response returned'
);
}
//
Paste
in
OAuth2
library
here
,
from
:
//
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
examples
/
oauth20
-
library
/**
*
Extracts
entities
for
a
piece
of
text
.
*
See
:
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
features
/
third
-
party
-
apis
#refresh_token_grant
*
for
details
on
configuring
this
script
.
*
*
e
.
g
:
*
initializeOAuthClient
();
*
const
entities
=
getAdTextEntities
(
'Football stadiums in London'
);
*
*
NOTE
:
This
script
also
requires
the
OAuth2
library
to
be
pasted
at
the
end
,
*
as
obtained
from
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
examples
/
oauth20
-
library
*/
//
Service
account
email
,
e
.
g
.
'yyyy@yyyy-1234.iam.gserviceaccount.com'
const
SERVICE_ACCOUNT
=
'INSERT_SERVICE_ACCOUNT_EMAIL_HERE'
;
//
Key
taken
from
downloaded
JSON
key
file
const
KEY
=
'-----BEGIN ..... KEY-----
\n
'
;
let
authUrlFetch
;
//
Call
this
function
just
once
,
to
initialize
the
OAuth
client
.
function
initializeOAuthClient
()
{
if
(
typeof
OAuth2
===
'undefined'
)
{
const
libUrl
=
'https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library'
;
throw
Error
(
'OAuth2 library not found. Please take a copy of the OAuth2 '
+
'library from '
+
libUrl
+
' and append to the bottom of this script.'
);
}
const
tokenUrl
=
'https://accounts.google.com/o/oauth2/token'
;
const
scope
=
'https://www.googleapis.com/auth/cloud-platform'
;
authUrlFetchApp
=
OAuth2
.
withServiceAccount
(
tokenUrl
,
SERVICE_ACCOUNT
,
KEY
,
scope
);
}
/**
*
Extracts
entities
for
a
given
piece
of
text
.
*
@
param
{
string
}
adText
The
text
to
analyze
.
*
@
return
{
Object
}
The
list
of
extracted
entities
.
*/
function
getAdTextEntities
(
adText
)
{
const
body
=
{
document
:{
type
:
'PLAIN_TEXT'
,
content
:
adText
},
encodingType
:
'UTF8'
};
//
Natural
Language
API
Sentiment
URL
const
url
=
'https://language.googleapis.com/v1beta1/documents:analyzeEntities'
;
const
options
=
{
method
:
'POST'
,
contentType
:
'application/json'
,
payload
:
JSON
.
stringify
(
body
)
};
const
response
=
authUrlFetchApp
.
fetch
(
url
,
options
);
const
result
=
JSON
.
parse
(
response
.
getContentText
());
console
.
log
(
result
);
if
(
result
.
entities
)
{
//
return
a
list
of
identified
entities
return
result
.
entities
;
}
throw
Error
(
'No entities response returned'
);
}
//
Paste
in
OAuth2
library
here
,
from
:
//
https
:
//
developers
.
google
.
com
/
google
-
ads
/
scripts
/
docs
/
examples
/
oauth20
-
library
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License
, and code samples are licensed under the Apache 2.0 License
. For details, see the Google Developers Site Policies
. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-20 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-20 UTC."],[[["\u003cp\u003eThese Google Ads scripts utilize the Natural Language API to analyze ad text.\u003c/p\u003e\n"],["\u003cp\u003eOne script calculates the sentiment (polarity and magnitude) of ad text.\u003c/p\u003e\n"],["\u003cp\u003eThe other script extracts entities from ad text, providing insights into key terms and topics.\u003c/p\u003e\n"],["\u003cp\u003eBoth scripts require initialization of an OAuth client for authentication and authorization to the API.\u003c/p\u003e\n"],["\u003cp\u003eUsers need to insert their service account email and key for secure API access.\u003c/p\u003e\n"]]],[],null,["# Natural Language\n\nCalculate the sentiment of a piece of text\n------------------------------------------\n\n```gdscript\n/**\n * Calculates a measure of sentiment for supplied ad text.\n * See: https://developers.google.com/google-ads/scripts/docs/features/third-party-apis#refresh_token_grant\n * for details on configuring this script.\n *\n * e.g:\n * initializeOAuthClient();\n * const sentiment = getAdTextSentiment('Buy our cakes today!');\n *\n * NOTE: This script also requires the OAuth2 library to be pasted at the end,\n * as obtained from https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library\n */\n// Service account email, e.g. 'yyyy@yyyy-1234.iam.gserviceaccount.com'\nconst SERVICE_ACCOUNT = 'INSERT_SERVICE_ACCOUNT_EMAIL_HERE';\n// Key taken from downloaded JSON key file\nconst KEY = '-----BEGIN ..... KEY-----\\n';\n\nlet authUrlFetch;\n\n// Call this function just once, to initialize the OAuth client.\nfunction initializeOAuthClient() {\n if (typeof OAuth2 === 'undefined') {\n const libUrl = 'https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library';\n throw Error('OAuth2 library not found. Please take a copy of the OAuth2 ' +\n 'library from ' + libUrl + ' and append to the bottom of this script.');\n }\n const tokenUrl = 'https://accounts.google.com/o/oauth2/token';\n const scope = 'https://www.googleapis.com/auth/cloud-platform';\n authUrlFetchApp =\n OAuth2.withServiceAccount(tokenUrl, SERVICE_ACCOUNT, KEY, scope);\n}\n\n/**\n * Retrieve the sentiment for a given piece of text.\n * @param {string} adText The text to analyze.\n * @return {Object} The results of the analysis.\n */\nfunction getAdTextSentiment(adText) {\n const body = {\n document:{\n type: 'PLAIN_TEXT',\n content: adText\n },\n encodingType: 'UTF8'\n };\n\n // Natural Language API Sentiment URL\n const url =\n 'https://language.googleapis.com/v1beta1/documents:analyzeSentiment';\n const options = {\n method: 'POST',\n contentType: 'application/json',\n payload: JSON.stringify(body)\n };\n const response = authUrlFetchApp.fetch(url, options);\n const result = JSON.parse(response.getContentText());\n if (result.documentSentiment) {\n // return an object with 'polarity' and 'magnitude' properties.\n return result.documentSentiment;\n }\n throw Error('No sentiment response returned');\n}\n\n// Paste in OAuth2 library here, from:\n// https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library\n```\n\nExtract the entities from a piece of text\n-----------------------------------------\n\n```gdscript\n/**\n * Extracts entities for a piece of text.\n * See: https://developers.google.com/google-ads/scripts/docs/features/third-party-apis#refresh_token_grant\n * for details on configuring this script.\n *\n * e.g:\n * initializeOAuthClient();\n * const entities = getAdTextEntities('Football stadiums in London');\n *\n * NOTE: This script also requires the OAuth2 library to be pasted at the end,\n * as obtained from https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library\n */\n// Service account email, e.g. 'yyyy@yyyy-1234.iam.gserviceaccount.com'\nconst SERVICE_ACCOUNT = 'INSERT_SERVICE_ACCOUNT_EMAIL_HERE';\n// Key taken from downloaded JSON key file\nconst KEY = '-----BEGIN ..... KEY-----\\n';\n\nlet authUrlFetch;\n\n// Call this function just once, to initialize the OAuth client.\nfunction initializeOAuthClient() {\n if (typeof OAuth2 === 'undefined') {\n const libUrl = 'https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library';\n throw Error('OAuth2 library not found. Please take a copy of the OAuth2 ' +\n 'library from ' + libUrl + ' and append to the bottom of this script.');\n }\n const tokenUrl = 'https://accounts.google.com/o/oauth2/token';\n const scope = 'https://www.googleapis.com/auth/cloud-platform';\n authUrlFetchApp =\n OAuth2.withServiceAccount(tokenUrl, SERVICE_ACCOUNT, KEY, scope);\n}\n\n/**\n * Extracts entities for a given piece of text.\n * @param {string} adText The text to analyze.\n * @return {Object} The list of extracted entities.\n */\nfunction getAdTextEntities(adText) {\n const body = {\n document:{\n type: 'PLAIN_TEXT',\n content: adText\n },\n encodingType: 'UTF8'\n };\n\n // Natural Language API Sentiment URL\n const url =\n 'https://language.googleapis.com/v1beta1/documents:analyzeEntities';\n const options = {\n method: 'POST',\n contentType: 'application/json',\n payload: JSON.stringify(body)\n };\n const response = authUrlFetchApp.fetch(url, options);\n const result = JSON.parse(response.getContentText());\n console.log(result);\n if (result.entities) {\n // return a list of identified entities\n return result.entities;\n }\n throw Error('No entities response returned');\n}\n\n// Paste in OAuth2 library here, from:\n// https://developers.google.com/google-ads/scripts/docs/examples/oauth20-library\n```"]]