sellerclaw-cli 3.2.0__tar.gz → 3.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/PKG-INFO +1 -1
  2. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/pyproject.toml +1 -1
  3. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_listings.py +8 -0
  4. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_catalog.py +37 -9
  5. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_listings.py +26 -1
  6. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_listings.py +8 -0
  7. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_listings.py +8 -0
  8. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_listings.py +8 -0
  9. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_listings.py +9 -0
  10. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/research.md +27 -4
  11. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/.gitignore +0 -0
  12. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/LICENSE +0 -0
  13. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/README.md +0 -0
  14. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/plugin/claude/README.md +0 -0
  15. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/__init__.py +0 -0
  16. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/__main__.py +0 -0
  17. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_agent_id.py +0 -0
  18. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_auth.py +0 -0
  19. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_client.py +0 -0
  20. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_command_group.py +0 -0
  21. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_config.py +0 -0
  22. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_errors.py +0 -0
  23. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_generated/.gitkeep +0 -0
  24. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_job_wait.py +0 -0
  25. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_output.py +0 -0
  26. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_runtime.py +0 -0
  27. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_session_key.py +0 -0
  28. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_task_context.py +0 -0
  29. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/assets/icon.png +0 -0
  30. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/cli.py +0 -0
  31. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/__init__.py +0 -0
  32. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_auth_cli.py +0 -0
  33. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_discover.py +0 -0
  34. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_listing_shape.py +0 -0
  35. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/account.py +0 -0
  36. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/action_requests.py +0 -0
  37. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ad_accounts.py +0 -0
  38. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/agent_files.py +0 -0
  39. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon.py +0 -0
  40. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_fba.py +0 -0
  41. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_listings.py +0 -0
  42. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_orders.py +0 -0
  43. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_store.py +0 -0
  44. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/analytics.py +0 -0
  45. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/attributes.py +0 -0
  46. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce.py +0 -0
  47. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_orders.py +0 -0
  48. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_store.py +0 -0
  49. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/catalog.py +0 -0
  50. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/catalog_file.py +0 -0
  51. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/categories.py +0 -0
  52. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/channels.py +0 -0
  53. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/chats.py +0 -0
  54. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/competitors.py +0 -0
  55. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay.py +0 -0
  56. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_feedback.py +0 -0
  57. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_finances.py +0 -0
  58. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_listings.py +0 -0
  59. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_orders.py +0 -0
  60. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_promoted.py +0 -0
  61. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_shipping.py +0 -0
  62. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_store.py +0 -0
  63. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/email.py +0 -0
  64. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy.py +0 -0
  65. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_finances.py +0 -0
  66. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_listings.py +0 -0
  67. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_orders.py +0 -0
  68. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_store.py +0 -0
  69. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/facebook_ads.py +0 -0
  70. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/goals.py +0 -0
  71. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/google_ads.py +0 -0
  72. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/integrations.py +0 -0
  73. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/kb.py +0 -0
  74. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/klaviyo.py +0 -0
  75. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/listing_problems.py +0 -0
  76. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/listings.py +0 -0
  77. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/media.py +0 -0
  78. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/models.py +0 -0
  79. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/orders.py +0 -0
  80. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/pdf.py +0 -0
  81. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/price_list.py +0 -0
  82. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_seo.py +0 -0
  83. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_social.py +0 -0
  84. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_trends.py +0 -0
  85. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/reviews.py +0 -0
  86. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart.py +0 -0
  87. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_domain.py +0 -0
  88. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_media.py +0 -0
  89. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_menus.py +0 -0
  90. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_pages.py +0 -0
  91. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_payouts.py +0 -0
  92. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_products.py +0 -0
  93. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sheets.py +0 -0
  94. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify.py +0 -0
  95. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_collections.py +0 -0
  96. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_finances.py +0 -0
  97. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_menus.py +0 -0
  98. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_orders.py +0 -0
  99. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_pages.py +0 -0
  100. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_store.py +0 -0
  101. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_themes.py +0 -0
  102. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/social.py +0 -0
  103. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/spreadsheet.py +0 -0
  104. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/store_audit.py +0 -0
  105. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/subagent_tasks.py +0 -0
  106. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/suppliers.py +0 -0
  107. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/team.py +0 -0
  108. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/team_tasks.py +0 -0
  109. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_orders.py +0 -0
  110. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_store.py +0 -0
  111. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart.py +0 -0
  112. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_orders.py +0 -0
  113. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_store.py +0 -0
  114. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/web.py +0 -0
  115. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix.py +0 -0
  116. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_orders.py +0 -0
  117. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_store.py +0 -0
  118. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce.py +0 -0
  119. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_orders.py +0 -0
  120. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_store.py +0 -0
  121. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/__init__.py +0 -0
  122. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/ads.md +0 -0
  123. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/analytics.md +0 -0
  124. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/catalog.md +0 -0
  125. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/email.md +0 -0
  126. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/listings.md +0 -0
  127. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/orders.md +0 -0
  128. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/start.md +0 -0
  129. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/storefront.md +0 -0
  130. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/suppliers.md +0 -0
  131. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/topics.json +0 -0
  132. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/mcp_apps.py +0 -0
  133. {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/mcp_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sellerclaw-cli
3
- Version: 3.2.0
3
+ Version: 3.3.0
4
4
  Summary: Command-line client and MCP server for the SellerClaw Agent API — run your stores, orders, listings, ads and suppliers from a terminal, scripts, or Claude. LLM-friendly JSON, browser sign-in.
5
5
  Project-URL: Homepage, https://sellerclaw.ai
6
6
  Project-URL: Documentation, https://github.com/sellerai-com/sellerclaw-cli#readme
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sellerclaw-cli"
7
- version = "3.2.0"
7
+ version = "3.3.0"
8
8
  description = "Command-line client and MCP server for the SellerClaw Agent API — run your stores, orders, listings, ads and suppliers from a terminal, scripts, or Claude. LLM-friendly JSON, browser sign-in."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -45,6 +45,14 @@ SPECS = (
45
45
  choices=("active", "published", "draft", "withdrawn"),
46
46
  help="Mirror status to filter by; omit for all.",
47
47
  ),
48
+ flag(
49
+ "marketplace_statuses",
50
+ type=bool,
51
+ help=(
52
+ "Also count the products by BigCommerce's own status (visible/hidden) — hidden ones included, "
53
+ "which the mirror does not hold. Asks BigCommerce; every other number is the same without it."
54
+ ),
55
+ ),
48
56
  ),
