# solari instagram brand ad posts

> あるブランドを対象とした広告投稿を行単位で返します。各行に投稿したクリエイターが付きます。

- **CLI**: `solari instagram brand ad posts`
- **MCP ツール**: `solari_instagram_brand_ad_posts`
- **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。

あるブランドを対象として特定された広告投稿の、行単位のページネーション付きリスト。各行にはslug、caption、posted_at、like/commentのカウント、動画の場合はplay_count、投稿したクリエイターのusernameとaccount_idが付きます。sort=recentは対象期間全体を新しい順にページングし、totalは正確な件数になります。sort=engagementは直近の限られた範囲内でランク付けし、その範囲の大きさをranking_windowとして返します（非nullなら、並び順が全体ではなく一部のみを対象としていることを意味します）。monthsで遡る期間を広げられます（デフォルトは3、最大24）。solari_instagram_brand_ad_statsの行単位版。ブランドのInstagramハンドル（@なし）を受け取ります。サインイン済みのSOLARIアカウントであれば利用できます。ハンドルが未追跡の場合は404を返します。

**どんなときに使うか** — ブランドの広告履歴を集計ではなく生の行として分析するとき。

**何が返るか** — 広告投稿。totalの意味はsortによって変わります。

## パラメータ

- `username` (string, 必須) — 先頭の@を除いたブランドのInstagramハンドル。
- `sort` (enum, 任意, 既定値 "recent") — recentは対象期間全体をページングし、totalは正確な件数になります。engagementはranking_windowの範囲内でランク付けします。 値: `recent`, `engagement`.
- `months` (integer, 任意, ≥ 1) — 遡る期間（月数）。デフォルトは3。24を超える値は24に切り詰められます。
- `limit` (integer, 任意, ≥ 1) — 1ページあたりの投稿数。デフォルトは50。200を超える値は200に切り詰められます。
- `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのoffset。デフォルトは0。

## レスポンス

### `Response`

- `items` (object[]) — 広告投稿。
- `total` (integer) — sort=recentのときの、対象期間全体の正確な件数。
- `has_more` (boolean) — 次のページが存在するかどうか。
- `ranking_window` (integer | null) — engagementのランキングが実際にどこまで遡ったか。非nullなら、並び順が対象期間全体ではなく一部のみを対象としていることを意味します。

### `items[]`

- `id` (uuid) — 投稿のID。
- `slug` (string) — Instagramのshortcode。
- `text` (string) — キャプションのテキスト。
- `posted_at` (timestamp) — 投稿日時（UTC）。
- `username / user_id / account_id` (string) — 投稿したクリエイター。現行の名称はaccount_idで、user_idも同じ値を持ちます。
- `like_count / comment_count / play_count` (integer) — エンゲージメントのスナップショット。
- `media_type` (string) — 投稿のフォーマット。
- `media / media_url / thumbnail_url` (string) — メディアのリンク。
- `virtual_campaign` (object | null) — 解決できた場合のキャンペーン単位のグルーピング。

## 例

```console
$ solari instagram brand ad posts username=innisfreeofficial limit=2
```

_読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_

```json
{
  "items": [
    {
      "id": "01a062a0-2747-72eb-b20d-670cf30f2c96",
      "slug": "DcygG05GrA-",
      "text": "#광고 요즘 부쩍 신경 쓰이기 시작한 모공 고민을 직접 경험해보고 싶어 방문한 이니스프리 레티놀 시카 강의실 무빙 팝업💙\n\n업그레이드된 레티놀 시카 모공 흔적 앰플을 직접 테스트해볼 수 있을 뿐 아니라, 제품을 알아보고 체험할 수 있는 다양한 프로그램과 이벤트가 마련되어 있어 더욱 재미있게 둘러볼 수 있었어요.\n\n특히 오늘 방문했을 때는 정말 많은 분들이 찾아와서 놀랐는데요. 대기 줄이 길게 …",
      "posted_at": "2026-09-02T14:56:19Z",
      "virtual_campaign": null,
      "username": "_mini_mming",
      "user_id": "018caf92-e08a-78a2-b9c3-59f6f5740182",
      "profile_picture_url": null,
      "like_count": 384,
      "comment_count": 4,
      "thumbnail_url": null,
      "media_url": null,
      "media": [],
      "media_type": "post",
      "account_id": "018caf92-e08a-78a2-b9c3-59f6f5740182"
    },
    "… 1 more"
  ],
  "total": 405,
  "has_more": true,
  "ranking_window": null
}
```

## MCP 呼び出しとして

```json
{
  "name": "solari_instagram_brand_ad_posts",
  "arguments": {
    "username": "innisfreeofficial",
    "limit": 2
  }
}
```

## 注意点

- sort=recentは対象期間全体を新しい順にページングし、totalは正確な件数になります。sort=engagementは直近の限られた範囲内でランク付けし、その大きさをranking_windowとして返します。
- monthsのデフォルトは3で、24で切り詰められます。
- 受け取るのはハンドルのみ。未追跡のハンドルは404を返します。

## 関連ツール

- [`solari_instagram_brand_ad_stats`](https://solari.sh/docs/tools/instagram-brand-ad-stats.md?lang=ja)
- [`solari_instagram_account_ad_posts`](https://solari.sh/docs/tools/instagram-account-ad-posts.md?lang=ja)
