Posted:
AdWords API v201509 introduces some changes to reporting columns, particularly Clicks. Recently, AdWords introduced new columns called Engagements and Interactions. It also added reporting columns related to video campaigns such as VideoViews, which have previously been unavailable via API reporting. AdWords API version v201509 has updated its reporting to match these changes.

The new Interactions field, available in API performance reports, can be thought of as the main action a user takes with the ad format: clicks for text ads, engagements for Lightbox ads, and views for video ads. Previously, views for video ads were not returned in API reporting, so having access to this data is new.

Prior to v201509, the Clicks field always included both clicks and engagements. Starting in v201509, the Clicks field includes only click actions, like clickthroughs to a landing page or clicks to call. This means that clicks on video ads, which are unpaid, will be included in this field. However, engagements for Lightbox ads will not be counted.

If measuring performance across multiple ad formats, you might consider using Interactions to view the total number of primary user actions on ads, all in the same column. Clicks, Engagements, and VideoViews are available as well for more fine-grained reporting by ad format.

The table below summarizes the changes in each field for various ad formats.

Field
v201506
v201509
Clicks
Text ads: clickthrough to a landing page

Lightbox ads: hover to expanded ad format
Text ads: clickthrough to a landing page or clicks to call

Lightbox ads: clickthrough to a landing page

Video ads: clickthrough to a landing page
Engagements
N/A
Lightbox ads: hover to expanded ad format
VideoViews
N/A
Video ads: view
Interactions
N/A
Text ads: clickthrough to a landing page or clicks to call

Lightbox ads: hover to expanded ad format

Video ads: views

Please note that reporting in v201506 and previous versions is unaffected; they return the same data that they always have, represented the same way. This means that when comparing the data you receive from older versions of the API to user interface reports, or to v201509 reports, the numbers will not directly match up. Video-related stats will still be excluded from v201506. The Clicks column in v201506 will match the Interactions column from v201509 if you subtract out video interactions.

For ease of reporting, it’s recommended to migrate to v201509 as soon as possible.

Keep in mind these aren’t the only reporting changes in v201509 — for more details on conversion-related reporting changes, please see the release notes.

If you have any questions about this or other aspects of the AdWords API, please contact us via the forum or the Ads Developers Plus Page.

Posted:
Following the release of AdWords API v201506, we've added a few additional features that are available immediately:
  • Android App ‘first open’ conversion tracking. Recently available in AdWords, this new conversion tracking solution measures when a user first opens an app after clicking on an ad and completing an Android app install. Check out the new FIRST_OPEN conversion type in the AppConversion tracker that also supports Postback URLs for Android.
  • A new report specific to final URLs: FINAL_URL_REPORT. The report replaces the deprecated DESTINATION_URL_REPORT and provides statistics aggregated at the final URL level.
We also launched account hiding support recently—see this announcement if you missed it. If you have any questions, feel free to reach us on the forum or via the Ads Developers Plus Page.

Posted:

After our last round of spring cleaning, we've gone back to the drawing board to take another look at how we could make reporting better. There currently is an abundance of Dimensions, DimensionAttributes, and Columns (and more coming with each release), so in an effort to simplify the list of fields, we will be sunsetting the following reconciliation-related dimension attributes / columns in all versions. This will happen on September 1, 2015.

Columns with equivalent replacements:

Columns without equivalent replacements:

While the first two have equivalent replacements, the latter ones are not being replaced, as they don’t exist in core product reporting either.

This means that usage of these columns / dimension attributes will begin throwing errors in all versions starting September 1st. If your network is actively using any of these, please update your reports to switch to the supported fields or remove them entirely. If you have any questions, comments, or concerns about this, you know where to reach us!

Posted:
This release of AwReporting introduces new command-line arguments that can be used to import CSV files into AwReporting without using the AdWords API. So you can download reports from the AdWords user interface, even reports not available via the AdWords API like the Video Campaign Report, and import them into your database.

Offline reports

The command-line arguments that allow the tool to import reports directly from downloaded files are:
  • onFileReport, where you specify the Report Type (same ones used in the API).
  • csvReportFile, where you specify the absolute path of the CSV file that will be imported to the database.
