Fiyatlar Neden Konum Tarafından Differ
E-ticaret şirketleri müşterinin coğrafi konumuna dayanan fiyatları rutin olarak ayarlar. ABD'de 49.99 dolara mal olan bir ürün, Almanya'da 59.99 EUR, Japonya'da 5,499 JPY veya Hindistan'da 39.99 dolar olabilir. Bu farklılıklar para dönüşümünin ötesine geçiyor - bölgesel satın alma gücünü, rekabetçi manzaraları, vergileri, nakliye maliyetlerini ve kasıtlı fiyat stratejilerini yansıtıyorlar.
Rekabetçi zeka için, bu bölgesel fiyat varyasyonlarını anlamak kritiktir. Bir rakip, bir pazarda prim fiyatlarını başka bir pazarda şarj ederken agresif bir şekilde kesintiye uğrayabilir. geo-targeted izleme olmadan, rekabetçi resmin yarısını körsünüz. Bu kılavuz, geo-targeted proxy kullanarak multi-pazar fiyat izleme sistemi nasıl inşa edileceğini kapsar. Temel izleme mimarisi için rehberimizi görün Rakip fiyatları otomatik olarak izleme.
Geo-Pricing Works
Web siteleri konumunu birkaç sinyal üzerinden belirler ve içeriği buna göre ayarlar.
| Signal Signal | Nasıl çalışır | Fiyatlama Üzerine Etkisi |
|---|---|---|
| IP Geolocation | IP adresi veritabanı aracılığıyla ülkeye/şehir'e haritalandı | İlk faktör – hangi bölgesel mağazayı / sizi gördüğünüzü belirler |
| Para / Dil | Tarayıcı Kabul - Dil ve önceki seçimler | Bölgeye özgü katalog ve fiyatlandırmayı tetikleyebilir |
| Çerezler | Önceki bölge seçimleri oturumda depolanır | Overrides IP tabanlı bir algılama sonraki ziyaretlerde |
| URL Yapı | Ülkeye özgü domainler (amazon.de) veya yollar (/de/) | Doğrudan bölgesel katalogları belirler |
| GPS/Device Konum | Mobile device location services | hiperlocal fiyatlandırması için kullanılır (delivery regions) |
Common Geo-Pricing Patterns
- Market localization: Amazon, eBay ve benzer platformlar bağımsız fiyatlandırma ile ayrı bölgesel mağaza cephelerini işletiyor.
- Dinamik geo-pricing: SaaS şirketleri ve seyahat siteleri ziyaretçinin kökenine göre fiyatlar ayarlar.
- Nakliye-adjusted fiyatlandırma: Ürünler yere göre farklı nakliye maliyetleri içerir, etkili fiyatı değiştirir.
- Vergi dahil fiyatlandırma: Avrupa fiyatları genellikle KDV içerir, ABD fiyatları ön-tax miktarlarını gösterirken.
- Güç parity satın almak: Bazı şirketler, erişilebilirliği artırmak için gelişmekte olan pazarlarda daha düşük fiyatlar sunar.
Multi-Market İzleme için Proxy Ayarları
Temel gereksinim her hedef ülkeden konut referanslarıdır. ProxyHat'ın geo-targeting, her istek için tam ülkeyi belirtmenize izin verir.
ProxyHat Build
# US pricing
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# German pricing
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# UK pricing
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080
# Japanese pricing
http://USERNAME-country-JP:PASSWORD@gate.proxyhat.com:8080
# Brazilian pricing
http://USERNAME-country-BR:PASSWORD@gate.proxyhat.com:8080
# City-level targeting for hyperlocal pricing
http://USERNAME-country-US-city-newyork:PASSWORD@gate.proxyhat.com:8080
http://USERNAME-country-DE-city-berlin:PASSWORD@gate.proxyhat.com:8080Bölgelerde fiyat izleme için, her ülkede algılamayı önlemek için per-request rotasyonunu kullanın, ancak her zaman pazar başına tutarlı geo-targeting korur. Check Check Check Check ProxyHat'ın tam yer listesi 195+ desteklenen ülkeler için.
Python Uygulaması
İşte çok pazarlama fiyat izleme sistemi kullanarak ProxyHat's Python SDK.
Geo-Targeted Price Lavabo
import requests
from bs4 import BeautifulSoup
import json
import time
import random
from dataclasses import dataclass, asdict
from datetime import datetime
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
]
PROXY_TEMPLATE = "http://USERNAME-country-{country}:PASSWORD@gate.proxyhat.com:8080"
@dataclass
class GeoPrice:
product_id: str
country: str
price: float | None
currency: str
url: str
in_stock: bool
scraped_at: str
def get_geo_proxy(country_code: str) -> dict:
"""Get proxy configured for a specific country."""
proxy = PROXY_TEMPLATE.format(country=country_code)
return {"http": proxy, "https": proxy}
def scrape_price_for_region(product_url: str, country_code: str,
price_selector: str, currency: str) -> GeoPrice:
"""Scrape a product price from a specific geographic region."""
headers = {
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": get_accept_language(country_code),
}
proxies = get_geo_proxy(country_code)
try:
response = requests.get(product_url, headers=headers,
proxies=proxies, timeout=30)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
price_el = soup.select_one(price_selector)
price = None
if price_el:
price_text = price_el.get_text(strip=True)
cleaned = "".join(c for c in price_text if c.isdigit() or c in ".,")
# Handle European comma as decimal separator
if "," in cleaned and "." in cleaned:
cleaned = cleaned.replace(".", "").replace(",", ".")
elif "," in cleaned:
cleaned = cleaned.replace(",", ".")
price = float(cleaned) if cleaned else None
return GeoPrice(
product_id=product_url,
country=country_code,
price=price,
currency=currency,
url=product_url,
in_stock=True,
scraped_at=datetime.utcnow().isoformat(),
)
except Exception as e:
return GeoPrice(
product_id=product_url,
country=country_code,
price=None,
currency=currency,
url=product_url,
in_stock=False,
scraped_at=datetime.utcnow().isoformat(),
)
def get_accept_language(country_code: str) -> str:
"""Return appropriate Accept-Language for a country."""
lang_map = {
"US": "en-US,en;q=0.9",
"GB": "en-GB,en;q=0.9",
"DE": "de-DE,de;q=0.9,en;q=0.5",
"FR": "fr-FR,fr;q=0.9,en;q=0.5",
"JP": "ja-JP,ja;q=0.9,en;q=0.5",
"BR": "pt-BR,pt;q=0.9,en;q=0.5",
"IN": "en-IN,hi;q=0.9,en;q=0.5",
"IT": "it-IT,it;q=0.9,en;q=0.5",
"ES": "es-ES,es;q=0.9,en;q=0.5",
}
return lang_map.get(country_code, "en-US,en;q=0.9")Multi-Market Monitor
class MultiMarketMonitor:
"""Monitor prices across multiple geographic markets."""
def __init__(self):
self.markets = {}
self.results = []
def add_market(self, country_code: str, marketplace_url: str,
price_selector: str, currency: str):
"""Register a market for monitoring."""
self.markets[country_code] = {
"url": marketplace_url,
"selector": price_selector,
"currency": currency,
}
def monitor_product(self, product_urls: dict[str, str]) -> list[GeoPrice]:
"""
Monitor a product across all configured markets.
product_urls: {"US": "https://amazon.com/dp/...", "DE": "https://amazon.de/dp/..."}
"""
prices = []
for country, url in product_urls.items():
market = self.markets.get(country)
if not market:
continue
price = scrape_price_for_region(
url, country,
market["selector"],
market["currency"]
)
prices.append(price)
print(f" {country}: {price.currency} {price.price}")
time.sleep(random.uniform(2, 5))
return prices
def compare_prices(self, prices: list[GeoPrice], base_currency_rates: dict) -> dict:
"""Compare prices across markets normalized to USD."""
normalized = {}
for p in prices:
if p.price:
rate = base_currency_rates.get(p.currency, 1.0)
normalized[p.country] = {
"local_price": p.price,
"currency": p.currency,
"usd_equivalent": round(p.price / rate, 2),
}
if not normalized:
return {}
usd_prices = [v["usd_equivalent"] for v in normalized.values()]
cheapest = min(usd_prices)
most_expensive = max(usd_prices)
return {
"prices": normalized,
"cheapest_market": [k for k, v in normalized.items()
if v["usd_equivalent"] == cheapest][0],
"most_expensive_market": [k for k, v in normalized.items()
if v["usd_equivalent"] == most_expensive][0],
"price_spread_pct": round(
(most_expensive - cheapest) / cheapest * 100, 1
) if cheapest > 0 else 0,
}
# Example: Monitor a product across Amazon marketplaces
monitor = MultiMarketMonitor()
# Configure markets
monitor.add_market("US", "amazon.com", "span.a-price-whole", "USD")
monitor.add_market("DE", "amazon.de", "span.a-price-whole", "EUR")
monitor.add_market("GB", "amazon.co.uk", "span.a-price-whole", "GBP")
monitor.add_market("JP", "amazon.co.jp", "span.a-price-whole", "JPY")
# Monitor a specific product
prices = monitor.monitor_product({
"US": "https://www.amazon.com/dp/B0CHX3QBCH",
"DE": "https://www.amazon.de/dp/B0CHX3QBCH",
"GB": "https://www.amazon.co.uk/dp/B0CHX3QBCH",
"JP": "https://www.amazon.co.jp/dp/B0CHX3QBCH",
})
# Compare prices in USD
comparison = monitor.compare_prices(prices, {
"USD": 1.0, "EUR": 0.92, "GBP": 0.79, "JPY": 149.5,
})
print(json.dumps(comparison, indent=2))Node.js Uygulama
A Node.js multi-market monitor using using ProxyHat's Node SDK.
const axios = require("axios");
const cheerio = require("cheerio");
const { HttpsProxyAgent } = require("https-proxy-agent");
function getGeoProxy(countryCode) {
return `http://USERNAME-country-${countryCode}:PASSWORD@gate.proxyhat.com:8080`;
}
const LANG_MAP = {
US: "en-US,en;q=0.9",
GB: "en-GB,en;q=0.9",
DE: "de-DE,de;q=0.9,en;q=0.5",
FR: "fr-FR,fr;q=0.9,en;q=0.5",
JP: "ja-JP,ja;q=0.9,en;q=0.5",
};
async function scrapeGeoPrice(url, countryCode, priceSelector, currency) {
const agent = new HttpsProxyAgent(getGeoProxy(countryCode));
try {
const { data } = await axios.get(url, {
httpsAgent: agent,
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
"Accept-Language": LANG_MAP[countryCode] || "en-US,en;q=0.9",
},
timeout: 30000,
});
const $ = cheerio.load(data);
let priceText = $(priceSelector).first().text().trim();
let price = parseFloat(priceText.replace(/[^0-9.,]/g, "").replace(",", ".")) || null;
return {
country: countryCode,
price,
currency,
url,
inStock: true,
scrapedAt: new Date().toISOString(),
};
} catch (err) {
return { country: countryCode, price: null, currency, url, inStock: false, scrapedAt: new Date().toISOString() };
}
}
async function monitorMultiMarket(productUrls, markets) {
const results = [];
for (const [country, url] of Object.entries(productUrls)) {
const market = markets[country];
if (!market) continue;
const result = await scrapeGeoPrice(url, country, market.selector, market.currency);
results.push(result);
console.log(`${country}: ${result.currency} ${result.price}`);
await new Promise((r) => setTimeout(r, 2000 + Math.random() * 3000));
}
return results;
}
function comparePrices(results, rates) {
const normalized = {};
for (const r of results) {
if (r.price) {
const rate = rates[r.currency] || 1;
normalized[r.country] = {
localPrice: r.price,
currency: r.currency,
usdEquivalent: Math.round((r.price / rate) * 100) / 100,
};
}
}
const usdPrices = Object.values(normalized).map((v) => v.usdEquivalent);
const cheapest = Math.min(...usdPrices);
const mostExpensive = Math.max(...usdPrices);
return {
prices: normalized,
cheapestMarket: Object.keys(normalized).find((k) => normalized[k].usdEquivalent === cheapest),
mostExpensiveMarket: Object.keys(normalized).find(
(k) => normalized[k].usdEquivalent === mostExpensive
),
priceSpreadPct: cheapest > 0 ? Math.round(((mostExpensive - cheapest) / cheapest) * 1000) / 10 : 0,
};
}
// Usage
const markets = {
US: { selector: "span.a-price-whole", currency: "USD" },
DE: { selector: "span.a-price-whole", currency: "EUR" },
GB: { selector: "span.a-price-whole", currency: "GBP" },
JP: { selector: "span.a-price-whole", currency: "JPY" },
};
monitorMultiMarket(
{
US: "https://www.amazon.com/dp/B0CHX3QBCH",
DE: "https://www.amazon.de/dp/B0CHX3QBCH",
GB: "https://www.amazon.co.uk/dp/B0CHX3QBCH",
JP: "https://www.amazon.co.jp/dp/B0CHX3QBCH",
},
markets
).then((results) => {
const comparison = comparePrices(results, { USD: 1.0, EUR: 0.92, GBP: 0.79, JPY: 149.5 });
console.log(JSON.stringify(comparison, null, 2));
});Multi-Market İzleme Stratejileri
Para Normalizasyon
Fiyatlar anlamlı bir şekilde karşılaştırmak için, tüm fiyatları bir temel para birimine normalleştirin. Güvenilir bir değişim oranı API'si kullanın (Açık Exchange Fiyatları, ECB oranları) ve günlük güncelleme oranları. Hem yerel hem de normalleştirilmiş fiyatlar doğru tarihsel analiz için.
Vergi Kullanımı
Farklı pazarlardaki fiyatlar farklı vergi seviyelerini içerir:
| Market Market Market | Tipik Vergi Tedavisi | Düşünmek |
|---|---|---|
| Amerika Birleşik Devletleri | Fiyatlar pre-tax | Actual maliyeti devlet tarafından değişir (0-10.25) |
| Avrupa Birliği | Fiyatlar KDV dahil (19-27%) | gibi karşılaştırmalar için alt dışlama KDV |
| Birleşik Krallık | Fiyatlar% 20 KDV içerir | Net karşılaştırma için alt intrat KDV |
| Japonya Japonya Japonya | Fiyatlar% 10 tüketim vergisi içeriyor | net karşılaştırma için alt aralık vergisi |
İzleme Programı
Tüm pazarlar aynı çek frekansına ihtiyaç duymaz. İş etkisine dayanarak önce:
- İlk pazarlar: Ana satış bölgeleriniz - her 1-2 saat kontrol edin.
- Genişleme hedefleri: Girdiğiniz Pazarlar - her 4-6 saat kontrol edin.
- Referans piyasaları: Sadece karşılaştırma için piyasalar - günlük kontrol edin.
Geo-Pricing Strategies tespit
Multi-market verilerle, rakip fiyatlandırma stratejileri tanımlayabilirsiniz:
- Üniforma global fiyat: Aynı fiyat (Para dönüşümünden sonra) her yerde. Dijital ürünler için ortak.
- PPP-adjusted fiyatlandırma: Daha düşük gelirli pazarlardaki düşük fiyatlar. SaaS ve yazılım için ortak.
- Rekabete dayalı fiyat: Fiyatlar yerel rekabetçi baskıya dayanan pazar tarafından değişir.
- Maliyet-plus fiyatlandırması: Farklı fiyatlar farklı nakliyeyi, savaşmayı ve vergi masraflarını yansıtmaktadır.
Key takeaway: Multi-market izleme, fiyat stratejilerinin tek pazarlama analizine görünmez olduğunu gösteriyor. Bir pazarda% 30 daha düşük fiyatlar ya agresif genişleme ya da araştırmaya değer farklı bir maliyet yapısı sunuyor.
Common Challenges
Bölgesel Emekliler
Bazı siteler kullanıcıların IP'ye dayanan bölgesel versiyonlara yönlendirmektedir. geo-targeted proxy ile, bu yönlendirmeyi istiyorsunuz - sizi doğru bölgesel fiyatlara götürür. Trans-bölge yönlendirmelerini takip etmeyin, çünkü IP yerinin hedef pazarla eşleşmediğini gösteriyorlar.
İçerik Farklılıkları
Ürün kullanılabilirliği bölge tarafından değişir. Amazon.com'da satılan bir ürün, Amazon.de'de olmayabilir. 404 yanıtları durdurun ve izleme borunuzda mükemmel olmayan ürünler.
Etiquette
Birden çok bölgeyi takip ettiğinizde, birden fazla ayrı web sitesini etkili bir şekilde kazılıyorsunuz. Başvuru Başvuru Bloklardan kaçınmak için en iyi uygulamalar Market başına bağımsız olarak. Amazon.com için hangi işler Amazon.co.jp için farklı ayara ihtiyaç duyabilir.
Data Storage for Multi-Market Data
CREATE TABLE geo_price_history (
id SERIAL PRIMARY KEY,
product_id VARCHAR(100) NOT NULL,
country_code VARCHAR(2) NOT NULL,
local_price DECIMAL(12, 2),
currency VARCHAR(3),
usd_equivalent DECIMAL(12, 2),
exchange_rate DECIMAL(10, 6),
in_stock BOOLEAN,
scraped_at TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_geo_price_product_country
ON geo_price_history (product_id, country_code, scraped_at DESC);
-- Query: Price spread across markets for a product
SELECT
country_code,
AVG(usd_equivalent) AS avg_usd_price,
MIN(usd_equivalent) AS min_usd_price,
MAX(usd_equivalent) AS max_usd_price
FROM geo_price_history
WHERE product_id = 'B0CHX3QBCH'
AND scraped_at >= now() - INTERVAL '7 days'
GROUP BY country_code
ORDER BY avg_usd_price;Key Takeaways
- E-ticaret fiyatları coğrafya tarafından önemli ölçüde değişir - bir pazarı izlemek eksik bir rekabetçi resim verir.
- Geo-targeted konut proxyleri önemlidir: ProxyHat'in ülke düzeyinde gerçek bölgesel fiyatlandırmaya erişmek için hedefleme.
- Fiyatları anlamlı çapraz piyasa karşılaştırmaları için temel para birimine normalize edin.
- Vergi farklılıkları için hesap (VAT-inclusive vs pre-tax) fiyatları karşılaştırırken.
- Maç doğru sonuçlar için hedef ülkeye doğru başlıkları kabul eder.
- proxy kullanımını optimize etmek için piyasanın frekansının izlenmesi önemlidir.
Pazarlardaki fiyatları izlemeye hazır mısın? Başlangıç ProxyHat'ın konut temsilcileri 195+ ülke seçenekleri ile ve bizim için okuyun e-ticaret kılavuzluk Tam strateji için. Gerçek zamanlı yetenekleri için rehberimizi görün Gerçek zamanlı fiyat izleme altyapısı.






