Tracking Traditional Medicine and Herbal Product Markets in SEA

Tracking Traditional Medicine and Herbal Product Markets in SEA

Traditional medicine occupies a unique and significant place in Southeast Asian healthcare. From Indonesian jamu and Thai traditional medicine to Vietnamese thuoc nam, Filipino hilot remedies, and the widespread influence of Traditional Chinese Medicine (TCM), these products represent a multi-billion dollar market deeply embedded in regional culture and daily healthcare practices.

For companies entering or expanding in the traditional medicine space, understanding market dynamics requires collecting data from a diverse and fragmented landscape of producers, retailers, e-commerce platforms, and regulatory databases. Mobile proxies are essential for accessing this data authentically across the region’s varied digital ecosystems.

This guide covers how to monitor the traditional medicine and herbal product markets across Southeast Asia using DataResearchTools mobile proxies.

The Traditional Medicine Landscape in Southeast Asia

Indonesia: Jamu and Herbal Products

Indonesia has the largest traditional medicine market in Southeast Asia. Jamu, the traditional Indonesian herbal medicine system, encompasses thousands of products ranging from home-brewed remedies to standardized, BPOM-registered commercial products.

Market characteristics:

  • Over $5 billion market including both traditional and modern herbal products
  • BPOM regulates three categories: Jamu (traditional), Obat Herbal Terstandar (standardized herbal medicine), and Fitofarmaka (clinically tested herbal medicine)
  • Major players: Sido Muncul, Jamu Jago, Deltomed, Mustika Ratu
  • Growing e-commerce presence on Tokopedia, Shopee, and Bukalapak
  • Strong cultural heritage driving consumer adoption

Thailand: Traditional Thai Medicine

Thailand has a sophisticated traditional medicine system officially recognized alongside conventional medicine.

Market characteristics:

  • Thai FDA regulates traditional Thai medicine products
  • Government promotes traditional medicine through dedicated hospitals and research institutions
  • Products include Ya Samunphrai (herbal medicines), herbal compresses, and medicinal oils
  • Growing international interest in Thai herbal products
  • Active e-commerce and export market

Vietnam: Thuoc Nam and Traditional Medicine

Vietnam has a rich tradition of herbal medicine with strong government support for integration into the healthcare system.

Market characteristics:

  • Over 40% of healthcare treatments in Vietnam involve traditional medicine
  • Ministry of Health oversees traditional medicine regulation
  • Widespread use of thuoc nam (Southern medicine) and thuoc bac (Northern/Chinese medicine)
  • Growing modern product formulations
  • Expanding online retail presence

Malaysia and Singapore: TCM and Malay Traditional Medicine

Both Malaysia and Singapore have significant TCM markets alongside Malay traditional medicine (ubat tradisional).

Market characteristics:

  • TCM is the dominant traditional medicine segment
  • Strong regulatory frameworks (TGA in Singapore, NPRA in Malaysia)
  • Halal certification important for Malay traditional products
  • Eu Yan Sang and other established TCM chains
  • Growing online sales through pharmacy platforms

Philippines: Traditional and Herbal Products

The Philippines has a growing market for locally produced and imported herbal products.

Market characteristics:

  • FDA Philippines regulates traditional herbal products
  • Growing interest in local medicinal plants
  • Products sold through pharmacies and online platforms
  • Mercury Drug and other chains carry herbal products
  • Increasing consumer awareness and adoption

Data Points to Monitor

Product Listings and Pricing

  • Product names, ingredients, and formulations
  • Retail pricing across e-commerce platforms and pharmacies
  • Pack sizes and dosage forms
  • Promotional pricing and bundle offers
  • Regional price variations within countries

Regulatory Status

  • BPOM registration numbers and categories (Indonesia)
  • Thai FDA traditional medicine registrations
  • NPRA listings (Malaysia)
  • HSA registration status (Singapore)
  • FDA Philippines herbal product approvals

Market Trends

  • New product launches and brand entries
  • Sales volume indicators from e-commerce platforms
  • Consumer review sentiment and trending ingredients
  • Import/export data for herbal raw materials
  • Scientific research on traditional ingredients

