caOS Docs Google Ads PT EN
Back to the guide

Google Ads

Search, Display, YouTube and Performance Max. You sign in with your Google account, tick which accounts belong to this workspace, and that is it. No token and no identifier to request from anyone.

API in use Google Ads API v22 Checked 2026-09-11 Release cadence about 3 versions a year, each supported for ~1 year Official reference

Start

ConnectGoogle login, nothing to type

Under Sources · Connect new source · Google Ads, click the card. A Google window opens. Choose the login and finish. If a Google Ads permission box appears, it has to be ticked, otherwise the connection does not complete.

The Google window only closes after caOS has finished scanning the accounts, so on a large book it takes a few seconds. Then you just tick the workspace accounts.

How caOS discovers the accounts

caOS asks Google what that login can reach. The shape of the answer is worth knowing, because it explains a missing account:

Login on a manager account (MCC): the MCC and the accounts one level below it appear. An account hanging off a sub-MCC, two levels down, does not.

Login directly on the account: that account appears, and nothing else. This works fine. An account outside any MCC is not a problem, and there is no need to move it anywhere.

The manager account itself does not become an ad account: the MCC is dropped, and so is any cancelled or disabled account. Only what is active comes in.

Keep the account number handy, in the 123-456-7890 format. An agency login brings dozens of accounts at once, and without the number finding the right one becomes a hunt by name.

Your credential, and what happens to it

Connect once and you are connected. The credential renews itself, indefinitely. You do not need a date in the calendar and you do not need to reconnect periodically.

There is only one way the connection drops: someone revokes access on the platform side (password changed, person removed from the account, authorisation cancelled). The account then shows up under Lost connections and reconnecting fixes it, keeping the tags it already had.

Your credential is encrypted end to end. It is encrypted before it is stored, and the key does not live in the database, so even database access does not reveal it. Nobody at caOS, and not you either, can read the credential back after it is saved. The screen only shows that it exists and is valid.

Only the metrics you asked for are read. caOS does not write to your ad account in order to extract data, and it stores no personal data about who saw the ad. Processing follows Brazilian data protection law (LGPD), and deletion is yours: revoking the connection erases the stored credential.

Reference

Metrics and dimensionswhat each field means

Google organises each report around a resource (campaign, ad group, keyword), and the metrics are the same in almost all of them. Below are the ones that show up in real reports.

Core metrics8
API fieldWhat it isWhere it shows up
metrics__costMicrosCost, in millionths of the currency.Spend in Pacer, already converted. In a spreadsheet, divide by 1,000,000.
metrics__impressionsHow many times the ad was shown.Impressions.
metrics__clicksClicks on the ad.Clicks.
metrics__conversionsAttributed conversions, following the account setup.Can be fractional: Google splits credit across touchpoints.
metrics__allConversionsAlso includes conversions not marked as primary.Always greater than or equal to the one above. Pick one and stay with it.
metrics__conversionsValueMonetary value of conversions.For ROAS, divide by the already converted spend.
metrics__engagementsInteractions on ad types that support engagement.Not present for every campaign type.
metrics__videoTrueviewViewsTrueView views on video campaigns.Only video campaigns fill this field.
Dimensions4
API fieldWhat it isWhere it shows up
segments__dateThe day of the row.Every performance table comes by day.
campaign__nameCampaign name.With campaign__id, which survives a rename.
adGroup__nameAd group name.The level below campaign in Google.
customer__idThe ad account.The 10 digit number, without the dashes.

Report parameters

The fields above say what comes back. These parameters say how: they decide the grain of the row, the period it covers and what counts as a conversion. Two reports from the same account showing different numbers almost always differ here.

ParameterWhat it changesValues
FROM <resource>What each row represents.28 resources: campaign, ad group, keyword, search term, placement, YouTube video, geography, demographics and the structure ones.
segmentsThe breakdown, which multiplies rows.segments.date is the common one. There are also device, network, hour and conversion type.
metricsThe number columns.metrics.impressions, metrics.clicks, metrics.cost_micros and the rest.
date rangeThe date window.Comes from the source automatically. Do not write a date filter in the query: it conflicts with the source's and the screen warns you.

Everything you can pull

The tables above are what most reports use, but you are not stuck with them. The full Google Ads catalogue has 28 tables and 613 fields, and you choose what goes in when you build the source. What is marked used by default is what the example source uses; the rest is available just the same.

The list below comes from the Xtractor catalogue itself, the same one the new source screen reads. If a field is here, the screen offers it.

