Paid media

Advertising performance of Maison Velours, per platform. Spend, conversions and ROAS as reported by each platform, checked against GA4 and actual revenue.

Luxury home textiles and fragrance · FR, DE, NL, UK, US · Stack: Shopify Plus, Amazon, bol, Klaviyo, Impact, Meta, Google Ads, Pinterest, Amazon Ads, Recharge, Okendo, GA4

4 of 4 platforms · 22 campaigns · daily data, last 30 days vs previous period

PM1Spend

Up17.9%

€98,698

Platform-reported cost

PM2Impressions

Up17.8%

10M

95,499 link clicks

PM3Reach

Up18.6%

1.4M

Meta, TikTok, LinkedIn only

PM4Frequency

Up0.0%

2.68

Impressions / reach

PM5CPM

Up0.1%

€9.90

Spend / impressions x 1000

PM6CPC (link)

Down0.6%

€1.03

Spend / link clicks

PM7CTR (link)

Up0.6%

0.96%

Link clicks / impressions

PM8Purchases

Up15.8%

2,336

Platform-reported, default window

PM9Purchase value

Up15.5%

€222,075

Sum of platform claims

PM10Purchase ROAS

Down2.1%

2.25x

Value / spend, platform-reported

PM11Leads (lead form)

Up21.0%

265

Instant Forms and web forms

PM12Cost per lead

Down2.3%

€30.88

Lead campaigns only

PM17New-customer purchases

Up17.5%

450

47.2% of purchases on Google and Amazon

Source: Meta insights.spend · Google metrics.cost_micros / 1e6 · TikTok spend · Pinterest SPEND_IN_MICRO_DOLLAR · Amazon cost · LinkedIn costInLocalCurrency

PM18Alerts

Computed from the numbers on this page: pacing, ROAS, cost per lead, impression share, fatigue and double counting

Search budget limits impression share
Shopping | Standard, best sellers, Search | Lead, trade enquiry: more than 20% of impression share lost to budget (search_budget_lost_impression_share).
3 creatives at fatigue risk
Frequency above 3.4 on Press mention v4, Before and after v1 and more. Rotate in fresh variants.
Platforms double count revenue
Platform-reported conversion value is 1.42x of the revenue actually attributed to the paid channels. Use MER (4.28x, net revenue / total marketing spend) for budget decisions, platform ROAS only to compare within a platform.
Campaign in learning phase
Prospecting | Collection ads, new season: expect volatile CPA for a few more days.
Recent days are preliminary
iOS ATT and consent mode modelling backfill conversions for up to 72 hours (Meta) and lookback days (Google). The last 3 to 7 days are re-synced on every run.

PM19Spend per platform over time

Stacked, per day

Source: Meta insights.spend · Google metrics.cost_micros / 1e6 · TikTok spend · Pinterest SPEND_IN_MICRO_DOLLAR · Amazon cost · LinkedIn costInLocalCurrency

PM20Spend share

Share of spend per platform in this period

Meta

Google Ads

Amazon Ads

Pinterest

€37,966 · 38%

€33,588 · 34%

€20,005 · 20%

€7,139 · 7%

Previous period: €83,699 (17.9% more spend now).

PM21Platform comparison

Click a column header to sort. ROAS is platform-reported and overlaps between platforms

Meta€37,966€73,8001.94x
Google Ads€33,588€88,1932.63x
Amazon Ads€20,005€43,7902.19x
Pinterest€7,139€16,2922.28x

Source: ROAS = conversion value / spend per platform (Meta purchase_roas, TikTok complete_payment_roas, Amazon roasClicks14d). Do not add up.

PM22Conversions per type over time

Conversions per type (own chart, not mixed with spend)

Source: Meta actions[omni_purchase | lead | onsite_conversion.lead_grouped] and action_values[omni_purchase] (offsite_conversion.fb_pixel_purchase is pixel-only, so it misses app and onsite purchases) · Google metrics.conversions by segments.conversion_action_category (PURCHASE, SUBMIT_LEAD_FORM, BOOK_APPOINTMENT) · TikTok complete_payment, onsite_form

PM23Conversion totals

Period totals per type with the cost basis

  • Purchases2,336 · €35.11 each
  • Add to cart14,032
  • Begin checkout5,821
  • Leads265 · €30.88 each

Cost per type uses only spend of campaigns with that objective. Awareness spend (€8,474) is not attributed to any conversion type.

PM24Conversion types and API fields

Which field delivers each conversion type, per platform, with this period's counts

PlatformTypeCount / value fieldCount
MetaPurchaseactions[omni_purchase] (offsite_conversion.fb_pixel_purchase is pixel-only)624
MetaLead formactions[lead] / onsite_conversion.lead_grouped (Instant Form)148
Google AdsPurchasemetrics.conversions where segments.conversion_action_category = PURCHASE737
Google AdsLead formmetrics.conversions where category = SUBMIT_LEAD_FORM83
PinterestPurchaseTOTAL_CHECKOUT174
PinterestLead formTOTAL_LEAD34
Amazon AdsPurchasepurchases14d (SP: purchases7d)801

Source: Hover a field for the full mapping. [?] marks field names not yet verified. Google: cost and conversions segmented by conversion_action_category need two queries (the segment blocks cost metrics), joined on date and campaign.

PM25Cost per acquisition by type and platform

Spend of campaigns with that objective / conversions of that type

PlatformCost per purchaseCost per lead
Meta€45.44 up 4%€28.67 down 3%
Google Ads€38.14 up 1%€40.31 down 1%
Pinterest€31.88 up 6%€17.47 down 2%
Amazon Ads€24.97 up 0%-
All shown platforms€35.11 up 2%€30.88 down 2%

Source: Meta cost_per_action_type · Google cost / conversions segmented by conversion_action_category · TikTok cost_per_complete_payment, cost_per_onsite_form [?] · arrows show change vs previous period (down is good)

PM26Campaigns

Click a campaign to see its ad sets or ad groups. Click a header to sort

€12,7692.39x
€10,9862.97x
€7,8972.10x
€7,6991.87x
€6,0363.04x
€5,350-
€5,1222.20x
€5,0854.87x
€4,5151.34x
€4,249-
€4,1573.79x
€3,4876.57x
€3,4361.58x
€3,4313.35x
€3,355-
€2,4891.21x
€2,114-
€2,1032.28x
€1,8941.20x
€1,011-
€9201.91x
€594-
Total (22)€98,6982.25x

Source: Meta level=campaign|adset, objective · Google campaign.advertising_channel_type, ad_group / asset_group · TikTok data_level=AUCTION_CAMPAIGN|AUCTION_ADGROUP · Pinterest level=CAMPAIGN|AD_GROUP · Amazon sponsoredProducts|sponsoredBrands|sponsoredDisplay campaigns

PM27Top creatives

Ads with their share of the ad set. Frequency above 3.4 is flagged as fatigue risk

Health
Texture close-up v1Prospecting | Advantage+ Shopping€4,1421.89xHealthy
Founder story v1Prospecting | Advantage+ Shopping€3,8702.77xHealthy
Review quote v1Performance Max | All products€3,8343.08xHealthy
Bestseller roundup v1Prospecting | UGC Reels, broad€2,5672.06xHealthy
Gift wrapped v3Prospecting | Advantage+ Shopping€2,5542.49xHealthy
Press mention v4Prospecting | UGC Reels, broad€2,3072.13xFatigue risk
Studio tour v2Performance Max | All products€2,2802.99xHealthy
Unboxing ritual v2Prospecting | Advantage+ Shopping€2,2042.57xHealthy
Weekend offer v2SP | Auto, best sellers€1,9901.76xHealthy
Texture close-up v3Awareness | Reach, brand film€1,872-Fatigue risk

Source: Meta level=ad, video_p25_watched_actions / video_play_actions for hook rate [?] · Google ad_group_ad.ad.id, asset_group_asset performance_label · TikTok data_level=AUCTION_AD, ad_name · Pinterest level=AD

PM28Attribution windows

Same spend, different window: the effect on conversions and ROAS