Competitive Intelligence

  • Brand market share by product category
  • Distributor and retailer relationships
  • Marketing strategies and claims
  • Product portfolio evolution
  • Geographic expansion patterns

Building a Traditional Medicine Market Monitor

Platform Collection Strategy

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import time

class TraditionalMedicineMonitor:
    def __init__(self, proxy_user, proxy_pass):
        self.proxies = {
            "ID": f"http://{proxy_user}:{proxy_pass}@id-mobile.dataresearchtools.com:8080",
            "TH": f"http://{proxy_user}:{proxy_pass}@th-mobile.dataresearchtools.com:8080",
            "VN": f"http://{proxy_user}:{proxy_pass}@vn-mobile.dataresearchtools.com:8080",
            "MY": f"http://{proxy_user}:{proxy_pass}@my-mobile.dataresearchtools.com:8080",
            "SG": f"http://{proxy_user}:{proxy_pass}@sg-mobile.dataresearchtools.com:8080",
            "PH": f"http://{proxy_user}:{proxy_pass}@ph-mobile.dataresearchtools.com:8080"
        }

        self.product_categories = {
            "ID": [
                "jamu", "herbal", "obat tradisional", "minyak angin",
                "tolak angin", "kuku bima", "habbatussauda",
                "madu", "temulawak", "kunyit"
            ],
            "TH": [
                "สมุนไพร", "ยาแผนไทย", "สมุนไพรไทย",
                "herbal thai", "traditional thai medicine"
            ],
            "VN": [
                "thuoc nam", "dong y", "thuoc dong y",
                "thao duoc", "herbal vietnamese"
            ],
            "MY": [
                "TCM", "traditional chinese medicine",
                "ubat tradisional", "herbal supplement malaysia"
            ],
            "SG": [
                "TCM singapore", "chinese medicine",
                "herbal supplement", "traditional medicine"
            ],
            "PH": [
                "herbal medicine philippines", "traditional medicine",
                "lagundi", "sambong", "tsaang gubat"
            ]
        }

    def get_proxy(self, country):
        proxy_url = self.proxies[country]
        return {"http": proxy_url, "https": proxy_url}

E-Commerce Platform Monitoring

def monitor_ecommerce_traditional_medicine(self, country):
    """Monitor traditional medicine products on e-commerce platforms"""
    proxy = self.get_proxy(country)
    all_products = []

    categories = self.product_categories.get(country, [])

    for category in categories:
        # Search on Shopee
        shopee_products = self.search_shopee(category, country, proxy)
        all_products.extend(shopee_products)
        time.sleep(3)

        # Search on country-specific platforms
        if country == "ID":
            tokopedia_products = self.search_tokopedia(
                category, proxy
            )
            all_products.extend(tokopedia_products)
            time.sleep(3)

    return all_products

def search_shopee(self, query, country, proxy):
    """Search Shopee for traditional medicine products"""
    tld_map = {
        "ID": "co.id", "TH": "co.th", "VN": "vn",
        "MY": "com.my", "SG": "sg", "PH": "ph"
    }
    tld = tld_map.get(country, "com")

    headers = {
        "User-Agent": "Mozilla/5.0 (Linux; Android 14; SM-S918B) "
                      "AppleWebKit/537.36 Chrome/120.0.0.0 "
                      "Mobile Safari/537.36",
        "Referer": f"https://shopee.{tld}/"
    }

    products = []
    try:
        response = requests.get(
            f"https://shopee.{tld}/api/v4/search/search_items",
            params={
                "keyword": query,
                "limit": 60,
                "order": "relevancy"
            },
            proxies={"http": proxy["http"], "https": proxy["https"]}
                    if isinstance(proxy, dict) else
                    {"http": proxy, "https": proxy},
            headers=headers,
            timeout=30
        )

        if response.status_code == 200:
            data = response.json()
            items = data.get("items", [])

            for item in items:
                item_basic = item.get("item_basic", item)
                products.append({
                    "platform": "shopee",
                    "country": country,
                    "category": query,
                    "name": item_basic.get("name", ""),
                    "price": item_basic.get("price", 0) / 100000,
                    "sold": item_basic.get("sold", 0),
                    "rating": item_basic.get("item_rating", {}).get(
                        "rating_star", 0
                    ),
                    "shop_name": item_basic.get("shop_name", ""),
                    "collected_at": datetime.utcnow().isoformat()
                })
    except Exception as e:
        print(f"Shopee search error for {query}: {e}")

    return products