ad_group_criterion68 fields

adGroup__resourceName, adGroup__id, adGroupCriterion__adGroup, adGroupCriterion__ageRange__type, adGroupCriterion__appPaymentModel__type, adGroupCriterion__approvalStatus, adGroupCriterion__audience__audience, adGroupCriterion__bidModifier, adGroupCriterion__combinedAudience__combinedAudience, adGroupCriterion__cpcBidMicros, adGroupCriterion__cpmBidMicros, adGroupCriterion__cpvBidMicros, adGroupCriterion__criterionId, adGroupCriterion__customAffinity__customAffinity, adGroupCriterion__customAudience__customAudience, adGroupCriterion__customIntent__customIntent, adGroupCriterion__disapprovalReasons, adGroupCriterion__displayName, adGroupCriterion__effectiveCpcBidMicros, adGroupCriterion__effectiveCpcBidSource, adGroupCriterion__effectiveCpmBidMicros, adGroupCriterion__effectiveCpmBidSource, adGroupCriterion__effectiveCpvBidMicros, adGroupCriterion__effectiveCpvBidSource, adGroupCriterion__effectivePercentCpcBidMicros, adGroupCriterion__effectivePercentCpcBidSource, adGroupCriterion__finalMobileUrls, adGroupCriterion__finalUrlSuffix, adGroupCriterion__finalUrls, adGroupCriterion__gender__type, adGroupCriterion__incomeRange__type, adGroupCriterion__keyword__matchType, adGroupCriterion__keyword__text, adGroupCriterion__labels, adGroupCriterion__mobileAppCategory__mobileAppCategoryConstant, adGroupCriterion__mobileApplication__appId, adGroupCriterion__mobileApplication__name, adGroupCriterion__negative, adGroupCriterion__parentalStatus__type, adGroupCriterion__percentCpcBidMicros, adGroupCriterion__placement__url, adGroupCriterion__positionEstimates__estimatedAddClicksAtFirstPositionCpc, adGroupCriterion__positionEstimates__estimatedAddCostAtFirstPositionCpc, adGroupCriterion__positionEstimates__firstPageCpcMicros, adGroupCriterion__positionEstimates__firstPositionCpcMicros, adGroupCriterion__positionEstimates__topOfPageCpcMicros, adGroupCriterion__qualityInfo__creativeQualityScore, adGroupCriterion__qualityInfo__postClickQualityScore, adGroupCriterion__qualityInfo__qualityScore, adGroupCriterion__qualityInfo__searchPredictedCtr, adGroupCriterion__resourceName, adGroupCriterion__status, adGroupCriterion__systemServingStatus, adGroupCriterion__topic__path, adGroupCriterion__topic__topicConstant, adGroupCriterion__trackingUrlTemplate, adGroupCriterion__type, adGroupCriterion__urlCustomParameters, adGroupCriterion__userInterest__userInterestCategory, adGroupCriterion__userList__userList, adGroupCriterion__webpage__conditions, adGroupCriterion__webpage__coveragePercentage, adGroupCriterion__webpage__criterionName, adGroupCriterion__webpage__sample, adGroupCriterion__youtubeChannel__channelId, adGroupCriterion__youtubeVideo__videoId, customer_id, parent_customer_id

campaign_budget55 fields

customer__resourceName, customer__id, campaign__resourceName, campaign__id, campaignBudget__alignedBiddingStrategyId, campaignBudget__amountMicros, campaignBudget__deliveryMethod, campaignBudget__explicitlyShared, campaignBudget__hasRecommendedBudget, campaignBudget__id, campaignBudget__name, campaignBudget__period, campaignBudget__recommendedBudgetAmountMicros, campaignBudget__recommendedBudgetEstimatedChangeWeeklyClicks, campaignBudget__recommendedBudgetEstimatedChangeWeeklyCostMicros, campaignBudget__recommendedBudgetEstimatedChangeWeeklyInteractions, campaignBudget__recommendedBudgetEstimatedChangeWeeklyViews, campaignBudget__referenceCount, campaignBudget__resourceName, campaignBudget__status, campaignBudget__totalAmountMicros, campaignBudget__type, segments__date, segments__budgetCampaignAssociationStatus__campaign, segments__budgetCampaignAssociationStatus__status, metrics__allConversions, metrics__allConversionsFromInteractionsRate, metrics__allConversionsValue, metrics__averageCost, metrics__averageCpc, metrics__averageCpe, metrics__averageCpm, metrics__trueviewAverageCpv, metrics__clicks, metrics__conversions, metrics__conversionsFromInteractionsRate, metrics__conversionsValue, metrics__costMicros, metrics__costPerAllConversions, metrics__costPerConversion, metrics__crossDeviceConversions, metrics__ctr, metrics__engagementRate, metrics__engagements, metrics__impressions, metrics__interactionEventTypes, metrics__interactionRate, metrics__interactions, metrics__valuePerAllConversions, metrics__valuePerConversion, metrics__videoTrueviewViewRate, metrics__videoTrueviewViews, metrics__viewThroughConversions, customer_id, parent_customer_id