Here is a command-line example including the new arguments:
$ java -Xmx1G -jar aw-reporting/target/aw-reporting.jar \
      -startDate YYYYMMDD -endDate YYYYMMDD \
      -file aw-reporting/src/main/resources/aw-report-sample.properties \
      -onFileReport CAMPAIGN_PERFORMANCE_REPORT \
      -csvReportFile 
Keep in mind that AwReporting will only be able to import reports that are mapped in the aw-reporting-model module. You can check out the supported types on the project's GitHub source code page.

The CSV files must be in the same format as the ones downloaded by AwReporting via the API:
  • The first line of the file must contain a string with the file description.
  • The second line must contain the column headers with the field names.
  • The remaining lines contain the report data.
  • The last line will be ignored if it's a Total line.
Here is an example:

"ACCOUNT_PERFORMANCE_REPORT (May 1, 2015-May 10, 2015)"
Customer ID,Day,Account,Cost,Clicks,Impressions
1234,2015-05-01,Test Account,1420000,10,1978
1234,2015-05-02,Test Account,550000,4,2209
1234,2015-05-03,Test Account,1290000,6,3458
1234,2015-05-04,Test Account,320000,2,714
1234,2015-05-08,Test Account,1380000,5,2955
1234,2015-05-09,Test Account,1200000,6,2602
1234,2015-05-10,Test Account,750000,4,2793
Total, --, --,6.91,37,16709
Video Campaign Performance Reports

The AdWords API doesn't support video campaign performance reports, but you can still access the web interface and download the CSV files manually.

With the new offline import feature described above, we have added support for video campaign reports in AwReporting, allowing you to import all available fields in the web interface to the same database where the other reports are stored. We hope that this feature will make it easier to integrate systems and dashboards to the database, including video campaign performance data of clients.

To import a video campaign report CSV file, you just need to specify the report type in the onFileReport property as VIDEO_CAMPAIGN_REPORT, and point to the absolute path of the file in the csvReportFile property. The properties can be found in the source code of the project, in the ReportVideoCampaign.java entity.

Before importing the CSV files downloaded from the web interface, you will need to make sure that they are following the format described above, so AwReporting can understand it. You can find an example that we used on our unit tests in the project's source code.

You can check out these new features and the latest released version on the project's main GitHub page. And because AwReporting is open source, you can experiment with the code itself, by adding new types of reports as you need them. The project's GitHub page also includes the complete installation instructions.

If you have any questions about the tool, have ideas for new features, or find any bugs, you can post them as issues in GitHub. We maintain the tool, and the list of issues on GitHub is our first option when planning for next releases.

And of course, make sure to check out our Google+ page for client library and Ads APIs updates.

Posted:
Starting this week AdWords API reports will by default return all objects regardless of their status. API users will need to specify a custom predicate in order to filter out removed entries.

With AdWords API v201502 we made the handling of removed items consistent across services by changing the default filter of all services to exclude all removed entries.

We also included a few reports in this change, but based on your feedback, we’re reverting back to the old behavior. The new filters proved to be confusing and caused discrepancies between reports on different levels. In practice, most API users like to see historical stats of all objects regardless of their current status, so we are making it the default.

As of this week, we’ll start returning all entries in AdWords API Reports regardless of their status by default. This fully matches the old v201409 behavior. You can still filter out removed entries by specifying a custom predicate. Note that non-reporting services will still filter out removed entries by default in v201502 and later, as they do now.

If you have any questions or need help with the migration, please post on the forum or the Ads Developers Plus Page.

Posted:
We’ve upgraded the AwReporting tool to use the latest AdWords API version, v201502. The code changes were made according to the migration guide.

Note that besides code changes, the database tables’ column names have also been updated to reflect the new report field names. Since these changes are scattered around many tables, you can run this version of AwReporting on a new database schema, then use the schema generation command to generate both database schemas and compare them. You can also create SQL scripts to import data from old database tables to new ones with updated column names.

