Skip to main content

Troubleshooting Articles

Some European countries are not required to obtain consent for storing on- or accessing a device.

Depending in which country you’re operating, this may be applicable for you.

Our Privacy Manager supports the functionality to omit purpose 1 from the UI while the PurposeOneTreatment, which is a special element in the consent string supported by the IAB, is set on ‘true’.

When enabling the feature to not disclose purpose 1, please provide the country you’re operating in to ensure that vendors can still handle the consent data accordingly.

Always check with your own legal entity to ensure that the country you’re operating in, does support the specific jurisdiction disclosures.

Error logs

Note

Error 2.1a is the most prominent error our clients are facing. Therefore, we’ve highlighted the solution for that error below. Check the table for any other error you're facing.

Clients have notified us that they keep receiving the error 2.1a in their Ad Manager logs. This could be related to 1 or more reasons. However, the main issue is that the ad requests are happening:

  • Before the TC string is available.

  • Before CMP is loaded (before the stub is defined)

To tackle this issue:

  • If you're manually invoking the function to request ads:

    Make sure the response to getTCData TCData.eventStatus = 'tcloaded' OR 'cmpuishown' + 'useractioncomplete'. These indicate the CMP is ready to provide the user with a choice regarding consent.

    __tcfapi("addEventListener", 2, function (TCData) {
      if ( TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus ||  'useractioncomplete' === TCData.eventStatus ) {
                // Trigger your ad requests
          } 
            });

Note

cmpuishown will be available in the initial load for a unique user before interacting with CMP even if the TC string is not created.

cmpuishown will also be available if the CMP UI is shown to renew the consent status for users who consented.

Checking for TCData.tcString && cmpuishown is the better approach to catch both scenarios above.

  • If you’re not manually invoking the function to request ads:

    We recommend that you conditionally fire the GUID partition table (GPT) script to be triggered once the TC string is populated. There are multiple ways to accomplish this check.

    Method 1

    You can make use of the ‘ConsentDataExist’ API to check if the user has interacted with the CMP. The API will return a true value once the user has interacted with the tool and will return a false value if the user is unique and did not interact with the tool yet (no TC string)

    The API will re-trigger on consent changed event and will trigger on every page view.

    __tcfapi("consentDataExist", 2, (data, success) => {
        if (data) {
            // Load your GPT tag 
        } else {
            // consentDataExist is listening to consentChanged event
        }
    })

    Method 2

    Checking for TCData.eventStatus = 'tcloaded' OR 'cmpuishown' + 'useractioncomplete' to indicate the user consent is ready for use through the API.

    __tcfapi("addEventListener", 2, function (TCData) {
        if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) {
            // load your GPT tag or the tag which hosts the function to request ads 
        }
    });

Note

You can use Either of the methods above -Not Both

Caution

Make sure to load the CMP wrapper in the header of the page ( as high as possible ) with no async or defer attribute.

In case you want to load the script asynchronously or through a tag management solution, make sure to include the stub in the header of the page (before any ad requests ) to ensure that the queueing mechanism is in place until CMP is ready and has loaded your configurations.

You can download the stub code from the console by navigating to Install Privacy Manager → Advanced → Stub Code (download)

Error

Description

Suggested action to take

Ads not served

Note

Error 1.x is linked to the ‘No grace period’ that Google upholds after the grace period has been ended.

The grace period will end 90 days from August 15th, 2020, regardless of the type of error it addresses.

1.1

Google, as a vendor, is not allowed under consent or legitimate interest.

Confirm whether the user intentionally rejected Google as a vendor, CMP implementation errors have occurred, or there are publisher restrictions.

1.2

No consent for Purpose 1 for EEA countries and the UK.

Confirm whether the user intentionally disallowed Purpose 1 or if this is due to CMP implementation errors.

German publishers should ensure they are setting the PublisherCC and PurposeOneTreatment fields correctly if they are not asking users for consent.

