Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →A null customer_email does not necessarily mean your Stripe webhook failed. If the event contains a Checkout Session, customer_email is a nullable field that Stripe documents as an email prefill value. Check the event’s actual object and lifecycle state, then read the email from the appropriate Session or Customer field.
First, confirm what your webhook actually contains
A Stripe Event has a type and a data.object. The object depends on the event type, so a handler should not assume every webhook contains a Checkout Session—or that every object has a customer_email field. Log the event’s id, type, api_version, and data.object.object to identify what arrived. Avoid logging payment secrets or unnecessary personal data.
As an Amazon Associate I earn from qualifying purchases.
For Checkout, inspect the Session’s status, customer_email, customer_details, and customer fields. Stripe’s Checkout Session object reference shows an open Session with both customer_email and customer_details set to null. That establishes that null values are valid in at least that state; it does not mean every completed Session has the same field values.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Why `customer_email` can be null
It is a prefill field, not a universal post-payment email field
When creating a Checkout Session, customer_email can provide an email your application already knows so Stripe can prefill Checkout. If the customer enters an email during the hosted flow, do not assume the creation-time prefill field is the only place to find it afterward. Check the resulting Session details and, when relevant, the Customer resource.
#1 Best Overall
- Get your money as soon as the next business day.
- Get set up quickly with no long-term commitments. Download the Square Point of Sale app for free, create an account, and start taking payments anywhere.
- Run your business all in one place with the free Square Point of Sale app. Track your sales, manage inventory, accept tips, send receipts digitally, and more.
- Works with Apple devices with a Lightning connector.
The Session may still be open or incomplete
A Session’s fields can be null while it is open. Check its status before treating a missing email as a failed collection or webhook-processing error. The Session object reference documents the open-state example and the separate customer_email and customer_details fields.
The event may contain another object
Use event.type and event.data.object.object to verify the payload before accessing Session fields. Stripe’s Events reference describes the event object and its data. If the event is not for a Checkout Session, consult the API reference for the object that event actually contains; the right email field cannot be determined without knowing that event.
Rank #2
- Pay one transparent rate per swipe for Visa, Mastercard, Discover and American Express.
- Works in conjunction with most downloadable Square point-of-sale apps on your device. Customers can pay, tip and sign directly on your device. Track payments in cash, gift cards and more. Also lets you send receipts via e-mail or text message, makes it easy to apply discounts, keeps a data and sales history log and more.
- Accepts magstripe credit card payments, including those from Visa, Mastercard, Discover and American Express (fees apply).
- App sends deposits to your bank account within 1 to 2 business days, or enjoy instant deposits (fees apply).
The event uses an API-versioned snapshot
Stripe renders event data using the API version in effect when the event was created. Most API v1 events contain a versioned snapshot of an API object. Check event.api_version if the webhook’s field shape differs from a current API response or your application’s generated types. Updating the API version does not rewrite an event that already exists. See Stripe’s Retrieve an event reference.
Choose the fix for your Checkout flow
If your application already knows the email
Pass that address as customer_email when creating the Checkout Session to prefill the hosted page. Treat it as an input to Checkout, not as proof that the same field will be populated in every later Session state.
Rank #3
- USB interface, keyboard emulation, no need to install software to read, configuration software for changing settings available.
- Read data from all 3 tracks, high and low coercivity cards, ISO7811, AAMVA, CA DMV and most magnetic card data formats.
- Work on Windows, Mac and other USB capable systems. Work with TXT, notepad, Word, Excel, POS systems and son on.
- Compact size, with 145cm USB cord, two 3mm-diameter screw holes for fixing at the bottom, a LED indicator light
- Perfect for POS, Banking, Loyalty, Access Control, ID verification and other applications.
If you need a Stripe Customer
Check the Session’s mode and customer-creation behavior. In subscription mode, or in payment mode with customer_creation=always, Checkout creates a Customer unless you supplied an existing one. Stripe says that when the Customer has no valid email, it can set the email entered during Checkout on that Customer. Review Stripe’s guidance for payments for existing customers and the Checkout Sessions API.
When appropriate, use the Session’s customer reference to identify the Customer and inspect that Customer’s email. Do not assume a Customer was created in every Checkout configuration.
Rank #4
- Accept all major credit and debit cards for one low rate.
- Accepts Visa, Mastercard, Discover, and American Express—no hidden fees.
- Track your earnings and view your complete sales history from the free Square Point of Sale app.
- Works with Apple and Android devices that have a 3.5 mm headphone jack. No charging needed
If you are handling Checkout completion
For fulfillment, handle the relevant server-side completion and asynchronous payment outcome events for your payment methods instead of relying only on the browser redirect. Stripe identifies checkout.session.completed and asynchronous payment outcome events as useful server-side events. A completion event and an open Session represent different lifecycle states, so check the event and Session status before deciding whether to fulfill.
Quick Recap
Best Value
- MSR90 is a USB emulation keyboard interface that not need any driver or software,USB simply plug and play
- Reads up to 3 tracks of information,can reads ISO7811, AAMVA, CA DMV and most other card data formats
- Threaded inserts for mounting. LED indicator, green light is on when connecting,green light blinks when cards swiped
- Bi-directional swipe reading, superior reading of high jitter, scratched, and worn magstripe cards, reliable for over 1,000,000 card swipes
- Configuration software makes configuration changes easy,works with: Windows OS and Mac OS
A practical debugging sequence
- Identify the payload: record the Event ID, type, API version, and object type.
- Branch on the object: for a Checkout Session, inspect
customer_email,customer_details,customer, andstatus. - Check how the Session was created: determine whether your application passed a prefill email, whether an existing Customer was supplied, and which mode and
customer_creationsetting apply. - Read the appropriate resource: use Session details for the Session’s collected information; when a Customer exists and is relevant, inspect that Customer too.
- Check version compatibility: compare
event.api_versionwith the version expected by your handler and generated types, and test with a representative event for the version your endpoint receives. - Use the right event for fulfillment: handle server-side completion and applicable asynchronous payment outcome events for your payment methods.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




