Google Ads scripts execute in best-effort fashion: they attempt to make changes
to Google Ads data, but if a certain change is not successful, the script
records it into the [Changes log](https://developers.google.com/google-ads/scripts/docs/troubleshooting/execution-logs)
and proceeds with the execution:

    // Attempt an invalid change.
    let amount = 999999999999;
    campaign.getBudget().setAmount(amount);
    // Error is logged into Changes log, but the script keeps running.

    // Suppose we must know whether the change actually happened.
    if (campaign.getBudget() != amount) {
      // The current value of budget is not the one we expected.
      // The change must have failed.
    }

Operations that output similar errors include:

- Setting a keyword bid larger than the campaign budget.
- Setting a campaign name to one that already exists.
- Creating an ad group in a campaign that has already reached its quota for ad groups.

Some errors, however, cannot be ignored. Here is an example:

    let keywords = AdsApp.keywords()
        .withCondition("metrics.clicks > 10")
        // Forgot forDateRange().
        .get();

With this code, the script cannot produce a meaningful `keywords` iterator
since the date range is not specified. Thus the script execution will halt, and
an error message logged to the text logs.

> [!IMPORTANT]
> **Key Point:** When Google Ads scripts successfully returns an object, it is safe to work with. An error would occur if fetching of an object failed.

Warnings are logged by the script if
[quotas](https://developers.google.com/google-ads/scripts/docs/limits) are exceeded. The script
execution will still proceed, but you should always review warnings.

Errors are red and warnings are orange in execution logs. You can also
[output custom messages](https://developers.google.com/google-ads/scripts/docs/troubleshooting/execution-logs)
to these logs for troubleshooting and monitoring purposes.