1. Use WooCommerce Built-in Export (limited)
-
Go to WooCommerce → Products → Export.
-
Default fields don’t include cross-sells/upsells.
-
You’ll only get product basics (ID, SKU, price, stock, etc.).
Not enough if you need the relationships.

2. Export via SQL Query
WooCommerce stores these in post meta fields:
-
_crosssell_ids
-
_upsell_ids
-
_related_ids
You can run a query like this in phpMyAdmin (or WP-CLI):
SELECT
p.ID AS product_id,
p.post_title AS product_name,
pm.meta_key,
pm.meta_value
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = ‘product’
AND pm.meta_key IN (‘_crosssell_ids’, ‘_upsell_ids’, ‘_related_ids’);
This will give you product IDs and their related/cross-sell/upsell IDs. You can export that result as CSV.
Export via Plugin (No coding)
Some plugins handle this directly:
-
Product CSV Import Suite (official WooCommerce extension) → includes related products in export/import.
-
Free/3rd party plugins like:
-
WP All Export (with WooCommerce Add-On)
-
Advanced Order Export for WooCommerce (supports custom meta fields)
-
With WP All Export, you can:
-
Go to All Export → New Export → Products
-
Add fields:
ID, Title, _crosssell_ids, _upsell_ids, _related_ids
-
Export to CSV.
4. Export via Custom PHP Snippet
You can also add a custom script in your theme/plugin:
function export_woo_related_products() {
$args = array(‘post_type’ => ‘product’, ‘posts_per_page’ => -1);
$products = get_posts($args);
$output = fopen(‘php://output’, ‘w’);
fputcsv($output, array(‘Product ID’, ‘Product Name’, ‘Upsells’, ‘Cross-sells’));
foreach ($products as $product) {
$product_obj = wc_get_product($product->ID);
$upsells = implode(‘|’, $product_obj->get_upsell_ids());
$crosssells = implode(‘|’, $product_obj->get_cross_sell_ids());
fputcsv($output, array(
$product->ID,
$product->post_title,
$upsells,
$crosssells
));
}
fclose($output);
exit;
}