How it works

Follow these 8 simple steps to start converting Shopify draft orders to HubSpot deals automatically

Shopify logo icon

Draft Order Created

This trigger captures draft orders the moment they're created in Shopify, enabling immediate CRM tracking of quotes and custom orders that represents potential revenue before it converts to actual sales.
When a draft order is created in Shopify (manually by staff or via apps), this trigger activates the workflow and captures draft order details including {{shopify.id}}, {{shopify.name}}, {{shopify.email}}, {{shopify.total_price}}, {{shopify.customer.first_name}}, and {{shopify.customer.last_name}}. The workflow runs for every new draft order created in your store.
Time to complete: Auto-configured (0 minutes)

Create Deal

Establishes the draft order as a tracked opportunity in HubSpot's CRM, giving sales teams visibility into potential revenue and enabling pipeline management for custom orders and quotes.
This step creates a HubSpot deal with properties mapped from the draft order. The deal name is formatted as "{{shopify.customer.first_name}} {{shopify.customer.last_name}} {{shopify.name}} Deal {{shopify.email}} {{shopify.id}}" which creates a unique, descriptive name like "John Smith #D1001 Deal [email protected] 12345". The amount is set to {{shopify.total_price}} (the draft order total). You must configure two fields during setup: (1) Pipeline—select which HubSpot sales pipeline this deal should appear in (find your pipeline names in HubSpot Settings > Objects > Deals > Pipelines), and (2) Deal Stage—select which stage within that pipeline the deal should start in (like "Quote Sent" or "Negotiation"). The created deal ID is stored as {{hubspot.id}} for use in later association steps.
Time to complete: 3 minutes

Search for Contact

Looks for an existing HubSpot contact before creating a new one, preventing duplicate contact records and maintaining clean CRM data when customers have placed previous orders or been entered manually.
This step searches HubSpot's contacts using the email address from {{shopify.email}}, limiting results to 1 contact. The search uses HubSpot's filter syntax with propertyName "email", operator "EQ" (equals), and the draft order's email as the value. Results are returned as {{hubspot_1.results[]}}. If a contact with this email exists, {{hubspot_1.results[0].id}} will contain their contact ID. If no match is found, the results array will be empty.
Time to complete: Auto-configured (0 minutes)

Path 1 Rule (Existing Contact)

When a contact already exists in HubSpot, this path associates the new deal directly with that existing contact, maintaining relationship history and preventing duplicate contact creation.
This conditional path executes when {{hubspot_1.results[]}} is not empty, meaning a matching contact was found in the search. The workflow evaluates this condition and proceeds to associate the deal with the existing contact using their contact ID. If this condition is true, the workflow skips contact creation and uses the found contact.
Time to complete: Auto-configured (0 minutes)

Create Contact Association (Path 1)

Links the new deal to the existing contact in HubSpot, creating the relationship that enables proper pipeline tracking, contact activity history, and sales reporting for customers you've worked with before.
This step creates an association between the existing contact ({{hubspot_1.results[0].id}}) and the new deal ({{hubspot.id}}) using HubSpot's association API. The toObjectType is "deals", toObjectId is the deal ID, and associationType is "4" which represents the standard contact-to-deal relationship in HubSpot. After this step, the deal appears in the contact's record and the contact appears as associated with the deal.
Time to complete: Auto-configured (0 minutes)

Path 2 Rule (New Contact)

When no matching contact exists in HubSpot, this path creates a new contact record from the draft order customer information, ensuring every deal has an associated contact for proper CRM tracking.
This conditional path executes when {{hubspot_1.results[]}} is empty, meaning no matching contact was found in the search. The workflow evaluates this condition and proceeds to create a new contact with the draft order's customer information. If this condition is true, the workflow creates rather than associates.
Time to complete: Auto-configured (0 minutes)

Create Contact (Path 2)

Establishes a new contact record in HubSpot for first-time customers, populating their email, first name, and last name from the draft order to create a complete contact profile.
This step creates a new HubSpot contact using {{shopify.email}} as the email, {{shopify.customer.first_name}} as firstname, and {{shopify.customer.last_name}} as lastname. The newly created contact ID is stored as {{hubspot_3.id}} for use in the association step. HubSpot uses email as the unique identifier for contacts, so future searches will find this contact.
Time to complete: Auto-configured (0 minutes)
hubspot logo icon

Create Contact Association (Path 2)

Links the new deal to the newly created contact in HubSpot, completing the CRM setup for first-time customers and ensuring the deal is properly associated for tracking and reporting.
This step creates an association between the newly created contact ({{hubspot_3.id}}) and the deal ({{hubspot.id}}) using the same association structure as Path 1. After this step, the new contact and deal are properly linked in HubSpot's CRM.
Time to complete: Auto-configured (0 minutes)

Make it your own

Customize this workflow even further:

Add line item details to deal description
Add a transform step before deal creation that formats {{shopify.line_items}} into a readable list and includes it in the deal's description field, giving sales teams visibility into what products are in the quote.
Set deal properties from draft order tags
Add conditional logic that checks {{shopify.tags}} and sets custom HubSpot deal properties like "Deal Type," "Priority," or "Source" based on tags applied to the draft order in Shopify.
Notify sales team of high-value deals
Add a filter after deal creation that checks if {{shopify.total_price}} exceeds a threshold and sends Slack or email notifications to sales leadership when large opportunities are created.
Update deals when draft orders are completed
Create a companion workflow triggered by "Draft Order Completed" that updates the HubSpot deal stage to "Closed Won" and adds the order details, creating a complete sales cycle from quote to purchase.

Frequently asked questions

What happens if the same draft order creates multiple deals?
Each time a draft order is created, this workflow runs once and creates one deal. However, if a draft order is deleted and recreated, it would create a new deal. Consider adding logic to check for existing deals with the same draft order ID to prevent duplicates if this is a concern for your workflow.
Can I customize the deal name format?
Yes, edit the "Create Deal" step and modify the dealname field. The default format includes customer name, draft order number, email, and ID, but you can rearrange, add, or remove any of these elements to match your naming conventions.
Will this work for draft orders that convert to regular orders?
This workflow only triggers when draft orders are created. When a draft order is completed and converts to a regular order, you'll need a separate workflow (like the companion workflow suggested above) to update the deal stage in HubSpot to reflect the conversion.
What is a template?
Templates are pre-made workflows by our team of experts. Instead of building a workflow from scratch, these have all the steps needed to complete the task.
Can I personalize a template?
Yes! Every step can be customized to meet your exact requirements. Additionally, you can even add more steps and make it more sophisticated.
Are templates free?
Yes! Our entire library containing hundreds of templates are free to use and customize to your exact needs.

Ready to start converting Shopify draft orders to HubSpot deals automatically?

Join thousands who've automated their work and saved an average of 3.5 hours every week.

Use this template — It's free
7-day free trial • 10 min setup • Cancel anytime