Skip to content

Filters & search guide

Filters decide which products or variants a job will touch. Use this guide to understand scope, logic, and field-specific behavior so you can build precise, repeatable selections.

Choose the right scope

  • Product scope filters (default) match entire products. A job will touch all variants on any matching product unless you also add variant-specific filters.
  • Variant scope filters (toggle inside the builder) allow you to target specific variants by SKU, option values, title, position, barcode, or price. Only matched variants will be edited.
  • Scope is displayed next to the builder title (“Products that match…” vs “Variants that match…”). Confirm it before running a job.
  • For variant-aware actions (Price, SKU, Barcode, Edit/Delete/Replace Variants), remember that the Filter products step always decides which products are in scope, and each action’s Variants to edit control then narrows which variants on those products are actually changed. Variant filters never extend the job to products that don’t match the top-level product filter.

Filter builder basics

  1. Open Filter products/variants in the job setup flow.
  2. Pick a field (Title, Vendor, Tag, Variant price, Variant SKU, Variant barcode, Variant options, Status, Metafield, etc.).
  3. Choose an operator:
    • Text fields: contains, does not contain, is, is not.
    • Numeric/date fields: is, greater than, less than, between.
    • Tags/collections: has any of, has all of, does not have.
    • Existence: is empty, is not empty.
  4. Enter a value or list of values, then click Add condition.
  5. Repeat to stack multiple conditions.

Use the match toggle above the rule list to switch between All conditions (AND) and Any condition (OR). Advanced mode lets you add a NOT group for exclusions (e.g., “Title contains Shirt AND NOT Tag is Archived”).

Field & operator reference

Field groupCommon operatorsNotes
Title, vendor, product type, handlecontains / does not contain / is / is notText searches are token-based; use quotes for exact phrases.
Tagshas any of / has all of / does not haveTags are case-insensitive; separate values with commas.
Statusis / is notFilters by product status (for example, Active vs Draft).
Variant priceequals / greater than / less than / betweenUses variant pricing; combine with variant scope for specific size/color edits.
SKU, barcodecontains / is / is emptyThese fields are case-sensitive; match the exact casing stored in Shopify.
Metafieldsis / is not / contains (strings)Provide namespace.key, then enter the desired value.
Option values (values for option names like Size or Color)contains / is / is notVariant scope only; matches the specific value such as Small or Red.
Created/updated/published dateson / before / after / betweenDates follow the store’s timezone.

Looking for a full developer-friendly list? See app/lib/filterRegistry.ts inside the repo for the canonical catalog of fields and operators.

Case sensitivity

  • Title, vendor, product type, tags, status, and price filters are case-insensitive.
  • SKU, barcode, and metafield value filters are case-sensitiveSKU123 and sku123 are different. Copy/paste values from Shopify to avoid missed matches.
  • When in doubt, run Preview count to confirm the matched totals before adding actions.

Common filter recipes

  • All T-shirts from Vendor X: Product type is T-Shirt AND Vendor is Vendor X.
  • Variants with a specific SKU prefix: Switch to Variant scope → Variant SKU contains ABC-.
  • Unpublished seasonal products: Status is Draft OR Published status is Unavailable.
  • Products missing SKUs: SKU is empty (variant scope) to find variants without SKUs and then pair with a pattern-based SKU job.
  • Metafield cleanup: Metafield custom.brand is empty to target products where your brand metafield hasn’t been populated yet.

On all plans, you can save complicated combinations as Saved Filter Groups so recurring cleanups stay consistent. Higher-tier plans allow more saved filter groups.

Troubleshooting filters

  • If you see zero results, temporarily switch the match toggle to Any condition to test each rule individually.
  • Use Preview → Products table to inspect the first 50 matches; if a product shouldn’t be there, refine your rules.
  • Filters mirror Shopify’s indexed search. If you need complex data joins (e.g., “orders where variants sold < 5”), consider exporting from Shopify Admin reports first. CSV import/export inside this app is coming soon and is not yet generally available.

Metafield filters: selection vs post-filtering

Metafield rules are compiled into Shopify’s product search query, so they do affect which products are selected before actions run. This helps ensure your job only touches products that truly match the metafield criteria.

See also

Was this helpful?

Still stuck? Visit the Support & contact checklist for what to include (shop URL, job ID, filters tried, screenshots), then email support@xyppy.com or open an issue at GitHub Issues.