We’ve put the code changes in the v201502_upgrade branch. Please feel free to pull this branch and give it a try. Remember to update the properties file to use the new report field names. This upgrade branch will be merged into the master branch at the end of May.

If you have any questions or feedback regarding this upgrade, let us know via the project’s issue tracker.

Posted:
We are excited to announce two new features for AdWords scripts:

AdWords API v201502 reports

AdWords scripts now support AdWords API v201502 reports. The new version introduces two new reports: USER_AD_DISTANCE_PERFORMANCE_REPORT and LABEL_REPORT. We also introduced several new columns, renamed some columns to make them consistent with the AdWords UI, and removed some duplicate columns. See the AdWords API release notes for more details.

If you use API versioning in your reports, you’ll need to modify your code to use v201502 as shown:
var report = AdWordsApp.report(query, {
    apiVersion: 'v201502'
});
If you don’t use API versioning, your scripts will now default to v201502 reports. If your scripts access one of the removed or renamed columns, you may need to fix that column name in your scripts.

JDBC

JDBC allows your scripts to connect to external databases through the JDBC service, a wrapper around the standard Java Database Connectivity technology. In Apps Script, the JDBC service supports Google Cloud SQL, MySQL, Microsoft SQL Server, and Oracle databases. See our guide for more details.

If you have any questions about these features or AdWords scripts in general, you can post them on our developer forum.

Posted:
We are announcing support for AdWords API v201409 reports in AdWords scripts. The new version introduces PLACEHOLDER_REPORT, a new report type that allows for retrieval of extension stats.

If you use API versioning in your reports, then you need to modify your code to use v201409 as shown below. If you don’t use API versioning, no code changes are required.
var report = AdWordsApp.report(query, {
   apiVersion: 'v201409'
});
If you have any questions about this feature or AdWords Scripts in general, you can post them on our developer forum.

Posted:
Do you save your AdWords API reports to a database? Do you have code that detects and skips header and summary rows? If the answer to these questions is "why yes, I do!", then you'll be happy to hear that in AdWords API v201409 you can modify your report requests so that the returned results will not include these rows.

Excluding the report header

Prior to v201409, the output of each AdWords report included a header that gave the name of the report and the date range in your predicates:

"KEYWORDS_PERFORMANCE_REPORT (Sep 21, 2014-Sep 27, 2014)"

If you do not want this row in your report results, include the new skipReportHeader HTTP header with a value of true.

Excluding the report summary

Similar to the header, each AdWords report for versions prior to v201409 returned a summary row with totals in its final row of output:

Total, --, --,44700

If you don't want this row in your report results, include the new skipReportSummary HTTP header with a value of true.

Note: If you do not include these headers or specify a value of false for both headers, your report results will include the header and summary rows, just as they did for prior versions of the AdWords API.

For more details, check out our updated Reporting Basics guide. Still have questions? Feel free to visit us on the AdWords API Forum or our Google+ page.

Posted:

Starting October 8th, 2014, if you're using the AdWords API without a Standard Access developer token, you will be limited to 1,000 report downloads per day. Previously, there were no daily operational limits applied to report downloads for the Basic Access level. The new limit is being introduced to ensure consistency and high-quality AdWords API platforms for advertisers.

If your developer token already has the Standard Access level, then this limit will not be applied.

If your developer token has the Basic Access level and you currently download more than 1,000 reports per day, then you'll be impacted. To minimize the impact:

  1. The AdWords API Compliance Team has already temporarily upgraded your developer token to Standard Access level.
  2. The AdWords API compliance team contacted you on September 24th, 2014 asking you to apply for permanent Standard Access prior to the temporary Standard Access level expiration on October 24th, 2014.

Important: The AdWords API compliance team will contact you using the developer contact email on file in your MCC's API Center. It's important to ensure the email is up-to-date.

If you currently have Basic Access, but at a later time feel you will need more than 1,000 report downloads per day, feel free to apply for Standard access.

Posted:
Update: Corrected enumeration value in the post to "CALLS".

Starting the week of September 29, 2014, we’re changing the way we report mobile click-to-call data in AdWords API reports.

