Module 9: Audience Management & Narrowcast

Send targeted messages to specific user segments instead of blasting everyone.

⏱ 20 min read 📖 Intermediate

9.1 Why Narrowcast?

Broadcasting to all followers is expensive, wasteful, and can cause users to block your OA. Narrowcast lets you send to specific audience segments — reducing cost and improving relevance.

Benefits:

  • Pay for fewer messages (cost savings)
  • Higher engagement (relevant messages)
  • Lower churn (less spam)
  • Better analytics (test different segments)
A typical e-commerce OA sees 3-5x higher click-through rates with narrowcast vs broadcast.

9.2 Audience Types

TypeHow it's createdBest for
Upload audienceUpload CSV/JSON of User IDsCRM integration, existing customers
Click audienceUsers who clicked a messageRe-targeting interested users
Impression audienceUsers who saw a messageBrand awareness measurement
Shared audienceFrom other OAs via Business ManagerCross-OA campaigns

9.3 Creating an Upload Audience (API)

// Create audience group
POST https://api.line.me/v2/bot/audienceGroup/upload

{
  "description": "VIP Customers - May 2026",
  "isIfaAudience": false,
  "audiences": [
    { "id": "U4a8b..." },
    { "id": "Ucdef..." }
    // max 500 per request for JSON
  ]
}

Response: { "audienceGroupId": 12345678 }

Or upload via CSV file (up to 100,000 users per file):

POST https://api-data.line.me/v2/bot/audienceGroup/upload/byFile

Content-Type: multipart/form-data
Authorization: Bearer {TOKEN}

file: [CSV file with user IDs, one per line]
description: "My Audience Group"

Check audience creation status:

GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}

Response:
{
  "audienceGroupId": 12345678,
  "type": "upload",
  "description": "VIP Customers",
  "status": "IN_PROGRESS",  // "IN_PROGRESS", "READY", "FAILED", "EXPIRED"
  "audienceCount": 350
}
Audience groups take a few minutes to process. Check status with GET before using in a narrowcast.

9.4 Sending a Narrowcast

POST https://api.line.me/v2/bot/message/narrowcast

{
  "messages": [
    {
      "type": "flex",
      "altText": "VIP Special Offer",
      "contents": { ... }
    }
  ],
  "recipient": {
    "type": "audience",
    "audienceGroupId": 12345678
  },
  "filter": {
    "demographic": {
      "type": "gender",
      "oneOf": ["female"]
    }
  },
  "limit": {
    "max": 500    // optional: max recipients
  }
}

Check narrowcast status (for long-running sends):

GET https://api.line.me/v2/bot/message/narrowcast/progress

Response:
{
  "phase": "in_progress",   // "waiting", "in_progress", "succeeded", "failed"
  "successCount": 250,
  "failureCount": 2,
  "targetCount": 350,
  "failedDescription": null
}

9.5 Demographic Filters

You can filter by demographics when sending narrowcast:

TypeValues
gendermale, female
ageage_15, age_20, age_25, age_30, age_35, age_40, age_45, age_50
appTypeios, android
areaRegion codes (e.g., th_bangkok, th_chiang_mai)
subscriptionPeriodday_7, day_30, day_90, day_180, day_365
friendsCountLINE friends count range
// Example: Send to Bangkok males aged 30-45
{
  "recipient": { "type": "audience", "audienceGroupId": 12345 },
  "filter": {
    "demographic": {
      "type": "area",
      "oneOf": ["th_bangkok"]
    }
  }
}

Combine audience + demographic filter for precise targeting.

9.6 Insights & Analytics API

Get data on your followers and message performance:

// Number of followers by date
GET https://api.line.me/v2/bot/insight/followers?date=20260501

// Message delivery count
GET https://api.line.me/v2/bot/insight/message/delivery?date=20260501

// Demographics
GET https://api.line.me/v2/bot/insight/demographic
// Demographic response example:
{
  "gender": {
    "male": 45.2,
    "female": 52.8,
    "unknown": 2.0
  },
  "age": {
    "age_15": 5.0,
    "age_20": 12.3,
    "age_25": 18.5,
    // ...
  },
  "area": {
    "th_bangkok": 35.0,
    "th_chiang_mai": 4.2,
    // ...
  },
  "appType": {
    "ios": 48.0,
    "android": 52.0
  }
}
🇪🇩 Thailand Insight
In Thailand, the gender split is typically close to 50/50, but the age distribution varies significantly by industry. Bangkok typically represents 30-40% of followers for Thai OAs. Use these insights to design targeted campaigns.

9.7 Audience Management Best Practices

  • Segment by behavior: Create audiences based on what users do (e.g., "Clicked promotion in last 30 days")
  • Clean audiences regularly: Remove inactive users (no engagement in 90 days)
  • Test with small samples: Use limit.max to send test narrowcasts to 50-100 users before full send
  • Combine with demographic filters: Audience + age + gender = highly targeted
  • Don't over-segment: If an audience has < 100 users, the narrowcast may not be worthwhile
  • Track by campaign: Use unique data parameters in postbacks to track which campaign drove action