video49 fields

customer__resourceName, customer__id, segments__date, metrics__conversions, segments__month, customer__currencyCode, segments__year, customer__timeZone, metrics__engagements, campaign__resourceName, campaign__id, metrics__engagementRate, segments__device, video__resourceName, video__id, segments__week, metrics__videoTrueviewViewRate, adGroup__resourceName, adGroup__name, metrics__clicks, adGroup__status, segments__dayOfWeek, metrics__costPerConversion, metrics__ctr, metrics__videoQuartileP25Rate, metrics__videoQuartileP75Rate, metrics__videoQuartileP50Rate, adGroupAd__ad__resourceName, adGroupAd__ad__id, segments__adNetworkType, video__title, metrics__impressions, metrics__viewThroughConversions, adGroupAd__resourceName, adGroupAd__status, adGroup__id, metrics__videoQuartileP100Rate, metrics__allConversionsValue, campaign__name, metrics__videoTrueviewViews, video__durationMillis, video__channelId, customer__descriptiveName, campaign__status, metrics__crossDeviceConversions, metrics__conversionsFromInteractionsRate, metrics__costMicros, customer_id, parent_customer_id

keyword_view45 fields

keywordView__resourceName, customer__resourceName, customer__id, segments__date, metrics__conversions, adGroupCriterion__resourceName, adGroupCriterion__status, adGroupCriterion__keyword__text, customer__currencyCode, segments__slot, adGroupCriterion__keyword__matchType, adGroupCriterion__labels, campaign__resourceName, campaign__id, adGroupCriterion__finalUrls, segments__device, adGroupCriterion__finalMobileUrls, adGroup__resourceName, adGroup__name, adGroupCriterion__effectiveCpcBidSource, metrics__clicks, adGroupCriterion__criterionId, adGroupCriterion__qualityInfo__qualityScore, adGroupCriterion__qualityInfo__postClickQualityScore, adGroupCriterion__qualityInfo__searchPredictedCtr, adGroup__status, adGroupCriterion__positionEstimates__firstPageCpcMicros, adGroupCriterion__qualityInfo__creativeQualityScore, campaign__manualCpc__enhancedCpcEnabled, adGroupCriterion__effectiveCpcBidMicros, adGroupCriterion__approvalStatus, adGroupCriterion__topic__topicConstant, segments__adNetworkType, metrics__impressions, adGroup__id, adGroupCriterion__positionEstimates__topOfPageCpcMicros, campaign__name, adGroupCriterion__positionEstimates__estimatedAddCostAtFirstPositionCpc, customer__descriptiveName, campaign__status, adGroupCriterion__positionEstimates__estimatedAddClicksAtFirstPositionCpc, metrics__costMicros, campaign__biddingStrategyType, customer_id, parent_customer_id

managed_placement_view45 fields

managedPlacementView__resourceName, customer__resourceName, customer__id, segments__date, metrics__conversions, adGroupCriterion__status, customer__currencyCode, customer__timeZone, campaign__resourceName, campaign__id, adGroupCriterion__resourceName, adGroupCriterion__finalUrls, segments__device, adGroupCriterion__finalMobileUrls, adGroupCriterion__placement__url, metrics__gmailForwards, adGroup__resourceName, adGroup__name, adGroupCriterion__effectiveCpcBidSource, metrics__clicks, adGroupCriterion__criterionId, adGroup__status, adGroup__targetingSetting__targetRestrictions, campaign__biddingStrategyType, adGroupCriterion__effectiveCpcBidMicros, adGroupCriterion__negative, metrics__videoQuartileP25Rate, metrics__videoQuartileP75Rate, metrics__videoQuartileP50Rate, adGroupCriterion__bidModifier, segments__adNetworkType, metrics__impressions, adGroup__id, metrics__videoQuartileP100Rate, metrics__gmailSaves, metrics__allConversionsValue, campaign__name, metrics__videoTrueviewViews, customer__descriptiveName, campaign__status, metrics__gmailSecondaryClicks, metrics__costMicros, adGroupCriterion__displayName, customer_id, parent_customer_id

