Skip to content

tracker.trackBeginCheckout()

Fires a GA4 begin_checkout event. When conversionLabels.beginCheckout is configured, also fires a matching Ads conversion. All input fields are optional.

tracker.trackBeginCheckout(input?: BrowserBeginCheckoutInput): Promise<void>;
type BrowserBeginCheckoutInput = {
transactionId?: string;
value?: number;
currency?: string;
items?: TrackbridgeItem[];
coupon?: string;
userData?: UserData;
};
FieldRequiredNotes
transactionIdnoAuto-generated tb_<uuid> if missing. The standard “dual-send disabled” warning fires (trackBeginCheckout matched server-side would generate a different ID and double-count).
valuenoCart total at checkout start, in currency.
currencynoISO 4217.
itemsnoTrackbridgeItem[].
couponnoForwarded as GA4 coupon param.
userDatanoHashed per enhanced conversions when supplied.

Promise<void>.

Same fan-out shape as trackPurchase, keyed on conversionLabels.beginCheckout instead of conversionLabels.purchase. The GA4 event name is begin_checkout.

'use client';
import { tracker } from '@/lib/tracker.client';
export function CheckoutButton({ cart }: { cart: Cart }) {
return (
<button
onClick={async () => {
await tracker.trackBeginCheckout({
transactionId: cart.id, // pass through to checkout completion
value: cart.total,
currency: cart.currency,
items: cart.items,
});
router.push('/checkout');
}}
>
Checkout
</button>
);
}

If you generate a server-side cart.id early and reuse it as transactionId here and at trackPurchase time, your begin_checkout/purchase funnel in GA4 stitches correctly.