Mobile checkout on a US ecommerce site typically takes 92 seconds for a first-time buyer. Roughly half of that time is spent typing addresses one character at a time on a virtual keyboard. The other half is spent correcting typos in those addresses.

The technology to eliminate 60% of that time exists in every modern browser and on every phone. It’s called auto-fill, and 70% of ecommerce sites we audit have it disabled by accident — usually through misconfigured form attributes, conflicting JavaScript, or design choices that look clean but break the browser’s ability to recognize standard fields.

This guide is the complete technical reference for getting auto-fill and address autocomplete working on mobile checkouts. Includes the autocomplete attribute family, Google Places API integration, INP optimization, and the 8 most common bugs we find in Dallas client audits.

TL;DR · Quick Summary

Browser auto-fill (saved cards, addresses, contact info) is the biggest mobile checkout speed-up available, cutting completion time by 40–60% when properly configured. The autocomplete HTML attribute is the single most important variable — missing or wrong values disable native auto-fill entirely. For address fields specifically, the Google Places API adds predictive autocomplete that further reduces typing. This guide covers the autocomplete attribute reference, Places API setup, accessibility patterns, INP performance budgets, and the 8 implementation bugs that quietly disable autofill on most checkout forms.

Visual summary of Autofill Address Autocomplete Mobile Checkout Mobile Checkout Speed WITH AUTOFILL • 18 seconds to complete • 5 fields auto-filled • +41% completion NO AUTOFILL • 52 seconds typing • All fields manual • Baseline (lower)

Why Auto-Fill Drives Real Revenue (Not Just UX Wins)

Auto-fill optimization sounds like a small thing — until you do the math. For a Dallas ecommerce client doing $2M/year in revenue with 60% mobile traffic and a 1.8% mobile conversion rate, here’s what we typically see:

  • Pre-fix mobile checkout time: 87 seconds average
  • Post-fix mobile checkout time: 41 seconds average (-53%)
  • Mobile cart abandonment (from checkout start to completion): 71% → 58% (-13 percentage points)
  • Mobile conversion rate: 1.8% → 2.4% (+33% relative)
  • Annual revenue impact: approximately +$240K on baseline of $1.2M from mobile

For Shopify, WooCommerce, or custom checkouts, this is one of the highest ROI changes possible because it’s a one-time technical fix with permanent compounding returns. We’ve documented similar lifts in how broken mobile checkouts quietly lose Dallas businesses 30% of orders.

The autocomplete Attribute Reference

The HTML autocomplete attribute is what tells the browser “this field expects a saved-name (or saved-email, address, phone, credit card).” Get the attribute right and auto-fill works. Get it wrong (or leave it off) and auto-fill silently fails.

Field purposeautocomplete value
First namegiven-name
Last namefamily-name
Full namename
Work emailemail
Phonetel
Street address (single line)street-address
Street address line 1address-line1
Street address line 2address-line2
Cityaddress-level2
Stateaddress-level1
ZIP / postal codepostal-code
Countrycountry
Credit card numbercc-number
CC expiration month/yearcc-exp-month, cc-exp-year
CC CVV/CVCcc-csc
CC cardholder namecc-name

For shipping AND billing on the same form, prefix accordingly: shipping street-address and billing street-address. Browsers respect this and offer different saved values for each section.

Correct shipping form structure
<input type="text" name="ship-name" autocomplete="shipping name" />
<input type="email" name="email" autocomplete="email" />
<input type="tel" name="phone" autocomplete="tel" />
<input type="text" name="ship-addr1" autocomplete="shipping address-line1" />
<input type="text" name="ship-addr2" autocomplete="shipping address-line2" />
<input type="text" name="ship-city" autocomplete="shipping address-level2" />
<input type="text" name="ship-state" autocomplete="shipping address-level1" />
<input type="text" name="ship-zip" autocomplete="shipping postal-code" />
Never Use autocomplete="off" on Checkout Forms

We still see autocomplete="off" on shipping forms in 2026, usually copied from a tutorial about preventing browsers from saving sensitive data. For checkout forms, this is catastrophic: it completely disables auto-fill, costing 40–60% of mobile checkout speed and likely double-digit percentage of conversions. The only fields where autocomplete="off" is appropriate are CAPTCHA fields, one-time codes, and search bars — never name, address, phone, or payment.

Adding Google Places API for Address Autocomplete

Browser auto-fill works on saved data. Google Places API adds predictive autocomplete: as the user types “1234 Park”, suggestions appear like “1234 Park Blvd, Plano, TX 75093”. Selecting a suggestion auto-fills street, city, state, and ZIP at once.

This is the single most impactful upgrade for users typing new addresses (e.g., shipping to a different address than billing, or first-time customers). Implementation requires the new Place Autocomplete element released by Google in 2024:

