TL;DR, Quick Answer
8 min readA checkout funnel covers the narrow stretch from begin_checkout to purchase, and Google standardises the event names for every step in between: add_shipping_info, add_payment_info and purchase. Keeping the analysis inside that stretch is what makes it useful, because those steps are the ones your team controls. Baymard's review of 50 studies puts average cart abandonment at 70.22%, and the leading stated reason, at 40%, is extra costs appearing late. The setup work is almost entirely instrumentation: fire one event per real step, keep the purchase event off a page the payment provider might never return to, and split the funnel by device and by guest versus account before reading a single number.
What is a checkout funnel analysis?
Unlike a site-wide conversion funnel, a checkout funnel analysis measures only the stretch between the moment a shopper commits to buying and the moment the order is confirmed. Everything earlier, the browsing, the search, the comparison, the cart building, sits outside it. That narrowing is the entire point. A shopper who reaches the checkout has already decided to spend money, so every exit after that point is a loss your own interface caused rather than a loss of interest.
The general mechanics of building and reading a funnel, step sequencing, open versus closed funnels, conversion windows and whether to count users or sessions, apply here unchanged and are covered in detail in how funnel analysis works. This page stays on what is specific to checkout: which steps exist, which ones leak, and how to instrument them so the numbers mean something.
What are the steps of a checkout funnel?
Google standardises the event names for the whole purchase journey in its GA4 ecommerce documentation, which makes checkout one of the few funnels where you do not have to invent your own vocabulary. The events, in documented order:
| Stage | GA4 event | Inside the checkout funnel |
|---|---|---|
| Shopper sees a list of results | view_item_list | No |
| Shopper picks an item from the list | select_item | No |
| Shopper views the product detail page | view_item | No |
| Shopper adds the item to the cart | add_to_cart | No |
| Shopper opens the cart | view_cart | Boundary |
| Shopper starts checkout | begin_checkout | Yes, step 1 |
| Shopper submits shipping details | add_shipping_info | Yes, step 2 |
| Shopper submits payment details | add_payment_info | Yes, step 3 |
| Order is confirmed | purchase | Yes, step 4 |
| Order is refunded | refund | Post-funnel |
Four steps is the honest shape of most checkout funnels, and the temptation to add more should be resisted unless the extra steps are real screens a shopper can abandon on. Splitting add_shipping_info into address entry and delivery method selection is worth doing if they are separate pages. It is not worth doing if they are two fieldsets on one page, because the resulting "drop" between them is an artifact of when your tags fire rather than a shopper leaving.
The view_cart row is marked as a boundary on purpose. Whether the cart belongs inside the funnel is the single decision that changes your headline number most, and it is the reason cart abandonment rate and checkout abandonment rate are different metrics with different denominators, a distinction worked through in how cart abandonment rate is calculated.

Where does drop-off concentrate in a checkout funnel?
Between begin_checkout and add_shipping_info, in almost every store that has looked. That first screen is where the total price becomes real, where account creation is usually demanded, and where a shopper first sees how long the form is going to be.
Baymard Institute's review of 50 separate studies puts the average documented cart abandonment rate at 70.22%, a figure last updated on 22 September 2025. The more useful part of that research is the breakdown of stated reasons, measured among shoppers who had genuinely intended to buy:
| Stated reason for abandoning checkout | Share |
|---|---|
| Extra costs too high (shipping, tax, fees) | 40% |
| Delivery was too slow | 20% |
| Did not trust the site with card information | 19% |
| Required account creation | 18% |
| Checkout process too long or complicated | 17% |
| Website errors or crashes | 17% |
| Unsatisfactory returns policy | 13% |
| Could not see or calculate the total cost upfront | 12% |
| Card declined | 10% |
| Not enough payment methods | 9% |
Baymard separately records that 42% of US online shoppers abandoned simply because they were browsing and not ready to buy, and excludes that group from the percentages above. That exclusion is why the list is worth acting on: what remains is people who wanted to complete the order and stopped anyway.
Map those reasons back onto the four steps and the shape of the problem becomes concrete. Extra costs, hidden totals, forced account creation and form length all land on step 1. Delivery speed and payment method coverage land on steps 2 and 3. Declines land on step 4, where they are a payment configuration problem rather than a design problem. Before comparing your own numbers against any of this, read the caveats in what published funnel benchmarks actually measure, because step definitions vary enough between studies to move a percentage by double digits.