ad_group_ad41 fields

adGroup__resourceName, adGroup__id, adGroupAd__ad__id, adGroupAd__ad__addedByGoogleAds, adGroupAd__ad__appAd, adGroupAd__ad__devicePreference, adGroupAd__ad__displayUrl, adGroupAd__ad__finalAppUrls, adGroupAd__ad__finalMobileUrls, adGroupAd__ad__finalUrlSuffix, adGroupAd__ad__finalUrls, adGroupAd__ad__hotelAd, adGroupAd__ad__name, adGroupAd__ad__resourceName, adGroupAd__ad__shoppingComparisonListingAd, adGroupAd__ad__shoppingProductAd, adGroupAd__ad__shoppingSmartAd, adGroupAd__ad__smartCampaignAd, adGroupAd__ad__systemManagedResourceSource, adGroupAd__ad__trackingUrlTemplate, adGroupAd__ad__type, adGroupAd__ad__urlCollections, adGroupAd__ad__urlCustomParameters, adGroupAd__actionItems, adGroupAd__adGroup, adGroupAd__adStrength, adGroupAd__labels, adGroupAd__resourceName, adGroupAd__status, adGroup__name, segments__date, customer__resourceName, customer__id, campaign__id, campaign__resourceName, campaign__status, adGroup__status, campaign__name, adGroup__baseAdGroup, customer_id, parent_customer_id

adgroups32 fields

adGroup__urlCustomParameters, adGroup__type, adGroup__trackingUrlTemplate, adGroup__targetingSetting__targetRestrictions, adGroup__targetRoas, adGroup__targetCpmMicros, adGroup__status, adGroup__targetCpaMicros, adGroup__resourceName, adGroup__percentCpcBidMicros, adGroup__name, adGroup__labels, adGroup__id, adGroup__finalUrlSuffix, adGroup__excludedParentAssetFieldTypes, adGroup__effectiveTargetRoasSource, adGroup__effectiveTargetRoas, adGroup__effectiveTargetCpaSource, adGroup__effectiveTargetCpaMicros, adGroup__displayCustomBidDimension, adGroup__cpvBidMicros, adGroup__cpmBidMicros, adGroup__cpcBidMicros, adGroup__campaign, adGroup__baseAdGroup, adGroup__adRotationMode, campaign__resourceName, campaign__id, campaign__name, segments__date, customer_id, parent_customer_id

search_term_view30 fields

customer__resourceName, customer__id, segments__date, customer__currencyCode, customer__descriptiveName, adGroup__id, adGroup__name, adGroup__status, segments__adNetworkType, metrics__conversionsValue, campaign__id, campaign__name, campaign__status, metrics__clicks, metrics__conversions, metrics__costMicros, segments__device, metrics__impressions, segments__keyword__adGroupCriterion, segments__keyword__info, searchTermView__resourceName, searchTermView__searchTerm, searchTermView__status, segments__searchTermMatchType, campaign__resourceName, adGroup__resourceName, adGroupAd__resourceName, adGroupAd__ad__resourceName, customer_id, parent_customer_id

ad_listing_group_criterion26 fields

adGroupCriterion__resourceName, adGroup__id, adGroupCriterion__criterionId, adGroupCriterion__listingGroup__caseValue__activityCountry__value, adGroupCriterion__listingGroup__caseValue__activityId__value, adGroupCriterion__listingGroup__caseValue__activityRating__value, adGroupCriterion__listingGroup__caseValue__hotelCity__cityCriterion, adGroupCriterion__listingGroup__caseValue__hotelClass__value, adGroupCriterion__listingGroup__caseValue__hotelCountryRegion__countryRegionCriterion, adGroupCriterion__listingGroup__caseValue__hotelId__value, adGroupCriterion__listingGroup__caseValue__hotelState__stateCriterion, adGroupCriterion__listingGroup__caseValue__productCategory__categoryId, adGroupCriterion__listingGroup__caseValue__productCategory__level, adGroupCriterion__listingGroup__caseValue__productBrand__value, adGroupCriterion__listingGroup__caseValue__productChannel__channel, adGroupCriterion__listingGroup__caseValue__productChannelExclusivity__channelExclusivity, adGroupCriterion__listingGroup__caseValue__productCondition__condition, adGroupCriterion__listingGroup__caseValue__productCustomAttribute__index, adGroupCriterion__listingGroup__caseValue__productCustomAttribute__value, adGroupCriterion__listingGroup__caseValue__productItemId__value, adGroupCriterion__listingGroup__caseValue__productType__level, adGroupCriterion__listingGroup__caseValue__productType__value, adGroupCriterion__listingGroup__parentAdGroupCriterion, adGroupCriterion__listingGroup__type, customer_id, parent_customer_id

