import { UserRefreshClient, JWT } from 'google-auth-library';
// for web application
const authClient = new UserRefreshClient({
clientId: '<CLIENT_ID>',
clientSecret: '<CLIENT_SECRET>',
refreshToken: '<REFRESH_TOKEN>',
});
// or use JWT for service account
const authClient = new JWT({
keyFile: '<KEY_FILE>',
subject: '<GOOGLE_ADS_EMAIL>',
scopes: ['https://www.googleapis.com/auth/adwords'],
});
import { Customer } from '@htdangkhoa/google-ads';
const service = new Customer({
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
});
const { resource_names: customers } = await service.listAccessibleCustomers();
// ...
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
},
{
customer_id: '<CUSTOMER_ID>',
},
);
const customerClients = await service.search({
query: `
SELECT
customer_client.descriptive_name,
customer_client.resource_name,
customer_client.client_customer,
customer_client.level,
customer_client.manager
FROM customer_client
`,
});
// ...
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
}, {
customer_id: '<MANAGER_ID>',
}
);
const response = service
.setCustomerId('<CUSTOMER_ID>') // you can switch customer id
.setLoginCustomerId('<MANAGER_ID>')
.searchStream({
query: `
SELECT
campaign.id,
campaign.name,
campaign.status
FROM campaign
`,
});
for await (const { results } of response) {
// ...
}
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
},
{
customer_id: '<CUSTOMER_CLIENT_ID>',
login_customer_id: '<CUSTOMER_ID>',
},
);
const campaigns = await service.search({
query: `
SELECT
campaign.id,
campaign.name,
campaign.status
FROM campaign
`,
});
// ...
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
},
{
customer_id: '<CUSTOMER_CLIENT_ID>',
login_customer_id: '<CUSTOMER_ID>',
},
);
const response = await service.mutate({
mutate_operations: [
{
campaign_operation: {
create: {
// ...
},
update: {
// ...
},
remove: '<CAMPAIGN_RESOURCE_NAME>',
},
},
],
partial_failure: true,
});
// ...
import { QueryBuilder } from '@htdangkhoa/google-ads';
const query = new QueryBuilder()
.select(
'campaign.id',
'campaign.name',
'segments.device',
'metrics.clicks',
)
.from('campaign')
.where(
{
attribute: 'metrics.impressions',
operator: Operators.GREATER_THAN,
value: "0",
},
{
attribute: 'segments.device',
operator: Operators.EQUALS,
value: "MOBILE",
},
{
attribute: 'segments.date',
operator: Operators.DURING,
value: Functions.LAST_30_DAYS,
},
)
.orderBy(
{
attribute: 'metrics.clicks',
direction: Order.DESC,
},
)
.limit(10)
.build();
const response = await service.search({ query });
Requests are logged with a one line summary and the full request/response body and headers.
Log type | Log name | Success level | Failure level |
---|---|---|---|
SUMMARY | Google::Ads::GoogleAds::Summary | INFO | WARN |
DETAIL | Google::Ads::GoogleAds::Detail | DEBUG | INFO |
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
logging: true,
},
{
customer_id: '<CUSTOMER_ID>',
},
);
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
logging: {
summary: true,
detail: false,
},
},
{
customer_id: '<CUSTOMER_ID>',
},
);
The ServiceOptions
is extended from @grpc/grpc-js
ClientOptions, so you can pass any options you want to the client.
import { GoogleAds } from '@htdangkhoa/google-ads';
const service = new GoogleAds(
{
auth: authClient,
developer_token: '<DEVELOPER_TOKEN>',
logging: {
summary: true,
detail: false,
},
interceptors: [
// your interceptors
],
},
{
customer_id: '<CUSTOMER_ID>',
},
);
See more at Node.js gRPC Library and some examples here.
- Protocol Buffer Compiler (protoc) version 3.0.0 or greater. The latest version can be downloaded from here
- Node.js version 16 or greater (LTS recommended) and npm version 8 or greater. The latest version of Node.js can be downloaded from here
-
Install dependencies
yarn install
-
Pull in the new protos and compile them
yarn generate <GOOGLE_ADS_API_VERSION> # example yarn generate v18
-
Make sure the version number in the
src
folder is correct (it should match the version number you passed to thegenerate
command) -
Run tests to make sure everything worked (you may need to update the version numbers here)
yarn test
-
Build the library
yarn build
-
Make a pull request, get it approved and merged into
main
The code in this project is released under the MIT License.