> For the complete documentation index, see [llms.txt](https://help.littledata.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.littledata.io/event-editor/common-setups/exclude-staff-and-test-orders.md).

# Exclude staff and test orders

### What you'll build

A filter that stops staff purchases and test orders from being sent to a destination as purchase events.

Your team places orders too: test checkouts, QA runs, staff buying with a discount. None of them are revenue your marketing earned. They inflate conversion counts, and ad algorithms learn from buyers who were never customers. On a smaller store, a handful of test orders can visibly skew a week's results.

### What you need

* A consistent way to spot internal orders: a staff email domain, a customer tag, or a test payment gateway
* At least one Littledata destination connected, for example Meta Conversions API or Google Analytics
* Access to the Event Editor in the Littledata app

{% hint style="info" %}
Open a recent test or staff order in Shopify admin to see what marks it out. The most reliable markers are the email domain and the payment gateway used for test checkouts.
{% endhint %}

### Steps

The steps are the same for every destination.

{% stepper %}
{% step %}
**Open the purchase event**

In the destination's Events tab, open the **three-dot menu** on the purchase event and select **Edit**.

The event name is different across destinations: **Purchase** in Meta, **purchase** in GA4, **Placed Order** in Klaviyo.
{% endstep %}

{% step %}
**Open the Event trigger section**

This is where the event's conditions live. With no conditions, the event is sent for every order; once you add conditions, it's only sent when they match. See Filter events with trigger conditions.
{% endstep %}

{% step %}
**Add the conditions**

Add conditions that rule out internal orders, combined with **ALL of the following are true**:

| Rules out    | Field                         | Operator           | Value            |
| ------------ | ----------------------------- | ------------------ | ---------------- |
| Staff orders | `properties.email`            | `does not contain` | `@yourstore.com` |
| Test orders  | `properties.payment_gateways` | `does not contain` | `bogus`          |

Swap `@yourstore.com` for your team's email domain. See Trigger conditions for the available fields and operators.
{% endstep %}

{% step %}
**Save**

Click **Save** to apply. The purchase event is now only sent for orders that pass the conditions, so internal orders are dropped.
{% endstep %}
{% endstepper %}

### Destination notes

* **Meta**: no setup change needed in Meta itself. Conversion counts drop by your internal order volume; that is noise leaving, not performance falling.
* **GA4**: GA4's own internal traffic filter covers staff pageviews by IP. This setup covers what it misses: staff purchases from home or on mobile.
* **Klaviyo**: apply the same conditions to **Placed Order** so test orders don't trigger post-purchase flows or receipts.

### Verify it's working

1. Place a test order with a staff email address.
2. Confirm the order appears in Shopify but no purchase event arrives in the destination, for example Meta **Events Manager** or GA4 **DebugView**.
3. Real customer orders should still come through as normal.

### Make it yours

This setup conditions on whatever marks an order as internal. The same pattern works with any trigger condition:

* Tag staff customer profiles in Shopify and condition on `customer.tags` instead of the email domain.
* If your team tests with a dedicated discount code, condition on that code.
* Apply the same conditions to other events, such as checkout or add-to-cart, if internal traffic pollutes those too.
