AFI AFI

Cart Abandonment Recovery for WooCommerce

Estimated reading: 3 minutes Updated August 1, 2026

Cart Abandonment Recovery for WooCommerce, from the CartFlows team, captures checkout details as shoppers type and flags a cart as abandoned once they leave without paying. Advanced Form Integration captures abandoned carts and routes the data to any of 200+ destinations.

What you’ll need

  • WooCommerce and the Cart Abandonment Recovery plugin installed and activated.
  • A cart cutoff time configured in WooCommerce → Cart Abandonment → Settings.
  • The Advanced Form Integration plugin installed and activated.

When the trigger fires

AFI registers a single Cart Abandoned trigger for Cart Abandonment Recovery. It fires when a captured cart passes your configured cutoff time and flips from normal to abandoned.

Data captured

Field Field key Format
Email email Email address
First Name first_name Text
Last Name last_name Text
Phone phone Text, exactly as the shopper typed it
Cart Total cart_total Numeric, unformatted, in the store currency
Cart Items cart_items Product name x Qty, comma separated
Recovery Coupon Code coupon_code Text, empty unless recovery coupons are enabled
Checkout Page ID checkout_id Numeric ID
Billing Company billing_company Text
Billing Address 1 billing_address_1 Text
Billing Address 2 billing_address_2 Text
Billing State billing_state Text
Billing Postcode billing_postcode Text
Shipping First Name shipping_first_name Text
Shipping Last Name shipping_last_name Text
Shipping Company shipping_company Text
Shipping Country shipping_country Text
Shipping Address 1 shipping_address_1 Text
Shipping Address 2 shipping_address_2 Text
Shipping City shipping_city Text
Shipping State shipping_state Text
Shipping Postcode shipping_postcode Text
Order Comments order_comments Text
Country country Text
Location location Country, City

Create the integration

  1. Go to WP Admin → AFI → Add New.
  2. Enter an Integration Title, e.g. Cart Abandonment Recovery: Cart Abandoned → Mailchimp.
  3. In Trigger → Form/Data Provider, select Cart Abandonment Recovery for WooCommerce.
  4. In Form/Task Name, choose Cart Abandoned.
  5. In Action → Platform, pick the destination and complete the field mapping.
  6. Optional: configure Conditional Logic so only matching events are sent.
  7. Click Save Integration.

Screenshot: AFI Add New screen with Cart Abandonment Recovery selected as the Form/Data Provider

How AFI listens for abandoned carts

AFI hooks wcf_ca_process_abandoned_order, fired from update_order_status() in modules/cart-abandonment/classes/class-cartflows-ca-tracking.php. That call runs on the plugin’s own cron sweep and only for carts whose order_status just changed from normal to abandoned, so each cart dispatches exactly once. AFI deliberately avoids the earlier wcf_ca_after_save_abandonment_data hook, which fires on every AJAX autosave while the shopper is still typing and would flood your destination with partial rows.

Timing

Nothing dispatches at the moment the shopper leaves. The cart has to sit untouched past the cutoff you set in WooCommerce → Cart Abandonment → Settings (15 minutes by default) and then be picked up by the next WordPress cron run. On a low-traffic site where cron only fires on page views, expect a delay.

Cart contents formatting

The plugin stores the cart as a serialized WooCommerce snapshot. AFI flattens it into a readable Name x Qty comma-separated string in Cart Items, so it drops straight into an email body or a spreadsheet cell without further processing.

Troubleshooting

No carts are ever marked abandoned

Confirm WP-Cron is running. On sites with DISABLE_WP_CRON set, wire a real server cron to wp-cron.php, otherwise the status sweep never executes and the hook never fires.

Name and address fields arrive empty

Those live in the plugin’s serialized other_fields column and are only captured once the shopper has actually typed into the checkout fields. A cart abandoned after entering only an email will carry the email alone.

The recovery coupon is empty

That field is only populated when coupon-based recovery is enabled in the plugin’s follow-up email settings. Without it there is no coupon to send.

Related docs