Skill 寫法圖鑑

content-strategy

Anthropic | 行銷與 SEO | 原文 | Apache-2.0

分析銷售資料與季節性,產出 30 天主推與優惠的內容策略簡報

中文翻譯

---
name: content-strategy
description: >
  分析 PayPal 和 QuickBooks 的銷售資料,找出熱銷品和滯銷品,
  再疊上季節性,產出排好優先順序的 30 天內容簡報:主推什麼、
  做什麼優惠、哪些先按住不動。只產出策略,不含行事曆或素材。
  當使用者問該發什麼、想要內容計畫、問什麼賣得好,
  或這個月該推廣什麼時使用。
allowed-tools: Read, WebFetch
---

# 內容策略(Content Strategy)

## 快速開始

當中小企業主問「這個月該發什麼?」或「我的內容計畫是什麼?」時,這個 skill 會:

1. **拉取銷售資料**:從 QuickBooks 或 PayPal(交易歷史、依日期的產品/服務營收)
2. **找出模式**:熱銷產品、滯銷品、季節性趨勢
3. **疊上背景**:季節性(使用者提供,或用產業基準)、過往表現
4. **產出 30 天簡報**:排序後的建議,包含主推什麼、按住什麼、可以考慮哪些優惠
5. **取得老闆核可**:簡報核可之後,才交給 `social-content-engine` 去產生素材

輸出只有策略:不排行事曆,也不做創意素材。

---

## 工作流程

### 步驟 1:預檢(只有 QuickBooks 需要)

如果用 QuickBooks,先確認商家檔案有設定好:

1. 呼叫 `company-info`,檢查 `Industry` 有沒有填
2. 如果沒填,或是「Unknown」:
   - 問:「我需要你的商家類別,才能拉對季節性基準。你在哪個產業?」(例如零售、服務、SaaS)
   - 用使用者的產業呼叫 `quickbooks-profile-info-update`
   - 確認:「檔案已更新。可以開始拉你的銷售資料了。」
3. 如果檔案已設定,進入步驟 2

**注意:** PayPal 和 Square 不需要設定檔案。

### 步驟 2:釐清優先順序與指標

被觸發時,問使用者:

- **「你想怎麼衡量『熱銷品』?」**
  - 用總營收?
  - 用利潤率?
  - 用銷售速度(賣得多快)?
  - 以上的組合?

- **「你心中有沒有什麼季節性模式?」**
  - 有的話:「跟我說說」(記下使用者已知的季節性)
  - 沒有的話:「我會用你這個類別的產業基準」

### 步驟 3:拉取並分析銷售資料

從已驗證的 connector(QuickBooks、PayPal 或 Square,由使用者選)取得資料:

- **日期範圍:** 最近 90 天(如果不到 90 天,就用全部歷史)
- **擷取:** 產品/服務名稱、銷售日期、營收、數量

**各 connector 的注意事項:**

- **QuickBooks:** 透過 `profit_loss_quickbooks_account` 取得發票明細項目(預檢會設好產業背景)。要讀的是 rows 或 `monthlyBreakdown`;回應裡的 `totalExpenses` 對真實的 rows 會回報 0,所以絕對不要讀摘要欄位
- **PayPal:** 透過 `list_transactions` 取得商家交易。*速率限制:* 如果碰到速率限制,暫停 30 秒後重試一次。如果還是被擋,就好好地提議:「PayPal 被限速了。要不要改用 QuickBooks 或 Square?或是我用已經拉到的歷史資料繼續。」
- **Square:** 需要先有 location ID。呼叫 `make_api_request(service="locations", method="list")` 找出可用的 location,再取得每個 location 的訂單。

**完全沒有 connector?** 照樣可以跑,這是支援的路徑,不是降級版。請老闆匯出銷售歷史並上傳。匯出的名稱要用他們在 app 裡實際看到的標籤:

