Build verified company & contact lists from the open web.
Job boards, company sites, directory listings, news mentions, turned into clean B2B records, deduped against your CRM. The fastest way to fill a pipeline without paying per-record on stale data brokers.
The hard parts, already solved.
Run SERP queries on hire signals, funding news, or product launches. Pipe results through Article Extractor: get clean company mentions, not a soup of nav links.
AI Scraper's company and profile schemas pull name, domain, HQ, employee count, tech stack, social links. Same shape from every source.
We don't buy email lists. We infer patterns from public signatures + verify with SMTP probing. ~94% deliverability across our customer base.
Same company shows up on LinkedIn, Crunchbase, their site, and 3 directories. Our entity-matching collapses them to one record with a unified profile.
Local directories, regional job boards, country-specific Companies House data, accessible because we run from clean residential IPs everywhere.
Push to HubSpot, Salesforce, Apollo, Clay, or your warehouse. Webhook delivery means new records show up in real time, not in nightly batches.
4 steps. One pipeline.
company schema turns each company URL into typed JSON: name, domain, employee count, HQ, tech stack, socials.profile schema on team pages + LinkedIn-style listings. Returns names, titles, public socials, inferred emails (verified separately).// hire-signal-pipeline.ts
import { Ujeebu } from "ujeebu";
const uj = new Ujeebu(process.env.UJEEBU_KEY);
// 1. Discover companies hiring for "Head of AI"
const serp = await uj.serp({
engine: "google",
q: '"head of ai" site:lever.co OR site:greenhouse.io',
num: 100,
});
// 2. Extract company info from each posting
const companies = await Promise.all(
serp.organic.map(r =>
uj.auto({ url: r.url, schema: "job" })
)
);
// 3. Pull team page for each unique domain
const teams = await Promise.all(
uniqDomains(companies).map(d =>
uj.auto({ url: `https://${d}/team`,
schema: "profile_list" })
)
);
await crm.upsert(merge(companies, teams));