Neonjelly.io
Neonjelly — Shopify store lists, emails, and competitor tracking for your AI.
What it can do
- Whoami: Return this key's plan, used today, remaining quota, rate limit, and expiry. Does not count against daily quota — call first when the user asks “what's my quota?” If remaining is 0 or trial ex
- Upgrade: Return the paid upgrade URL when trial expired, daily quota is 0, or Signals is blocked. Does not count against quota. Always show the returned URL — never invent a checkout link.
- Resolve Store: Resolve a brand name or URL against 1.37M Shopify storefronts and return up to 5 candidates. On a single hit, also return the full store card — call this before inventing a domain; miss
What data it sees
Do you need an account
No: the server works without sign-in
Neonjelly — Shopify store lists, emails, and competitor tracking for your AI. MCP + API over 1.37M stores. 14-day free trial, no account.
Neonjelly is a remote MCP server + REST API over a catalog of 1.37M Shopify stores. Your AI (Cursor, Claude, ChatGPT, VS Code, Windsurf) can pull store lists with emails, filter by country/category/traffic, follow product/price/traffic change feeds, and check whether a product idea is saturated (seller count + verdict). Connect in one click — a 14-day trial (100 lookups/day, 20/min, one per device and AI client) starts on install, no account or card. Paid plans from $29/mo (Explorer / Operator / Scale) add higher quotas and Signals watches. Indexed by EcomScout.
Server tool list (60)
Raw names from tools/list. Only developers need these.
| whoami | Return this key's plan, used today, remaining quota, rate limit, and expiry. Does not count against daily quota — call first when the user asks “what's my quota?” If remaining is 0 or trial expired, call upgrade and open the URL. |
| upgrade | Return the paid upgrade URL when trial expired, daily quota is 0, or Signals is blocked. Does not count against quota. Always show the returned URL — never invent a checkout link. |
| resolve_store | Resolve a brand name or URL against 1.37M Shopify storefronts and return up to 5 candidates. On a single hit, also return the full store card — call this before inventing a domain; missing stores stay not_found. |
| list_playbooks | List composed-tool playbooks by job: store lists, VC, competitor, dropship, outreach, merch. Start here when the user has not named a tool — then call the playbook's first tool. |
| get_examples | Same playbook map as list_playbooks (VC, competitor, dropship, outreach). Prefer list_playbooks on new sessions. |
| brief_market | Return a one-page TAM brief: vertical size, geos, movers, and an optional filtered cohort from 1.37M stores. Pass a vertical; quote catalog counts only — do not invent TAM. |
| cohort_tam | Roll a filtered store cohort into a groupBy table (country, vertical, industry, category). This is not the unfiltered get_countries TAM — use that when no filters apply. |
| find_peers | Find stores in the same vertical, country, and visit band as a target domain, then compare cards. Call resolve_store first if you only have a brand name. |
| diligence_pack | Build an IC memo for one domain: card, growth, traffic, stack roles, bestsellers, changes, and contacts. Includes Signals stats only if that domain is already watched. |
| compare_stacks | Compare 2–8 store app stacks: shared vs exclusive apps, tagged by role (email, support, reviews, subs, ads). Pass hostnames, not brand names. |
| competitor_moves | List catalog store and SKU changes plus vertical movers for one competitor domain. Ads and daily units need a paid Signals watch — do not offer create_signal on trial. |
| overlap_vendors | Find product-vendor overlap and the average price gap between two stores. Use after compare_stacks when you need shared suppliers, not shared apps. |
| screen_dropship | List dropship-flagged stores in a vertical/geo plus their cheapest SKUs. Country is a filter, not a login region — quote the catalog flag, do not invent supplier names. |
| source_map | Group a SKU search by vendor: store count and price min/max across the catalog. Use for sourcing or arbitrage after niche_research names the product. |
| winning_skus | List bestsellers, ≥10% markdowns, and new products for a vertical or one store. Require storeVertical or storeDomain — do not call empty. |
| niche_research | Run semantic product-idea search plus a saturation report and the stores that sell the top hit. q is a product name or category, not a domain — quote seller count and the UNTAPPED→SATURATED verdict. |
| search_product_ideas | Search product names/categories and return ideas with seller count, price, and UNTAPPED→SATURATED verdict — not one-store listings. Prefer niche_research when the user asks “is this saturated?” |
| suggest_product_ideas | Autocomplete product-idea names as the user types. Follow with search_product_ideas or niche_research on the chosen row. |
| trending_product_ideas | List product ideas the catalog marks as heating up. Pair a hit with get_product_research and list_product_sellers — do not invent trend scores. |
| get_product_research | Return the saturation report for one product idea. Copy id from search_product_ideas or niche_research — do not invent seller counts. |
| list_product_sellers | List stores selling a product idea, sorted by traffic or price. Copy id from search_product_ideas — this is who-sells-this, not a single merchant SKU list. |
| product_search | Search cross-store SKUs and return rows plus facets (vendors, types, stores, price band). At least one filter is required. For saturation / who-sells-this-idea, use niche_research. |
| product_intel | Build one SKU memo: card, discount vs compare-at, store, SKU change history, and store bestsellers. Pass domain+handle, or q to resolve first. |
| change_tracker | Return a full change board: unified feed, all 8 product change types, 5 store change types, and Signals SKU changes if watched. Prefer this over calling each change tool separately. |
| price_watch | List price decreases and increases across stores or one merchant. Default minPriceChangePct is 10 — raise it to cut noise. |
| assortment_watch | List new and removed SKUs plus bestseller enter/exit. Filter by storeDomain or productType when the user names a shop or category. |
| get_contacts | Return emails, social URLs, and ESP/support app tells for one store. No phone or owner names in this catalog — pass domain or q. |
| find_outreach | Filter the 1.37M-store catalog, hydrate each row, and keep stores that have an email or Instagram. Caps at 10 (each costs a call) — country is a filter, not a login region. |
| get_upstream_health | Return catalog health JSON and whether auth is required. Use when a lookup fails unexpectedly — not for store research. |
| search_stores | Filter 1.37M Shopify stores into a list (emails/socials live on the card) or roll them up with groupBy. Without groupBy you get store cards; with groupBy you get breakdown rows, not stores. Country is a filter, not a login region. |
| get_store | Return one merchant card: traffic, modeled revenue, rating, apps, and socials. Call resolve_store first if you only have a brand name — missing domains stay not_found. |
| compare_stores | Compare 2–8 store cards side by side (traffic, revenue band, apps, rating). Missing domains land in notFound — do not invent the missing rows. |
| get_store_traffic | Return monthly visits and channel mix for one store. Use after get_store when the user asks how traffic is trending. |
| get_store_products | List SKUs for one merchant with price, vendor, type, and bestseller filters. Prefer this over global search_products when you already have a domain. |
| get_store_apps | List Shopify apps detected on one merchant. Use compare_stacks when the user wants shared vs exclusive apps across several domains. |
| get_store_history | Return daily snapshots: visits, revenue band, rating, and product counts, up to 365 days. Use for growth charts after get_store. |
| get_store_changes | List observation diffs for one store: revenue, visits, products, rating, apps. For a mixed product+store board, prefer change_tracker. |
| search_products | Search SKUs across the 368.9M-product catalog. At least one filter is required. For saturation or who-sells-this-idea, use niche_research. |
| get_product | Return one SKU by store domain plus Shopify handle. Use get_store_products or product_search when you do not yet have the handle. |
| get_product_changes | List price, new, removed, position, and bestseller SKU movements. Filter by storeDomain or productType; default noise floor is minPriceChangePct. |
| get_changes | Return the unified store + product movement feed. Prefer change_tracker when the user wants every change type on one board. |
| search_apps | Search the Shopify App Store catalog by name, category, pricing, or rating. Follow a slug with get_app_stores to see which merchants run it. |
| get_app | Return one Shopify app plus an install-base sample. Copy slug from search_apps, then get_app_stores for the merchant list. |
| get_app_stores | List merchants observed running a Shopify app, sorted by visits. Use for “who uses Klaviyo?” store lists — country filters live on search_stores, not here. |
| get_analytics_overview | Return catalog coverage: store/SKU counts, averages, top verticals and countries. Quote these snapshot figures only — do not invent traffic totals. |
| get_verticals | Return market size by vertical (store counts and averages). Pass countryCode to slice one geo — for a filtered cohort, use search_stores with groupBy=vertical. |
| get_countries | Return unfiltered geo TAM (store counts by country). Pass vertical to slice one market; a filtered cohort belongs on search_stores groupBy=country. |
| get_movers | List stores growing or shrinking on visits or modeled revenue. Defaults: metric/direction any, minPct 5. Quote catalog movers only. |
| create_signal | Paid plans only (trial 403). Create a Signals watch on a competitor domain for ads, units, inventory, and social. Tight watch cap; meters the key. No probe, no scrape. |
| list_signals | Paid plans only (trial 403). List Signals watches stored on this Neonjelly key. Then GET a domain that is already on Signals — do not advertise this on trial. |
| get_signal | Paid plans only (trial 403). Return one signal card. id is a Mongo id or a domain already on Signals. |
| get_signal_stats | Paid plans only (trial 403). Return totals plus store profile for a signal. Domain must already be on Signals. |
| get_signal_sales | Paid plans only (trial 403). Return daily units and variants. Needs ≥2 inventory snapshots on the watch — do not invent unit counts. |
| get_signal_inventory | Paid plans only (trial 403). Return the stock timeline for a watched store. Domain must already be on Signals. |
| get_signal_social | Paid plans only (trial 403). Return follower snapshots for a watched store. Domain must already be on Signals. |
| get_signal_ads | Paid plans only (trial 403). Return the ad library or a slice (overview default). No probe — domain must already be on Signals. |
| get_signal_apps | Paid plans only (trial 403). Return apps observed on a tracked store. Set changes=true for app change history. |
| get_signal_product_changes | Paid plans only (trial 403). Return product movements on a tracked store. Catalog-wide SKU moves use get_product_changes. |
| get_signal_insights | Paid plans only (trial 403). Return the insight feed for one watched domain. Prefer this over list_signal_insights. |
| list_signal_insights | Paid plans only (trial 403). Account-wide insight feed — often empty unless the key owns watches. Prefer get_signal_insights with a domain already on Signals. |