One compact lookup per store
Each normalized domain is checked sequentially through one compact exact-domain store lookup.
IdentityThis workflow returns one verified Shopify app-stack comparison.
Inspect one store or compare exact detected relationships across multiple stores, with incomplete detection stated explicitly.
Example run · 13 Oct 2026 · <1 min
Published by Spytrend · 29 Sep 2026 · Methodology
Prompts update with two required and up to two optional store domains.
Normalize two to four stores for one comparison.
View promptHide promptCompare detected Shopify app stacks for these store domains: mejuri.com, dusk.com, none, none. Focus: apps_only. Ignore entries equal to `none` (optional fields left blank). Normalize and deduplicate two to four public merchant domains, preserving submitted order. Reject invalid or infrastructure domains. Never substitute fuzzy, related, regional, campaign, account, shop or subdomain matches. Do not call tools. Return only the retained domains and evidence boundary: `Detected technology may be incomplete. Not returned does not mean an app is not installed or used.` Stop after Step 1.
Retain exact returned app labels without loading full product catalogs.
View promptHide promptCost guard: before each paid Spytrend call, run the free `estimate_cost` with the same tool and arguments, estimate the cost and stay within the user's stated budget; if the user has not stated a budget, tell them the estimate before the first paid call. If pricing consent is required, show the returned terms and stop until the customer explicitly agrees; never accept on the customer's behalf. If a required call does not fit the stated budget, make no paid call and return `Budget limit prevents required research`; omit an optional call that does not fit and disclose reduced coverage. When opening ads with `get_ad`, skip multilang ads (`is_multilang`) and never call `get_media` after `get_ad`. Retry once only when `retryable=true`, after `retry_after_seconds`. Read `params.ignored` after every search; an ignored required filter never counts as applied. Cost notices are not part of the final customer report. For each retained domain, run sequentially search_shops(q=<exact normalized host>, platform="Shopify", exclude_infrastructure=true, limit=5). Accept only the row whose normalized host exactly equals the submitted host. Never call get_shop, search_ads, get_ad or get_advertiser. Retain Shopify identity, exact app names and identifiers/categories. Keep pixels, analytics, theme, plan, review, messaging, payment, checkout and tracker fields as Supporting technology. Preserve every returned app but do not call the list complete. Return only concise retained evidence and lookup status. Hide calls, IDs, quotas, timing and fuzzy rows. Stop after Step 2.
Classify evidence and calculate exact overlap among qualified stores.
View promptHide promptUsing retained evidence only, classify each domain as Qualified, Limited evidence or Unresolved. Missing data is Not returned, never absent or unused. Compare exact normalized app display names only among Qualified stores. Do not merge similar names or functions. Limited and Unresolved domains stay outside overlap denominators. Set execution status to Complete when every required exact-domain lookup completed and its required filters were applied, including lookups with no exact row or sparse technology. Use Partial only when at least one required lookup failed or a required filter was ignored. Evidence incompleteness does not by itself make execution Partial. Return only classifications and supported exact-name overlap. Stop after Step 3.
Show functional differences, useful questions and evidence limits.
View promptHide promptWrite the final answer from retained evidence only. Do not make more tool calls. Use `# Compare Shopify App Stacks`, show counts plus Complete/Partial, then state: `Detected technology may be incomplete. Not returned does not mean an app is not installed or used.` Show Shared exact apps, one compact section per store, store-specific detections, up to four inspection questions and Evidence limits. If no exact app is shared, say so plainly. Preserve the retained execution status exactly. Do not change Complete to Partial merely because detected technology may be incomplete or fields were not returned. Use no tables and stay within 320 words. Hide the service name, internal labels, calls, IDs, quotas, timing, retries and run summaries. Do not infer active use, configuration, performance, revenue, ROAS or profitability. End exactly: `Detected technology is an observed relationship, not proof of active configuration, usage, completeness, quality, conversions, revenue, ROAS or profitability.` Stop after Step 4.
Cost guard: before each paid Spytrend call, run the free `estimate_cost` with the same tool and arguments, estimate the cost and stay within the user's stated budget; if the user has not stated a budget, tell them the estimate before the first paid call. If pricing consent is required, show the returned terms and stop until the customer explicitly agrees; never accept on the customer's behalf. If a required call does not fit the stated budget, make no paid call and return `Budget limit prevents required research`; omit an optional call that does not fit and disclose reduced coverage. When opening ads with `get_ad`, skip multilang ads (`is_multilang`) and never call `get_media` after `get_ad`. Retry once only when `retryable=true`, after `retry_after_seconds`. Read `params.ignored` after every search; an ignored required filter never counts as applied. Cost notices are not part of the final customer report. Use the connected Spytrend MCP to compare detected Shopify app relationships for **mejuri.com, dusk.com, none, none**. Focus: **apps_only**. Execute every research stage in this prompt in one turn. Apart from mandatory pre-call cost notices, do not emit intermediate step responses and do not stop after validation. Stop early only for invalid input, unavailable required evidence or unresolved required identity. Return only the final customer report. ## Inputs 1. Ignore entries equal to `none` (optional fields left blank). Accept two to four unique public merchant domains. Normalize hosts, preserve submitted order and deduplicate exact normalized hosts. Reject infrastructure, localhost, IP addresses and invalid domains. If fewer than two or more than four remain, return exactly `Invalid controlled input configuration` and make no MCP call. 2. Never substitute a related, regional, campaign, account, shop or fuzzy-matched domain. ## Compact evidence 3. For each retained domain, run sequentially: `search_shops(q=<exact normalized host>, platform="Shopify", exclude_infrastructure=true, limit=5)` 4. Accept only a row whose normalized host exactly equals the submitted host. A root domain does not match its subdomain; a submitted subdomain requires that exact host. 5. Never call `get_shop`, `search_ads`, `get_ad` or `get_advertiser`. Missing exact rows and sparse technology remain unresolved or limited evidence. 6. Retain explicit Shopify identity, exact app display names and returned app identifiers/categories. Keep pixels, analytics, theme, plan, review, email/SMS, payment, checkout and tracker fields in a separate Supporting technology block. Country and traffic are optional context, not app-stack evidence. 7. Preserve every app returned in the compact exact-domain row. Deduplicate only identical normalized display names. Never call the returned list complete. ## Classification and comparison 8. Classify each domain as Qualified, Limited evidence or Unresolved. Qualified requires the exact Shopify domain and at least one focus-relevant technology field. Limited evidence means the exact Shopify domain resolved but focus-relevant technology is missing, empty or ambiguous. Unresolved means no exact row, a domain conflict or unconfirmed Shopify identity. 9. Missing data is `Not returned`, never zero, not installed or not used. 10. Calculate overlap only among Qualified stores using exact normalized app display names. Show all-store overlap only when present in every Qualified store. Show pair/subset overlap only when at least two Qualified stores share the exact name. Limited and Unresolved domains stay outside overlap denominators. 11. Do not merge similar app names, vendors or functions. Group by function only when returned categories or a maintained catalog relationship supports it. ## Customer answer 12. Return `# Compare Shopify App Stacks` and `**[N] qualified · [M] limited · [K] unresolved · [Complete/Partial]**`. 13. Immediately add: `Detected technology may be incomplete. Not returned does not mean an app is not installed or used.` 14. Show Shared exact apps, one compact section per submitted domain, store-specific detections, up to four inspection questions and Evidence limits. If no exact app is shared, say so plainly. 15. For `apps_only`, show every exact app name and omit supporting fields. For other focuses, show relevant exact apps and supporting technology. For `all_detected_technology`, show both. 16. Keep the answer table-free and within 320 words. Hide service name, preset/workflow/search-set names, taxonomy slugs, route and tool names, calls, parameters, raw IDs, JSON, quotas, tokens, timing, retries, run summaries and rejected fuzzy rows. 17. Label an explicitly returned stable first-party link `Evidence`. Never construct one. 18. Mark Partial only when a required lookup failed. A completed lookup with no exact row or sparse technology is Complete with Limited/Unresolved classification. 19. Never rank stack quality or infer maturity, optimization, active use, conversions, revenue, ROAS or profitability. End exactly: `Detected technology is an observed relationship, not proof of active configuration, usage, completeness, quality, conversions, revenue, ROAS or profitability.`
Stores are columns and exact app names are rows. Both stores resolved as exact root-domain Shopify merchants and qualified; Mejuri returned 5 exact apps and Dusk returned 12. With the Apps only focus, pixels and theme fields stay out of the matrix.
| App | Mejuri · mejuri.com | Dusk · dusk.com |
|---|---|---|
| Klarna | Detected | Detected |
| Postscript SMS | Detected | Detected |
| Yotpo | Detected | Detected |
| Gorgias | Detected | Not returned |
| Shop Pay | Detected | Not returned |
| Bloomreach Discovery v2 | Not returned | Detected |
| Elevar Conversion Tracking | Not returned | Detected |
| Judge.me Reviews | Not returned | Detected |
| Microsoft Clarity | Not returned | Detected |
| Swym Wishlist | Not returned | Detected |
| contentsquare-analytics | Not returned | Detected |
| dusk-aurora | Not returned | Detected |
| loyalty-rewards-and-referrals | Not returned | Detected |
| pandectes-gdpr | Not returned | Detected |
Shared means the exact same display name, including capitalization and punctuation.
Differences appear as readable blocks for messaging, reviews, checkout, analytics and other supported functions.
The result raises implementation questions without scoring quality or recommending that one store copy another.
Published by Spytrend from a dated, bounded example.
Each normalized domain is checked sequentially through one compact exact-domain store lookup.
IdentityIntersections use literal names from each Qualified store compact app list.
Comparison keyEach store keeps its functional grouping while the comparison calculates case-sensitive exact-name overlap.
GroupingStructured technology fields explain asymmetries but never change exact counts.
Evidence boundaryUse two to four unique public merchant domains for one comparison.
The same case-sensitive display name must appear in every participating store exact app list.
No. Similar names, vendors or functions do not create an exact match.
It means the relationship was absent from the returned exact list. It is not proof that the store does not use it.
No. Exact counts do not measure quality, maturity, optimization or performance.
Connect Spytrend MCP, enter two to four domains and run the prompts in one AI chat.