Class: Marketing::AdSpend::GoogleAdapter
- Inherits:
-
Object
- Object
- Marketing::AdSpend::GoogleAdapter
- Defined in:
- app/services/marketing/ad_spend/google_adapter.rb
Overview
Daily campaign spend from Google Ads via GAQL.
The campaign sync (GoogleAdsCampaignSyncWorker) already mirrors every
campaign into a Source keyed by campaign_external_id, so this only has to
fetch metrics and hand back rows keyed by that same id.
Constant Summary collapse
- PROVIDER =
Provider key recorded on ad spend rows produced by this adapter.
'google'
Class Method Summary collapse
-
.call(date) ⇒ Array<Hash>
{ external_id:, spend:, clicks:, impressions:, conversions: }.
Class Method Details
.call(date) ⇒ Array<Hash>
Returns { external_id:, spend:, clicks:, impressions:, conversions: }.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/services/marketing/ad_spend/google_adapter.rb', line 14 def self.call(date) query = <<~GAQL.squish SELECT campaign.id, metrics.cost_micros, metrics.clicks, metrics.impressions, metrics.conversions FROM campaign WHERE segments.date BETWEEN '#{date}' AND '#{date}' GAQL client = Invoicing::GoogleConversionReporter.client client.configure { |c| c.log_level = 'WARN' } rows = client.service.google_ads.search( customer_id: Invoicing::GoogleConversionReporter::WY_CHILD_LOCAL_ACCOUNT, query: query ).to_a rows.map do |row| { external_id: row.campaign.id.to_s, spend: row.metrics.cost_micros.to_i / 1_000_000.0, clicks: row.metrics.clicks.to_i, impressions: row.metrics.impressions.to_i, conversions: row.metrics.conversions.to_f } end end |