Coğrafi Hedefli Fiyat İzleme: Farklı Pazarlarda Fiyat Takibi

Global piyasalarda geo- hedefli proxy kullanan ürün fiyatları. Python ve Node.js kodu multi-pazar fiyat karşılaştırması, para normalizasyonu ve rakip fiyat algılaması için.

Coğrafi Hedefli Fiyat İzleme: Farklı Pazarlarda Fiyat Takibi

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.

Geo-Pricing Works
Signal SignalNasıl çalışırFiyatlama Üzerine Etkisi
IP GeolocationIP adresi veritabanı aracılığıyla ülkeye/şehir'e haritalandıİlk faktör – hangi bölgesel mağazayı / sizi gördüğünüzü belirler
Para / DilTarayıcı Kabul - Dil ve önceki seçimlerBölgeye özgü katalog ve fiyatlandırmayı tetikleyebilir
ÇerezlerÖnceki bölge seçimleri oturumda depolanırOverrides 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 KonumMobile device location serviceshiperlocal 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:8080

Bö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:

Vergi Kullanımı
Market Market MarketTipik Vergi TedavisiDüşünmek
Amerika Birleşik DevletleriFiyatlar pre-taxActual maliyeti devlet tarafından değişir (0-10.25)
Avrupa BirliğiFiyatlar KDV dahil (19-27%)gibi karşılaştırmalar için alt dışlama KDV
Birleşik KrallıkFiyatlar% 20 KDV içerirNet karşılaştırma için alt intrat KDV
Japonya Japonya JaponyaFiyatlar% 10 tüketim vergisi içeriyornet 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ı.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön