Sync New Odoo Products to Etsy Draft Listings

14 min setup
No coding required
Runs automatically

Keep your Etsy store seamlessly aligned with your Odoo product catalog. This template automatically updates your Etsy draft listings whenever a product is created or modified in Odoo. MESA will either create a draft listing or update an existing draft listing on Etsy with the latest product details, ensuring your Etsy shop always reflects the most current information without the need for manual updates. Note: This template currently works only for Etsy listings without variants. This template saves time and keeps your listings accurate across platforms.

odoo logo icon
Product Updated
Path - No Existing Etsy Draft Listing
Create Draft Listing
Path - Has Existing Etsy Draft Listing
Filter: Check title and description
etsy logo icon
Update Draft Listing

How it works

9 steps to start creating and updating Etsy listings from Odoo products automatically

odoo logo icon

Product Updated

App connector: Odoo • Time to complete: 0 minutes (Auto-configured)
Why this matters: This trigger monitors your Odoo products and kicks off the workflow whenever products get updated, catching inventory changes, price updates, and description edits so they flow to Etsy without manual replication.

This trigger checks your Odoo account hourly for any products that have been updated since the last check. When it detects changes to product records, it captures the product information including name, description, and list price, then passes this data to the next step. The hourly schedule balances keeping data current with system performance.

Get List Of Draft Listings By Shop

App connector: Etsy • Time to complete: 2 minutes
Why this matters: Before creating or updating anything, you need to see which draft listings already exist in your Etsy shop so you can match them to Odoo products and prevent duplicates.

This step queries Etsy for all draft listings in your specified shop, retrieving up to 100 draft listings at a time with their titles and listing IDs. You need to configure your Etsy shop ID, which you can find in your Etsy shop URL or account settings. The draft listing data gets passed to the next step where it's matched against the Odoo product title.

Match Odoo Product Title To Etsy Draft Listing

App connector: Transform • Time to complete: 0 minutes (Auto-configured)
Why this matters: You need to know if the Odoo product already exists as an Etsy draft listing before deciding whether to create or update—this matching code compares product titles to find existing listings.

This transform step uses custom JavaScript to compare the Odoo product name against all Etsy draft listing titles. If it finds an exact title match, it captures the Etsy listing ID for use in updating. If no match is found, the listing ID remains empty which triggers creation of a new listing. The matching happens automatically by iterating through all draft listings.

const Mesa = require('vendor/Mesa.js');
const Transform = require('vendor/Transform.js');

/**
 * A Mesa Script exports a class with a script() method.
 */
module.exports = new class {

  /**
   * Mesa Script
   *
   * @param {object} payload The payload data
   * @param {object} context Additional context about this task
   */
  script = (payload, context) => {

    // Adjust `payload` here to alter data before we transform it.

    // Get Odoo product
    const odooProduct = context.steps['odoo'];
    // Get Etsy listings
    const etsyDraftListings = context.steps['etsy'];
    // Storing the matching Etsy listing ID
    let etsyListingId;

    // Check if we have a matching titles between Odoo product and Etsy listing
    // If match, assign to Etsy listing ID to etsyListingId
    // Otherwise, leave as empty
    etsyDraftListings.results.forEach(listing => {
      if (listing.title === odooProduct.name) {
        etsyListingId = listing.listing_id;
        Mesa.log.info("Has matching Etsy listing ID");
        Mesa.log.info("Etsy listing id", etsyListingId);
      }
    });

    // Alter the payload data based on our transform rules
    const output = Transform.convert(context, payload);

    // Adjust `output` here to alter data after we transform it.
    output.etsy_listing_id = etsyListingId;

    // We're done, call the next step!
    Mesa.output.next(output);
  }
}

Path - No Existing Etsy Draft Listing

App connector: Paths • Time to complete: 0 minutes (Auto-configured)
Why this matters: This rule checks whether the title matching found an existing draft listing—if not, you need to create a brand new Etsy listing rather than update an existing one.

This rule examines whether the etsy_listing_id from the transform step is empty. If no matching listing was found during title comparison, this path activates and sends the workflow to the Create Draft Listing step. The check happens automatically using the matching results from the transform step.

Create Draft Listing

App connector: Etsy • Time to complete: 5 minutes
Why this matters: New Odoo products need corresponding draft listings in Etsy so you can review and publish them to your shop—this step creates the listing with all required Etsy fields.