How do you set up a checkout funnel analysis?
Instrumentation first, report second. A funnel built on events that fire at the wrong moment produces confident, wrong answers, and no amount of analysis repairs it afterwards.
- Fire one event per screen a shopper can leave on. If your checkout is three pages, you want three events plus
purchase. If it is a single page with accordion sections, fireadd_shipping_infoandadd_payment_infoon section completion rather than on page load, or the funnel will show 100% step completion and zero insight. - Move
purchaseoff the thank-you page if a redirect can skip it. Hosted payment pages, wallet flows and bank authentication all return the shopper somewhere you do not fully control. Apurchaseevent that only fires on an order confirmation URL will undercount every order where the shopper closed the tab after paying. Send it server side from the order webhook and you get the true denominator. - Set the funnel to closed rather than open. Checkout is genuinely sequential, so a shopper who appears at
add_payment_infowithout having passedadd_shipping_infois a tagging bug worth surfacing rather than a legitimate path worth counting. - Choose a conversion window shorter than the default. Checkout is a minutes-long activity, not a days-long one. A 30-day window will credit a
purchasethat happened a week after an abandonedbegin_checkout, which hides the abandonment you were trying to measure. - Segment before you interpret. At minimum, split by device and by guest versus logged-in. Mobile checkout and desktop checkout rarely share a bottleneck, and forced account creation shows up as a step 1 collapse only in the guest segment.
- Record the step definitions alongside the report. A funnel whose step 2 changed definition in March will show a March cliff that no code change caused, and six months later nobody will remember why.
Step 2 is the one that quietly wrecks the most analyses. A store with a redirect-based payment provider can under-report completed orders by a wide margin and then spend a quarter optimising a step that was never broken.
What does a checkout funnel analysis not tell you?
It does not tell you why. A funnel gives you an exact location and no cause, which is the limit of every step-count report and the reason a drop-off number is a question rather than an answer. The 40% figure for unexpected costs is a survey result from Baymard's panel, not a diagnosis of your store, and treating it as one leads teams to remove a shipping fee that was never the problem.
Two things convert a located drop into a cause. The first is a segment split fine enough to isolate it: if the step 1 collapse only appears on mobile Safari, the cause is probably a rendering or autofill problem rather than a pricing one. The second is watching what people actually did on that screen, which is where session replay earns its place over aggregate reporting.
Flowsery
Start Your 14-Day Free Trial
Real-time dashboard
Goal tracking
Cookie-free tracking
It also does not tell you how much the leak is worth. A 12% drop at add_payment_info on a store with a high basket is worth more than a 30% drop at begin_checkout on a store with a low one, and the two are only comparable once you multiply through by what a typical order is worth. Ranking fixes by percentage rather than by recovered revenue is the most common way a correct analysis produces the wrong roadmap.
Frequently asked questions
Is checkout abandonment the same as cart abandonment?
No, and the difference is the denominator. Cart abandonment measures shoppers who added an item and did not buy, so its base is everyone who reached add_to_cart. Checkout abandonment measures shoppers who started checkout and did not buy, so its base is everyone who reached begin_checkout. The second base is much smaller and much more committed, which is why checkout abandonment rates are always lower than cart abandonment rates for the same store.
Which GA4 events should a checkout funnel use?
Google documents begin_checkout, add_shipping_info, add_payment_info and purchase as the checkout portion of the ecommerce journey, with view_cart immediately before it and refund after. Using those names rather than custom ones means any reporting tool that understands GA4 ecommerce can read your funnel without a mapping layer.
How many steps should a checkout funnel have?
As many as there are screens a shopper can abandon on, which is usually three or four. Adding steps that correspond to fieldsets rather than screens creates drops that reflect tag timing rather than behaviour. If you cannot describe what a shopper would have done to exit between two steps, those two steps should be one.
Why does my funnel show more purchases than checkouts started?
Usually because purchase fires from a source that begin_checkout cannot see, such as a server-side order webhook, a repeat order placed through a saved-cart link, or a subscription renewal. Check whether the purchase events carry a matching session or user identifier, and exclude renewal and admin-created orders from the funnel if they never pass through the checkout interface at all.
Should the checkout funnel count users or sessions?
Sessions, for the version you look at weekly. Checkout is a single-sitting activity, so a session-scoped funnel answers the question you are actually asking: of the people who started checking out just now, how many finished. A user-scoped funnel will credit a purchase made two days later against the original abandonment and make the leak look smaller than it is.
What is the first thing to check when a checkout step drops suddenly?
A deploy, before anything else. Sudden single-step cliffs are far more often a broken tag, a changed selector or a JavaScript error on one screen than a change in shopper behaviour. Compare the raw event count for that step against the step before it, check whether the drop is confined to one browser or device class, and only start reasoning about pricing, forms or trust once you have ruled out the possibility that the event simply stopped firing.
Should the cart page count as part of the checkout funnel?
Not officially. view_cart sits at a boundary just before begin_checkout, the first of the four steps inside the funnel. Whether you pull it inside the funnel or leave it out is the single decision that moves your headline abandonment number the most, because it changes the denominator. That's the same reason cart abandonment rate and checkout abandonment rate come out as different figures for the same store.
What is Baymard's average cart abandonment figure?
Baymard Institute's review of 50 separate studies puts the average documented cart abandonment rate at 70.22%, last updated on 22 September 2025. The stated-reasons list excludes the 42% of US shoppers who abandoned simply because they were just browsing. What's left in the stated-reasons breakdown is people who wanted to complete the order and stopped anyway.
How short should the conversion window be for a checkout funnel?
Shorter than a default 30-day window, because checkout is a minutes-long activity rather than a days-long one. A 30-day window will credit a purchase that happened a week after an abandoned begin_checkout, which hides the abandonment you're trying to measure. Set the window to match how long your checkout actually takes to complete.
What is the most common reason shoppers abandon checkout?
Extra costs appearing late, such as shipping, tax or fees, cited by 40% of shoppers in Baymard's research, the highest share of any stated reason. That lands on step 1, begin_checkout, where the total price becomes real for the first time. Delivery speed (20%) and distrust of the site with card information (19%) come next.
Was This Article Helpful?
Let us know what you think!
See us more often in Google
One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.
Before you go...
Flowsery
Revenue-first analytics for your website
Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.
Real-time dashboard
Goal tracking
Cookie-free tracking
Related Glossary Terms


