Shopify POS Location-Based Logo in Order Confirmation Email Not Working

Hi Shopify Community,

I’m looking for help with a Liquid code issue in our Shopify Order Confirmation email notification.

We operate multiple brands/locations using Shopify POS, and we would like the customer order confirmation email header/logo to automatically match the brand based on the Shopify POS location.

Our requirement

We currently have:

  • Baggu Ashta District 8 → should display the BAGGU logo
  • CORKCICLE locations → should display the CORKCICLE logo

The Baggu Ashta District 8 orders are placed exclusively through Shopify POS in our physical store, and the customer receives the Order Confirmation email afterward.

What we have done

We contacted Shopify Support, and they confirmed that location-based branding should be possible using Liquid logic.

Our current code is:

{% if location.name == "Baggu Ashta District 8" %}
<img src="https://cdn.shopify.com/s/files/1/0915/2436/6625/files/BAGGU_ideMfbjm2R_0_1.png?v=1787022963" alt="BAGGU" width="{{ shop.email_logo_width }}">
{% else %}
<img src="https://cdn.shopify.com/s/files/1/0915/2436/6625/files/sssgid-zone-1786510097-Corkcicle_20LOGO.png?v=1786510186" alt="CORKCICLE" width="{{ shop.email_logo_width }}">
{% endif %}

The template saves successfully after the code is added.

However, when we place a real test order through Shopify POS at Baggu Ashta District 8, the customer confirmation email still displays the CORKCICLE logo instead of the BAGGU logo.

Important details

  • The order is created through Shopify POS, not the online store.
  • The email notification is sent to the customer after the POS transaction.
  • The Order Confirmation template was originally using Shopify’s default layout.
  • We have not intentionally changed any other parts of the email template.
  • We want to keep the existing email layout and content unchanged.
  • We only want the header/logo to change based on the POS location.

What we need help with

Could someone please help us determine why:

location.name == "Baggu Ashta District 8"

does not appear to be matching the actual POS location?

Is location.name the correct Liquid variable to use in the Order Confirmation notification for Shopify POS orders?

If not, what variable or Liquid object should we use to identify the Shopify POS location?

We would also appreciate a corrected Liquid example that we can safely use in the Order Confirmation notification.

We are not developers, so a step-by-step explanation would be greatly appreciated.

Thank you very much for your help!

Hi @Yankie_Wibowo
I think the issue is not that location is the wrong object. Shopify’s notification variables reference specifically lists location as available for POS orders, including location.name and location.id.

For this use case, I’d avoid matching by the location name and use the POS location ID instead. Location names can be changed or may not match the value you expect exactly.

First, temporarily test the actual value being passed by using:

POS location: {{ location.name }}
POS location ID: {{ location.id }}

Place a real test order from Baggu Ashta District 8 and check which values are returned. Then use the ID in the condition, for example:

{% if location and location.id == 123456789 %}
  <img src="BAGGU_LOGO_URL" alt="BAGGU" width="{{ shop.email_logo_width }}">
{% else %}
  <img src="CORKCICLE_LOGO_URL" alt="CORKCICLE" width="{{ shop.email_logo_width }}">
{% endif %}

Replace 123456789 with the actual ID of the Baggu Ashta District 8 location from Shopify Admin.

If the test email shows the correct location name/ID but the condition still falls into the else branch, then we can narrow it down to the exact Liquid value/type being returned rather than the POS location itself.

I’d also test this with a real POS order rather than relying only on the notification preview, because the location value is specifically tied to POS orders.

likely isn’t available in the Order Confirmation notification context. Try order.location.name instead:

{% if order.location.name == "Baggu Ashta District 8" %}
  <!-- BAGGU logo -->
{% else %}
  <!-- CORKCICLE logo -->
{% endif %}

You can first test with {{ order.location.name }} to see if Shopify exposes the POS location. If it returns blank, that location data isn’t available in this notification template.

Hi, thank you for your suggestions. I tested both approaches with real Shopify POS orders from Baggu Ashta District 8.

I first tested:

{{ location.name }}
{{ location.id }}

Both values were blank in the actual customer Order Confirmation email.

I then tested:

{{ order.location.name }}

This was also blank in the actual Order Confirmation email.

