Playground Sign in Start free
SERP

Google search results, structured.

Google SERPs in clean JSON. Organic, ads, featured snippets, knowledge panels, people-also-ask, related searches, all parsed, all geo-targetable. No CAPTCHAs ever reach your code.

25
credits / call
450ms
p50 latency
180+
geo targets
GET /serp
GET /serp
  ?q=best+linen+arc+lamp
  &geo=us-ca
  &num=20

→ 200 OK · 25 credits · 450ms
{
  "engine": "google",
  "query":  "best linen arc lamp",
  "organic": [
    { "rank": 1, "title": "Linen Arc Lamp Review",
      "url": "https://...", "snippet": "..." },
    ...
  ],
  "ads":              [...],
  "featured_snippet": {...},
  "people_also_ask":  [...],
  "related_searches": [...],
  "total_results":    143000
}
Live playground

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.

Google, deeply parsed

Organic, ads, featured snippets, knowledge panels, people-also-ask, image carousels, news, Twitter cards, local packs, shopping: every block returned as typed JSON.

Geo + locale

geo=de-be&hl=de returns Berlin's German-language Google. Country, region, and city-level targeting, critical for SEO tracking and locale-specific market research.

No CAPTCHAs

We solve them upstream. Your code never sees one. If a query is genuinely uncrawlable from a region, you get a clean error, not a blank result.

Pagination + cursor

Pass start=0,10,20… or use cursor to walk a result set without re-querying. Built-in dedup across pages.

Bulk-friendly

Concurrency limits scale with your plan tier: higher tiers run 100 SERP requests in parallel, perfect for nightly rank-tracking jobs.

Schema-stable

When Google ships a new SERP feature, we map it into the same shape within days. Your parser keeps working; new fields just appear.

Drop-in code

Copy. Paste. Ship.

import { Ujeebu } from "ujeebu";
const uj = new Ujeebu(process.env.UJEEBU_KEY);

const { data } = await uj.serp({
  q:    "best linen arc lamp",
  geo:  "us-ca",
  num:  20,
});

data.organic.slice(0,5).forEach(r =>
  console.log(r.rank, r.title)
);
from ujeebu import Ujeebu
uj = Ujeebu(api_key=os.environ["UJEEBU_KEY"])

results = uj.serp(
    q="best linen arc lamp",
    geo="us-ca", num=20,
)
for r in results["organic"][:5]:
    print(r["rank"], r["title"])
curl -G https://api.ujeebu.com/serp \
  -H "Authorization: Bearer $UJEEBU_KEY" \
  -d "q=best+linen+arc+lamp&geo=us-ca&num=20"
// Track a keyword across 12 geos
const geos = ["us-ca","us-ny","gb","de","fr","es",
              "it","au","ca","jp","br","mx"];

const ranks = await Promise.all(
  geos.map(geo => uj.serp({
    q: "your-brand", geo
  }))
);
What people build with it

Real things real teams shipped this quarter.

SEO rank tracking

Daily rank for 5k keywords across 12 geos. Cron + concurrent SERP calls + Postgres. No proxy management, no CAPTCHA hell.

Competitive intelligence

Pull every ad your competitor runs against your brand keyword. Detect new ad copy, landing pages, and bid changes within the hour.

Content gap analysis

Query "people-also-ask" and "related-searches" for your target keywords. Build the topic cluster your content team is missing.

Live answer engines

Power a Q&A product. Hit SERP, take featured-snippets + top-3 organics, pass through an LLM with citations. Sub-second response.

Ship SERP tonight.

5,000 credits free. No card. Real residential proxies on the free tier.