How to Measure Form Abandonment Rate, Field by Field
A form abandonment rate compares forms started with forms submitted. See the formula, how GA4 and Zuko define a start, and a worked field-level example.


Why Your GA4 Bounce Rate Is Just Engagement Rate Flipped
Your GA4 bounce rate is the share of sessions that were not engaged. How Google defines it, how it differs from Universal Analytics, and where to add it.


What the GA4 Landing Page Report Counts and Where It Goes Blank
Google's GA4 landing page report lists the first page of every session. Where to find it, its default metrics, why (not set) rows appear and how to add source.


How GA4 Site Search Tracking Records What Visitors Type
Set up GA4 site search with enhanced measurement, add your own query parameters, find the Search term dimension and track searches without a URL.


Setting GA4 User Properties and Reporting on Them
Set GA4 user properties with gtag or Tag Manager, register them as user-scoped custom dimensions and stay inside the 25-property limit.


How to Link Search Console to GA4 and Publish Its Reports
Learn how to link Search Console to GA4 in Admin, which roles you need, how to publish the two reports in Library and what the data can't join.
Related Articles


How to Build GA4 Calculated Metrics Inside a Five-Slot Quota
Google caps GA4 calculated metrics at 5 per standard property. Learn the formula syntax, the units, where they appear and what a formula can't use.


Setting Up GA4 Content Grouping With One Parameter
Set up GA4 content grouping with the content_group parameter in gtag or Tag Manager, read the Content group dimension and keep (not set) rows out.


How to Add Google Analytics Annotations in GA4 and Keep a Change Log
In GA4, Google Analytics annotations pin a dated note to line graphs. Who can add them, the 60 and 150 character limits, the 1,000 cap, and change log use.