Currently, when you download a CAMPAIGN_PERFORMANCE_REPORT or ADGROUP_PERFORMANCE_REPORT with ClickType segmentation, mobile click-to-call data is reported as two separate click types:
  • A row with ClickType = CALLS contains all the stats related to clicks, like Clicks, Impressions, Cost, etc.
  • A row with ClickType = MOBILE_CALL_TRACKING contains all the corresponding stats related to phone calls, like NumOfflineInteractions, NumOfflineImpressions etc, OfflineInteractionCost, etc.
Based on your feedback, we will combine these two click types into a single click type starting the week of September 29, 2014. The combined data will now show up on a single row: ClickType = CALLS. As a result, you’ll no longer receive data for ClickType = MOBILE_CALL_TRACKING. This change will impact existing mobile click-to-call data, including historical performance.

If your applications use these report types to process mobile click-to-call data, make sure they account for this new data format. If you have questions or comments, let us know on our developer forum. You can also follow our Google+ page for updates about the AdWords API.

Posted:
Many developers in the AdWords API community have mentioned that being able to create, modify, assign, and report on labels through the API would be extremely helpful. Well, we're excited to report that the v201406 release of the AdWords API includes all of these requested features!

Summary of label services and features
  • New LabelService for creating, modifying, and retrieving labels.
  • A new mutateLabels method in CampaignService, AdGroupService, AdGroupAdService, and AdGroupCriterionService for assigning and removing labels on your campaigns, ad groups, ads, and keywords.
  • New Predicate operators that allow you to select objects by one or more label IDs.
  • A new Labels field in multiple reports so you can retrieve labels for your objects and filter your report results by one or more label IDs.
End-to-end example
So how do these new features work together? Check out our labels guide to get you on the road to AdWords label expertise!

Next steps
If you've never used labels in your account or need a refresher course, check out the Help Center labels guide. Once you're ready to dive in, try out the label examples in your client library of choice.

Still have questions? Feel free to visit us on the AdWords API Forum or our Google+ page.

Posted:
We are announcing support for AdWords API v201402 reports in AdWords scripts. The following new reports are available for use:
  • BID_GOAL_PERFORMANCE_REPORT
  • PAID_ORGANIC_QUERY_REPORT
  • PRODUCT_PARTITION_REPORT
  • SHOPPING_PERFORMANCE_REPORT
You can refer to https://developers.google.com/adwords/api/docs/appendix/reports for the list of supported columns and other details for these new reports.

If you use API versioning in your reports, then you need to modify your code to use v201402 as shown below. If you don’t use API versioning, no code changes are required.

var report = AdWordsApp.report(query, {
   apiVersion: 'v201402'
});
If you have any questions about this feature or AdWords Scripts in general, you can post them on our developer forum.

Posted:
We recently announced a new flexible conversion counting option feature in AdWords that may affect AdWords API v201309 users. There are a couple of additional changes in the AdWords API v201402 that we want to bring to your attention so you can take full advantage of this offering:
  • Record conversion values in conversion report columns based on the flexible conversion counting option
  • Retrieve and set flexible conversion counting options in the ConversionTracker
  • Adopt new conversion-related column names in the reports

Flexible conversion counting option

Since February 25th, 2014, AdWords users have been able to change the conversion counting option between All Conversions and Unique Conversions. The conversion counting option is defaulted to All Conversions - when left as the default option, your conversion related values in the reports will not change.

If the conversion counting option is changed from All Conversions to Unique Conversions, then the following conversion-related report columns will reflect the counting option selected across all reports:
  • ConversionsManyPerClick
  • ConversionRateManyPerClick
  • CostPerConversionManyPerClick
  • ValuePerConvManyPerClick
  • ValuePerConversionManyPerClick
  • ConversionManyPerClickSignificance
  • ConversionRateManyPerClickSignificance
  • CostPerConversionManyPerClickSignificance
Please see the help center article for specific examples of how counting Unique Conversions differs from counting All Conversions.

Retrieve and set flexible conversion counting options