- **QuickBooks**:Reports,再選「Sales by Product/Service Detail」報表,設成最近 90 天,匯出成 Excel 或 CSV
- **PayPal**:Activity,再選 Download,設成最近 90 天,「Completed transactions」,格式選 CSV
- **Square**:Reports,再選 Item Sales,設成最近 90 天,匯出成 CSV

上面任何一種都有產品名稱、日期、營收,通常還有數量,這就是步驟 3 需要的全部。貼上一份賣了什麼、大約什麼時候賣的清單也可以,只要明確說明這樣的判讀會比較粗略,然後照樣執行。

**備案:** 如果資料不到 3 個月,就用這間中小企業類別(例如零售、服務、電商)的產業季節性基準

找出:
- **前 3–5 名熱銷品**(依使用者選的指標)
- **後 3–5 名滯銷品**(考慮按住或重新定位)
- **上升趨勢**(最近 30 天動能增加)
- **下降趨勢**(動能減弱)

### 步驟 4:疊上季節性

- **使用者提供的:** 如果對方分享了季節性模式,就依此調整建議的權重
- **產業基準:** 用在使用者資料不夠強的類別(例如「Q1 對稅務服務很旺」)
- **時機:** 根據季節性模式,標出接下來 30 天應該拉升或降低的產品

### 步驟 5:建立 30 天簡報

結構:
- **執行摘要**(1–2 句:「你最好賣的是 X 和 Y。往 Z 的季節性轉變正在開始。」)
- **全力主推**(前 2–3 個產品,加上建議的內容角度,例如「ROI 案例研究」「教學影片」)
- **維持現狀**(中段表現的產品;維持曝光,但不用大力投入)
- **重新定位或暫停**(滯銷品;考慮折扣、組合銷售或暫停)
- **季節性機會**(下個月會來、現在就該先卡位的東西)
- **建議的優惠**(根據資料提出的組合、折扣或免費試用策略)

範例長度:**200–400 字**(簡短、可執行,不要寫成長篇大論)。

### 步驟 6:老闆核可與迭代

把簡報給老闆看。問:
- 「這跟你的直覺相符嗎?」
- 「有什麼要調整的嗎?」
- 「可以交給 social-content-engine 去產生素材了嗎?」

需要的話就迭代;核可之後,把最終簡報以結構化 JSON 回傳(可直接給下游工具用)。

---

## 更多來源與直接呼叫

請讀 `reference/v2_sources.md` 的對照表:

- **Shopify**:每個 SKU 的銷售速度、規格變體的表現,以及可直接流到下游素材產生的產品圖片
- **Stripe**:訂閱與經常性營收(相關時使用)

### 直接呼叫

如果老闆要的是銷售簡報,就執行這個流程並回傳簡報。不要把他們導去別的地方。

## 注意事項與邊角案例

常見的陷阱請見 [`reference/gotchas.md`](reference/gotchas.md)。

---

## 範例

實際範例(SaaS、零售、服務)請見 [`reference/examples/`](reference/examples/)。

---

## 輸出

**依老闆儲存的輸出偏好來交付 30 天簡報,絕對不要預設成 markdown 檔。** 檢查 `## Business context` 區塊的 `Output preference`(共用風格指南規則,`../../shared/artifact-style.md`):

- **視覺化 artifact(預設):** 以 house style 把簡報渲染成 HTML 頁面,主推什麼放在最前面,每個選擇背後的原因附上用 tabular-nums 排的數字,每個主推項目附上管道的決定。給下游工具的結構化 JSON 原封不動附上;它是其他 skill 的輸入,不是第二份交付物。
- **docx / md / notion / canva 偏好:** 用那個形式交付同樣的內容:DOCX 或 markdown 檔、透過 connector 建立的 Notion 頁面(指定目的地,絕對不覆寫),或透過 Canva connector 建立的 Canva Doc(每次執行都建新設計,名稱加上日期;表格改成清單);如果沒有連 Notion 或 Canva,就退回視覺化 artifact,並且說明是這個原因。
- **Best for skill:** 使用視覺化 artifact,因為這個輸出是決策頁面,不是散文。

