How to Fetch a Shopify Order by Order Number Using HTTP Request Node in n8n?

Hi everyone,

I am building an n8n workflow that connects ManyChat with Shopify so customers can check their order status automatically.

In my current setup, the workflow asks the user for their order number, then the system tries to fetch the order details from Shopify.

However, I discovered that the Shopify node only fetches a limited number of recent orders, which causes an issue when users check older orders. The workflow runs successfully, but it cannot find the correct order.

I was advised to use the HTTP Request node to query the Shopify API directly instead of relying on the Shopify node or AI filtering.

However, I’m not sure how to properly configure the HTTP Request node for this.

Specifically, I would like to understand:

  • How to search Shopify orders using the order number (name field like #1234)

  • How to include fulfilled and closed orders

  • How to structure the API request correctly in n8n

If anyone has done this before, it would be very helpful if you could share:

  • A short Loom video

  • A YouTube tutorial

  • Or any documentation explaining the setup.

Thank you in advance for your help! :folded_hands:

1 Like

Hi @Samar_Abbas!

You’re definitely on the right track switching to the HTTP Request node. The native Shopify node’s Get Many operation is often limited by its internal filters and default pagination.

To search for a specific order number (like #1234) using the Shopify Admin API, you’ll want to use the /admin/api/2024-01/orders.json endpoint with the name parameter.

Configuration for HTTP Request Node:

  • Method: GET
  • URL: https://your-shop-name.myshopify.com/admin/api/2024-01/orders.json
  • Parameters (Query):
    • name: #1234 (or whatever variable contains your order number from ManyChat)
    • status: any (This is the key to including fulfilled, closed, or cancelled orders. By default, Shopify only returns open orders).

Authentication:

You’ll need a Shopify Access Token. In n8n, you can set this up as a Header Auth in the HTTP Request node:

  • Name: X-Shopify-Access-Token
  • Value: your-access-token-here

Why this works:

Using status=any ensures you aren’t filtered out by Shopify’s default view. Also, searching by name is the most reliable way to match the human-readable order number customers actually see in their confirmation emails.

Give that a shot and let us know if you run into any permission issues!

Hi @Samar_Abbas

I would keep it simple and use HTTP Request + Shopify GraphQL Admin API here.

Hi @Samar_Abbas -

You need to figure how to generate an API Key from Shopify. Let us know how that goes and if you get stuck.

Once your API Key is in working order I’ve thrown together a simple template below that should help guide you. fulfilled and closed orders would be expected to be returned regardless as no additional parameters have been set to filter search results.

This isn’t a full in depth explanation - it’s a brief step to get you in the right direction. The second piece of help I would say is refer into API Parameters and what is supported from Shopify in order to retrieve for your use case. You need to change the URL Parameters within the URL and variables Appropriately. For instance, from the Many Chat output - you’ll need to take the OrderID Variable and assign it within the URL Path so the ID retrieved from the user is passed and queried via the API call.

https://{your-store-name}.myshopify.com/admin/api/{version}/orders.json?name={encoded-order-name}&status=any

name= → This filters by the exact name field (the public order number).

  • If the order number is #1234, encode the # as %23 → name=%231234

  • If the user provides just the digits (e.g. 1234), many integrations prepend # automatically: name=%23{{orderNumber}}

Effectively you need to manually create a web request from scratch, this takes abit of know-how but using AI would guide you in the right direction (or even generate the N8N Template for you) to suit your needs.

Feel free to ping me if you get stuck.