Headless Chrome. Without the headaches.
The workhorse: real Chromium, real residential proxies, real cookie state. Fetch any URL, render JS, return HTML or screenshot. The thing you reach for when you just need the page.
GET /scrape
?url=https://shop.example.com/p/lamp-12
&render=true
&premium=true
&geo=us-ca
&wait_for=.price
→ 200 OK · 15 credits · 2.1s
{
"html": "<!doctype html>...",
"status_code": 200,
"final_url": "https://shop...",
"screenshots": ["data:image/png;base64,..."],
"headers": { ... },
"credits_used": 15
}
See it work, before you sign up.
Drop in a URL, run a real call against the live API, and watch the JSON come back in about a second. No API key required.
Not a fingerprint shim. We run actual headed Chrome with mouse jitter, page-load timing, and human-grade TLS. Most sites can't tell.
Set proxy_type=auto and we escalate datacenter → residential → premium residential → custom pool → managed-Selenium until a request returns 200, and we only bill the successful tier. The default; opt out by pinning a specific tier.
proxy_type is the cost lever. js=0 + datacenter is 1 credit. js=1 jumps to 5. premium / residential is 15. Start cheap on easy targets; escalate (or just leave proxy_type=auto) when a site genuinely needs it. Same endpoint, same code. Costs scale with what you actually need.
Set geo=us-ca or geo=de-be and route through a clean residential IP in that exact region. Cookies and language follow.
wait_for: ".price" blocks until that selector appears. wait_for_network_idle waits for fetch storms to settle. No setTimeout(5000).
Full-page PNG, viewport PNG, or HAR file with every network call. Useful for debugging blocks and capturing content for archival.
Pass session_id to keep cookies and localStorage across requests. Perfect for paywalled or login-gated content.
Playwright gives you a browser; it doesn't give you proxies, anti-bot bypass, JA4 fingerprint patching, CAPTCHA-solving, or pay-on-success billing. We run a real Chromium under our own anti-detection stack and our credit pool, so the same code that works on a small site keeps working when the site adds Cloudflare.
Copy. Paste. Ship.
import { Ujeebu } from "ujeebu";
const uj = new Ujeebu(process.env.UJEEBU_KEY);
const { html, status_code } = await uj.scrape({
url: "https://shop.example.com/p/lamp-12",
render: true,
premium: true,
geo: "us-ca",
wait_for: ".price"
});
from ujeebu import Ujeebu
uj = Ujeebu(api_key=os.environ["UJEEBU_KEY"])
page = uj.scrape(
url="https://shop.example.com/p/lamp-12",
render=True, premium=True,
geo="us-ca", wait_for=".price",
)
print(page["status_code"]) # 200
curl -G https://api.ujeebu.com/scrape \
-H "Authorization: Bearer $UJEEBU_KEY" \
--data-urlencode "url=https://shop.example.com/p/lamp-12" \
-d "render=true&premium=true&geo=us-ca&wait_for=.price"
client := ujeebu.New(os.Getenv("UJEEBU_KEY"))
page, err := client.Scrape(ctx, ujeebu.ScrapeReq{
URL: "https://shop.example.com/p/lamp-12",
Render: true, Premium: true,
Geo: "us-ca", WaitFor: ".price",
})
Real things real teams shipped this quarter.
Crawl a sitemap of 100k URLs and pipe HTML into your indexing job. Concurrent requests scale linearly with your plan tier.
Authenticate once via session_id, then scrape behind the wall. Cookies persist across calls until they expire.
Same URL, 12 geos, 12 prices. Loop with the geo param, store with locale. Never get redirected to the wrong currency again.
Take daily full-page screenshots of your competitors' pricing pages. Diff with pixelmatch. Get notified when anything changes.
1 credit per Generic Scraper call. Here's what that buys.
One credit pool covers every endpoint. Failed calls cost 0. No per-feature upcharges, no premium-proxy tax. See full pricing →
Ship Generic Scraper tonight.
5,000 credits free. No card. Real residential proxies on the free tier.