Track every SKU, every variant, every geo.
Competitor prices, stock, ratings, promo flags, across thousands of retailers, refreshed nightly, validated against a stable schema. Built so your merch team can ship pricing rules, not babysit scrapers.
The hard parts, already solved.
Retailer anti-bot layers blow up most scrapers. Our 5-tier proxy fallback + headed Chromium quietly steps through them, so you never see a CAPTCHA.
Same product URL shows different prices in DE / FR / JP. We route via clean residential IPs in each region, so your geo-pricing intel is actually accurate.
When a target redesigns and a field disappears, we alert before your dashboards break. Most fixes ship inside 4 hours, behind the API.
Robots.txt respected, request rates polite, headers honest. Plus full audit logs of every request, which matters for regulated procurement teams.
3 steps. One pipeline.
// nightly-prices.ts
import { Ujeebu } from "ujeebu";
import { writeRows } from "./bq";
const uj = new Ujeebu(process.env.UJEEBU_KEY);
const SITES = [
"https://shop-a.com/sitemap-products.xml",
"https://shop-b.com/sitemap.xml",
"https://shop-c.de/sitemap.xml",
];
for (const sitemap of SITES) {
const urls = await uj.sitemap(sitemap);
const rows = await Promise.all(
urls.map(url => uj.scrape({
url, extract_rules: { price: ".price", title: "h1" },
proxy_type: "premium",
}))
);
await writeRows(
rows.filter(r => r.data?.price?.value),
{ dataset: "prices", table: "nightly" }
);
}