Digital Download - Using Make (formerly Integromat)
If you're planning to sell digital download (which means sending order designs for customers to download), you can use 3rd-party software to read Shopify orders and send the Teeinblue's design to customers automatically.
Basically, this is how it works:
- When an order is created, Teeinblue adds the URL of order design to the Line item properties of each order item in Shopify Orders (make sure you've selected the "Line item property" option in Teeinblue's General settings > Add order design URL to Shopify Orders).
- A 3rd-party software will read the latest Shopify Orders and take the order design in the Line item properties to send to your customers' emails automatically.

Therefore, to make sure the design is ready to be sent to your customers, you should:
- Add a delay for your 3rd-party tool to read the order a few minutes after it's created.
- Or use the action "Mark as fulfilled" to trigger the 3rd-party tool.
In this article, we'll help you guys setup ++ Make (formerly Integromat) ** ++ to do that.
This software helps you create automation flow between multiple platforms. It offers Free plan for you to get started, you can check out make.com website and register.
Before getting started, make sure you've created a Make account.
STEP 1. Create a new scenario
- After registering, go to your account and click on
Scenariospage. - Click on
Create scenariobutton.

STEP 2. Configure "Shopify" module to get orders from Shopify
2.1. Add the "Shopify" module
- Click on + button ➝ search and click to add
Shopifymodule. - Choose
Watch ordersoption.

2.2. Create a new Shopify connection
*You might skip this step if you've already connected.