In the AdWords API v201402, you will be able to retrieve and set the flexible conversion counting option. Please review the ConversionTracker API documentation to see the new flexible conversion counting options field named countingType.

New conversion-related column names

Conversion-related columns will have new names in reports. In AdWords API v201402:
  • The selector field names will remain the same
  • The display names and XML attribute names will be renamed
If you are downloading XML reports, you will need to update your client application to read the new column names.

Please see the migration guide for a mapping between old and new display names and XML attribute names.

If you have any questions about this upcoming change or anything else related to the AdWords API, please contact us on the AdWords API forum or via the Google Ads Developers Google+ page.

Posted:

AdWords API users take note - an upcoming AdWords feature may affect your conversion-related AdWords API reports.

Starting February 25th, 2014, AdWords users will be able to change the conversion counting option between All Conversions and Unique Conversions. The conversion counting option is defaulted to All Conversions - when left as the default option, your conversion related values in the reports will not change.

How will this affect your reports?

If an AdWords user manually changes the conversion counting option in the AdWords UI from All Conversions to Unique Conversions, then the following conversion-related report columns will reflect the counting option selected by the user across all reports:

  • ConversionManyPerClick
  • ConversionRateManyPerClick
  • CostPerConversionManyPerClick
  • ValuePerConvManyPerClick
  • ValuePerConversionManyPerClick
  • ConversionManyPerClickSignificance
  • ConversionRateManyPerClickSignificance
  • CostPerConversionManyPerClickSignificance

When the conversion counting option is changed, the values in these columns will no longer be many-per-click, but it will reflect the counting option selected by the user. Please see the help center article for specific examples of how counting Unique Conversions differs from counting All Conversions.

AdWords API currently doesn't allow you to retrieve counting option associated with the conversion tracker. It will be available in the next release of the API.

Posted:
AdWords scripts allow you to create and email PDF documents, complete with pretty formatting and images. You can schedule a script that emails a professional-looking PDF report to your client weekly, complete with logos, watermarks, signatures, and other artwork. This blog post discusses this feature in more details.

Sending an attachment

The following snippet sends an email with an attachment:
// assuming you have a good-to-go blob, more on that later.
MailApp.sendEmail(
    "[email protected]",
    "TPS report",
    "Please find the TPS report attached to this email",
    {attachments: [blob]}
);
BLOB stands for Binary Large OBject. In Google Apps Script, blobs are used as the in-between data format that allows different services to pass data to each other.

Creating a BLOB

Start with an HTML string, and use Utilities.newBlob() to convert it into a blob:
var html = "<h1>TPS report</h1><p>Please read this carefully and respond " +
    "by end of day...</p>"
var blob = Utilities.newBlob(html, MimeType.HTML);
Converting a blob into PDF is as easy as
var pdfBlob = blob.getAs(MimeType.PDF);
Dealing with images

A reasonable attempt looks like this:
var html = "<img src='url_of_the_image'>";
But that, unfortunately, won't work. The PDF generator never actually fetches resources that your HTML links to, so the image won't make it into the PDF. You need to specify the source of the image inline instead, as a base64-encoded string:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />
Don't worry about the contents of the base64-encoded strings - they are gibberish and will consume lots of screen space if printed out.

Putting it all together

The following snippet will fetch the image from imageUrl, embed it into the PDF, and email the results to [email protected]:
// fetch the image. This example assumes it's a PNG.
var imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();

// grab its bytes and base64-encode them.
var base64EncodedBytes = Utilities.base64Encode(imageBlob.getBytes());

// create HTML.
var html = "<h1>TPS report</h1><img src='data:image/png;base64," +
    base64EncodedBytes + "'/>";

// create a blob, convert it to PDF.
var htmlBlob = Utilities.newBlob(html, MimeType.HTML);
var pdfBlob = htmlBlob.getAs(MimeType.PDF);

// give it a name - this will become the file name of the attachment.
pdfBlob.setName("tps_report.pdf");