The orders were definitely created through Shopify POS at Baggu Ashta District 8, and the customer received the Order Confirmation email. However, the email header still shows the CORKCICLE logo because the condition falls through to the else block.

At this point, could you please advise which Liquid object or variable is actually available in the Order Confirmation notification context for Shopify POS orders that can reliably identify the POS location?

We would ideally like to identify the location by its ID and then conditionally display the BAGGU logo for Baggu Ashta District 8 and the CORKCICLE logo for the other locations.

We have also confirmed that the template saves successfully and that the test was performed using a real POS transaction, not just the notification preview.

Any guidance on the correct Liquid variable/object would be greatly appreciated. We are not developers, so a working code example would be very helpful.

Thank you!

Thanks for testing this with real POS orders, that result is actually very useful.

Since location.name, location.id, and order.location.name are all blank in the actual Order Confirmation email, I would not keep trying different variations of the same object. The issue appears to be the notification Liquid context, not the POS order itself.

The POS order does have an associated location on Shopify’s order data, but that does not mean the location object is exposed to every notification template. Shopify’s Liquid location object is context-dependent, so a variable being documented does not guarantee it will be populated in this particular email context.

At this point, I’d verify the limitation with Shopify Support/Developer Support specifically by asking:

“Is the POS location associated with an order exposed as a Liquid variable in the Order Confirmation notification template?”

If the answer is no, then there unfortunately isn’t a reliable Liquid variable you can use directly in this notification to switch the logo by POS location.

In that case, I’d avoid relying on location.name and look at an automation-based workaround that identifies the POS location before the notification is generated, or consider separating the notification logic outside the standard Shopify notification template.

So based on your real test results, I don’t think changing location.name to another guessed Liquid path will solve it, the key question is whether POS location data is actually exposed in the Order Confirmation notification context.

In-person POS orders do not use the Order confirmation email. When a customer asks for a receipt at the register, Shopify sends a separate template called POS and mobile receipt.

That is also why every variable came back blank. location is a POS-only variable. Shopify only fills it in on the POS receipt, not on the Order confirmation.

so location.name, location.id and order.location.name are all empty in the Order Confrimation Email.

Fix: move the code to the POS receipt template

  • Settings > Notifications > Customer notifications.
  • Scroll to Point of Sale and open POS and mobile receipt (not Order confirmation).

  • In the Email body, find the logo block near the top. Search for shop.email_logo_url. It looks like this:
{%- if shop.email_logo_url %}
  <img src="{{ shop.email_logo_url }}" alt="{{ shop.name }}" width="{{ shop.email_logo_width }}">
{%- else %}
  <h1 class="shop-name__text">{{ shop.name }}</h1>
{%- endif %}

  • Replace that whole block with your conditional:
{% if location.id == 123456789 %}
  <img src="YOUR_BAGGU_LOGO_URL" alt="BAGGU" width="{{ shop.email_logo_width }}">
{% else %}
  <img src="YOUR_CORKCICLE_LOGO_URL" alt="CORKCICLE" width="{{ shop.email_logo_width }}">
{% endif %}
  • Save.

Get the location ID: Settings > Locations, open the Baggu Ashta District 8 location, and copy the number at the end of the URL (.../locations/123456789). Put it in place of 123456789.

Matching by name works too now that it is in the right template ({% if location.name == "Baggu Ashta District 8" %}), but the ID is safer since names can be renamed.

Keep your same logo image URLs. You can also remove the code from Order confirmation so your online orders keep showing your normal logo.

Notes:

  • this only changes the emailed and texted receipt that the customer requests at checkout.
  • It does not change the printed receipt (that is set separately in POS settings).

Regards,
Ploqo

Dear Ploqo and everyone,

Thank you very much for the clarification and support.

I realized that I made a mistake during the setup. I should have configured the script under POS and mobile receipt, but I mistakenly placed it under Notifications → Order Processing → Order Confirmation. As a result, the script could not work as expected because the required POS location variables were not available in that template.

I have now moved the update to the correct POS and mobile receipt template, and everything is working as expected. The result is now exactly what I wanted.

Thank you once again to everyone here for your help, guidance, and support. I really appreciate it!

Best regards,
Yankie