When a Shopify campaign goes to spam, the send confirmation cannot explain where each copy arrived. You need to check the receiving mailboxes. Opening the message in your own inbox is a useful start, but repeating that check across providers means maintaining several accounts and matching each result to the right campaign revision.

MailSlurp is an email testing platform with controlled inboxes for placement checks. It gives you a recipient list and a unique tracking token, or marker, for each test. Send the Shopify campaign to those recipients with the marker in its subject or body, then review where the matching copies arrived. Content and authentication checks help you investigate the result; the provider folders establish the observed placement.

This workflow uses a regular email campaign in Shopify Messaging, addressed only to the test recipients. Shopify's **Send test** workflow is covered in the [device-rendering guide](/guides/shopify-device-rendering/); a preview sent to one address answers a different question from a campaign sent to a placement seed list.

## Test a Shopify product launch

The example is Slurp Store's reusable-straw launch: a starter-set photograph, four product packs, a collection link and an unsubscribe footer. The campaign was sent through Shopify Messaging to a dedicated segment whose eight subscribed addresses were checked against the fresh MailSlurp seed list.

All eight copies were received and classified: two in **Focused**, counted as **Inbox** in the summary; three in **Promotions**; and three in **Spam**. MailSlurp displayed a delivery score of **62** and **Mixed placement**. The [provider results and warning details](#read-each-providers-placement-result) below explain what to investigate next.



![Focused detail of the completed MailSlurp report showing delivery score 62, two Inbox, three Promotions, three Spam and zero Not received](/_astro/placement-breakdown-detail.CTq6jDNZ_FyCa3.webp)

Focused detail from the completed eight-seed test. The percentages describe these eight received copies; the delivery score is not a prediction of your subscriber inbox rate.



<details class="docs-disclosure" data-component="DocsDisclosure">
<summary>

Inspect the complete placement report

</summary>



![Complete MailSlurp report showing Run complete, score 62 and all eight provider results, with sender, recipients and run identifiers masked](/_astro/placement-results-full.BZuT71GO_fkSV.webp)

The completed report for the Shopify campaign. Privacy masks hide identifying values while leaving the placement results and checks visible.



</details>

You can follow the same workflow with your own Shopify template or saved campaign. Use the same sender and near-final content that you intend to send to subscribers.

If you use **Code your own**, keep Shopify's required Liquid variables and adapt the images, product links and footer to your store. The [campaign preparation steps](/guides/shopify-device-rendering/#prepare-your-draft-in-shopify) cover that route. Keep the same campaign revision for placement and rendering checks so you can relate the two results.

### Get the sender ready

Verify the sender mailbox and complete Shopify's domain authentication instructions. Add every record Shopify issues, then check that Shopify reports **Authenticated**. Its [sender-email setup instructions](https://help.shopify.com/en/manual/intro-to-shopify/initial-setup/setup-your-email) explain how the CNAME records establish authentication and how to configure DMARC. Preserve existing records for other services when adding the Shopify records.

Authentication helps establish who sent a message. It does not guarantee an inbox result. Check Shopify's [Messaging requirements](https://help.shopify.com/en/manual/promoting-marketing/create-marketing/shopify-messaging/requirements) and any account notices before preparing the test. You also need MailSlurp inbox-placement access; inspect the included allowance and any additional usage charge in your account before proceeding.

## Create a placement test and its recipient segment

### 1. Copy the current marker and seed addresses

Open **Inbox placement** in MailSlurp and start a new test. Copy the complete token under **Put this token in subject or body**, then copy the list under **Add all recipients**. These addresses are the controlled seed inboxes for this run. Use the current list to establish its coverage and recipient count; several seeds can belong to the same provider.



![MailSlurp placement setup showing the token, recipient-list and send-confirmation controls, with test values masked](/_astro/placement-setup.D06b7w9M_ZbKnzh.webp)

An earlier preparation view with its token and recipients hidden. Copy fresh values from your own test; preparing this screen does not send the Shopify campaign.



Keep the setup page open while preparing Shopify. A prepared test is still waiting for you to send the campaign. If it expires before you send, obtain a fresh token and list, then update both Shopify's audience and the message. Do not reuse values from an earlier test or from these screenshots.

### 2. Import only the controlled seeds

In Shopify, open **Customers** and import a CSV containing only the current seed recipients. Use Shopify's customer CSV format, including `Email`, `Accepts Email Marketing` and `Tags`, as described in its [customer import instructions](https://help.shopify.com/en/manual/customers/import-export-customers). Give the group a tag used only for this run, such as `mailslurp-placement-example`.

The controlled seeds need subscribed email-marketing status to be eligible for this campaign. Do not change real customers' subscription status for a test. Inspect Shopify's import summary for rejected or skipped rows, then check the imported records. If a seed already exists, inspect that record and update its test tag and eligibility without overwriting unrelated customer data.

### 3. Save a segment for the current seeds

Create a customer segment that requires both the dedicated tag and subscribed status. For example, the editable filter can be:

```sql
customer_tags CONTAINS 'mailslurp-placement-example'
AND email_subscription_status = 'SUBSCRIBED'
```

Run the filter and save it with a recognizable name such as **MailSlurp Placement Seeds**. Compare the segment's email addresses with the current MailSlurp list one by one: every current seed must be present, and no other recipient should match.

Two tests can have the same recipient count and different addresses. If you reuse a test tag, remove it from seeds absent from the new list and add it to the new seeds before checking the segment again. Keep those customer records; changing the tag is enough to exclude them from this test audience.



### Check where your Shopify campaign arrives

Send to controlled test inboxes and inspect the provider folders before sending the campaign to subscribers.

[Test my Shopify campaign](https://app.mailslurp.com/sign-up/?onboardingRequest=spamTest)



## Send the campaign only to the test segment

### 4. Add the marker and check recipients

Open the email draft in **Messaging**. In **To**, select only the saved placement segment and confirm that the subscriber count matches the reconciled seed list. Copy the exact MailSlurp token into the subject or body. For example, append your current token to the campaign subject, leaving the token itself unchanged.

Keep the rest of the subject and campaign representative of the intended send. Check the From address, images, links and unsubscribe settings before reviewing the campaign.



![Earlier Shopify draft with a dedicated placement segment, eight subscribers and masked sender and tracking-token values](/_astro/shopify-campaign-before.B_3JwjeF_21JsFT.webp)

An earlier saved Shopify draft showing the segment and subject fields. Private values are masked. This preparation view is separate from the completed send; use your current token and verify every seed address.



### 5. Review and send the regular campaign

Use Shopify's **Review** action and inspect the recipient segment, count, sender and subject again. The reviewed Slurp Store campaign showed **Total subscribers: 8** for its dedicated segment. Choose **Send now** only after your review shows the intended seed audience, then complete Shopify's send confirmation. If Shopify filters recipients out or reports an error, resolve it before sending; do not broaden the audience to real subscribers to make the count match.

Confirm that Shopify accepted the send, then return to the same prepared MailSlurp test and click **I sent to all recipients**. This confirms the send to MailSlurp and starts the report workflow; it does not send the Shopify campaign for you. In the example, Shopify showed **Sending**, and MailSlurp subsequently matched and classified all eight copies. Keep any Shopify error and the campaign's recipient information if you need to investigate a missing result.

## Read each provider's placement result

Match the report's sender and subject to the Shopify campaign, then look at **Where your email landed**. Each row describes one seed mailbox. Several rows can belong to the same provider, and those mailboxes can classify the same campaign differently.

The Slurp Store report completed with all eight targets resolved:

| Provider | Observed seed results |
| --- | --- |
| Microsoft 365 | 2 Focused |
| Google Workspace | 2 Promotions, 1 Spam |
| Gmail | 1 Promotions, 1 Spam |
| Outlook | 1 Spam |



![Focused detail of eight MailSlurp provider rows: two Focused, three Promotions and three Spam, with no recipient addresses shown](/_astro/placement-providers-detail.lqa_hzK2_1dalv9.webp)

Focused detail of the provider and placement columns from the same test. Each row is one mailbox; Gmail and Google Workspace both have different outcomes across their seeds.



[Inspect the complete report](#test-a-shopify-product-launch) for the surrounding results and checks.

The two Microsoft 365 **Focused** results make up the summary's **Inbox: 2**, or 25%. **Promotions** and **Spam** each account for three of eight copies, or 37.5%. Promotions is a separate mailbox category from Spam; a promotional classification does not mean that copy went to the spam folder.

**Not received: 0** means there were no missing copies in this run. It does not mean every copy reached an inbox. Likewise, the score of 62 is the report's summary score, not a claim that 62% of subscribers will receive the campaign in their inboxes.

These are observations from one campaign sent to eight monitored mailboxes. They show which copies need investigation, but do not establish a Shopify-wide result or the cause of a spam classification.

### Investigate the warnings before changing the campaign

Open the report's findings to see what each warning actually checked. The Slurp Store email had a **Links in message body** warning because the matched message contained seven links. That count does not establish a broken link or show that links caused the spam placements. Review the destinations and remove accidental or unnecessary links if you find them; keep the required unsubscribe link.

The **DMARC record** warning reported a published record with `p=none`, meaning its policy was not enforcing. That describes the domain's policy, not a message-level DMARC failure. Ask the domain owner to review the intended policy and legitimate sending services before tightening it. A policy change is not demonstrated as a fix for this campaign's placement.

The separate **Domain health and monitoring** quick check reported **SPF: Fail**, alongside **DMARC: Pass**, **DMARC policy: Passive**, **MX: OK** and **DKIM: OK**. Keep that domain check separate from the authentication results attached to a received campaign copy. The quick-check warning alone does not establish that this Shopify message failed SPF at a recipient.

For an authentication investigation, inspect the matched message's `Authentication-Results`, `Return-Path` and DKIM signing domain, then compare them with the domain the quick check examined. The [DMARC guide](/guides/dmarc-explained/) explains how sender identity and alignment relate. Give those findings to the person managing the sender domain or to Shopify Support before changing DNS.

After correcting a verified issue, use a fresh token and seed list for another controlled campaign. Compare the sender, campaign revision, selected seeds and provider results. This example contains one completed placement test; it does not demonstrate a repair or a successful retest.

### If a result is still waiting

A waiting row is not a spam result, and zero resolved rows do not mean zero spam placements. If every row is waiting, first confirm Shopify actually sent the campaign, then check the complete seed list, exact marker and test window. If only some recipients are missing, inspect their subscribed status and the Shopify campaign's recipient details for exclusions or delivery problems. Keep unresolved rows visible when interpreting counts or percentages.

## If Shopify blocks the send

If **Review** asks you to select a segment, return to **To** and check that the seed segment is selected. If the selected audience is empty or smaller than expected, inspect its filter, current seed addresses and subscribed status before changing the campaign.

For a send restriction, check Shopify's account notices and current Messaging requirements. An authenticated domain does not by itself remove every account restriction. If the visible setup is complete but the error remains, give Shopify Support the exact error and sender-authentication status so it can investigate the account.

If Messaging opens to a blank page, you have not reached the send controls. Restore access to the editor before using a new placement test. An expired run with no accepted campaign send provides no evidence that Shopify emails went to spam.

## Check the email's layout as well

Placement tells you where a message arrived; it does not show whether the product grid fits on a phone. Follow the [Shopify device-rendering guide](/guides/shopify-device-rendering/) to compare the campaign in Gmail, Outlook, iPhone and Android apps, then repeat both checks after changes that affect the send.