Regulatory Database Monitoring

def monitor_bpom_traditional(self, product_categories):
    """Monitor BPOM for traditional medicine registrations"""
    proxy = self.get_proxy("ID")
    registrations = []

    categories = {
        "jamu": "Jamu / Obat Tradisional",
        "oht": "Obat Herbal Terstandar",
        "fitofarmaka": "Fitofarmaka"
    }

    for cat_key, cat_name in categories.items():
        try:
            response = requests.get(
                "https://cekbpom.pom.go.id/search",
                params={
                    "query": "",
                    "kategori": cat_key
                },
                proxies={"http": proxy, "https": proxy}
                        if isinstance(proxy, str) else proxy,
                headers={
                    "User-Agent": "Mozilla/5.0 (Linux; Android 14)",
                    "Accept-Language": "id-ID,id;q=0.9"
                },
                timeout=30
            )

            if response.status_code == 200:
                parsed = self.parse_bpom_traditional(
                    response.text, cat_name
                )
                registrations.extend(parsed)

            time.sleep(3)
        except Exception as e:
            print(f"BPOM monitoring error: {e}")

    return registrations

Ingredient Trend Analysis

Monitor trending traditional medicine ingredients:

class IngredientTrendAnalyzer:
    def __init__(self, product_database):
        self.db = product_database

    def analyze_ingredient_trends(self, country, months=12):
        """Analyze trending ingredients in traditional medicine"""
        popular_ingredients = {
            "ID": [
                "temulawak", "kunyit", "jahe", "kencur",
                "sambiloto", "pegagan", "daun sirsak",
                "habbatussauda", "madu", "propolis",
                "daun kelor", "lidah buaya"
            ],
            "TH": [
                "turmeric", "ginger", "lemongrass",
                "pandan", "butterfly pea", "mangosteen",
                "moringa", "centella asiatica"
            ],
            "VN": [
                "nghe", "gung", "mat ong", "linh chi",
                "nhan sam", "tam that", "atiso"
            ],
            "MY": [
                "tongkat ali", "kacip fatimah",
                "misai kucing", "pegaga",
                "ginseng", "bird nest"
            ]
        }

        trends = {}
        ingredients = popular_ingredients.get(country, [])

        for ingredient in ingredients:
            monthly_data = self.db.get_monthly_product_counts(
                ingredient, country, months
            )

            if monthly_data and len(monthly_data) >= 3:
                recent_avg = sum(monthly_data[-3:]) / 3
                earlier_avg = sum(monthly_data[:3]) / 3

                growth = ((recent_avg - earlier_avg) / earlier_avg * 100
                          if earlier_avg > 0 else 0)

                trends[ingredient] = {
                    "monthly_data": monthly_data,
                    "recent_avg_products": recent_avg,
                    "growth_pct": growth,
                    "trend": "growing" if growth > 20
                            else "declining" if growth < -20
                            else "stable"
                }

        return dict(sorted(
            trends.items(),
            key=lambda x: x[1]["growth_pct"],
            reverse=True
        ))

Brand Market Analysis

