Pro většinu SaaS zakladatelů a growth týmů provozujících Google Ads v 2026 je mezera mezi ROAS, který Google Ads reportuje, a tržbami, které Stripe skutečně vybral, někde mezi 20 % a 70 %. Web pixel konverze se spouštějí na intent checkoutu (klik tlačítka, page load); nevědí o selhaných kartách, dunning bouncích, refundech, fraudulentních disputech nebo trialech, které nikdy nekonvertovaly. Smart Bidding optimalizuje proti signálu, který mu dáte — a pokud je tento signál hrubý checkout intent místo čistých vybraných tržeb, algoritmus škáluje výdaje špatným směrem.
Tento průvodce projde kompletní technickou a operační integraci: zachycení Google Click ID (GCLID) na každé checkout stránce, jeho uložení v Stripe customer nebo charge metadatech, přihlášení k správným webhook eventům, volání Google Ads ConversionUploadService API se správným conversion action a hodnotou, zacházení s multi-currency Stripe účty a zapojení refundů a disputů přes conversion adjustment API. Uzavíráme BigQuery middleware vzorem pro high-volume účty a 30denním implementačním rolloutem.
Typický SaaS web pixel spouští conversion event, když zákazník klikne na „Subscribe" nebo přistane na thank-you stránce. V Stripe pojmech to je ekvivalent payment_intent.created nebo checkout.session.completed — ne charge.succeeded. Pixel neví o: 3DS authentication selháních, zamítnutých kartách, fraud holdech, free trialech, které nikdy nekonvertují, downgrades během prvního billing cyklu, plných refundech v prvních 30 dnech, částečných refundech a kreditech, nebo chargebackech. Napříč Stripe-using SaaS účty, které jsme auditovali v 2024-2026, web pixel konverze over-reportují vybrané tržby o 15-35 % u self-serve produktů a 30-60 % u trial-led produktů. Smart Bidding neví, že honí nafouknutá čísla — škáluje výdaje na nejhlasitější signál, i když je tento signál špatně o 40 %.
Proč na importu konverzí Stripe → Google Ads záleží v 2026
Tři trendy v 2026 dělají tuto integraci důležitější, než byla v 2022:
1. Smart Bidding nyní konzumuje v podstatě veškeré výdaje účtu. Podle Google transparency reporting 2025 více než 85 % Google Ads výdajů napříč aktivními účty v 2026 teče přes bid strategie řízené conversion signálem — Maximize Conversions, Maximize Conversion Value, Target CPA a Target ROAS. Bid strategie je jen tak přesná, jak conversion data, která dostává. Manual CPC účty mohou tolerovat hlučný conversion signál, protože lidé revidují každou nabídku; Smart Bidding nemůže. Pokud vaše conversion data over-reportují o 30 %, Smart Bidding utratí o 30 % víc, než by mělo, na nabídky, které vypadají ziskově, ale nejsou.
2. Deprecation third-party cookies 2024 zrychlil důležitost GCLID. Jak browser-side tracking degraduje, server-side conversion import přes GCLID se stává nejspolehlivějším mostem mezi reklamním klikem a downstream konverzí. Stripe je přirozeným zdrojem pravdy pro revenue eventy, protože sedí na vrstvě finančního settlementu, post-payment-method-validation. Pixel-based atribuce bude pokračovat ve slábnutí přes 2026-2027; server-side Stripe-based atribuce zůstává přesná.
3. ROAS-based bidding vyžaduje upřímný revenue vstup. Google Ads Target ROAS bid strategie funguje předvídáním conversion value per click a bidováním na cílový value-to-cost poměr. Pokud hodnoty, které předvídá, zahrnují refundovaný revenue, failed-trial revenue a disputed charges, předpovědi jsou systematicky vysoké — a bidding přestřeluje. Stripe import je jediný mechanismus, který dává Google Ads ground-truth netto tržby v granularitě conversion-value, jakou Target ROAS potřebuje.
Integrace není volitelná infrastruktura pro seriózní SaaS v 2026; je to podlaha, pod kterou Smart Bidding nefunguje správně.
Datový tok ve zkratce: GCLID → Stripe → Google Ads
End-to-end datový tok je přímočarý v konceptu a plný edge cases v exekuci. Pět kroků:
Krok 1 — Klik: Uživatel kliká na vaši Google Ad. Google Ads autotagging připojuje ?gclid=ABC123... na destination URL. GCLID je unikátní token vázaný na ten klik, platný 90 dní pro conversion atribuci na Search/Display kampaních.
Krok 2 — Capture: Vaše landing page načte gclid query parametr a persistuje ho. Dva persistence vzory: cookie (first_touch_gclid na 90 dní) nebo backend úložiště keyed anonymní session ID pak user ID po signupu.
Krok 3 — Checkout: Když uživatel dosáhne Stripe Checkout (nebo Stripe Elements formuláře na vaší vlastní stránce), předejte uložený GCLID jako metadata pole na Checkout Session vytvoření, PaymentIntent nebo Customer object. To váže GCLID k finančnímu eventu.
Krok 4 — Charge uspěje: Stripe zpracuje platbu. Při úspěšném settlementu (charge.succeeded) Stripe spouští webhook na váš endpoint. Webhook payload obsahuje charge ID, částku, měnu, customer ID a metadata (včetně GCLID, který jste uložili).
Krok 5 — Upload do Google Ads: Váš webhook handler volá Google Ads API ConversionUploadService.UploadClickConversions endpoint, předává GCLID, conversion action resource name, conversion timestamp, conversion value a currency code. Google Ads matchuje GCLID k původnímu kliku, atribuje konverzi a aktualizuje reporting a Smart Bidding vstupy.
Nejčastější chyby v kroku 5 jsou: upload na checkout.session.completed místo charge.succeeded (mineme payment selhání), upload hrubé částky místo netto Stripe poplatků (záleží na vaší účetní preferenci) a nezacházení s currency převodem, když jsou Stripe charges a Google Ads účty v různých měnách.
Zachycení GCLID v metadatech Stripe customer nebo charge
První technický krok je spolehlivé zachycení GCLID v době kliku a jeho navázání na finanční event v Stripe. Tři implementační vzory podle složitosti:
Vzor A — Stripe Checkout Session metadata (nejjednodušší):
Když vytváříte Checkout Session server-side, předejte GCLID jako metadata pole:
const session = await stripe.checkout.sessions.create({
mode: "subscription",
line_items: [{ price: "price_xyz", quantity: 1 }],
metadata: {
gclid: req.cookies.gclid || "",
gbraid: req.cookies.gbraid || "",
wbraid: req.cookies.wbraid || "",
click_timestamp: req.cookies.click_ts || "",
},
success_url: "https://yoursaas.com/thanks",
cancel_url: "https://yoursaas.com/pricing",
});
Pro: nulové backend úložiště, metadata cestují se session navždy. Proti: Stripe metadata hodnoty jsou limitovány na 500 chars každá a GCLID musí být dostupný v době vytvoření session (cookie nastavené na landing page).
Vzor B — Customer object metadata (lepší pro subscription renewals):
Uložte GCLID na Customer object při prvním signupu. Všechny budoucí charges od toho zákazníka dědí atribuci:
const customer = await stripe.customers.create({
email: req.body.email,
metadata: {
gclid: req.cookies.gclid || "",
first_touch_campaign: req.cookies.utm_campaign || "",
signup_date: new Date().toISOString(),
},
});
Pro: funguje pro opakované billing (každý invoice.payment_succeeded dědí customer GCLID). Proti: zachycuje pouze first-touch GCLID, ne last-touch — pro SaaS s více ad-click touchpointy napříč dlouhým prodejním cyklem byste možná chtěli aktualizovat GCLID při každém novém kliku.
Vzor C — Vlastní databáze, joinovaná v době webhooku:
Uložte GCLID ve vlastní databázi keyed by user_id nebo session_id. Když Stripe webhook spustí pro charge.succeeded, vyhledejte uložený GCLID uživatele a předejte ho do Google Ads:
# In your charge.succeeded webhook handler:
user_id = stripe_customer.metadata.get('user_id')
gclid = db.query("SELECT gclid FROM users WHERE id = %s", [user_id])
if gclid:
upload_to_google_ads(gclid, charge.amount, charge.currency, charge.created)
Pro: nejflexibilnější, podporuje last-touch atribuci, podporuje multi-click atribuční okna. Proti: vyžaduje backend infrastrukturu, víc failure modes.
Best practice — zachyťte všechny tři iOS-era click ID:
Moderní Google Ads autotagging emituje gclid pro většinu provozu, plus gbraid pro iOS App kampaně a wbraid pro iOS web provoz, když ATT-restricted. Zachyťte všechny tři. Google Ads upload API má oddělené endpointy pro každý (UploadCallConversions, UploadClickConversions); použijte gclid, kde přítomný, fallback na gbraid/wbraid pro iOS provoz.
Konfigurace Google Ads conversion action pro value tracking
Než může jakýkoli upload kód uspět, musíte vytvořit conversion actions v Google Ads, na které budou uploady cílit. V Tools > Conversions > New conversion action vyberte „Import" jako zdroj, pak „Other data sources or CRMs" > „Track conversions from clicks."
Tři conversion actions k vytvoření pro standardní SaaS Stripe integraci:
Action 1 — Stripe Trial Start (volitelné, ale doporučené):
- Category: Sign-up
- Value: Don't use a value
- Count: One
- Click-through okno: 90 dní
- View-through okno: 1 den
- Include in Conversions: No (zpočátku — překlopte na Yes po prvním paid charge spuštěném pro stejného uživatele)
Action 2 — Stripe First Paid Charge (primární akce):
- Category: Purchase
- Value: Use different values for each conversion
- Count: One (jedna konverze za klik — první paid charge)
- Click-through okno: 90 dní
- View-through okno: 1 den
- Include in Conversions: Yes (toto je, k čemu Smart Bidding optimalizuje)
- Attribution model: Data-driven (výchozí v 2026)
Action 3 — Stripe Expansion Revenue (pro upsells, plan upgrady, další seats):
- Category: Purchase
- Value: Use different values for each conversion
- Count: Every (více expansions za klik mohou všechny počítat)
- Click-through okno: 90 dní
- View-through okno: 1 den
- Include in Conversions: Yes (additive k First Paid Charge v Smart Bidding)
Pro každou conversion action si poznamenejte Conversion Action ID (resource name jako customers/1234567890/conversionActions/9876543210). Předáte to upload API jako conversion_action.
Nejčastější jediná konfigurační chyba, kterou vidíme v Stripe-integrovaných Google Ads účtech, je ponechání více conversion actions označených jako „Include in Conversions" — jak staré web pixel action, tak nového Stripe import action. Smart Bidding pak double-countuje: kredituje pixel konverzi na checkoutu a Stripe konverzi na charge. Reportovaný ROAS se nafoukne o 60-100 %. Oprava je jedna z: (a) překlopit Include-in-Conversions starého web pixel action na No, nechat Stripe Import jako jediný optimalizační signál, nebo (b) nechat oba Include-in-Conversions, ale nakonfigurovat primární signál Smart Bidding explicitně přes custom goals.
Nastavení „Use different values for each conversion" je kritické pro use case Stripe tržeb. Bez něj každá konverze nahrává se stejnou fixní hodnotou („default value", kterou nastavíte na action). Smart Bidding nemůže rozlišit 15 €/měsíc basic plan signup od 1 500 €/měsíc enterprise signupu, pokud všechny konverze mají stejnou hodnotu. Vždy vyberte „different values" možnost pro Stripe-imported revenue actions.
Stavba webhook listeneru (Node.js + Python příklady)
Webhook listener má tři zodpovědnosti: ověřit Stripe webhook signature (bezpečnost), parsovat event payload a zavolat odpovídající Google Ads API endpoint. Níže jsou minimální implementace v Node.js a Pythonu — obě production-ready ve tvaru, ale ořezané pro jasnost.
Node.js / Express implementace:
import express from "express";
import Stripe from "stripe";
import { GoogleAdsApi } from "google-ads-api";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
const googleAds = new GoogleAdsApi({
client_id: process.env.GOOGLE_ADS_CLIENT_ID,
client_secret: process.env.GOOGLE_ADS_CLIENT_SECRET,
developer_token: process.env.GOOGLE_ADS_DEVELOPER_TOKEN,
});
const customer = googleAds.Customer({
customer_id: process.env.GOOGLE_ADS_CUSTOMER_ID,
refresh_token: process.env.GOOGLE_ADS_REFRESH_TOKEN,
});
app.post("/webhooks/stripe", express.raw({ type: "application/json" }), async (req, res) => {
const sig = req.headers["stripe-signature"];
let event;
try {
event = stripe.webhooks.constructEvent(req.body, sig, process.env.STRIPE_WEBHOOK_SECRET);
} catch (err) {
return res.status(400).send(`Webhook Error: ${err.message}`);
}
if (event.type === "charge.succeeded") {
const charge = event.data.object;
const gclid = charge.metadata.gclid;
if (!gclid) return res.status(200).send("No GCLID — skipping");
const conversionValue = charge.amount / 100; // Stripe amounts are in cents
const conversionTime = new Date(charge.created * 1000).toISOString();
await customer.conversionUploads.uploadClickConversions({
conversions: [
{
gclid,
conversion_action: process.env.GOOGLE_ADS_CONVERSION_ACTION_RN,
conversion_date_time: conversionTime,
conversion_value: conversionValue,
currency_code: charge.currency.toUpperCase(),
},
],
partial_failure: true,
});
}
res.status(200).send("OK");
});
Python / FastAPI implementace:
from fastapi import FastAPI, Request, HTTPException
import stripe
from google.ads.googleads.client import GoogleAdsClient
stripe.api_key = os.environ['STRIPE_SECRET_KEY']
client = GoogleAdsClient.load_from_storage('google-ads.yaml')
@app.post('/webhooks/stripe')
async def stripe_webhook(request: Request):
payload = await request.body()
sig = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(payload, sig, os.environ['STRIPE_WEBHOOK_SECRET'])
except Exception:
raise HTTPException(status_code=400, detail='Invalid signature')
if event['type'] == 'charge.succeeded':
charge = event['data']['object']
gclid = charge['metadata'].get('gclid')
if not gclid:
return {'status': 'no gclid'}
upload_service = client.get_service('ConversionUploadService')
click_conversion = client.get_type('ClickConversion')
click_conversion.gclid = gclid
click_conversion.conversion_action = os.environ['GOOGLE_ADS_CONVERSION_ACTION_RN']
click_conversion.conversion_date_time = (
datetime.fromtimestamp(charge['created']).strftime('%Y-%m-%d %H:%M:%S+00:00')
)
click_conversion.conversion_value = charge['amount'] / 100
click_conversion.currency_code = charge['currency'].upper()
upload_service.upload_click_conversions(
customer_id=os.environ['GOOGLE_ADS_CUSTOMER_ID'],
conversions=[click_conversion],
partial_failure=True,
)
return {'status': 'ok'}
Kritické production hardening k přidání:
- Idempotence: cachujte zpracované Stripe event IDs po 24 h, přeskakujte duplicitní eventy
- Exponential backoff retry na Google Ads API 5xx chyby (3 retries: 1s, 5s, 25s)
- Dead-letter queue pro permanentně selhané uploady (revidujte týdně)
- Strukturovaný logging každého uploadu (charge_id, gclid, conversion_value, response_code)
- Alerting, když error rate překračuje 1 % na rolling 1-hodinovém okně
Zacházení s měnou, refundy a conversion adjustments
Dvě operační bolesti hlavy, které derailují většinu Stripe-to-Google integrací, jsou currency normalizace a refund zacházení. Obojí musí být vyřešeno, než bude Smart Bidding fungovat správně.
Currency normalizace:
Google Ads účty mají jednu měnu nastavenou při vytvoření. Všechny nahrané conversion hodnoty musí být v té měně. Stripe účty mohou účtovat ve 135+ měnách. Reconciliation logika:
- Pokud Stripe charge.currency odpovídá Google Ads account měně → použijte charge.amount přímo (po dělení 100 pro cents-to-units konvenci)
- Pokud se Stripe charge.currency liší → použijte amount a exchange_rate Stripe BalanceTransaction pro převod
- Pokud BalanceTransaction není ještě dostupný (race condition hned po charge.succeeded) → dotazujte externí FX rate API na timestamp charge
Pseudokód pro bezpečnou cestu:
def normalize_currency(charge, target_currency):
if charge['currency'].upper() == target_currency:
return charge['amount'] / 100
# Fetch balance transaction (settled in your Stripe payout currency)
bt = stripe.BalanceTransaction.retrieve(charge['balance_transaction'])
if bt['currency'].upper() == target_currency:
return bt['amount'] / 100
# Both differ — convert via Stripe's exchange rate
return (bt['amount'] / 100) * bt['exchange_rate']
Refund zacházení přes UploadConversionAdjustments:
Když Stripe spustí charge.refunded, musíte upravit odpovídající Google Ads konverzi. Adjustment API akceptuje dvě operace:
- RETRACT: odstraní původní konverzi zcela (použijte pro plné refundy)
- RESTATE: změní conversion value (použijte pro částečné refundy — předejte novou, nižší hodnotu)
Obě operace vyžadují: původní GCLID, conversion action resource name, původní conversion date-time (musí přesně odpovídat) a adjustment timestamp.
// charge.refunded handler
const refund = event.data.object;
const isFullRefund = refund.amount_refunded === refund.amount;
await customer.conversionAdjustmentUploads.uploadConversionAdjustments({
conversionAdjustments: [
{
gclid_date_time_pair: {
gclid: refund.metadata.gclid,
conversion_date_time: originalConversionTime, // must match original exactly
},
conversion_action: process.env.GOOGLE_ADS_CONVERSION_ACTION_RN,
adjustment_type: isFullRefund ? "RETRACTION" : "RESTATEMENT",
adjustment_date_time: new Date().toISOString(),
restatement_value: isFullRefund
? undefined
: {
adjusted_value: (refund.amount - refund.amount_refunded) / 100,
currency_code: refund.currency.toUpperCase(),
},
},
],
});
55denní adjustment okno: Google Ads akceptuje úpravy pouze do 55 dnů od původní konverze timestamp. Refundy mimo 55 dnů nemohou být reflektovány v Google Ads. Pro SaaS s dlouhými refund okny (90denní money-back guarantee, mid-year refundy ročních subscription) je toto strukturální mezera — budete muset manuálně sladit v Looker / GA4 reportingu a akceptovat, že Smart Bidding operuje s mírně zastaralými čísly na malé procento konverzí.
Disputy a chargebacky: přihlaste se k charge.dispute.created. Pokud důvod je „fraudulent" nebo „credit_not_processed," zacházejte jako s plným refundem (RETRACT). Pokud „duplicate" nebo „subscription_canceled," sledujte vlastní business pravidla — obecně také zacházejte jako s plným refundem pro ad atribuci.
BigQuery middleware varianta pro high-volume účty
Pro SaaS dělající víc než 10 000 konverzí/měsíc nebo provozující multi-product, multi-region Google Ads účty, vzor přímých webhooků začíná napínat. BigQuery middleware vzor přidává 5 minut latence, ale řeší několik problémů najednou.
Architektura:
- Stripe webhooky → Cloud Function (Node.js nebo Python) → BigQuery raw events table
- BigQuery scheduled query (každých 5 minut) → čte nové eventy, vypočítá conversion záznamy, volá Google Ads API
- BigQuery materialized views → reconciliation dashboardy, refund tracking, atribuční debugging
Cloud Function dělá skoro nic — jen validuje Stripe signature a zapisuje raw event do BigQuery. Scheduled query drží veškerou conversion logiku, což znamená, že můžete aktualizovat logiku editací SQL místo deployování kódu.
Schema pro raw events table:
CREATE TABLE stripe_events (
event_id STRING NOT NULL,
event_type STRING NOT NULL,
charge_id STRING,
customer_id STRING,
gclid STRING,
gbraid STRING,
wbraid STRING,
amount_cents INT64,
currency STRING,
occurred_at TIMESTAMP NOT NULL,
processed_at TIMESTAMP,
google_ads_upload_status STRING, -- pending / success / failed
google_ads_upload_response JSON,
raw_payload JSON
)
PARTITION BY DATE(occurred_at)
CLUSTER BY event_type, gclid;
Scheduled query běží každých 5 minut:
-- Pseudocode — actual implementation uses Cloud Function callable from BQ
INSERT INTO conversion_uploads (event_id, gclid, conversion_value, status)
SELECT
event_id,
gclid,
amount_cents / 100.0 AS value,
upload_to_google_ads(gclid, conversion_action_rn, occurred_at, amount_cents / 100.0, currency) AS status
FROM stripe_events
WHERE event_type = 'charge.succeeded'
AND google_ads_upload_status = 'pending'
AND gclid IS NOT NULL
AND occurred_at > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 80 DAY); -- within GCLID window
Proč BigQuery middleware vzor vyhrává ve velkém:
- Replay schopnost: pokud má Google Ads API výpadek, raw eventy zůstávají v BigQuery a mohou být znovu nahrány později
- Auditovatelný ledger: status, timestamp a response každého uploadu je queryable
- Levnější ve velkém: batched API volání stojí míň než per-event volání (Google Ads API má rate limits a quoty)
- Multi-account routing: směrujte konverze na správný Google Ads účet podle Stripe produktu nebo regionu — snadné v SQL, složité ve webhook kódu
- Reconciliation dashboardy: BigQuery → Looker dashboardy ukazující Stripe tržby vs Google Ads importované tržby, refund lag, currency mismatches
Nevýhoda: 5minutová latence vs sub-second pro přímé webhooky. Pro learning smyčku Smart Bidding je 5minutová latence neviditelná — Smart Bidding se aktualizuje denně, ne v reálném čase.
Pro hlubší BigQuery pipeline vzory specifické pro ads data viz náš BigQuery Google Ads data pipeline tutoriál.
30denní implementační plán s rollout checkpointy
HowTo schéma výše je day-by-day. Strategické rámování pro 30denní rollout:
Týden 1 — Audit a design (Dny 1-7). Zdokumentujte aktuální stav: jak konverze aktuálně spouštějí, jaký je reportovaný ROAS, jaké jsou skutečné Stripe tržby pro stejné okno. Mezera je to, co se chystáte opravit. Definujte conversion taxonomii (Trial Start, First Paid, Expansion). Vytvořte Google Ads conversion actions, ale ještě je nezahrnujte do Conversions — jsou neaktivní, dokud data netečou.
Týden 2 — Implementace (Dny 8-15). Přidejte GCLID capture na landing pages. Zapojte Stripe Checkout, aby předával GCLID jako metadata. Postavte webhook listener pro charge.succeeded. Otestujte proti Google Ads test účtu se syntetickými GCLIDy. Validujte, že testovací konverze se zobrazují v Google Ads Uploads tabu do 5 minut.
Týden 3 — Hardening (Dny 16-22). Přidejte currency normalizaci. Zapojte charge.refunded a charge.dispute.created webhooky na UploadConversionAdjustments. Přidejte idempotenci, retry logiku a dead-letter queue. Postavte Stripe-vs-Google reconciliation dashboard. Spusťte ho na 7 dní proti živým datům bez ještě přepínání Smart Bidding na nový conversion action.
Týden 4 — Switchover a tuning (Dny 23-30). Překlopte „Include in Conversions" na Stripe First Paid Charge action. Překlopte ho off na starém web pixel action. Přepněte primární konverzi Smart Bidding na Stripe First Paid Charge. Očekávejte 14-30 dní bid volatility, jak algoritmus přestavuje svůj model. Nemněte target ROAS během této periody; nechte to stabilizovat, pak rekalibrujte.
Rollout checkpointy k monitorování:
- Konec týdne 1: conversion actions existují v Google Ads, taxonomie zdokumentována, základní ROAS změřeno
- Konec týdne 2: testovací konverze viditelné v Google Ads Uploads tabu, žádné chyby ve webhook logu
- Konec týdne 3: živé konverze tečou, reconciliation dashboard do 5 % tolerance, refundy zpracovávají jako RETRACT/RESTATE správně
- Konec týdne 4: Smart Bidding přepnuté, learning perioda začala, tým trénovaný na nových dashboardech
Mimo den 30 — pokračující operace:
Spusťte čtvrtletní attribution audit. Porovnejte Google Ads reportované tržby se Stripe vybranými tržbami za stejné okno. Oba by měly souhlasit do 5 %; větší mezera indikuje GCLID capture selhání, refund handling bugy nebo attribution-window vypršení. Pro účty pod 50 tis. €/měsíc to může být 1hodinový úkol každé čtvrtletí. Pro účty nad 100 tis. €/měsíc postavte to do BigQuery middleware jako automatizované týdenní reconciliation reporty.
Pokud spravujete Google Ads ve velkém a chcete AI-driven optimalizaci vrstvenou nad čistá Stripe-imported conversion data, SteerAds běží zdarma 14denní audit na vašich Google Ads + Microsoft Ads účtech včetně kontroly zdraví vašeho conversion importu.
Pro širší kontext na atribuci a conversion měření viz náš průvodce data-driven vs last-click atribuce 2026 a průvodce Google Ads conversion tracking server-side 2026 pro sousední implementační vzory.
Zdroje
Oficiální a třetí strany zdroje konzultované pro tento průvodce:
-
developers.google.com/google-ads/api
— Dokumentace Google Ads API ConversionUploadService -
docs.stripe.com/webhooks
— Stripe webhook reference a event typy -
support.google.com/google-ads
— Offline conversion import help a dokumentace 90denního okna -
developers.google.com/google-ads/api/conversions/upload-adjustments
— Conversion adjustment API pro refundy -
docs.stripe.com/api/balance_transactions
— BalanceTransaction reference pro currency exchange rates
Související články: Generování obrázků AI pro Google Ads 2026: Midjourney, DALL-E a reklamní kreativy · BigQuery + Google Ads data pipeline 2026: vybudujte si reportingový data warehouse · Implementace Consent Mode v2 2026: povinné nastavení EHP pro Google Ads + GA4 · Dynamic Creative Optimization v Google Ads 2026: nastavení a strategie DCO · Enhanced Conversions pro Google Ads 2026: získejte zpět 5–15 % ztracené atribuce · GA4 + Google Ads conversion import setup 2026: kompletní 30denní průvodce nasazením
FAQ
Potřebuji importovat Stripe tržby, pokud už používám Google Ads Enhanced Conversions for Web?
Ano, ve většině případů. Enhanced Conversions for Web se spouští při dokončení checkoutu na základě client-side eventu — zachycuje intent-to-pay, ne skutečně vybrané tržby. Pokud máte free trialy, dunning selhání, refundy, payment plány nebo jakékoli časové zpoždění mezi checkoutem a úspěšným charge, Web Enhanced Conversions over-reportují. Import Stripe charge.succeeded eventů jako offline konverze dává Google Ads skutečnou hodnotu vybraných tržeb, což dramaticky zlepšuje Smart Bidding ROAS targeting. Oba systémy se doplňují: Web Enhanced Conversions pro rychlý intent signál, Stripe offline import pro ground-truth tržby. Spusťte oboje, ale nakonfigurujte Smart Bidding k optimalizaci k Stripe-imported value action, ne k Web action.
Co se stane, když je GCLID zákazníka starší než 90 dní, když konečně konvertuje?
Google Ads má tvrdé cutoffy pro offline conversion uploady: GCLID musel být vygenerován v posledních 90 dnech pro Search/Display nebo 30 dnech pro YouTube. Mimo to okno upload tiše selže bez chyby v Conversions reportu. Pro SaaS s dlouhými prodejními cykly je toto největším zdrojem nedokumentovaných tržeb. Workaroundy: (1) Pro free trialy delší než 60 dní spusťte konverzi na trial startu (paid trial conversion) a později upravte, pokud trial nekonvertuje na placený — Google adjustment API podporuje retraction. (2) Pro skutečně dlouhé cykly (B2B prodej 90+ dní) doplňte Enhanced Conversions for Leads s hashed emailem místo GCLID — match okno se rozšiřuje na 540 dní, ale match rate je nižší (typicky 40-65 %).
Jak zacházet s multi-currency Stripe charges, když Google Ads akceptuje jen jednu měnu účtu?
Převeďte všechny charges na měnu Google Ads účtu v době uploadu pomocí FX kurzu na timestamp charge.succeeded. Stripe API vrací částku v původní měně (charge.currency) a převedenou částku v settlement měně vašeho Stripe účtu (balance_transaction.amount). Použijte settlement-currency hodnotu, pokud je Google Ads účet nastaven na vaši settlement měnu. Pokud se liší, dotazujte rate API (Stripe nevystavuje svůj kurz přímo) na timestamp charge — použijte vlastní balance_transaction.exchange_rate Stripe, když je dostupný. Zdokumentujte převodní logiku; Smart Bidding bude misoptimalizovat, pokud polovina vašich konverzí je EUR-nativní a polovina je USD převedená za zastaralé kurzy.
Opravdu musím zacházet se Stripe refundy přes conversion adjustment API?
Ano a je to nejvíce přeskakovaný krok ve Stripe-to-Google integracích. Pokud ignorujete refundy, vaše Google Ads ROAS metrika se nafoukne hrubou tržbou a Smart Bidding škáluje výdaje na kampaně, které vypadají ziskově na gross, ale jsou neziskové netto refundů. Google Ads Conversion Adjustment API podporuje dvě operace: RETRACT (plný refund — odstraní konverzi zcela) a RESTATE (částečný refund — upraví hodnotu). Zapojte Stripe charge.refunded webhook do adjustment endpointu. Zpracovávejte refundy do 55 dnů od původní konverze (Google adjustment okno); mimo to budete muset manuálně sladit v reportingu a akceptovat, že bidding používá zastaralá čísla.
Mám použít Google Ads API přímo nebo třetí stranu nástroj jako Zapier / Funnel.io?
Tři kbelíky. (1) Pod 500 konverzí/měsíc: Zapier/Make funguje fajn — existují pre-built Stripe-to-Google-Ads šablony, žádné engineering nepotřeba, cena ~30-80 €/měsíc. (2) 500-10 000 konverzí/měsíc: přímá Google Ads API integrace stojí za to. Lepší error handling, rychlejší latence (Zapier batchuje každých 15 minut), levnější ve velkém a můžete implementovat refund adjustment logiku, kterou většina pre-built nástrojů přeskakuje. Engineering náklad: 2-4 dny. (3) 10 000+ konverzí/měsíc nebo multi-product účty: BigQuery middleware vzor (pokrytý v sekci 7). Stripe webhooky landují v BigQuery, scheduled query upsertuje do Google Ads API. Přidává 5 minut latence, ale dává vám queryable historickou ledger každé poslané konverze.
Jaký je rozdíl mezi offline conversion importy a Google Click ID-based conversion goals?
Jsou to stejný mechanismus, jiná terminologie. „Offline conversion import“ je operační termín pro posílání GCLID + conversion value + timestamp do Google Ads přes API nebo file upload. „Conversion goals“ (nebo „conversion actions“) je, jak jsou tyto importy kategorizovány v Google Ads UI — každý unikátní typ konverze (trial signup, paid signup, expansion revenue atd.) má vlastní conversion action. Pro Stripe tržby většina SaaSů vytváří tři actions: Stripe Trial Start (žádná hodnota, intent signál), Stripe First Paid Charge (revenue hodnota), Stripe Expansion Revenue (hodnota upsells/upgrades). Nakonfigurujte Smart Bidding k optimalizaci k Stripe First Paid Charge specificky — to je bottom-line signál.
Jak troubleshoot, když se konverze po uploadu nezobrazují v Google Ads?
Zkontrolujte v tomto pořadí. (1) Podívejte se na Conversions > Uploads tab v Google Ads — ukazuje posledních 90 dnů upload jobů a chybové počty. Časté chyby: „GCLID not found“ (klik předcházel upload okno nebo nikdy neexistoval), „Conversion action not found“ (špatné action ID), „Duplicate conversion“ (re-upload stejného GCLID + timestamp). (2) Pokud uploady uspějí, ale konverze se nezobrazí v reportech, zkontrolujte attribution okno a lookback conversion action. (3) Ověřte, že GCLID byl skutečně zachycen v době kliku — spusťte testovací klik na jednu z vašich reklam, zkontrolujte Stripe metadata po checkoutu. (4) Potvrďte, že je conversion action nastaven na „Include in Conversions“ — actions existují ve dvou stavech a pouze „included“ tečou do Smart Bidding.
Jaký je dopad na Smart Bidding, když přepnu z web-pixel konverzí na Stripe-imported konverze?
Signifikantní, jak nahoru, tak dolů. Smart Bidding se re-learnuje, když se konverzní signál změní, což znamená 14-30 dní bid volatility, zatímco se adaptuje. Během toho okna očekávejte 10-20 % varianci výdajů a možná 15-25 % varianci CAC — to je normální. Po learning periodě účty typicky vidí ROAS reportované v Google Ads klesnout o 20-40 % (protože pixel-based konverze over-reportovaly gross intent, Stripe-imported konverze reportují netto vybrané tržby). Absolutní tržby se nemění — jen reportovaný poměr. Nepanikařte a nereverttujte; nové číslo je blíže pravdě. Použijte to jako příležitost k rekalibraci cílového ROAS v Smart Bidding, aby odpovídal vaší skutečné unit ekonomice, ne nafouknutým pixel číslům.