49
57
  ),
50
58
  Cmd(
@@ -18,8 +18,16 @@ _ALL_STOREFRONTS = (
18
18
  "ikea",
19
19
  "nike",
20
20
  "allbirds",
21
+ "shopify",
21
22
  )
22
23
 
24
+ _STORE_HELP = (
25
+ "shopify only: one store's domain (or any link on it) — that store's own catalogue instead of "
26
+ "every Shopify store."
27
+ )
28
+ _COUNTRY_HELP = "shopify only: the buyer's two-letter country (US, GB, CA ...). Everything else here is US."
29
+ _CURRENCY_HELP = "shopify only: the currency to price in (USD, GBP ...)."
30
+
23
31
  SPECS = (
24
32
  Cmd(
25
33
  "ebay-search",
@@ -68,7 +76,9 @@ SPECS = (
68
76
  "listing_id",
69
77
  help=(
70
78
  "The storefront's own id: Amazon ASIN, eBay item number, Etsy listing id, "
71
- "Best Buy SKU, Newegg item number, Nike style-colour. A product URL also works."
79
+ "Best Buy SKU, Newegg item number, Nike style-colour, Shopify gid://shopify/p/... "
80
+ "(gid://shopify/Product/... with store). A product URL also works, except inside "
81
+ "one Shopify store."
72
82
  ),
73
83
  ),
74
84
  body_field(
@@ -79,7 +89,9 @@ SPECS = (
79
89
  "Allbirds this is a second call and costs twice as much."
80
90
  ),
81
91
  ),
82
- body_field("currency", help="Preferred display currency where supported (Etsy)."),
92
+ body_field("currency", help="Preferred display currency where supported (Etsy, Shopify)."),
93
+ body_field("store", help=_STORE_HELP),
94
+ body_field("country", help=_COUNTRY_HELP),
83
95
  ),
84
96
  ),
85
97
  Cmd(
@@ -91,23 +103,36 @@ SPECS = (
91
103
  body_field(
92
104
  "marketplace",
93
105
  required=True,
94
- choices=("amazon", "bestbuy", "newegg", "nike", "allbirds"),
95
- help="Storefront to search. eBay has its own richer command: ebay-search.",
106
+ choices=("amazon", "bestbuy", "newegg", "nike", "allbirds", "shopify"),
107
+ help=(
108
+ "Storefront to search. shopify searches every Shopify store and names the store "
109
+ "selling each row. eBay has its own richer command: ebay-search."
110
+ ),
111
+ ),
112
+ body_field(
113
+ "query",
114
+ help="What to search for. Required, except when browsing one Shopify store (store).",
96
115
  ),
97
- body_field("query", required=True, help="What to search for."),
98
116
  body_field("limit", type=int, help="Max rows (1-50). Defaults to 10."),
99
117
  body_field(
100
118
  "page",
101
119
  type=int,
102
120
  help="Result page, on storefronts that page (amazon, bestbuy, newegg).",
103
121
  ),
122
+ body_field(
123
+ "cursor",
124
+ help="shopify only: the previous page's next_cursor, sent with the same search.",
125
+ ),
126
+ body_field("store", help=_STORE_HELP),
127
+ body_field("country", help=_COUNTRY_HELP),
128
+ body_field("currency", help=_CURRENCY_HELP),
104
129
  ),
105
130
  ),
106
131
  Cmd(
107
132
  "listing-prices",
108
133
  "POST",
109
134
  "/agent/research/catalog/listings/prices",
110
- summary="Re-check what up to 5 known listings cost right now, on one storefront.",
135
+ summary="Re-check what up to 5 known listings (50 on Shopify) cost right now, on one storefront.",
111
136
  body=(
112
137
  body_field(
113
138
  "marketplace",
@@ -121,11 +146,14 @@ SPECS = (
121
146
  required=True,
122
147
  example=["B09B8V1LZ3", "B07QK2SPP7"],
123
148
  help=(
124
- "Up to 5 storefront ids, or product URLs. Amazon checks all of them in one "
125
- "call; other storefronts are read one at a time and charged per listing. "
126
- "target, ikea and allbirds take the product URL."
149
+ "Up to 5 storefront ids, or product URLs — 50 on shopify (10 inside one store). "
150
+ "Amazon and Shopify check them all in one call; other storefronts are read one "
151
+ "at a time and charged per listing. target, ikea and allbirds take the product URL."
127
152
  ),
128
153
  ),
154
+ body_field("store", help=_STORE_HELP),
155
+ body_field("country", help=_COUNTRY_HELP),
156
+ body_field("currency", help=_CURRENCY_HELP),
129
157
  ),
130
158
  ),
131
159
  )
@@ -63,7 +63,9 @@ SPECS = (
63
63
  "carries the remote_product_id that `update` and `delete` take, already deduplicated, "
64
64
  "plus the product's title, category, variant count, stock and price range. Use this "
65
65
  "for anything product-level — reviewing categories, finding uncategorized products, "
66
- "picking what to delete — instead of `list` plus grouping the variant rows yourself."
66
+ "picking what to delete — instead of `list` plus grouping the variant rows yourself. "
67
+ "Paged: `total` counts the whole store's products; `next_offset` is where the next "
68
+ "page starts (null on the last) — pass it as `--offset` until it is null."
67
69
  ),
68
70
  flags=(
69
71
  flag(
@@ -71,6 +73,20 @@ SPECS = (
71
73
  choices=("active", "published", "draft", "withdrawn"),
72
74
  help="Mirror status to filter the underlying rows by; omit for all live listings.",
73
75
  ),
76
+ flag(
77
+ "limit",
78
+ type=int,
79
+ minimum=1,
80
+ maximum=500,
81
+ help="Max products per page (default and max 500). A page can hold fewer.",
82
+ ),
83
+ flag(
84
+ "offset",
85
+ type=int,
86
+ minimum=0,
87
+ default=0,
88
+ help="Products to skip — the previous page's `next_offset`.",
89
+ ),
74
90
  ),
75
91
  ),
76
92
  Cmd(
@@ -87,6 +103,15 @@ SPECS = (
87
103
  choices=("active", "published", "draft", "withdrawn"),
88
104
  help="Mirror status to filter by; omit for all live listings.",
89
105
  ),
106
+ flag(
107
+ "marketplace_statuses",
108
+ type=bool,
109
+ help=(
110
+ "Also count the products by Shopify's own status (active/draft/archived) — drafts and archived "
111
+ "included, which the mirror does not hold. Asks Shopify; every other number is the same without "
112
+ "it."
113
+ ),
114
+ ),
90
115
  ),
91
116
  ),