// send the email.
MailApp.sendEmail(
    "[email protected]",
    "TPS report",
    "Please find the TPS report attached to this email",
    {attachments: [pdfBlob]}
);
Instead of fetching the image from the URL, you can upload it to Google Drive and use DriveApp to fetch it:
var blobFromDrive = DriveApp.getFilesByName(imageFileName).next().getBlob();
So there you have it - blobs aren't just fun to say, they're useful as well. If you have questions or feedback about this feature or AdWords scripts in general, you can post them on our developer forum or our Google+ page.

Posted:
Consumers are increasingly using smartphones and switching between devices along their path to purchase. So it's become harder for marketers to see the full conversion path and measure ROI using traditional online conversion tracking.

That's why we recently introduced Estimated Total Conversions. Estimated Total Conversions provides a more complete and accurate view of all of the conversions driven by AdWords -- including conversions that start on one device and end on another.

Many new metrics related to Estimated Total Conversions are now available in the AdWords API. When you use the Account Performance Report, Campaign Performance Report, or Ad Group Performance Report, you can now access the following fields:
  • CostPerEstimatedTotalConversion
  • EstimatedCrossDeviceConversions
  • EstimatedTotalConversionRate
  • EstimatedTotalConversions
  • EstimatedTotalConversionValue
  • EstimatedTotalConversionValuePerClick
  • EstimatedTotalConversionValuePerCost
  • ValuePerEstimatedTotalConversion
To see the new Estimated Total Conversions statistics, you need AdWords conversion tracking set up through either the AdWords UI or ConversionTrackerService in the AdWords API. You'll also need a sufficient volume of conversions within an account, campaign, or ad group so that reliable estimates can be made.

Keep in mind, estimated conversion values are available only for search ads on Google traffic at this time.

As always, please feel free to ask any questions regarding the AdWords API on the G+ page or the forum.

Posted:
AwReporting is an open-source Java framework for large scale AdWords API reporting. AwReporting presents an end to end AdWords reporting example that enables usage of report data in a just few minutes.

Here are some of its major out-of-the-box features:
  • Generate reports for all AdWords accounts managed by an MCC
  • Use 15 common reports included in the reference implementation – just follow the code examples to implement more
  • Store downloaded report data in your local relational database, so you can integrate them with your existing applications
  • Optionally use MongoDB for storage
Get started with the project’s GitHub repository. We have also added a full example, KratuBackend, that uses AwReporting to generate AdWords data for our client-side analysis framework Kratu.

Feel free to ask questions or give us feedback via the G+ page or the project’s issue tracker.


Posted:
We are announcing support for AdWords API v201309 reports in AdWords Scripts. The following new reports are available for use:
  • AGE_RANGE_PERFORMANCE_REPORT
  • GENDER_PERFORMANCE_REPORT
You can refer to https://developers.google.com/adwords/api/docs/appendix/reports for the list of supported columns and other details for these new reports.

If you use API versioning in your reports, then you need to modify your code to use v201309 as shown below. If you don’t use API versioning, no code changes are required.
var report = AdWordsApp.report(query, {
    apiVersion: 'v201309'
});
If you have any questions about this feature or the AdWords Scripts in general, you can post them on our developer forum.

Posted:
As part of our ongoing efforts to help improve our reporting, we recently announced an update that changes how each keyword’s 1-10 numeric Quality Score (QS) is reported in AdWords. This reporting update will tie your 1-10 numeric Quality Score more closely to its three key sub factors: expected clickthrough rate, ad relevance, and landing page experience.

This is only a change to how Quality Score is reported. It does not change how Quality Score is calculated in real-time for each auction, and thus won't have any direct effect on your ad performance. Therefore, unless you have automated rules or Adwords Scripts tied directly to your reported 1-10 QS, your ads should continue to behave as they did before.

If you use the qualityScore field from AdGroupCriterionService or QualityScore from CRITERIA_PERFORMANCE_REPORT, KEYWORDS_PERFORMANCE_REPORT or MANAGED_PLACEMENTS_PERFORMANCE_REPORT to adjust bids, then you may notice that the keywords that meet your criteria may change after this update.

We hope this change makes it easier for you to improve your ads and to know when your changes are working. If you have questions or feedback, please visit us on our official forum.