Build a Shopify competitor tracker that monitors rival stores' product listings, pricing, and search rankings by searching for competitor products across Google and Amazon, extracting price and availability data, and comparing changes over time. Shopify store owners need to know when competitors launch new products, change prices, or gain search ranking positions. An automated tracker catches these changes daily without manual browsing, and the search API provides structured data that is easier to process than raw HTML scraping.
Prerequisites
- Python 3.8+ installed
- requests library installed
- A Scavio API key from scavio.dev
- Competitor store names or product categories
Walkthrough
Step 1: Define competitors to track
Set up the competitor stores and product categories to monitor.
import os, requests, json, datetime, time, re
API_KEY = os.environ['SCAVIO_API_KEY']
COMPETITORS = [
{'name': 'CompetitorA', 'domain': 'competitor-a.myshopify.com', 'categories': ['t-shirts', 'hoodies']},
{'name': 'CompetitorB', 'domain': 'competitor-b.com', 'categories': ['sneakers', 'accessories']},
]
HISTORY_FILE = 'competitor_tracker.json'
print(f'Tracking {len(COMPETITORS)} competitors')Step 2: Search competitor products
Query Google for competitor product pages to track their catalog.
def search_competitor_products(competitor: dict) -> list:
products = []
for category in competitor['categories']:
query = f'site:{competitor["domain"]} {category}'
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
results = resp.json().get('organic_results', [])
for r in results[:5]:
products.append({
'competitor': competitor['name'],
'category': category,
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
})
time.sleep(0.3)
return products
prods = search_competitor_products(COMPETITORS[0])
print(f'Found {len(prods)} products')
for p in prods[:3]:
print(f" [{p['category']}] {p['title'][:50]}")Step 3: Search competitor pricing on Amazon
Cross-reference competitor products on Amazon to compare pricing.
def search_amazon_pricing(product_name: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'amazon', 'query': product_name}, timeout=15)
results = resp.json().get('organic_results', [])
if not results:
return {'found': False}
top = results[0]
price_str = top.get('price', '')
price_clean = re.sub(r'[^\d.]', '', str(price_str))
return {
'found': True,
'title': top.get('title', ''),
'price': float(price_clean) if price_clean else 0,
'rating': top.get('rating', ''),
'url': top.get('link', ''),
}
for p in prods[:2]:
amazon = search_amazon_pricing(p['title'][:40])
if amazon['found']:
print(f" {p['title'][:30]}: Amazon ${amazon['price']}")Step 4: Track search rankings
Monitor where competitors rank for target keywords.
def track_rankings(keywords: list, competitor_domains: list) -> list:
rankings = []
for keyword in keywords:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': keyword}, timeout=15)
results = resp.json().get('organic_results', [])
for i, r in enumerate(results):
link = r.get('link', '')
for domain in competitor_domains:
if domain in link:
rankings.append({
'keyword': keyword,
'competitor': domain,
'position': i + 1,
'title': r.get('title', ''),
'date': datetime.date.today().isoformat(),
})
time.sleep(0.3)
return rankings
domains = [c['domain'] for c in COMPETITORS]
rankings = track_rankings(['trendy t-shirts', 'custom hoodies'], domains)
for r in rankings:
print(f" #{r['position']}: {r['competitor']} for '{r['keyword']}'")Step 5: Generate competitor report
Produce a daily report comparing competitor activity, pricing, and rankings.
def daily_report(competitors: list) -> str:
lines = [f'Competitor Report - {datetime.date.today().isoformat()}', '']
for comp in competitors:
lines.append(f'--- {comp["name"]} ({comp["domain"]}) ---')
products = search_competitor_products(comp)
lines.append(f' Products indexed: {len(products)}')
for p in products[:2]:
amazon = search_amazon_pricing(p['title'][:40])
price_info = f', Amazon: ${amazon["price"]}' if amazon.get('found') else ''
lines.append(f' - {p["title"][:40]}{price_info}')
lines.append('')
report = '\n'.join(lines)
# Save report
with open(f'competitor_report_{datetime.date.today().isoformat()}.txt', 'w') as f:
f.write(report)
print(report)
return report
daily_report(COMPETITORS)Python Example
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def track_competitor(domain, category):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'site:{domain} {category}'}).json()
return [{'title': r.get('title', ''), 'url': r.get('link', '')}
for r in data.get('organic_results', [])[:5]]
print(track_competitor('example.myshopify.com', 't-shirts'))JavaScript Example
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function trackCompetitor(domain, category) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `site:${domain} ${category}`})
});
return ((await r.json()).organic_results || []).slice(0, 5)
.map(r => ({title: r.title, url: r.link}));
}
trackCompetitor('example.myshopify.com', 't-shirts').then(console.log);Expected Output
A Shopify competitor tracking system that monitors product catalogs, compares Amazon pricing, tracks search rankings, and generates daily competitive intelligence reports.