← Back to documentation

Accessing Singapore E-commerce Data: A Developer Guide to BuyWhere API

The Singapore E-commerce Landscape

Singapore's e-commerce market is fragmented. Shopee leads with 58% market share, followed by Lazada at 22%, with Amazon.sg, Carousell, Qoo10, and dozens of specialty retailers fighting for the rest. For developers building shopping agents or price comparison tools, this fragmentation creates a significant data integration challenge.

The typical approach—building separate scrapers for each platform—quickly becomes unmanageable. Each retailer has different:

  • Anti-bot measures
  • Product ID schemes
  • Pricing formats
  • Category taxonomies

I spent time building these integrations and learned the hard way that scraping is a full-time job, not a one-time task.

Enter the Unified Product Layer

BuyWhere addresses this with a unified API that aggregates products across Singapore's major platforms. Instead of managing 6+ scrapers, you make a single API call:

curl "https://api.buywhere.ai/v2/products?q=sony+wh-1000xm5&region=sg&limit=5" \
  -H "Authorization: Bearer $BUYWHERE_API_KEY"

The response gives you normalized product data across all platforms:

{
  "items": [
    {
      "id": "bw_prod_8823",
      "name": "Sony WH-1000XM5 Wireless Headphones",
      "price_sgd": 398.00,
      "source": "shopee_sg",
      "buy_url": "https://shopee.sg/sony-wh-1000xm5",
      "affiliate_url": "https://affiliate.buywhere.ai/track/8823",
      "rating": 4.8,
      "review_count": 2341,
      "in_stock": true,
      "confidence_score": 0.94
    },
    {
      "id": "bw_prod_8824",
      "name": "Sony WH-1000XM5 Wireless Headphones - Black",
      "price_sgd": 429.00,
      "source": "lazada_sg",
      "buy_url": "https://www.lazada.sg/sony-wh-1000xm5",
      "affiliate_url": "https://affiliate.buywhere.ai/track/8824",
      "rating": 4.7,
      "review_count": 892,
      "in_stock": true,
      "confidence_score": 0.91
    }
  ]
}

Same product, same format, multiple platforms. That's the value of a unified catalog.

Key Endpoints for Singapore Data

Product Search

const response = await fetch('https://api.buywhere.ai/v2/products', {
  headers: { 'Authorization': `Bearer ${API_KEY}` },
  params: {
    q: 'macbook air m3',
    region: 'sg',
    category: 'electronics',
    limit: 20
  }
});

const { items } = await response.json();

Price Comparison

// Compare specific products across platforms
const compareResponse = await fetch('https://api.buywhere.ai/v2/products/compare', {
  headers: { 'Authorization': `Bearer ${API_KEY}` },
  params: {
    ids: 'bw_prod_8823,bw_prod_8824,bw_prod_8825',
    region: 'sg'
  }
});

Deal Discovery

// Find products with significant discounts
const dealsResponse = await fetch('https://api.buywhere.ai/v2/deals', {
  headers: { 'Authorization': `Bearer ${API_KEY}` },
  params: {
    region: 'sg',
    min_discount: 20,
    category: 'electronics',
    limit: 10
  }
});

Singapore-Specific Considerations

GST Handling

Singapore's 9% GST is included in prices on most platforms, but not all. The API normalizes this:

{
  "price_sgd": 328.00,
  "gst_included": true,
  "gst_amount": 27.08
}

When comparing prices, always use price_sgd for accurate comparisons.

Currency

All prices are returned in SGD. For agents operating internationally, you'll need to handle conversion separately.

Platform Reputation Signals

Different platforms have different trust characteristics in Singapore:

PlatformTypical Advantage
ShopeeCompetitive pricing, frequent flash sales
LazadaOfficial store presence, reliable shipping
Amazon.sgInternational shipping, authentic products
CarousellSecond-hand, hard-to-find items
Courts/Harvey NormanIn-person support, extended warranties

The API returns seller_rating and review_count so agents can factor in trust.

Building a Singapore Price Monitor

Here's a practical example—a price monitor that watches for drops on specific products:

import requests
import time
from datetime import datetime

BUYWHERE_API = "https://api.buywhere.ai/v2"
API_KEY = "your_api_key"

def get_product_history(product_id, days=7):
    """Get price history for a product."""
    response = requests.get(
        f"{BUYWHERE_API}/products/{product_id}/history",
        headers={"Authorization": f"Bearer {API_KEY}"},
        params={"days": days}
    )
    return response.json()

def check_price_drop(product_id, threshold_pct=10):
    """Alert if price dropped more than threshold."""
    history = get_product_history(product_id)
    
    current = history['current']['price_sgd']
    previous = history['average']['price_sgd']
    
    drop_pct = ((previous - current) / previous) * 100
    
    if drop_pct >= threshold_pct:
        return {
            "alert": True,
            "product_id": product_id,
            "current_price": current,
            "previous_avg": previous,
            "drop_pct": drop_pct,
            "timestamp": datetime.now().isoformat()
        }
    
    return {"alert": False}

# Watch Sony headphones for 15% drops
result = check_price_drop("bw_prod_8823", threshold_pct=15)
if result['alert']:
    print(f"Price drop alert: {result['drop_pct']:.1f}% off!")

Coverage and Data Freshness

BuyWhere covers:

  • 50+ Singapore merchants including Shopee, Lazada, Amazon.sg, Carousell, Qoo10, Zalora, and specialty retailers
  • 500,000+ products across electronics, fashion, home, beauty, sports, and more
  • 15-minute refresh for price and availability updates
  • Real-time during major sales events (11.11, 12.12, CNY)

Getting Started

Sign up at api.buywhere.ai to get your free API key. The free tier includes 1,000 requests per day—enough for development and small projects.

# Quick test with curl
curl "https://api.buywhere.ai/v2/products?q=ipad+air&region=sg&limit=1" \
  -H "Authorization: Bearer YOUR_KEY"

The unified catalog won't solve every data problem, but it eliminates the most tedious part: building and maintaining scrapers for platforms that don't want to be scraped.

Focus on your agent's intelligence layer. Let BuyWhere handle the data pipeline.