campaign_history24 fields

campaign__resourceName, campaign__id, campaign__name, customer__resourceName, customer__id, campaign__adServingOptimizationStatus, campaign__advertisingChannelSubType, campaign__advertisingChannelType, campaign__experimentType, campaign__endDate, campaign__finalUrlSuffix, campaign__frequencyCaps, campaign__optimizationScore, campaign__paymentMode, campaign__servingStatus, campaign__startDate, campaign__status, campaign__trackingUrlTemplate, campaign__vanityPharma__vanityPharmaDisplayUrlMode, campaign__vanityPharma__vanityPharmaText, campaign__videoBrandSafetySuitability, segments__date, customer_id, parent_customer_id

campaign_performance_by_age_range_and_device20 fields

ageRangeView__resourceName, adGroupCriterion__resourceName, adGroupCriterion__ageRange__type, campaign__resourceName, campaign__name, campaign__status, adGroup__resourceName, adGroup__name, segments__date, segments__device, adGroupCriterion__systemServingStatus, adGroupCriterion__bidModifier, metrics__clicks, metrics__impressions, metrics__ctr, metrics__averageCpc, metrics__costMicros, campaign__advertisingChannelType, customer_id, parent_customer_id

campaign_performance_by_gender_and_device20 fields

genderView__resourceName, adGroupCriterion__resourceName, adGroupCriterion__gender__type, campaign__resourceName, campaign__name, campaign__status, adGroup__resourceName, adGroup__name, segments__date, segments__device, adGroupCriterion__systemServingStatus, adGroupCriterion__bidModifier, metrics__clicks, metrics__impressions, metrics__ctr, metrics__averageCpc, metrics__costMicros, campaign__advertisingChannelType, customer_id, parent_customer_id

ad_groups_performance used by default17 fields

campaign__resourceName, campaign__id, adGroup__resourceName, adGroup__id, metrics__impressions, metrics__clicks, metrics__costMicros, metrics__conversions, metrics__engagements, metrics__interactions, metrics__videoTrueviewViews, metrics__conversionsValue, metrics__allConversions, metrics__allConversionsValue, segments__date, customer_id, parent_customer_id

customer15 fields

customer__resourceName, customer__id, customer__autoTaggingEnabled, customer__descriptiveName, customer__currencyCode, customer__finalUrlSuffix, customer__manager, customer__optimizationScore, customer__payPerConversionEligibilityFailureReasons, customer__testAccount, customer__timeZone, customer__trackingUrlTemplate, segments__date, customer_id, parent_customer_id

campaign_performance_by_location14 fields

locationView__resourceName, campaignCriterion__resourceName, campaignCriterion__location__geoTargetConstant, campaign__resourceName, campaign__name, campaignCriterion__bidModifier, segments__date, metrics__clicks, metrics__impressions, metrics__ctr, metrics__averageCpc, metrics__costMicros, customer_id, parent_customer_id

geo_performance13 fields

campaign__resourceName, campaign__name, campaign__status, segments__date, metrics__clicks, metrics__costMicros, metrics__impressions, metrics__conversions, geographicView__resourceName, geographicView__locationType, geographicView__countryCriterionId, customer_id, parent_customer_id

campaign_performance12 fields

campaign__resourceName, campaign__name, campaign__status, segments__device, segments__date, metrics__impressions, metrics__clicks, metrics__ctr, metrics__averageCpc, metrics__costMicros, customer_id, parent_customer_id

ad_group_ad_label11 fields

adGroup__resourceName, adGroup__id, adGroupAd__resourceName, adGroupAd__ad__id, adGroupAd__ad__resourceName, adGroupAdLabel__resourceName, label__name, label__resourceName, label__id, customer_id, parent_customer_id

audience11 fields

customer__resourceName, customer__id, audience__description, audience__dimensions, audience__exclusionDimension, audience__id, audience__name, audience__resourceName, audience__status, customer_id, parent_customer_id

campaign_criterion11 fields