1.3

Has consent for Purpose 1, but lacks legal bases for Basic Ads.

Confirm whether the user intentionally rejected legitimate interests for other purposes or if this is due to CMP implementation errors.

Misconfiguration

Note

From error 2.x and up, everything is related to the “Grace period” that Google has included.

2.1a

Tag or SDK isn’t receiving a TC string due to CMP status being stub, loading, or error.

If you're manually invoking the function to request ads, make sure the response to getTCData TCData.eventStatus = 'tcloaded' OR 'cmpuishown' + 'useractioncomplete'. These indicate the CMP is ready to provide the user with a choice regarding consent.

If you’re not manually invoking the function to request ads, then work with your CMP to ensure they implement support for getTCData and return TCData.eventStatus = 'tcloaded' OR 'cmpuishown' + 'useractioncomplete' to indicate the user consent is ready for use through the API.

2.1b

Both conditions are met:

  • CMPs set &gdpr=1

  • &gdpr_consent= is present in the request, but the TC string is empty.

Ask your CMP to make sure that their APIs are properly implemented based on the IAB TCF tech spec.

2.2a

The TC string is not parseable because it isn’t Base64 encoded.

Example: “2”

CMPs (or publishers) should only send Base64 encoded data in gdpr_consent= parameters.

2.2b

The TC string is not parseable because of a decoding error.

Example: Includes an incorrect number of bits

CMP should fix the TC string implementation errors.

2.2c

The TC string is not parseable because of a data error.

Example: Incorrect timestamp, vendor ID is too large

CMP should fix the TC string implementation errors.

TC string issues

3.1

Invalid CMP ID.

Make sure an IAB-validated CMP is being used and its ID is correctly set in the TC strings.

If a CMP was valid when a TC string was generated but was later deleted by the IAB, you need to reobtain consent using a valid CMP.

3.2

The TC string creation date was more than 13 months ago.

CMP should delete the old TC string and reobtain consent.

3.3

The TC string last update date was more than 13 months ago.

CMP should delete the old TC string and reobtain consent.

Consent must be re-obtained

4.1

The TC string was generated using a version of the global vendor list (GVL) in which Google is not yet listed.

When it becomes available, reobtain consent using a version of the GVL that includes Google.

Global scope and out-of-band scope

5.1

The TC string allows Out-of-Band consent.

Instruct your CMP to remove Out-Of-Band signals from the TC strings.

5.2

Globally-scoped TC string.

Instruct your CMP to update the TC strings to be service-specific.

Ads continue serving

6.1

TC string version is 1 or 1.1 (v1.0 string).

CMP should send TCF v2.0 strings.

Google will apply mitigation

7.1

gdprApplies is undefined or set to an invalid or indecipherable value, but a valid TC string is present.

N/A

7.2

The TC string was generated with a GVL version newer than the current version known to Google's ad serving technology.

N/A

7.3

Some purposes, features, and/or vendors are out of range (unknown).

N/A

7.4

The TC string has an older tcf_policy_version than the newest GVL.

CMP should delete the older TC string and reobtain consent using the newest GVL.

7.5

A request has &gdpr=1, but doesn't have the &gdpr_consent parameter in the request URL at all.

N/A

7.6

Invalid publisher country code, but consent to Purpose 1 is present.

CMP should fix the TC string implementation errors.

7.7

Invalid language code.

CMP should fix the TC string implementation errors.

7.8

TC string version field is neither 1 nor 2.

CMP should send TCF v2.0 strings.

7.9

AC string version is not 1.

CMP should set the AC string version to 1.

Only TC string is used

8.1

AC string is not using the version separator (~).

CMP should use "~" as the second character of the AC string to separate the version number from the consented vendors list.

8.2

AC string contains a vendor list that doesn't follow the expected formatting (list of int64s separated by ' . ')

CMP should fix the AC string implementation errors.