Turning LINE Chats and Reviews into Strategy: AI Conversation Analysis at Scale
A clinic "knew" patients wanted cheaper whitening. 400 LINE chats said fear of pain — 43% vs 11%. The Loader-Worker pattern that turns conversations into countable facts.
A Bangkok dental clinic's owner "knew" her patients wanted cheaper whitening — she'd heard it often enough at the front desk. Then she ran her last 400 LINE conversations through a simple AI pipeline and found the real pattern: price came up in only 11% of chats. The dominant theme, appearing in 43%? Fear of pain — something her marketing never once addressed. One landing-page rewrite later, whitening bookings jumped.
Her dashboard never would have shown this. The most valuable customer data a local business owns isn't in spreadsheets — it's buried in the messy human language of LINE chats, reviews, DMs, and call recordings. 
This guide shows how to mine it at scale, without drowning in it.
To analyze customer conversations at scale, use a Loader-Worker automation pattern. A scheduled Loader pulls new chats, reviews, and transcripts into a database and marks them pending. A Worker then processes ONE conversation at a time through an AI given a fixed taxonomy — a predefined menu of categories with strict output rules (category, direct quote, confidence, JSON format). Because each item is analyzed in isolation against the same rules, the results are consistent and can be filtered like spreadsheet data. Ten conversations or ten thousand, the method is identical — and it turns "I think customers want X" into a countable fact. :::
Why dumping everything into one prompt fails
The instinctive move — paste 200 reviews into ChatGPT and ask "what are the main pain points?" — produces something plausible and mostly useless:
- Loud voices win: the AI over-weights vivid, emotional entries and misses quiet, repeated patterns
- Inconsistent categories: one pass tags "too expensive," the next "price concerns," the next "budget issues" — three names for one fact, now uncountable
- No evidence: you get conclusions without quotes, so nobody can verify anything
- Size limits: the pile outgrows the context window and quality quietly degrades
A team can listen to ten calls and build solid intuition. It cannot listen to four hundred. The Loader-Worker pattern applies that same careful, one-at-a-time listening — automatically.
| One big prompt | Loader-Worker pipeline | |
|---|---|---|
| Input | Everything at once | One conversation per run |
| Categories | Invented on the fly | Fixed taxonomy, same every time |
| Evidence | None | Direct quote per finding |
| Output | An essay | Rows in a table |
| 10 vs 1,000 items | Breaks | Identical process |
| Verifiability | Trust me | Click through to the quote |
What you're mining: category entry points
The highest-value finding in local-business conversations is the category entry point (CEP) — the specific real-world moment that makes someone start looking for you. Not "wants whitening" but "my wedding is in six weeks and photos are coming." Not "needs a dentist" but "my molar cracked on a weekend and everywhere's closed."
CEPs tell you three things your metrics can't:
- Which triggers lead to bookings (double down in marketing)
- Which triggers appear often but rarely convert (a gap in your offer or reassurance)
- The exact customer words for each — free, high-converting copy for pages and posts
The architecture: Loader + Worker + database
Two small automations, one table, n8n or Make or a script — all fine.
Step 1 — The Loader (the plumbing)
Runs nightly, keeps the raw material organized:
LOADER (schedule: 02:00 daily)
1. connect → LINE OA export / Google Business Profile reviews API
/ call-transcript folder / Instagram DMs export
2. filter → only customer messages, last 24h, skip duplicates
3. insert → conversations table: source, date, raw_text, status=pending
The only clever part is the status column — it's what lets the Worker know what's left to do.
Step 2 — The taxonomy (the make-or-break step)
The quality of the output is determined by the focus of the prompt. Without a fixed menu of categories, the AI invents new ones per conversation and your data dissolves into synonyms. Build the list first — and let AI help you draft it from a sample batch, then refine by hand:
{
"taxonomy": {
"entry_points": [
"wedding_event_soon", "pain_or_emergency", "price_inquiry_only",
"moving_to_area", "insurance_expiring", "recommended_by_friend",
"dissatisfied_with_previous_provider", "curiosity_no_urgency"
],
"objections": ["price", "fear_of_pain", "timing", "trust", "language"],
"language_detected": "th | en"
}
}
Cap it at ~10 categories per field. If you can't hold the menu in your head, the AI can't either.
Step 3 — The Worker (the judgment)
Picks up each pending conversation and asks exactly one thing:
{
"task": "classify ONE conversation against the taxonomy",
"output_rules": {
"primary_entry_point": "<one taxonomy value>",
"secondary": ["<zero or more>"],
"objection": "<one taxonomy value or null>",
"quote_evidence": "<exact quote from the customer, or empty>",
"confidence": "high | medium | low"
},
"hard_rules": [
"If no quote exists for a field, leave it empty — never paraphrase",
"Output valid JSON only"
]
}
Three details carry all the reliability: one conversation per call (full attention), quotes required as evidence (kills hallucination — if it can't quote it, it can't claim it), and JSON output (a small validation step can reject malformed rows before they touch your results table).
Step 4 — The loop
Worker writes to a results table; Loader keeps feeding; a weekly dashboard query does the rest:
-- what actually brings customers in, by count
SELECT primary_entry_point, COUNT(*) AS mentions,
AVG(CASE WHEN booked THEN 1 ELSE 0 END) AS conv_rate
FROM results GROUP BY 1 ORDER BY mentions DESC;
That query is the moment "I think patients want cheaper whitening" becomes "fear of pain: 43% of conversations, highest conversion; price: 11%, lowest."
What this replaces and what it costs
For a typical local business, the inputs are already free — LINE history, Google reviews, call transcripts if you record them. The pipeline is ~2 n8n workflows and one small table. Running 400 conversations through a mid-tier model costs less than a dinner. The only real investment is the taxonomy — an afternoon, revisited monthly as new themes appear.
And while you're building the listening system, remember the other half of customer understanding: where you appear when they search. A free geo-grid scan at https://gbppeak.com/free-maps maps your Google Maps ranking across your service area — pairs nicely with knowing exactly what they say when they reach you.
Frequently Asked Questions
How do I stop the AI from making things up?
Require direct quotes. If a category has no supporting quote in the conversation, the field stays empty. Hallucinated "insights" can't survive a rule that demands verbatim evidence — and anything that can't be quoted probably wasn't said.
What if outputs are "almost" right?
Add a sanitizer step between the AI and the database: validate JSON shape, normalize category spelling against the taxonomy, drop rows failing either check into a review folder. Small guard, catches most drift before it pollutes the data.
Is this only for marketing?
No. Operations teams use it to find recurring service complaints before they become reviews; product-minded owners use it to decide which service to add next; anyone negotiating with suppliers uses it to know what customers actually value versus what they claim to.
How many conversations do I need before the data means something?
Roughly 50–100 for directional answers, 300+ for confident percentages. Below that, read it as a collection of quotes rather than statistics — still valuable, just don't build strategy on a sample of twelve.
Final note
The businesses that grow fastest in a crowded market aren't the ones with the best guesses — they're the ones that stopped guessing. Your customers already told you everything. The Loader-Worker pattern is just how you finally sit down and listen to all of them.