def analyze_brand_market_position(self, country, category):
    """Analyze brand positions in the traditional medicine market"""
    products = self.monitor_ecommerce_traditional_medicine(country)

    # Filter to relevant category
    category_products = [
        p for p in products
        if category.lower() in p.get("category", "").lower()
        or category.lower() in p.get("name", "").lower()
    ]

    brand_analysis = {}
    for product in category_products:
        brand = self.extract_brand(product["name"])
        if brand:
            if brand not in brand_analysis:
                brand_analysis[brand] = {
                    "product_count": 0,
                    "total_sold": 0,
                    "avg_price": 0,
                    "avg_rating": 0,
                    "prices": [],
                    "ratings": []
                }
            brand_analysis[brand]["product_count"] += 1
            brand_analysis[brand]["total_sold"] += product.get("sold", 0)
            if product.get("price"):
                brand_analysis[brand]["prices"].append(product["price"])
            if product.get("rating"):
                brand_analysis[brand]["ratings"].append(product["rating"])

    # Calculate averages
    for brand, data in brand_analysis.items():
        if data["prices"]:
            data["avg_price"] = sum(data["prices"]) / len(data["prices"])
        if data["ratings"]:
            data["avg_rating"] = sum(data["ratings"]) / len(data["ratings"])
        del data["prices"]
        del data["ratings"]

    return dict(sorted(
        brand_analysis.items(),
        key=lambda x: x[1]["total_sold"],
        reverse=True
    ))

Cross-Market Analysis

Ingredient Price Comparison

Compare pricing for key ingredients across SEA markets:

def compare_ingredient_pricing(self, ingredient, countries=None):
    """Compare traditional medicine ingredient pricing across markets"""
    if countries is None:
        countries = ["ID", "TH", "VN", "MY", "SG", "PH"]

    comparison = {}
    for country in countries:
        products = self.search_shopee(
            ingredient, country, self.get_proxy(country)
        )
        if products:
            prices_local = [p["price"] for p in products if p["price"] > 0]
            if prices_local:
                currency = self.get_currency(country)
                avg_price = sum(prices_local) / len(prices_local)
                comparison[country] = {
                    "avg_price_local": avg_price,
                    "currency": currency,
                    "avg_price_usd": self.convert_to_usd(
                        avg_price, currency
                    ),
                    "product_count": len(products),
                    "min_price_local": min(prices_local),
                    "max_price_local": max(prices_local)
                }
        time.sleep(3)

    return comparison

Market Opportunity Identification

def identify_market_opportunities(self, trends_by_country):
    """Identify market opportunities based on cross-market analysis"""
    opportunities = []

    for country, trends in trends_by_country.items():
        for ingredient, data in trends.items():
            if data["trend"] == "growing" and data["growth_pct"] > 50:
                opportunities.append({
                    "country": country,
                    "ingredient": ingredient,
                    "growth_rate": data["growth_pct"],
                    "opportunity_type": "high_growth_ingredient",
                    "recommendation": (
                        f"Strong growth in {ingredient} products "
                        f"in {country}. Consider market entry or "
                        f"product launch."
                    )
                })

    return sorted(
        opportunities,
        key=lambda x: x["growth_rate"],
        reverse=True
    )

Best Practices

  1. Use local mobile proxies: DataResearchTools mobile proxies in each country ensure you see authentic product listings and pricing that may differ from what international visitors see.
  1. Monitor in local languages: Traditional medicine product names and ingredient lists are often in local languages. Ensure your scraping system handles multi-language content.
  1. Track regulatory categories: Different regulatory categories (jamu vs. fitofarmaka in Indonesia) affect what claims products can make and their market positioning.
  1. Understand cultural context: Traditional medicine purchasing behavior is strongly influenced by cultural factors. Combine quantitative data with cultural understanding.
  1. Monitor seasonal patterns: Many traditional medicine products have seasonal demand patterns (cold season remedies, Ramadan wellness products, Chinese New Year TCM).
  1. Track cross-border trade: Traditional medicine products often cross borders within SEA. Monitor export/import patterns and cross-border e-commerce sales.

Conclusion

The traditional medicine and herbal product market in Southeast Asia represents a massive, culturally significant sector with substantial growth potential. DataResearchTools mobile proxies enable comprehensive monitoring of this fragmented market by providing authentic local access to e-commerce platforms, regulatory databases, and pharmacy websites across all major SEA markets.

By building automated monitoring systems for product listings, pricing, regulatory registrations, and ingredient trends, companies can identify opportunities, track competitors, and make informed decisions in this dynamic and rewarding market segment.

Start monitoring the traditional medicine market across Southeast Asia with DataResearchTools mobile proxies today.


Related Reading

Scroll to Top