Module 9: Audience Management & Narrowcast
Send targeted messages to specific user segments instead of blasting everyone.
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
| Type | How it's created | Best for |
|---|---|---|
| Upload audience | Upload CSV/JSON of User IDs | CRM integration, existing customers |
| Click audience | Users who clicked a message | Re-targeting interested users |
| Impression audience | Users who saw a message | Brand awareness measurement |
| Shared audience | From other OAs via Business Manager | Cross-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:
| Type | Values |
|---|---|
gender | male, female |
age | age_15, age_20, age_25, age_30, age_35, age_40, age_45, age_50 |
appType | ios, android |
area | Region codes (e.g., th_bangkok, th_chiang_mai) |
subscriptionPeriod | day_7, day_30, day_90, day_180, day_365 |
friendsCount | LINE 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.maxto 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
dataparameters in postbacks to track which campaign drove action