## 簡報之後

30 天簡報核可後就可以動手了。下一步自然是「做內容」:`social-content-engine` 會把簡報變成固定的行事曆和貼文。附近還有:「run this brief」(`canva-creator`),用這份簡報一次性建出一個活動;以及「is my marketing working」(`growth-pulse`),檢查上個月的主推有沒有見效。最多提供三個,而且這個 session 裡老闆已經拒絕過的提議就跳過。

## 使用沒列出的工具

這個 skill 提到的 connector 是測試過的路徑,不是一堵牆。如果老闆想讓這個流程使用沒連接、也沒列出的工具,就提供 `build-connector`:它會先查 connector 目錄,沒有的話再透過 Zapier 連接,絕對不手刻去串原始 API。連接建立之後,這個工具就和其他選用的 connector 一樣加入這個 skill,並受相同的核准關卡約束。

英文原文

---
name: content-strategy
description: >
  Analyzes sales data from PayPal and QuickBooks to find top performers and
  slow movers, layers in seasonality, and produces a prioritized 30-day
  content brief: what to push, what offers to run, what to hold. Strategic
  output only — no calendars or assets. Use when the user asks what to post,
  wants a content plan, asks what's selling, or what to promote this month.
allowed-tools: Read, WebFetch
---

# Content Strategy

## Quick start

When an SMB owner asks "what should I post this month?" or "what's my content plan?", this skill:

1. **Pulls sales data** from QuickBooks or PayPal (transaction history, product/service revenue by date)
2. **Identifies patterns** — top-selling products, slow movers, seasonal trends
3. **Layers in context** — seasonality (user-provided or industry benchmarks), past performance
4. **Produces a 30-day brief** — ranked recommendations of what to push, what to hold, what offers to consider
5. **Gets owner approval** before the brief feeds into `social-content-engine` for asset generation

The output is strategic only — no calendar scheduling, no creative assets.

---

## Workflow

### Step 1: Pre-flight check (QuickBooks only)

If using QuickBooks, verify the business profile is set up:

1. Call `company-info` to check if `Industry` is populated
2. If missing or "Unknown":
   - Ask: "I need your business category to pull the right seasonality benchmarks. What industry are you in?" (e.g., retail, services, SaaS)
   - Call `quickbooks-profile-info-update` with the user's industry
   - Confirm: "Profile updated. Ready to pull your sales data."
3. If profile is set, proceed to Step 2

**Note:** PayPal and Square do not require profile setup.

### Step 2: Clarify priorities & metrics

When triggered, ask the user:

- **"How do you want me to measure 'top performers'?"**
  - By total revenue?
  - By profit margin?
  - By sales velocity (how fast they're selling)?
  - Combination of the above?

- **"Do you have seasonality patterns in mind?"**
  - If yes: "Tell me about them" (capture user's known seasonality)
  - If no: "I'll use industry benchmarks for your category"

### Step 3: Pull and analyze sales data

Fetch data from the authenticated connector (QuickBooks, PayPal, or Square, user's choice):

- **Date range:** Last 90 days (or full history if <90 days available)
- **Extract:** Product/service name, date sold, revenue, quantity

**Connector-specific notes:**

- **QuickBooks:** Fetch invoice line items via `profit_loss_quickbooks_account` (pre-flight sets industry context). Read the rows or `monthlyBreakdown`; the response's `totalExpenses` reports 0 against real rows, so never read the summary fields
- **PayPal:** Fetch merchant transactions via `list_transactions`. *Rate-limiting:* If you hit rate limits, pause 30 seconds and retry once. If still blocked, gracefully offer: "PayPal is rate-limited. Would you like to switch to QuickBooks or Square instead, or I can continue with historical data I already pulled?"
- **Square:** Requires location ID first. Call `make_api_request(service="locations", method="list")` to discover available locations, then fetch orders for each location.

**No connectors at all?** This still runs, and it is a supported path — not a degraded one. Ask the owner to export their sales history and upload it. Name the export by the label they will actually see in the app:

- **QuickBooks** — Reports, then the "Sales by Product/Service Detail" report, set to the last 90 days, exported to Excel or CSV
- **PayPal** — Activity, then Download, set to the last 90 days, "Completed transactions" as CSV
- **Square** — Reports, then Item Sales, set to the last 90 days, exported as CSV

Any one of those carries product name, date, revenue, and usually quantity, which is everything Step 3 needs. A pasted list of what sold and roughly when also works — say plainly that the read is rougher, and run it.

**Fallback:** If <3 months of data, use industry seasonality benchmarks for the SMB's category (e.g., retail, services, e-commerce)

Identify:
- **Top 3–5 performers** (by user's chosen metric)
- **Bottom 3–5 slow movers** (consider holding or repositioning)
- **Trending up** (gaining momentum in last 30 days)
- **Trending down** (losing momentum)

### Step 4: Layer in seasonality

- **User-provided:** If they shared seasonal patterns, weight recommendations against them
- **Industry benchmarks:** For categories without strong user data (e.g., "Q1 is strong for tax services")
- **Timing:** Flag products that should ramp up/down in the next 30 days based on seasonal patterns

### Step 5: Build the 30-day brief

Structure:
- **Executive summary** (1–2 sentences: "Your best sellers are X and Y. Seasonal shift to Z is starting.")
- **Push hard** (Top 2–3 products + recommended content angle, e.g., "Case study on ROI", "How-to video")
- **Hold steady** (Middle performers; maintain visibility but no heavy lift)
- **Reposition or pause** (Slow movers; consider discounting, bundling, or pausing)
- **Seasonal opportunities** (What's coming next month that you should position for now)
- **Recommended offers** (Bundle, discount, or free-trial strategy based on data)

Example length: **200–400 words** (brief and actionable, not essay-length).

### Step 6: Owner approval & iteration

Present the brief to the owner. Ask:
- "Does this match your gut?"
- "Anything to adjust?"
- "Ready to feed this to social-content-engine for asset generation?"

Iterate if needed; once approved, return the final brief as structured JSON (ready for downstream tools).

---

## More sources, and direct invocation

Read `reference/v2_sources.md` for the mapping:

- **Shopify** — per-SKU velocity, variant performance, and product images that flow straight into asset generation downstream
- **Stripe** — subscription and recurring revenue, where relevant

### Direct invocation

If the owner asks for a sales brief, run this and return the brief. Don't route them anywhere.

## Gotchas & edge cases

See [`reference/gotchas.md`](reference/gotchas.md) for common pitfalls.

---

## Examples

See [`reference/examples/`](reference/examples/) for worked examples (SaaS, retail, services).

---

## Output

**Deliver the 30-day brief per the owner's stored output preference — never default to a markdown file.** Check the `## Business context` block's `Output preference` (shared style guide rule, `../../shared/artifact-style.md`):

- **Visual artifact (the default):** render the brief as an HTML page in the house style — what to promote as the lead, the why behind each pick with its numbers in tabular-nums, and the channel call per push. The structured JSON for downstream tools rides along unchanged; it is an input to other skills, not a second deliverable.
- **docx / md / notion / canva preference:** deliver the same content in that form — a DOCX or markdown file, a Notion page created via the connector (named destination, never overwriting), or a Canva Doc created via the Canva connector (a new design each run, named with the date; tables become lists); fall back to the visual artifact if Notion or Canva is not connected — and say that is why.
- **Best for skill:** use the visual artifact — this output is a decision page, not prose.

## After the brief

The 30-day brief is approved and ready to act on. The natural next step is "make the content" — `social-content-engine` turns the brief into the standing calendar and the posts. Also nearby: "run this brief" (`canva-creator`) for a one-shot campaign build from this exact brief, and "is my marketing working" (`growth-pulse`) to check whether last month's push paid off. Offer at most three, and skip any offer the owner already declined this session.

## Using a tool that isn't listed

The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer `build-connector` — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.