Reference
MCP tools
60 tools. Start with a job — competitors, dropship, merch, outreach — then the catalog.
60 tools. Prefer the Playbooks / VC / Competitor / Dropship / Outreach groups. Raw wrappers are still there when you need one field.
whoami — this key's plan, usedToday, remainingToday, rate limit, expiry, and whether Signals is enabled. Does not meter. Same facts as GET /v1/whoami. Ask Cursor “what's my quota?”
limit is 1–100 unless noted. Lists use offset. Stop when hasMore is false. Search or resolve before inventing a domain.
| Tool | Args | Does | |
|---|---|---|---|
whoami | — | Return this key's plan, used today, remaining quota, and expiry. Not metered — call first for “what's my quota?” | |
upgrade | — | Return the paid checkout URL when trial ends, quota is 0, or Signals is blocked. Show the URL — do not invent one. | |
list_playbooks | — | List composed-tool playbooks by job: store lists, VC, competitor, dropship, outreach, merch. Start here. | |
get_examples | — | Same playbook map as list_playbooks. Prefer list_playbooks. | |
brief_market | vertical, countryCode, minVisits | Return a one-page TAM brief from 1.37M stores: vertical size, geos, movers, optional cohort. Quote catalog counts only. | |
cohort_tam | filters, groupBy, groupMetric | Roll a filtered store cohort into a groupBy table. Not the unfiltered get_countries TAM. | |
find_peers | domain, limit | Find stores in the same vertical, country, and visit band, then compare cards. | |
diligence_pack | domain | Build an IC memo: growth, traffic, stack roles, bestsellers, changes, contacts. | |
compare_stacks | domains[2–8] | Compare 2–8 app stacks: shared vs exclusive, tagged by role. | |
competitor_moves | domain, since | List catalog store/SKU changes and vertical movers. Ads and daily units need a paid Signals watch. | |
overlap_vendors | domainA, domainB, limit | Find shared product vendors and the average price gap between two stores. | |
niche_research | q, market?, limit? | Run semantic product-idea search plus saturation report and stores that sell the top hit. q is a name or category, not a domain. | |
search_product_ideas | q, market, priceMin, priceMax, trending, countries, region | Search product names/categories → ideas with seller count and UNTAPPED→SATURATED verdict. Prefer niche_research for “is this saturated?” | |
suggest_product_ideas | q, limit | Autocomplete product-idea names. Follow with niche_research. | |
trending_product_ideas | — | List product ideas the catalog marks as heating up. Pair with get_product_research. | |
get_product_research | id | Return the saturation report for one idea. Copy id from search_product_ideas. | |
list_product_sellers | id, sort, page, limit | List stores selling that idea. sort=traffic | price. |
screen_dropship | vertical, countryCode, minVisits, priceMax, limit | List dropship-flagged stores plus their cheapest SKUs. | |
source_map | q, vendor, productType, storeVertical, priceMax | Group a SKU search by vendor: store count + price min/max. | |
winning_skus | storeVertical or storeDomain, since | List bestsellers, ≥10% markdowns, and new products. Need storeVertical or storeDomain. | |
product_search | q, storeDomain, vendor, productType, tag, storeVertical, isBestSeller, priceMin, priceMax, sort, order, limit | Search SKUs plus facets (vendors, types, stores, price). At least one filter required. | |
product_intel | domain+handle or q | Build one SKU memo: price vs compare-at, store, SKU history, bestsellers. | |
change_tracker | domain, since, limit | Return a full change board: unified feed + all product and store change types. | |
price_watch | storeDomain, productType, since, minPriceChangePct | List markdowns and hikes. Default min 10%. | |
assortment_watch | storeDomain, productType, since | List new / removed SKUs and bestseller enter / exit. | |
get_contacts | domain or q | Return emails, social URLs, and ESP/support tells. No phone or owner names. | |
find_outreach | vertical, countryCode, appSlug, minVisits, limit≤10 | Filter 1.37M stores, hydrate cards, keep rows with email or Instagram. Caps at 10. | |
resolve_store | q | Resolve a brand or URL against 1.37M storefronts (up to 5 candidates). One hit → full store card. | |
get_upstream_health | — | Return catalog health JSON. Use when a lookup fails unexpectedly. | |
search_stores | q, vertical, category, industry, countryCode, isDropshipper, appSlug, min/max visits & revenue, minRating, groupBy, groupBy2, groupMetric, sort, order, limit, offset | Filter 1.37M Shopify stores into a list, or groupBy into tables (not store rows). Country is a filter, not a login region. | |
get_store | domain | Return one merchant card: traffic, modeled revenue, rating, apps, socials. Missing domain stays not_found. | |
compare_stores | domains[2–8] | Compare 2–8 store cards side by side. Missing domains land in notFound. | |
get_store_traffic | domain, limit≤120 | Return monthly visits and channel mix for one store. | |
get_store_products | domain, q, isBestSeller, vendor, productType, tag, priceMin, priceMax, sort, order, limit, offset | List SKUs for one merchant. Prefer this over global search when you have a domain. | |
get_store_apps | domain | List Shopify apps detected on one merchant. | |
get_store_history | domain, limit≤365 | Return daily snapshots: visits, revenue band, rating, product counts. | |
get_store_changes | domain, changeType, since, limit, offset | List observation diffs: revenue, visits, products, rating, apps. | |
search_products | q, storeDomain, vendor, productType, tag, storeVertical, isBestSeller, priceMin, priceMax, sort, order, limit, offset | Search SKUs across 368.9M products. At least one filter required. Saturation → niche_research. | |
get_product | domain, handle | Return one SKU by store domain plus Shopify handle. | |
get_product_changes | storeDomain, changeType, productType, since, minPriceChangePct, limit, offset | List price / new / removed / position / bestseller SKU movements. | |
get_changes | entity, domain, since, limit | Return the unified store + product movement feed. Prefer change_tracker for a full board. | |
search_apps | q, category, pricingType, minRating, builtForShopify, sort, order, limit, offset | Search the Shopify App Store catalog. | |
get_app | slug | Return one app plus an install-base sample. | |
get_app_stores | slug, limit, offset | List merchants observed running that app, sorted by visits. | |
get_analytics_overview | — | Return coverage counts, averages, top verticals and countries. Quote snapshot figures only. | |
get_verticals | countryCode, limit | Return market size by vertical. Pass countryCode to slice one geo. | |
get_countries | vertical, limit | Return unfiltered geo TAM. Filtered cohort → search_stores groupBy=country. | |
get_movers | metric, direction, vertical, countryCode, since, minPct, limit | List stores growing or shrinking. Defaults: metric/direction any, minPct 5. | |
create_signal | domain, autoTrack? | Paid only (trial 403). Create a Signals watch on this key. Tight cap. No probe. | |
list_signals | limit, offset | Paid only (trial 403). List watches stored on this key. Then GET a domain already on Signals. | |
get_signal | id | Paid only (trial 403). Return one signal card. id = Mongo id or domain. | |
get_signal_stats | id | Paid only (trial 403). Return totals plus store profile if already watched. | |
get_signal_sales | id, from, to | Paid only (trial 403). Return daily units + variants. Needs ≥2 inventory snapshots. | |
get_signal_inventory | id | Paid only (trial 403). Return the stock timeline. | |
get_signal_social | id | Paid only (trial 403). Return follower snapshots. | |
get_signal_ads | id, slice, days | Paid only (trial 403). Return the ad library. slice: overview (default), ads, correlation, revenue, product-impact, timeline, events. | |
get_signal_apps | id, changes? | Paid only (trial 403). Return apps on a tracked store. changes=true → /apps/changes. | |
get_signal_product_changes | id | Paid only (trial 403). Return product movements on a tracked store. | |
get_signal_insights | id | Paid only (trial 403). Return the per-signal insight feed. | |
list_signal_insights | limit, offset | Paid only (trial 403). Account-wide insights. Empty unless the key owns watches. Prefer get_signal_insights + domain. |
Signals: create_signal (paid only, 8 watches on Explorer) maps the Neonjelly key to an EcomScout watch. GET stats/sales/ads/inventory if the domain is already on Signals. Neonjelly does not probe, patch, stop, or delete. Partner service keys cannot create new EcomScout watches — create still stores the domain on your key; new watches may need the EcomScout Signals dashboard.