Place Autocomplete element (2026)
<!-- Load library -->
<script async src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&libraries=places&v=beta"></script>

<!-- Web component -->
<gmp-place-autocomplete id="autocomplete"
                        included-region-codes="us,ca"
                        types="address">
</gmp-place-autocomplete>

<script>
document.getElementById('autocomplete').addEventListener('gmp-placeselect', e => {
  const place = e.detail.place;
  // Parse place.addressComponents and populate your form fields
  document.querySelector('[autocomplete="shipping address-line1"]').value = 
    place.streetAddress;
  document.querySelector('[autocomplete="shipping address-level2"]').value = 
    place.locality;
  document.querySelector('[autocomplete="shipping address-level1"]').value = 
    place.administrativeArea;
  document.querySelector('[autocomplete="shipping postal-code"]').value = 
    place.postalCode;
});
</script>

Key configuration choices:

  • included-region-codes="us,ca" — restricts to US and Canada (faster, more accurate)
  • types="address" — returns only addresses, not businesses or geo points
  • Throttle requests by debouncing user input by 200–300ms to control API costs
  • Cache recent selections to avoid re-querying for users editing their address

Cost Management for Places API

Google Places API costs $2.83 per 1,000 autocomplete-per-session requests as of 2026. For a Dallas ecommerce site doing 50,000 monthly checkouts, that’s approximately $140/month — a small price for the conversion lift. But it can balloon if misconfigured:

  • Use session tokens to bundle multiple autocomplete requests into a single billable session. Without session tokens, every keystroke is a separate paid request.
  • Restrict by region with included-region-codes. Without restrictions, the API returns global results and costs more.
  • Limit return types to address — don’t fetch businesses or geocodes you won’t use.
  • Set monthly budget alerts in Google Cloud Console at $100, $250, $500 — catch runaway costs from bots or misconfiguration.
  • Restrict API key to your specific domains. Public keys leak into bot traffic and burn budget.

INP and Performance: The Hidden Trap

Loading the Google Maps JavaScript library adds ~120KB compressed to your page. If you load it synchronously on checkout page load, you’ll fail Interaction to Next Paint (INP) thresholds on mid-tier mobile devices. The fix:

Pro Tip — Lazy-Load Places API on First Address Field Focus

Don’t load the Places API script on initial page load. Instead, attach a one-time focus listener to your address-line1 field. When the user clicks into that field, dynamically load the script. This delays the cost until the user is committed to checkout. Hits INP target of under 200ms on 95% of mobile devices in our testing — vs around 60% with eager loading.

The 8 Bugs That Quietly Disable Auto-Fill

  • 1. autocomplete="off" on form or field. The #1 cause. Remove it everywhere except CAPTCHAs and one-time codes.
  • 2. Non-standard name attribute. Some frameworks generate name="form_field_2_a8f7". Browsers can’t infer the purpose. Always pair name with proper autocomplete.
  • 3. Single combined name field instead of separate. “Full Name” with autocomplete="name" works on most browsers but breaks Safari’s saved contacts. Use separate given-name and family-name when possible.
  • 4. Hidden field labels. If your field has placeholder text but no <label>, screen readers AND auto-fill heuristics can fail to identify the field purpose. Always use real labels (visually hide with CSS if needed).
  • 5. JavaScript-rendered fields that replace native inputs. Custom React/Vue input components that render after page load often miss auto-fill triggers. Test that the browser actually offers saved values for these fields.
  • 6. Multi-step forms without per-step auto-fill triggering. Auto-fill fires on field focus. If step 2 fields are display: none initially, auto-fill won’t trigger for them. See our multi-step form B2B guide for the right pattern.
  • 7. CSS that hides the browser’s auto-fill UI. Browsers add styling (yellow background on Chrome/Edge) to auto-filled fields. Some designers override this with :autofill CSS — that’s fine, but make sure the override doesn’t accidentally suppress the dropdown that lets users select saved data.
  • 8. Conflicting type attribute. type="text" on an email field prevents email-specific auto-fill and the email keyboard on mobile. Use type="email" for email, type="tel" for phone, type="number" inputmode="numeric" for postal codes.

Real Case: DFW Apparel Brand Lifts Mobile Conversion 38%

In November 2025 a Dallas-based women’s apparel ecommerce brand (mid-tier, $4.2M ARR) asked us to investigate their stubborn 71% mobile cart abandonment rate. The desktop site converted at 3.1%; mobile lingered at 1.4%. Session recordings via Microsoft Clarity revealed users typing addresses character by character, often misspelling cities, occasionally giving up entirely.

Audit findings:

  • Every input field had autocomplete="off" (added years ago to prevent “browser autofill bugs” per the previous developer)
  • Field labels were aria-label attributes only, no visible <label> elements — auto-fill heuristics couldn’t identify fields
  • Shipping and billing forms had identical field names without shipping/billing autocomplete prefixes
  • No Google Places API integration; users typed every address manually
  • Mobile keyboard on phone fields was alphabetic (no type="tel")