campaign__resourceName, campaign__id, campaignCriterion__resourceName, campaignCriterion__campaign, campaignCriterion__ageRange__type, campaignCriterion__mobileApplication__name, campaignCriterion__negative, campaignCriterion__youtubeChannel__channelId, campaignCriterion__youtubeVideo__videoId, customer_id, parent_customer_id

geo_target_constant10 fields

geoTargetConstant__resourceName, geoTargetConstant__canonicalName, geoTargetConstant__countryCode, geoTargetConstant__id, geoTargetConstant__name, geoTargetConstant__status, geoTargetConstant__targetType, geoTargetConstant__parentGeoTarget, customer_id, parent_customer_id

user_interest9 fields

userInterest__availabilities, userInterest__launchedToAll, userInterest__name, userInterest__resourceName, userInterest__taxonomyType, userInterest__userInterestId, userInterest__userInterestParent, customer_id, parent_customer_id

ad_group_label8 fields

adGroup__id, label__id, adGroup__resourceName, adGroupLabel__resourceName, label__name, label__resourceName, customer_id, parent_customer_id

campaign_label8 fields

campaign__id, label__id, campaign__resourceName, campaignLabel__resourceName, label__name, label__resourceName, customer_id, parent_customer_id

label8 fields

label__textLabel__backgroundColor, label__textLabel__description, label__name, label__status, label__id, label__resourceName, customer_id, parent_customer_id

customer_label7 fields

customer__resourceName, customer__id, customerLabel__resourceName, customerLabel__customer, customerLabel__label, customer_id, parent_customer_id

customer_hierarchy3 fields

customer_id, parent_customer_id, customerClient

accessible_customers1 fields

resourceNames

Google does not expose reach. There is no reach and no frequency in any table, unlike Meta and TikTok. A report that depends on reach has to treat Google separately, and summing reach across platforms does not produce a valid number.

A dot becomes two underscores. What Google calls campaign.id lands as campaign__id, in the columns and in the keys.

Output

Where the data landsa spreadsheet and a warehouse are different jobs

Google Sheets

For building a report by hand

You pick the columns and the cut, and every sync refreshes the same tab. Google has the largest table catalogue of all connectors, and you do not need to know it: tick spend, impressions, clicks and the campaign name.

Remember to divide cost by 1,000,000 in the sheet, or ask for the already converted field when you build the source.

BigQuery

For modelling on top

28 tables, the largest catalogue among caOS connectors. Eleven carry metrics; the rest are structure.

Performance by level: campaign, ad group, keyword, search term, placement, YouTube video, geography and demographics. Structure: campaigns, groups, ads, budgets, criteria, labels, audiences, account data and hierarchy.

Performance per ad is not in the standard tables: the ads table is structure only. For spend per ad, build your own table.

Trust

Data freshnesswhy yesterday's number still moves

Ad platforms rewrite the past. A conversion attributed days later, revised spend, a corrected row: Tuesday's number changes on Thursday. If the extraction only ever brought the newest day, your spreadsheet would freeze at the first value and drift away from the platform with nobody noticing.

So caOS re-reads the last 30 days on every sync and rewrites what changed. Older history stays in the destination and is not touched. In practice: what sits in your spreadsheet or your warehouse is what the platform says today, not what it said on the day of the first load.

On Google this matters more than average, because a conversion can be attributed long after the click. Campaigns with a long journey keep gaining conversions on days that already looked closed.

Detail

Good to knowwhat usually raises questions

Region reports deserve attention. Google emits two rows per campaign, day and region: one for area of interest, one for location of presence. They add up, they do not duplicate. If region is your report, include the location type in the keys, otherwise part of the spend disappears.

Do not write a date filter in a table you build. The source period is already applied, and your filter conflicts with it. The screen warns you.

Fractional conversions are normal. Google splits the credit for one conversion across touchpoints, so 0.5 conversions on a row is not an extraction error.

Support

When it failsthe message and what to do

“The Google Ads permission is missing.” Nothing was stored, the connection does not exist. Start again and finish the Google screen without refusing the permission.

“State token expired or already used.” The link is valid for 10 minutes and works once. Reloading the Google window lands here. Start again from Sources.

Connected, and no account appeared. This is the quietest case: the credential is stored and the list is empty, with no message. Check in this order: does the login reach the account in Google Ads? Is the account active? Did you point at the MCC itself? Is the account two levels down, under a sub-MCC?

“The connection to this account was lost.” Someone revoked access on Google's side. Connect the same login again.

“Your plan allows up to N ad account(s).” This is a plan limit, applied when saving the source. The accounts are already connected; what does not fit is the source.