92
117
  Cmd(
@@ -47,6 +47,14 @@ SPECS = (
47
47
  choices=("active", "published", "draft", "withdrawn"),
48
48
  help="Mirror status to filter by; omit for all.",
49
49
  ),
50
+ flag(
51
+ "marketplace_statuses",
52
+ type=bool,
53
+ help=(
54
+ "Also count the products by TikTok Shop's own status — those not on sale included, which the "
55
+ "mirror does not hold. Asks TikTok Shop; every other number is the same without it."
56
+ ),
57
+ ),
50
58
  ),
51
59
  ),
52
60
  Cmd(
@@ -46,6 +46,14 @@ SPECS = (
46
46
  choices=("active", "published", "draft", "withdrawn"),
47
47
  help="Mirror status to filter by; omit for all.",
48
48
  ),
49
+ flag(
50
+ "marketplace_statuses",
51
+ type=bool,
52
+ help=(
53
+ "Also count the items by Walmart's own lifecycle status (active/retired) — retired ones included,"
54
+ " which the mirror does not hold. Asks Walmart; every other number is the same without it."
55
+ ),
56
+ ),
49
57
  ),
50
58
  ),
51
59
  Cmd(
@@ -45,6 +45,14 @@ SPECS = (
45
45
  choices=("active", "published", "draft", "withdrawn"),
46
46
  help="Mirror status to filter by; omit for all.",
47
47
  ),
48
+ flag(
49
+ "marketplace_statuses",
50
+ type=bool,
51
+ help=(
52
+ "Also count the products by Wix's own status (visible/hidden) — hidden ones included, which the "
53
+ "mirror does not hold. Asks Wix; every other number is the same without it."
54
+ ),
55
+ ),
48
56
  ),