- Click
Addand enter your Shopify domain to connect with your Shopify account. You will need to install Make app to your Shopify store (For more instruction of this step, please follow this Make instruction: link). - To ensure Make can retrieve hidden properties (like the
_tib_design_link), your connection must have the correct permissions.
Custom App in your Shopify Admin (Apps > App and sales channel settings > Develop apps), grant it the read orders scope, and use its Admin API Access Token to connect. (For more instruction of this step, please follow this Make instruction: link)- Connection: select the Shopify connection you've just created in step 2.2.
- Limit: based on your demands (it's the maximum number of orders enter this scenario at a time)
STEP 3. Fetch Item Properties via GraphQL API
Shopify hides certain properties (like _tib_design_link`) from standard webhooks. We need to actively request them.
- Add another Shopify module right after
Watch Orders - Choose the
Make a GraphQL API call

- Connection: Select the exact same connection you used in Step 2.
- Query: Copy and paste the code below into the
Queryfield:
query getTeeinblueProperties($id: ID!) {
order(id: $id) {
name
displayFinancialStatus
displayFulfillmentStatus
lineItems(first: 10) {
edges {
node {
name
variant {
title
}
customAttributes {
key
value
}
}
}
}
}
}

- Click
Advanced settings, scroll down toVariables - Variables input format: Choose
Array (Simple) - Click
Add variable
- Key:
id - Value: click and map the
ID(the Order ID looking like gid://...) from the previousShopify (1) - Watch ordersmodule.

STEP 4. Run the scenario once & Set up a Filter
4.1. Run the scenario once
- Right-click on the
Shopify - Watch ordersmodule and selectChoose where to start

- Choose
Choose manuallyto pick a specific recent order) and clickSave.

- Temporarily close any settings panel and click the
Run oncebutton at the bottom left. (Note: If Make.com shows a warning pop-up saying "You're not using the data generated by this module", simply clickRun anyway). - Wait for the modules to turn green. Now, Make.com has successfully fetched an old order, and all the hidden variables will be visible for you to select in the next steps!


4.2. Setup a Filter
Add the first "Iterator" module
- Click on Flow Control (under Tools) ➝ choose Iterator module to add it to the scenario. It'll show as "Iterator (2)".

- Link the
Iteratorto theShopify - Make a GraphQL API callmodule
Now, click the wrench icon on the dotted line right after the GraphQL module ➝ Set up a filter. Follow one of these two cases:

Follow one of these two cases:
++ Case 1: Trigger when a new order is created: ++ all new orders will automatically enter the flow to send an email.
With this way, all steps are automatic so you don't have to do anything, but you won't have a chance to review the orders.
- Condition 1: Expand the
Bodyfolder ->data->orderfrom the GraphQL module, and selectdisplayFinancialStatus. - Text operators:
Equal to (case insensitive) - Type:
PAID

++ Case 2: Trigger when an order is fulfilled: ++ mark orders as fulfilled to make them enter the flow.
With this way, you can review the orders, but you will have to manually mark an order as FULFILLED in order to send an email.
- Condition 1:
- Expand the
Bodyfolder ->data->orderfrom the GraphQL module, and selectdisplayFinancialStatus. - Text operators:
Equal to (case insensitive) - Value:
PAID.
Click Add AND rule
- Condition 2:
- Expand the
Bodyfolder ->data->orderfrom the GraphQL module, and selectdisplayFulfillmentStatus. - Text operators:
Equal to (case insensitive) - Value:
FULFILLED.

STEP 5. Extract orders with "Iterator" module
5.1. Set up the "Iterator":
- Click on the
Arrayfield ➝ map the following path from the GraphQL module:Body->data->order->lineItems[]
This will help get a list of each line items in Shopify Order.

5.2. Add & set up the second "Iterator" module ("Iterator (4)"):
- Add a new
Iteratormodule, it'll show asIterator (4), and link it to theIterator (3). - In the Array field ➝ click to add the
customAttributes[]fromFlow control (2) - Iterator
Iterator (4) will loop through the specific customization properties of the product that Iterator (3) is currently processing).

(optional) STEP 6. Filter "Digital download" orders
Skip this step if all of your Teeinblue orders are for digital downloads.
6.1. Add an additional option in Teeinblue
- In your artworks, add an
Additional Optionfor customers to chooseYesorNoforDigital download. You can also useAddon Chargeto charge extra for the digital version.

- Must enable the
Show customization data on cart/checkoutto add the customers' selection to Line item property.

6.2. Add a filter between "Iterator (3)" & "Iterator (4)" to only process order items having "Digital download" = "yes":
- Click on the wrench icon between the 2 modules ➝ Set up a filter
3.customAttributes might appear as plain black text. Make.com will NOT recognize this! You must delete the black text and click to map the corresponding green variable directly from the Iterator panel.- Condition 1 (Check the Key):
- In the first empty field, manually type:
{{join(map(then click to select thecustomAttributes[]array fromIterator (3). Continue typing:; "key"); ", ")}} - The final format should look exactly like this:
{{join(map(3.customAttributes; "key"); ", ")}} - Text operators: Select
Contains (case insensitive) - Value: type
digital
Click Add AND rule
- Condition 2 (Check the Value):
- In the first empty field, manually type:
{{join(map(then click to select thecustomAttributes[]array fromIterator (3). Continue typing:; "value"); ", ")}} - The final format should look exactly like this:
{{join(map(3.customAttributes; "value"); ", ")}} - Text operators: Select
Contains (case insensitive) - Value: type
yes

Iterator (3) is a digital product. If true, it allows the process to move to Iterator (4) to extract ALL properties, including the imagesSTEP 7. Get Teeinblue's design URL & Merge data
7.1. Add a "Text aggregator" module
- Click on
Tools(under Tools, next to Flow control) ➝ chooseText aggregatormodule to add it.

- Link it with the
Iterator (4)
7.2. Add a filter between "Text aggregator" & "Iterator (4)" to get the correct URL
- Click on the wrench icon between the 2 modules ➝ Set up a filter ➝ Add a condition
- Condition: choose the
Keyfrom theFlow control (4) - Iterator - Text operators:
Contains (Case insensitive) - Value:
_tib_design_link

7.3. Enter Text aggregator's configuration
- In the
Source modulefield, select the IteratorIterator (4)
This will help merge the design URLs of the line items from the same order to one email.
- Click on the Text field and enter:
{{if(contains(4.key; "tib_design_link"); if(contains(4.value; ".pdf"); "<a href='" + 4.value + "'>Click to download design</a><br>"; "<img src='" + 4.value + "' width='500'><br>"); if(contains(4.key; "customization_image"); "<img src='" + 4.value + "' width='500'><br>"; ))}}
4.key and 4.value texts with the actual green variables from Iterator (4) so the system can read your data correctly.
Logic:
Make.com will check the property name (key).
- If the property contains
tib_design_link(like_tib_design_link_1) - OR
customization_image(like_customization_image), it will automatically wrap the URL (value) inside an HTML<img>tag to display the image.
-> The output of this Text Aggregator will be a single block containing all formatted image links
7.4. Add a second "Text Aggregator" module (To Merge Products):
This is where you will retrieve the Product Name! Drag and drop another Text Aggregator module right after the first one.
- Source Module: Select Iterator [3].
- Text: Copy and paste the snippet below. Replace
[Product name]by mapping thenamevariable from Iterator (3), and replace[Text]by mapping thetextoutput variable from the first Text Aggregator.
<b>Product:</b>[Product name]<br>
[Test]<br>

(optional) STEP 8. Add a delay (only for Case 1 - Trigger when a new order is created)
Skip this step if following case 2 - Trigger when an order is fulfilled
Because it'll take a few minutes for Teeinblue's design to be generated, you should add a delay in sending the design URL to your customers to make sure the image is ready when your customers receive the email.
- Click on
Tools➝ addSleepmodule & connect it withText aggregatormodule. - Enter the number of seconds you want to delay (recommend
60).

STEP 9. Filter if no design URL
Skip this step if all of your Teeinblue orders are for digital downloads.
Add a filter between the Tool & Sleep module (or the final Email module in Step 10 if you don't use the Sleep module):
- Click on the wrench icon between the 2 modules ➝ Set up a filter, Add a condition:
- Condition: choose the
Textfrom theToolmodule. - Basic operators: Exists

STEP 10. Set up email
10.1. Add an email service module (Email, Gmail, ...)
To send an email to your customers, you'll need a sender email. Depends on the email service of that sender email, choose a module of that email service. In this example, we'll use "Gmail".
- Click on
Add another module➝ search and add an email service.
- Choose
Send an emailoption.
- Link it with the previous module (
Sleepmodule orText aggregatorif you skip step 8).
10.2. Create a new Mail connection
*You might skip this step if you've already connected.

- Click
Add➝ enter a name for the connection ➝ choose your mail account to authorize and connect. - For more instruction of this step, please follow this Make instruction:
- Mail module: link
- Gmail module: link
10.3. Enter Mail's configuration
- Connection: select the
Emailconnection you've just created. - To: search and select the
Customer: EmailfromShopify (1) - Watch orders

- Subject: enter a subject for the email. Recommend adding the Order number from
Shopify (1) - Watch ordersso your customers can recognize their order.

- Content: type your email content. And remember to add the
TextfromText aggregator- it's the text you created in step 5, which contains the design URL ("Value").

All done! Then you can enable and schedule for this scenario (In Free plan, the minimum time is 15mins, you can upgrade to a higher plan to shorten this schedule).
Remember:
- If you follow case 1: all new orders will enter the flow automatically.
- If you follow case 2: you must mark orders as fulfilled to make them enter the flow.
A complete scenario will look like this:

Updated on: 23/04/2026
Thank you!
