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.
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 field | What it is | Where it shows up |
|---|---|---|
| metrics__costMicros | Cost, in millionths of the currency. | Spend in Pacer, already converted. In a spreadsheet, divide by 1,000,000. |
| metrics__impressions | How many times the ad was shown. | Impressions. |
| metrics__clicks | Clicks on the ad. | Clicks. |
| metrics__conversions | Attributed conversions, following the account setup. | Can be fractional: Google splits credit across touchpoints. |
| metrics__allConversions | Also includes conversions not marked as primary. | Always greater than or equal to the one above. Pick one and stay with it. |
| metrics__conversionsValue | Monetary value of conversions. | For ROAS, divide by the already converted spend. |
| metrics__engagements | Interactions on ad types that support engagement. | Not present for every campaign type. |
| metrics__videoTrueviewViews | TrueView views on video campaigns. | Only video campaigns fill this field. |
Dimensions4
| API field | What it is | Where it shows up |
|---|---|---|
| segments__date | The day of the row. | Every performance table comes by day. |
| campaign__name | Campaign name. | With campaign__id, which survives a rename. |
| adGroup__name | Ad group name. | The level below campaign in Google. |
| customer__id | The 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.
| Parameter | What it changes | Values |
|---|---|---|
| FROM <resource> | What each row represents. | 28 resources: campaign, ad group, keyword, search term, placement, YouTube video, geography, demographics and the structure ones. |
| segments | The breakdown, which multiplies rows. | segments.date is the common one. There are also device, network, hour and conversion type. |
| metrics | The number columns. | metrics.impressions, metrics.clicks, metrics.cost_micros and the rest. |
| date range | The 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.