49
57
  ),
50
58
  Cmd(
@@ -45,6 +45,15 @@ SPECS = (
45
45
  choices=("active", "published", "draft", "withdrawn"),
46
46
  help="Mirror status to filter by; omit for all.",
47
47
  ),
48
+ flag(
49
+ "marketplace_statuses",
50
+ type=bool,
51
+ help=(
52
+ "Also count the products by WooCommerce's own status (publish/draft/pending/private) — "
53
+ "unpublished ones included, which the mirror does not hold. Asks WooCommerce; every other number "
54
+ "is the same without it."
55
+ ),
56
+ ),
48
57
  ),
49
58
  ),
50
59
  Cmd(
@@ -29,6 +29,12 @@ sellerclaw_run(group="research-catalog", command="listing-search",
29
29
  sellerclaw_run(group="research-catalog", command="listing-prices",
30
30
  body={"marketplace": "amazon", "listing_ids": ["B09B8V1LZ3", "B07QK2SPP7"]})
31
31
 
32
+ # Every Shopify store at once — which stores sell it, at what price — or one store's whole catalogue
33
+ sellerclaw_run(group="research-catalog", command="listing-search",
34
+ body={"marketplace": "shopify", "query": "insulated water bottle", "country": "US", "limit": 20})
35
+ sellerclaw_run(group="research-catalog", command="listing-search",
36
+ body={"marketplace": "shopify", "store": "www.rival-store.com", "limit": 50})
37
+
32
38
  # A competitor's social presence: the account, then what it publishes
33
39
  sellerclaw_run(group="research-social", command="instagram-profile", body={"handle": "rivalbrand"})
34
40
  sellerclaw_run(group="research-social", command="tiktok-profile-videos",
@@ -48,12 +54,13 @@ eBay answer plain fetches with a bot wall often enough that the guess is frequen
48
54
  for `web scrape` only for storefronts this does not cover.
49
55
 
50
56
  Storefronts covered: `amazon`, `ebay`, `etsy`, `bestbuy`, `newegg`, `target`, `ikea`, `nike`,
51
- `allbirds` — all US. Give `url` and the storefront is recognised from it; give `marketplace` +
52
- `listing_id` when you have the id instead.
57
+ `allbirds` — all US — and `shopify`, every store on Shopify in any country. Give `url` and the
58
+ storefront is recognised from it; give `marketplace` + `listing_id` when you have the id instead. A
59
+ store on Shopify runs under its own domain, so send its links with `"marketplace": "shopify"`.
53
60
 
54
61
  What is worth knowing before you call:
55
62
 
56
- - **Keyword search** exists for `amazon`, `bestbuy`, `newegg`, `nike` and `allbirds`. For eBay use
63
+ - **Keyword search** exists for `amazon`, `bestbuy`, `newegg`, `nike`, `allbirds` and `shopify`. For eBay use
57
64
  `ebay-search` — the official API, free, and it also covers GTINs and whole storefronts. Etsy
58
65
  publishes no reachable keyword search at all.
59
66
  - **Best Buy and Nike need their own id.** Best Buy's newer URLs dropped the numeric SKU and Nike is
@@ -69,6 +76,22 @@ What is worth knowing before you call:
69
76
  - **A field that is absent was not published** — Target often publishes no price, IKEA no stock. An
70
77
  absent key is never zero, and never worth reporting as one.
71
78
 
79
+ Shopify has two modes and its own options:
80
+
81
+ - **Without `store`** it is Shopify's catalogue of every store. Each row names the store in `seller`;
82
+ the host of its `url` is that store's domain. Each product shows **one offer** — one store's price
83
+ — and a later read or price check of the same id may answer with another store's offer: check
84
+ `seller` on every row.
85
+ - **With `store`** (a domain, or any link on it) it is that store's own catalogue; leave `query` out
86
+ to browse all of it. Ids there are `gid://shopify/Product/…` from its own search, and a URL is not
87
+ accepted; across all stores ids are `gid://shopify/p/…`, and a product URL works when the catalogue
88
+ knows the page. To follow one store's price, search and price-check inside that store.
89
+ - `country` and `currency` price for another market; only `shopify` takes them. `next_cursor` goes
90
+ back as `cursor` for the next page; `total` is Shopify's estimate of matches.
91
+ - A read shows one variant and lists every choice under `<Option> options`. `listing-prices` takes
92
+ up to 50 ids or links in one call (10 inside a store). A store that "did not answer as a Shopify
93
+ store" is not on Shopify or keeps its catalogue closed — use `web scrape`.
94
+
72
95
  ## Watching a rival's price over time
73
96
 
74
97
  One-off research answers "what do they charge today". `competitors` answers "did they just undercut
@@ -96,7 +119,7 @@ decision, not the decision: changing what the owner earns is theirs to approve.
96
119
  `tiktok-audience-demographics` for where that audience sits.
97
120
  - `research-catalog` — `ebay-search` over the marketplace's own catalog (pass `sellers` to scan a
98
121
  competitor's storefront instead of the whole marketplace), plus `listing-get`, `listing-search` and
99
- `listing-prices` for reading listings on nine US storefronts as data.
122
+ `listing-prices` for reading listings on nine US storefronts and every Shopify store as data.
100
123
  - `web` — `scrape` one page and read it back as text, for pages `research-catalog` does not cover.
101
124
  - `competitors` — a standing watch list per store, with price snapshots and the undercutting report.
102
125
  - `store-audit` — the other direction: `onpage` and `pagespeed` on the owner's own shop, and
File without changes
File without changes