Our changes:

  • Removed all autocomplete="off"
  • Added correct autocomplete values per field (per the table above)
  • Added visible <label> elements; existing aria-label retained for redundancy
  • Prefixed shipping/billing fields with shipping and billing autocomplete values
  • Integrated Google Places API with lazy-load on address-line1 focus
  • Set type="tel", type="email", type="number" inputmode="numeric" per field type
Result, 9 weeks later “Average mobile checkout time dropped from 94 to 38 seconds. Mobile cart abandonment fell from 71% to 56%. Mobile conversion rate rose from 1.4% to 1.93% — a 38% relative lift. Estimated added revenue: $312K annualized.”

Accessibility Considerations

Properly configured auto-fill is also more accessible. Screen reader users benefit when forms have correct semantics. Make sure:

  • Every input has a real <label> with a for attribute matching the input’s id
  • Labels are visible, not just placeholder text (placeholders disappear when typing, leaving screen reader users without context)
  • Required fields use aria-required="true" in addition to required
  • Error states use aria-invalid="true" with aria-describedby pointing to the error message
  • Country dropdown is keyboard-navigable — some custom dropdowns trap focus or don’t respond to type-to-search

The accessibility patterns from our inline validation vs post-submission errors guide apply equally to autofill forms.

Testing Checklist

Before declaring an auto-fill implementation done, verify on real devices:

  • iPhone Safari: Auto-fill dropdown appears above keyboard on field focus. Selecting a saved contact fills all related fields.
  • Android Chrome: Same expectation. Test on a budget device (Samsung A-series, Pixel 6a) not flagship.
  • iPad Safari: Auto-fill works in both portrait and landscape orientations.
  • Desktop Chrome with saved profile: “Use saved address” option appears in address-line1 dropdown.
  • Desktop Safari with iCloud Keychain: Credit card auto-fill works on cc-number field.
  • Desktop Firefox: Address auto-fill triggers from saved forms data.
  • Edge with Microsoft account: Synced contacts and payment info appear.

If any of these fail, you have an autofill bug somewhere — usually one of the 8 bugs above. Don’t skip cross-browser testing; the autofill ecosystem is fragmented enough that fixing for one browser sometimes silently breaks another.

Frequently Asked Questions

Does auto-fill work on credit card fields, and is it safe?

Yes — all modern browsers offer saved credit card auto-fill, and yes it’s safe (the card data never leaves the browser’s secure storage). To enable it, use autocomplete="cc-number", cc-exp-month", cc-exp-year", and cc-csc on the respective fields. The browser will offer to save the card after first successful checkout. PCI compliance is unaffected — the browser handles the storage, not your server.

What about international addresses &mdash; will Places API work for them?

Yes. Remove the included-region-codes restriction (or set it to the countries you serve) and Places API will return global addresses. Be aware costs increase slightly with broader region scopes, and accuracy varies by country (US, UK, Canada, Australia, and most of Europe are excellent; some emerging markets are spottier). For international ecommerce, also use autocomplete="country" on a country dropdown so users can manually select if Places returns wrong country.

How do I handle users who choose &ldquo;same as shipping&rdquo; for billing?

Best pattern: a checkbox above the billing fields labeled “Same as shipping address” checked by default. When checked, hide the billing fields entirely and copy shipping values server-side on submit. When unchecked, reveal billing fields with their own autocomplete prefix (billing). Don’t pre-fill billing fields with shipping values on uncheck — let the browser’s autocomplete suggest saved billing addresses, which are often different.

Will adding Places API hurt my Core Web Vitals?

Only if loaded eagerly on page mount. With lazy-loading on first address field focus (as recommended above), Places API has zero impact on LCP, FID, or INP at page load. The brief loading delay (200–500ms) is contained within the user’s active typing session and feels instant in practice. Our Core Web Vitals audit framework in our 2026 Core Web Vitals guide covers the broader performance budget.

What if a user&rsquo;s browser doesn&rsquo;t support auto-fill?

Auto-fill has been supported in all major browsers since 2013. The only realistic scenarios for non-support: very old Android phones (Android 6 and earlier) and some embedded webviews. Use autocomplete attributes anyway — they don’t hurt unsupported browsers, and they signal proper form semantics for accessibility regardless of auto-fill capability. Don’t add JavaScript polyfills for auto-fill — they’re unnecessary and add bundle weight.

Want a free audit of your mobile checkout speed?

We’ll measure your current mobile checkout time, identify auto-fill misconfigurations, and provide a prioritized fix list with projected revenue impact. Free for ecommerce sites with $500K+ in annual revenue.

Get a Mobile Checkout Audit Explore Ecommerce SEO Services