# Generate QuickBooks Estimate from Shopify Draft Order

10 min setup  
No coding required  
Runs automatically

Keep your sales and accounting in sync with ease. With this workflow template, every time a draft order is created in Shopify, a matching estimate is automatically created in QuickBooks using the order details. No more copying information by hand or worrying about mistakes—your team gets a clear, accurate estimate immediately. This saves time, keeps everyone on the same page, and helps you move smoothly from order to invoice.

### Draft Order Created
#### Path 1 Rule - Has Existing Customer  
Create or Update Estimate
#### Path 2 Rule - No Existing Customer  
Create Customer

## How it works

8 steps to get automatic QuickBooks estimates from your Shopify draft orders

### Draft Order Created
App connector: [Shopify](/content/apps/shopify/integrate "View Shopify integration page"/index.html)• Time to complete: 0 minutes (Auto-configured)

**Why this matters:** This trigger captures every draft order the moment it's created in Shopify, ensuring no potential sale goes untracked in your accounting system.

When a draft order is created in Shopify, this trigger activates the workflow and captures the complete draft order object including {{shopify.customer.id}}, {{shopify.email}}, {{shopify.line_items}}, {{shopify.currency}}, and {{shopify.total_tax}}. The workflow runs for every draft order created in your store.

### Retrieve Customer
App connector: [Shopify](/content/apps/shopify/integrate "View Shopify integration page"/index.html)• Time to complete: 0 minutes (Auto-configured)

**Why this matters:** Pulls the customer profile from Shopify to ensure you have all customer details (including notes and full contact information) needed for QuickBooks records, not just the limited data included in the draft order.

This step retrieves the full customer record from Shopify using {{shopify.customer.id}} from the trigger. It fetches additional customer details like {{shopify_1.note}} that aren't included in the draft order but are useful for creating comprehensive customer records in QuickBooks.

### Query Customer
App connector: [QuickBooks](/content/apps/quickbooks/integrate "View QuickBooks integration page"/index.html)• Time to complete: 0 minutes (Auto-configured)

**Why this matters:** Prevents duplicate customer records in QuickBooks by checking if the customer already exists before attempting to create a new one.

This step searches your QuickBooks company for an existing customer record using the email address from the draft order ({{shopify.email}}). It executes the SQL-like query "SELECT * FROM Customer WHERE PrimaryEmailAddr = '{{shopify.email}}'" and returns the customer's QuickBooks ID as {{quickbooks.0.Id}} if a match is found, or returns empty if no match exists. This query result determines which path the workflow follows next.

### Create or Update Estimate
App connector: [QuickBooks](/content/apps/quickbooks/integrate "View QuickBooks integration page"/index.html)• Time to complete: 2 minutes

**Why this matters:** Generates the QuickBooks estimate using the existing customer record, ensuring the estimate links properly to their account history and customer profile.

This step creates an estimate in QuickBooks when a customer already exists. It uses {{quickbooks.0.Id}} for the CustomerRef value and maps each item from {{shopify.line_items[]}} into QuickBooks Line items with {{shopify.line_items[].price}} as Amount and UnitPrice, {{shopify.line_items[].quantity}} as Qty and LineNum, and {{shopify.line_items[].name}} as Description. The estimate also includes {{shopify.currency}} for CurrencyRef and {{shopify.total_tax}} for TotalTax, creating a complete estimate that matches the draft order exactly.

### Path 2 Rule - No Existing Customer
App connector: [Paths](/content/apps/paths/integrate "View Paths integration page"/index.html)• Time to complete: 0 minutes (Auto-configured)

**Why this matters:** When no matching customer exists in QuickBooks, this path ensures a customer profile is created first before generating the estimate, maintaining proper accounting relationships.

This conditional path executes when {{quickbooks.0.Id}} is empty, meaning no matching customer was found in the QuickBooks query. The workflow evaluates this condition and proceeds to create both a new customer record and then an estimate for that customer.

### Create Customer
App connector: [QuickBooks](/content/apps/quickbooks/integrate "View QuickBooks integration page"/index.html)• Time to complete: 2 minutes

**Why this matters:** Establishes a complete customer profile in QuickBooks with all relevant contact and billing information before creating the estimate, ensuring proper record-keeping and future invoice generation.

This step creates a new customer in QuickBooks using data from Shopify. It sets DisplayName to "{{shopify.customer.first_name}} {{shopify.customer.last_name}}", PrimaryEmailAddr to {{shopify.email}}, Notes to {{shopify_1.note}}, and PrimaryPhone to {{shopify.customer.phone}}. The BillAddr includes {{shopify.billing_address.address1}}, {{shopify.billing_address.city}}, {{shopify.billing_address.country}}, {{shopify.billing_address.country_code}}, and {{shopify.billing_address.zip}}. The newly created customer ID is returned as {{quickbooks_2.Customer.Id}} for use in the next step.

### Create or Update Estimate
App connector: [QuickBooks](/content/apps/quickbooks/integrate "View QuickBooks integration page"/index.html)• Time to complete: 1 minute

**Why this matters:** Generates the QuickBooks estimate linked to the newly created customer record, completing the full automation cycle from draft order to estimate for first-time customers.

This step creates an estimate in QuickBooks for the newly created customer. It uses {{quickbooks_2.Customer.Id}} for the CustomerRef value and maps each item from {{shopify.line_items[]}} into QuickBooks Line items with {{shopify.line_items[].price}} as Amount and UnitPrice, {{shopify.line_items[].quantity}} as Qty and LineNum, and {{shopify.line_items[].name}} as Description. The estimate includes {{shopify.currency}} for CurrencyRef and {{shopify.total_tax}} for TotalTax, creating a complete estimate that matches the draft order.

## Frequently asked questions

### What happens if I edit a draft order after the estimate is created?

The workflow only runs when a draft order is first created. If you edit the draft order afterward, you'll need to manually update the QuickBooks estimate or run the workflow again. Consider adding a "Draft Order Updated" trigger if you need automatic estimate updates.

### Can this workflow handle multiple currencies?

Yes, the workflow automatically passes the currency code from Shopify ({{shopify.currency}}) to the QuickBooks estimate. However, the currency must be enabled in your QuickBooks company settings for the estimate to be created successfully.

### What if my draft order has more line items than QuickBooks can handle?

QuickBooks estimates have no practical limit on line items for most users. The workflow uses array mapping ({{shopify.line_items[]}}) to automatically create a separate line item for each product in the draft order, regardless of quantity.
