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®ion=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:
| Platform | Typical Advantage |
|---|---|
| Shopee | Competitive pricing, frequent flash sales |
| Lazada | Official store presence, reliable shipping |
| Amazon.sg | International shipping, authentic products |
| Carousell | Second-hand, hard-to-find items |
| Courts/Harvey Norman | In-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®ion=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.