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.
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/PKG-INFO +1 -1
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/pyproject.toml +1 -1
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_listings.py +8 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_catalog.py +37 -9
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_listings.py +26 -1
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_listings.py +8 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_listings.py +8 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_listings.py +8 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_listings.py +9 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/research.md +27 -4
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/.gitignore +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/LICENSE +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/README.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/plugin/claude/README.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/__init__.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/__main__.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_agent_id.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_auth.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_client.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_command_group.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_config.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_errors.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_generated/.gitkeep +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_job_wait.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_output.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_runtime.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_session_key.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/_task_context.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/assets/icon.png +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/cli.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/__init__.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_auth_cli.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_discover.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/_listing_shape.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/account.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/action_requests.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ad_accounts.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/agent_files.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_fba.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_listings.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/amazon_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/analytics.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/attributes.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/catalog.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/catalog_file.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/categories.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/channels.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/chats.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/competitors.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_feedback.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_finances.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_listings.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_promoted.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_shipping.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/ebay_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/email.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_finances.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_listings.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/etsy_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/facebook_ads.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/goals.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/google_ads.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/integrations.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/kb.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/klaviyo.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/listing_problems.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/listings.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/media.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/models.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/pdf.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/price_list.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_seo.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_social.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/research_trends.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/reviews.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_domain.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_media.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_menus.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_pages.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_payouts.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_products.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sheets.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_collections.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_finances.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_menus.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_pages.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_themes.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/social.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/spreadsheet.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/store_audit.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/subagent_tasks.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/suppliers.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/team.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/team_tasks.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/walmart_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/web.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/wix_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_orders.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_store.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/__init__.py +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/ads.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/analytics.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/catalog.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/email.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/listings.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/orders.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/start.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/storefront.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/suppliers.md +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/guides/topics.json +0 -0
- {sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/mcp_apps.py +0 -0
- {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.
|
|
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.
|
|
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"
|
{sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/bigcommerce_listings.py
RENAMED
|
@@ -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
|
|
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=
|
|
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
|
|
125
|
-
"call; other storefronts are read one
|
|
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(
|
{sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/tiktok_shop_listings.py
RENAMED
|
@@ -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(
|
{sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/woocommerce_listings.py
RENAMED
|
@@ -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
|
|
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 `
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/sellercart_products.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sellerclaw_cli-3.2.0 → sellerclaw_cli-3.3.0}/sellerclaw_cli/commands/shopify_collections.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|