PlatformWindowValueROASvs default
Meta1-day clickaction_attribution_windows=1d_click€45,0181.19x-39%
Meta7-day clickaction_attribution_windows=7d_click€60,5161.59x-18%
Meta1-day viewaction_attribution_windows=1d_view€13,2840.35x-82%
Meta7-day click + 1-day view (default)default when parameter is omitted€73,8001.94x-
Google AdsModel set per conversion action (data-driven default) (default)metrics.conversions€88,1932.63x-
Pinterest7d click / 1d view / 0 engagementclick_window_days=7, view_window_days=1, engagement_window_days=0€9,1231.28x-44%
Pinterest30d click / 30d view / 30d engagement (default)default windows€16,2922.28x-
Amazon Ads7-daypurchases7d / sales7d€41,1632.06x-6%
Amazon Ads14-day (default)purchases14d / sales14d€43,7902.19x-

Source: Meta action_attribution_windows [1d_click, 7d_click, 1d_view] (7d_view and 28d_view are being retired [?]) · Google: model and lookback are set per conversion action (data-driven default), no report-time window · TikTok 7d click / 1d view · Pinterest click_window_days, view_window_days

PM29ROAS by window

Pick a platform

The default for Meta is 7-day click + 1-day view. Always compare platforms on equal windows.

PM30Platform-reported vs GA4 vs actual revenue

Platforms claim the same order more than once. This block always covers all platforms of the client

Platforms claim

€222,075

Sum of platform-reported value

GA4 paid channels

€85,998

purchaseRevenue, last click

Actual paid-attributed

€156,473

Revenue attributed to paid channels, ex VAT

Overlap ratio

1.42x

Platform sum / actual paid-attributed

Meta (reported)

Google Ads (reported)

Pinterest (reported)

Amazon Ads (reported)

Sum of platforms

GA4 paid channels

Actual paid-attributed revenue

Actual net revenue, all channels

€73,800

€88,193

€16,292

€43,790

€222,075

€85,998

€156,473

€444,878

MER

4.28x

Net revenue / total marketing spend (ads, affiliate, email)

Paid-only MER

4.51x

Net revenue / paid ad spend

Platform blended ROAS

2.25x

Sum of claims / total spend

GA4 ROAS

0.87x

GA4 revenue / total spend

Source: GA4 runReport purchaseRevenue by sessionDefaultChannelGroup · Actual: net revenue and channel attribution from /revenue (orders, bookings; source of truth) · overlap = sum of platform value / paid-attributed actual revenue

PM31Claimed vs actual per platform

Platform-reported value / revenue actually attributed to that channel

Google Ads2.63x1.40x
Meta1.94x1.60x
Amazon Ads2.19x1.20x
Pinterest2.28x1.50x
Total2.25x1.42x Double counted

PM32Breakdowns

Where spend and purchases come from. Rows add up to the totals of the platforms that deliver the dimension (Amazon Ads excluded)

35-44 · Female€15,6133832.90x
25-34 · Female€13,0952722.41x
45-54 · Female€11,0802532.68x
35-44 · Male€8,2941542.15x
25-34 · Male€6,9561101.79x
45-54 · Male€5,8861021.99x
55-64 · Female€5,036962.20x
18-24 · Female€4,029591.63x
55-64 · Male€2,676391.64x
18-24 · Male€2,140241.22x
65+ · Female€1,511211.53x
65+ · Male€80381.15x
35-44 · Unknown€48851.23x
25-34 · Unknown€40941.03x
45-54 · Unknown€34641.14x
55-64 · Unknown€15710.94x
18-24 · Unknown€12610.71x
65+ · Unknown€4700.66x
Total€78,6931,5352.27x

35-44 · Female

25-34 · Female

45-54 · Female

35-44 · Male

25-34 · Male

45-54 · Male

55-64 · Female

18-24 · Female

55-64 · Male

18-24 · Male

65+ · Female

65+ · Male

35-44 · Unknown

25-34 · Unknown

45-54 · Unknown

55-64 · Unknown

18-24 · Unknown

65+ · Unknown

€15,613

€13,095

€11,080

€8,294

