Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🎉 Source Google Ads: add new stream Campaign Budget #28078

Merged
merged 5 commits into from Jul 10, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -13,5 +13,5 @@ COPY main.py ./

ENTRYPOINT ["python", "/airbyte/integration_code/main.py"]

LABEL io.airbyte.version=0.5.0
LABEL io.airbyte.version=0.6.0
LABEL io.airbyte.name=airbyte/source-google-ads
Expand Up @@ -60,6 +60,7 @@ acceptance_tests:
ad_groups: ["4651612872", "segments.date"]
accounts: ["4651612872", "segments.date"]
campaigns: ["4651612872", "segments.date"]
campaign_budget: ["4651612872", "segments.date"]
user_location_report: ["4651612872", "segments.date"]
ad_group_ad_report: ["4651612872", "segments.date"]
display_keyword_performance_report: ["4651612872", "segments.date"]
Expand Up @@ -89,5 +89,12 @@
"stream_state": { "4651612872": { "segments.date": "2222-01-01" }},
"stream_descriptor": { "name": "display_keyword_performance_report" }
}
},
{
"type": "STREAM",
"stream": {
"stream_state": { "4651612872": { "segments.date": "2222-01-01" }},
"stream_descriptor": { "name": "campaign_budget" }
}
}
]
Expand Up @@ -86,3 +86,6 @@
{"stream":"ad_groups","data":{"ad_group.ad_rotation_mode":"UNSPECIFIED","ad_group.base_ad_group":"customers/4651612872/adGroups/137051662444","ad_group.campaign":"customers/4651612872/campaigns/16820250687","ad_group.cpc_bid_micros":10000,"ad_group.cpm_bid_micros":10000,"ad_group.cpv_bid_micros":0,"ad_group.display_custom_bid_dimension":"UNSPECIFIED","ad_group.effective_target_cpa_micros":0,"ad_group.effective_target_cpa_source":"UNSPECIFIED","ad_group.effective_target_roas":0.0,"ad_group.effective_target_roas_source":"UNSPECIFIED","ad_group.excluded_parent_asset_field_types":[],"ad_group.optimized_targeting_enabled":false,"ad_group.final_url_suffix":"","ad_group.id":137051662444,"ad_group.labels":[],"ad_group.name":"Группа объявлений 1","ad_group.percent_cpc_bid_micros":0,"ad_group.resource_name":"customers/4651612872/adGroups/137051662444","ad_group.status":"ENABLED","ad_group.target_cpa_micros":0,"ad_group.target_cpm_micros":10000,"ad_group.target_roas":0.0,"ad_group.targeting_setting.target_restrictions":["targeting_dimension: AUDIENCE\nbid_only: true\n","targeting_dimension: AGE_RANGE\nbid_only: true\n","targeting_dimension: GENDER\nbid_only: true\n","targeting_dimension: PARENTAL_STATUS\nbid_only: true\n","targeting_dimension: INCOME_RANGE\nbid_only: true\n"],"ad_group.tracking_url_template":"","ad_group.type":"SEARCH_STANDARD","ad_group.url_custom_parameters":[],"segments.date":"2022-04-10"},"emitted_at":1679577823329}
{"stream": "audience", "data": {"audience.description": "", "audience.dimensions": ["audience_segments {\n segments {\n custom_audience {\n custom_audience: \"customers/4651612872/customAudiences/523469909\"\n }\n }\n}\n"], "audience.exclusion_dimension": "", "audience.id": 47792633, "audience.name": "Audience name 1", "audience.resource_name": "customers/4651612872/audiences/47792633", "audience.status": "ENABLED"}, "emitted_at": 1688510825339}
{"stream": "user_interest", "data": {"user_interest.availabilities": ["channel {\n availability_mode: CHANNEL_TYPE_AND_ALL_SUBTYPES\n advertising_channel_type: SEARCH\n include_default_channel_sub_type: true\n}\nlocale {\n availability_mode: ALL_LOCALES\n}\n", "channel {\n availability_mode: CHANNEL_TYPE_AND_ALL_SUBTYPES\n advertising_channel_type: DISPLAY\n include_default_channel_sub_type: true\n}\nlocale {\n availability_mode: ALL_LOCALES\n}\n", "channel {\n availability_mode: CHANNEL_TYPE_AND_ALL_SUBTYPES\n advertising_channel_type: SHOPPING\n include_default_channel_sub_type: true\n}\nlocale {\n availability_mode: ALL_LOCALES\n}\n", "channel {\n availability_mode: CHANNEL_TYPE_AND_ALL_SUBTYPES\n advertising_channel_type: DISCOVERY\n include_default_channel_sub_type: true\n}\nlocale {\n availability_mode: ALL_LOCALES\n}\n", "channel {\n availability_mode: CHANNEL_TYPE_AND_SUBSET_SUBTYPES\n advertising_channel_type: VIDEO\n advertising_channel_sub_type: VIDEO_SEQUENCE\n advertising_channel_sub_type: VIDEO_OUTSTREAM\n advertising_channel_sub_type: VIDEO_ACTION\n advertising_channel_sub_type: VIDEO_NON_SKIPPABLE\n advertising_channel_sub_type: VIDEO_REACH_TARGET_FREQUENCY\n include_default_channel_sub_type: true\n}\nlocale {\n availability_mode: ALL_LOCALES\n}\n"], "user_interest.launched_to_all": false, "user_interest.name": "Cloud Services Power Users", "user_interest.resource_name": "customers/4651612872/userInterests/92931", "user_interest.taxonomy_type": "AFFINITY", "user_interest.user_interest_id": 92931, "user_interest.user_interest_parent": "customers/4651612872/userInterests/92507"}, "emitted_at": 1688510842265}
{"stream": "campaign_budget", "data": {"campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-04-08", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 0.0, "metrics.average_cpc": 0.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 0.0, "metrics.average_cpv": 0.0, "metrics.clicks": 0, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.0, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 2, "metrics.interaction_event_types": [], "metrics.interaction_rate": 0.0, "metrics.interactions": 0, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1688986481805}
{"stream": "campaign_budget", "data": {"campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-04-09", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 70000.0, "metrics.average_cpc": 70000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 492957.74647887325, "metrics.average_cpv": 0.0, "metrics.clicks": 1, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 70000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.007042253521126761, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 142, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.007042253521126761, "metrics.interactions": 1, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1688986481808}
{"stream": "campaign_budget", "data": {"campaign_budget.aligned_bidding_strategy_id": 0, "campaign_budget.amount_micros": 750000, "campaign_budget.delivery_method": ["STANDARD"], "campaign_budget.explicitly_shared": false, "campaign_budget.has_recommended_budget": false, "campaign_budget.id": 10695604507, "campaign_budget.name": "Website traffic-Search-15", "campaign_budget.period": ["DAILY"], "campaign_budget.recommended_budget_amount_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_clicks": 0, "campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": 0, "campaign_budget.recommended_budget_estimated_change_weekly_interactions": 0, "campaign_budget.recommended_budget_estimated_change_weekly_views": 0, "campaign_budget.reference_count": 1, "campaign_budget.resource_name": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.status": ["ENABLED"], "campaign_budget.total_amount_micros": 0, "campaign_budget.type": ["STANDARD"], "segments.date": "2022-04-10", "segments.budget_campaign_association_status.campaign": "customers/4651612872/campaigns/16820250687", "segments.budget_campaign_association_status.status": ["ENABLED"], "metrics.all_conversions": 0.0, "metrics.all_conversions_from_interactions_rate": 0.0, "metrics.all_conversions_value": 0.0, "metrics.average_cost": 175000.0, "metrics.average_cpc": 175000.0, "metrics.average_cpe": 0.0, "metrics.average_cpm": 17721518.987341773, "metrics.average_cpv": 0.0, "metrics.clicks": 8, "metrics.conversions": 0.0, "metrics.conversions_from_interactions_rate": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 1400000, "metrics.cost_per_all_conversions": 0.0, "metrics.cost_per_conversion": 0.0, "metrics.cross_device_conversions": 0.0, "metrics.ctr": 0.10126582278481013, "metrics.engagement_rate": 0.0, "metrics.engagements": 0, "metrics.impressions": 79, "metrics.interaction_event_types": ["InteractionEventType.CLICK"], "metrics.interaction_rate": 0.10126582278481013, "metrics.interactions": 8, "metrics.value_per_all_conversions": 0.0, "metrics.value_per_conversion": 0.0, "metrics.video_view_rate": 0.0, "metrics.video_views": 0, "metrics.view_through_conversions": 0}, "emitted_at": 1688986481810}
Expand Up @@ -133,6 +133,20 @@
"cursor_field": ["segments.date"],
"primary_key": [["campaign.id"], ["segments.date"]]
},
{
"stream": {
"name": "campaign_budget",
"json_schema": {},
"supported_sync_modes": ["full_refresh", "incremental"],
"source_defined_cursor": true,
"default_cursor_field": ["segments.date"],
"source_defined_primary_key": [["campaign_budget.id"], ["segments.date"]]
},
"sync_mode": "incremental",
"destination_sync_mode": "overwrite",
"cursor_field": ["segments.date"],
"primary_key": [["campaign_budget.id"], ["segments.date"]]
},
{
"stream": {
"name": "user_location_report",
Expand Down
Expand Up @@ -6,7 +6,7 @@ data:
connectorSubtype: api
connectorType: source
definitionId: 253487c0-2246-43ba-a21f-5116b20a2c50
dockerImageTag: 0.5.0
dockerImageTag: 0.6.0
dockerRepository: airbyte/source-google-ads
githubIssueLabel: source-google-ads
icon: google-adwords.svg
Expand Down
Expand Up @@ -24,6 +24,7 @@
"ad_groups": "ad_group",
"ad_group_labels": "ad_group_label",
"campaigns": "campaign",
"campaign_budget": "campaign_budget",
"campaign_labels": "campaign_label",
"account_performance_report": "customer",
"ad_group_ad_report": "ad_group_ad",
Expand Down
@@ -0,0 +1,172 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"campaign_budget.aligned_bidding_strategy_id": {
"type": ["null", "integer"]
},
"campaign_budget.amount_micros": {
"type": ["null", "integer"]
},
"campaign_budget.delivery_method": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"campaign_budget.explicitly_shared": {
"type": ["null", "boolean"]
},
"campaign_budget.has_recommended_budget": {
"type": ["null", "boolean"]
},
"campaign_budget.id": {
"type": ["null", "integer"]
},
"campaign_budget.name": {
"type": ["null", "string"]
},
"campaign_budget.period": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"campaign_budget.recommended_budget_amount_micros": {
"type": ["null", "integer"]
},
"campaign_budget.recommended_budget_estimated_change_weekly_clicks": {
"type": ["null", "integer"]
},
"campaign_budget.recommended_budget_estimated_change_weekly_cost_micros": {
"type": ["null", "integer"]
},
"campaign_budget.recommended_budget_estimated_change_weekly_interactions": {
"type": ["null", "integer"]
},
"campaign_budget.recommended_budget_estimated_change_weekly_views": {
"type": ["null", "integer"]
},
"campaign_budget.reference_count": {
"type": ["null", "integer"]
},
"campaign_budget.resource_name": {
"type": ["null", "string"]
},
"campaign_budget.status": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"campaign_budget.total_amount_micros": {
"type": ["null", "integer"]
},
"campaign_budget.type": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"segments.date": {
"type": ["null", "string"],
"format": "date"
},
"segments.budget_campaign_association_status.campaign": {
"type": ["null", "string"]
},
"segments.budget_campaign_association_status.status": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"metrics.all_conversions": {
"type": ["null", "number"]
},
"metrics.all_conversions_from_interactions_rate": {
"type": ["null", "number"]
},
"metrics.all_conversions_value": {
"type": ["null", "number"]
},
"metrics.average_cost": {
"type": ["null", "number"]
},
"metrics.average_cpc": {
"type": ["null", "number"]
},
"metrics.average_cpe": {
"type": ["null", "number"]
},
"metrics.average_cpm": {
"type": ["null", "number"]
},
"metrics.average_cpv": {
"type": ["null", "number"]
},
"metrics.clicks": {
"type": ["null", "integer"]
},
"metrics.conversions": {
"type": ["null", "number"]
},
"metrics.conversions_from_interactions_rate": {
"type": ["null", "number"]
},
"metrics.conversions_value": {
"type": ["null", "number"]
},
"metrics.cost_micros": {
"type": ["null", "integer"]
},
"metrics.cost_per_all_conversions": {
"type": ["null", "number"]
},
"metrics.cost_per_conversion": {
"type": ["null", "number"]
},
"metrics.cross_device_conversions": {
"type": ["null", "number"]
},
"metrics.ctr": {
"type": ["null", "number"]
},
"metrics.engagement_rate": {
"type": ["null", "number"]
},
"metrics.engagements": {
"type": ["null", "integer"]
},
"metrics.impressions": {
"type": ["null", "integer"]
},
"metrics.interaction_event_types": {
"type": ["null", "array"],
"items": {
"type": ["null", "string"]
}
},
"metrics.interaction_rate": {
"type": ["null", "number"]
},
"metrics.interactions": {
"type": ["null", "integer"]
},
"metrics.value_per_all_conversions": {
"type": ["null", "number"]
},
"metrics.value_per_conversion": {
"type": ["null", "number"]
},
"metrics.video_view_rate": {
"type": ["null", "number"]
},
"metrics.video_views": {
"type": ["null", "integer"]
},
"metrics.view_through_conversions": {
"type": ["null", "integer"]
}
}
}
Expand Up @@ -28,6 +28,7 @@
AdGroupLabels,
AdGroups,
Audience,
CampaignBudget,
CampaignLabels,
Campaigns,
ClickView,
Expand Down Expand Up @@ -151,6 +152,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]:
AdGroupLabels(google_api, customers=customers),
Accounts(**incremental_config),
Audience(google_api, customers=customers),
CampaignBudget(**incremental_config),
CampaignLabels(google_api, customers=customers),
ClickView(**incremental_config),
UserInterest(google_api, customers=customers),
Expand Down
Expand Up @@ -276,6 +276,15 @@ class Campaigns(IncrementalGoogleAdsStream):
primary_key = ["campaign.id", "segments.date", "segments.hour"]


class CampaignBudget(IncrementalGoogleAdsStream):
"""
Campaigns stream: https://developers.google.com/google-ads/api/fields/v13/campaign_budget
"""

transformer = TypeTransformer(TransformConfig.DefaultSchemaNormalization)
primary_key = ["campaign_budget.id", "segments.date"]


class CampaignLabels(GoogleAdsStream):
"""
Campaign labels stream: https://developers.google.com/google-ads/api/fields/v11/campaign_label
Expand Down
Expand Up @@ -144,7 +144,7 @@ def test_chunk_date_range():
def test_streams_count(config, mock_account_info):
source = SourceGoogleAds()
streams = source.streams(config)
expected_streams_number = 21
expected_streams_number = 22
assert len(streams) == expected_streams_number


Expand Down