This step creates a new draft listing in Etsy using the product name as title, description, and list price from Odoo. You need to configure several required Etsy fields: quantity (total available stock), who_made (i_did, collective, someone_else), when_made (time period like 2020_2025), taxonomy_id (Etsy's product category number), and shipping_profile_id (required for physical products). The draft listing appears in your Etsy shop manager where you can add photos and publish it when ready.

Path - Has Existing Etsy Draft Listing

App connector: Paths • Time to complete: 0 minutes (Auto-configured)
Why this matters: This rule handles the opposite scenario—when a draft listing already exists in Etsy, triggering updates to that listing instead of creating a duplicate.

This rule checks whether the etsy_listing_id from the transform step has a value, meaning a matching draft listing was found during title comparison. If a match exists, this path activates and routes to retrieve and update the existing listing. The logic runs automatically based on the matching results.

Retrieve Draft Listing

App connector: Etsy • Time to complete: 0 minutes (Auto-configured)
Why this matters: You need the complete listing record before updating it—this step fetches the full Etsy listing data so updates can be applied to the correct draft listing.

This step queries Etsy for the complete draft listing record using the listing ID found in the matching step. It retrieves all listing details including the current title, description, price, and other fields. This complete listing information gets used in subsequent steps to verify required fields and update the listing accurately.

Filter: Check title and description

App connector: Filter • Time to complete: 0 minutes (Auto-configured)
Why this matters: Etsy requires both title and description for listings—this filter makes sure the Odoo product has both fields populated before attempting an update that would fail.

This filter examines the Odoo product data and only allows the workflow to continue if both the name and description_sale fields are not empty. If either required field is missing, the workflow stops here to prevent API errors from trying to update an Etsy listing with incomplete data. The comparison happens automatically using the Odoo product data from the trigger.

etsy logo icon

Update Draft Listing

App connector: Etsy • Time to complete: 1 minute
Why this matters: When an Odoo product changes, those updates need to flow to Etsy to keep your listings accurate—this step overwrites the Etsy draft listing with current information from Odoo.

This step sends updated listing information to Etsy and overwrites the existing draft listing's title and description with the current values from Odoo. You can add other fields like price, quantity, or tags if you want to sync additional attributes beyond just title and description. The listing ID from the retrieve step tells Etsy exactly which draft listing to update.

Trusted by 1,000+ Shopify merchants
Logo: Rothy's Logo: Adidas Logo: Allure Logo: GQ Logo: DraftKings Logo: Chubbies Logo: Made In Cookware Logo: MUD/WTR

Ready to start creating and updating Etsy listings from Odoo products automatically

Get setup in 14 minutes.

Try this template →

Frequently asked questions

What happens if I change a product title in Odoo after it's already synced?

The workflow matches listings by title, so if you change the product name in Odoo, it will no longer find the matching Etsy listing and will create a new draft listing instead. To avoid duplicates, maintain consistent product titles across systems or manually update both when making title changes.

Why does the workflow only work with draft listings and not active ones?

The workflow is designed to work with draft listings so you can review and add images before publishing to customers. If you want to update active listings, you could modify the Get List Of Draft Listings step to query for active listings instead by changing the state parameter from "draft" to "active".

Make this template your own!

Customize this workflow even further:

Add product images from Odoo to Etsy listings
Extend the Create Draft Listing and Update Draft Listing steps to include image URLs, automatically syncing product photos so your Etsy listings display current imagery without manual uploads.
Sync inventory quantities to Etsy
Add steps to update the Etsy listing quantity field with current stock levels from Odoo, keeping your available inventory synchronized across platforms and preventing overselling.
Filter by product category or tags
Add a Filter step after the trigger to only sync products from specific Odoo categories or with certain tags, focusing your automation on products you actually want listed on Etsy.
Publish listings automatically when ready
Add conditional logic to check if a listing meets your publishing criteria (has images, proper descriptions, inventory) and automatically change the listing state from draft to active.

You're in good company

"MESA has been a game changer for us. And, if you ever get stuck, their support team is always super helpful."

  • Ico star
  • Ico star
  • Ico star
  • Ico star
  • Ico star
PetFriendly

"It's like Zapier but exactly designed for Shopify. I have been able to complete all the workflows that I've needed."

  • Ico star
  • Ico star
  • Ico star
  • Ico star
  • Ico star
Zailys

"The MESA team has been amazing at helping us set up our automations. We would highly recommend this app!"

  • Ico star
  • Ico star
  • Ico star
  • Ico star
  • Ico star
Rothy's

Ready to start creating and updating Etsy listings from Odoo products automatically?

7-day free trial • 14 min setup • Cancel anytime

Need help? Our automation experts will help you personalize this workflow for free. Contact support