€6,956

€5,886

€5,036

€4,029

€2,676

€2,140

€1,511

€803

€488

€409

€346

€157

€126

€47

Source: Meta breakdowns=age,gender · Google ad_group_criterion.age_range, gender · TikTok dimensions age, gender

Google Ads

Search impression share, keywords, search terms and Performance Max

PM33Search impression share

Top campaigns over time, in percent

Source: metrics.search_impression_share · metrics.search_budget_lost_impression_share · metrics.search_rank_lost_impression_share

PM34Impression share by campaign

Sortable. Shares add up to 100% with lost shares

Shopping | Standard, best sellers45%
Search | Non-brand, category terms82%
Search | Brand91%
Search | Lead, trade enquiry45%

Source: metrics.search_top_impression_share, search_absolute_top_impression_share

PM35Top keywords

Search campaigns, spend ranked. Quality score 1-10

maison veloursBrand€2,421223
luxury bed linen€1,56712
velvet cushion covers€1,42419
scented candles luxury€1,28211
silk pillowcase€1,13913
room spray home fragrance€99711
designer duvet cover€9975
maison velours throwBrand€85558
diffuser refill luxury€71210
gift set candle blanket€5705

Source: keyword_view · ad_group_criterion.keyword.text, keyword.match_type, quality_info.quality_score · metrics.cost_micros, conversions

PM36Performance Max

Reporting is limited: campaign and asset group level only

Asset groupStrengthCostConv.
Bedding and throwsBEST€3,62236
Home fragranceGOOD€3,159127
CushionsGOOD€2,39066
Gift setsLOW€1,81545

Source: asset_group · asset_group_asset.performance_label (BEST, GOOD, LOW) · metrics on campaign with advertising_channel_type = PERFORMANCE_MAX

Channel split is not available
The Google Ads API does not return a Search, YouTube, Display, Gmail, Maps split for Performance Max. Only campaign and asset group metrics exist; a split by segments.ad_network_type is limited and unverified [?]. This dashboard therefore shows no channel mix for PMax. Search term categories are available through campaign_search_term_insight.

PM37Budget pacing

Month to date, day 4 of 31. Budget is the monthly plan per platform

Meta€5,300 of €40,935On pace

Expected to date €5,282 · projected month-end €41,075 · planned €1,320 per day · €1,320 per day left to hit budget

Google Ads€4,509 of €32,754On pace

Expected to date €4,226 · projected month-end €34,945 · planned €1,057 per day · €1,046 per day left to hit budget

Pinterest€1,005 of €7,822On pace

Expected to date €1,009 · projected month-end €7,789 · planned €252 per day · €252 per day left to hit budget

Amazon Ads€2,877 of €20,794On pace

Expected to date €2,683 · projected month-end €22,297 · planned €671 per day · €664 per day left to hit budget

Source: Spend per day from the same reports (Meta spend, Google cost_micros, TikTok spend) vs a monthly budget plan kept in the dashboard · Meta also exposes campaign daily_budget and lifetime_budget

GA4 for paid channels

Independent measurement of the same traffic: sessions, key events and revenue per default channel group

PM38Paid channels in GA4

Last-click style attribution, lower than platform-reported numbers

Paid Social34,785€39,1080.82x
Paid Search15,411€19,8271.66x
Cross-network6,907€16,9641.54x
Paid Shopping4,337€10,0981.67x
Paid Video1,670€0-
Total paid63,109€85,9981.09x

Source: GA4 Data API runReport · dimension sessionDefaultChannelGroup · metrics sessions, keyEvents, purchaseRevenue, addToCarts, checkouts, ecommercePurchases

PM39Paid traffic funnel in GA4

From session to outcome, paid channels only

Sessions

Add to carts

Checkouts

Purchases (ecommercePurchases)

Leads (keyEvents:generate_lead)

63,109

7,108

2,773

737

156

GA4 sessions are about 26% lower than platform link clicks (consent, blockers, quick bounces). Key events must be marked as such in GA4.

Source: addToCarts, checkouts, ecommercePurchases, keyEvents:purchase | generate_lead