FIRST-PARTY FORTRESS/GOOGLE ADS CONFIGURATION

Google Ads
Configuration
Guide

Configure the two conversion actions, extract the ctId resource IDs, and validate the system via the 72-hour diagnostics protocol.

THE TWO-ACTION ARCHITECTURE

ACTIONSOURCEGOAL TYPEROLE
CRM Feed (Primary)Import → clicksPRIMARY · BIDDINGBidding signal. Fed by API loop. Consent-independent.
Web Pixel (Secondary)Website (GTM)SECONDARY · DIAGNOSTICDiagnostic visibility. Consent-gated. ~65% EU reach.

If the website pixel is your Primary goal, Smart Bidding trains on a systematically biased subset of your leads — it drifts toward audiences least likely to block tracking, not toward your best buyers. The API-fed Import action is the reliable signal.

01

Setting Up the Primary Goal

The conversion action the API loop uploads to. Must be of type Import → clicks.

1

Navigate to Goals → Conversions → Summary and click New conversion action.

2

Select source: Import.

3

Select import type: Other data sources or CRMs → Track conversions from clicks. Click Continue.

4

Configure:

Goal and action optimizationSelect your category (e.g., Submit lead form)
Action optimization⚠ Must be set to "Primary action used for bidding optimization"
Conversion namee.g., CRM Name Feed or Client OCT Feed
ValueSet to match the value you will send in the API payload — must be consistent
CountOne (lead generation — each contact is one lead)

5

Save and Continue.

The ctId for this action is what you will use in the conversionAction field of every API upload. Extract it in Section 03.

02

Setting Up the Secondary Goal

The conversion action your GTM pixel fires on the thank-you page. Must be of type Website.

1

Click New conversion action.

2

Select source: Website. Enter your domain and click Scan.

3

Scroll down and click + Add a conversion action manually.

4

Configure:

Goal and action optimizationSame category as Primary (e.g., Submit lead form)
Action optimization⚠ Must be set to "Secondary action not used for bidding optimization." If left as Primary, Google will double-count leads and corrupt Smart Bidding.
Conversion namee.g., Form Submit or Event Name (Web)
ValueMatch the Primary goal value
CountOne

5

Enable Enhanced Conversions for Leads:

→ Expand the Enhanced Conversions section

→ Check the box to enable them

→ Select Google Tag Manager as the method

6

Save and Continue.

The Enhanced Conversions toggle on the Website action must be enabled even if you are using the API for ECL uploads. The toggle is what allows the Google Ads account to accept any hashed user data at all. If this toggle is off, userIdentifiers uploads via the API will be rejected.

03

Extracting the ctId Resource IDs

The Google Ads API uses internal backend resource IDs — not the AW-XXXXXXXXXX format you see in GTM. You must extract the ctId for both conversion actions.

1

Go to Goals → Conversions → Summary.

2

Click on your Primary Goal (the Import/UPLOAD_CLICKS one).

3

Look at the browser URL bar. Find the parameter &ctId=.

4

Copy the numeric ID that follows (10–13 digits, e.g., 7336415901). This is your Primary ctId.

5

Repeat for the Secondary Goal. Save both IDs somewhere accessible — you will need them when configuring the automation in Phase 6 of the Implementation Guide.

Primary ctId → conversionAction in every uploadClickConversions API call (both the gclid path and the ECL path use the Primary ctId). Secondary ctId → used only if you implement a RESTATEMENT adjustment flow later (advanced, not required for the core Fortress).

04

Conversion Action Formatting Rules

The conversionAction field in the API payload must use the full resource name format. Do not use the AW-XXXXXXXXXX/LABEL format — that is the web tag format and is not accepted by the upload API.

Correct format
customers/{customer_id}/conversionActions/{ctId}

// Example:
customers/8093239660/conversionActions/7336415901
Wrong format — web tag only
AW-XXXXXXXXXX/LABEL_XXXXXXXXXX

// This format is NOT accepted by uploadClickConversions.
// It works in GTM tags — not in API calls.

{customer_id} is the 10-digit Google Ads client account ID with no hyphens (e.g., 8093239660). This is the account ID of the client account, not the MCC.

05

Consent Mode and the Diagnostic Layer

You will notice the Secondary goal (website pixel) records fewer conversions than the Primary goal. This is expected and correct — it is the tracking gap the Fortress was built to close.

SECONDARY · PIXEL

55–70%

of actual leads · EU/DE markets · depends on consent rate

PRIMARY · API LOOP

90%+

of actual leads · remaining gap is anonymous traffic with no Google attribution

If the Primary goal records fewer conversions than the Secondary goal, something is wrong with the API pipeline. Investigate the automation logs immediately.

06

The 72-Hour Diagnostics Protocol

Google Ads processes offline upload data with a delay. After your first successful API uploads, follow this protocol.

1

Wait 48–72 hours after the first confirmed upload (check your automation logs for HTTP 200 responses).

2

Navigate to Goals → Conversions → Summary. Click on your Primary goal.

3

Click the Diagnostics tab.

4

Check the Upload status panel. You should see:

→ Status: "Recording" (or "Excellent" with a match count)

→ Number of conversions matched and uploaded

→ Any partial failures with error codes (see Section 06 error table)

ERROR CODES

CODEMEANINGACTION
UNPARSEABLE_GCLIDgclid value is malformed or a test valueExpected during QA. Not an error in production for test submissions.
CLICK_NOT_FOUNDgclid is valid format but Google cannot find a matching clickCheck: upload within 90 days of click, correct customer ID, click was served by this account.
CONVERSION_ACTION_NOT_FOUNDctId is wrong or belongs to a different accountRe-extract ctId from the URL bar in Goals → Conversions → Summary.
FUTURE_CONVERSION_DATE_TIMEConversion timestamp is in the futureTimezone offset error. Check date formatting — YYYY-MM-DD HH:mm:ssZ, offset is mandatory.
INVALID_ARGUMENTPayload structure errorCheck JSON against API spec. Common: wrong resource name format, missing fields.

The Enhanced Conversions diagnostics (visible on the Secondary goal) show the ECL match rate after the API loop submits email-only records. Expect 25–45% match rate. If consistently below 10%, investigate email quality — check for placeholder values, internal test submissions, or domain-level issues.

07

Ongoing Monitoring

The API loop should notify you on every execution. A healthy system produces:

Click conversion uploads for every Google-attributed lead

ECL upload attempts for leads without a gclid (no immediate match confirmation — check Google Ads Diagnostics 24–48h later)

·

No-attribution logs for organic/direct leads (expected, no action required)

Error alerts (investigate immediately — a broken pipeline means primary conversion tracking is dark)

Review the Diagnostics tab weekly during the first month after launch, then monthly. Compare Primary goal conversion count against the CRM's total new contacts for the same period. The gap should be explainable by organic/direct traffic volume.