Live lead enrichment
Turn a raw domain into a qualified lead in one API call.
Firmographics, tech stack, funding, and ICP fit, pulled from the live web and structured to your schema. Enrich every inbound inside your own pipeline instead of stitching together five data vendors. The enrichment happens inside the call.
import Tabstack, { APIError } from '@tabstack/sdk'
const client = new Tabstack()
// One domain in, a company profile out.
try {
const company = await client.extract.json({
url: 'https://acme.com',
json_schema: {
type: 'object',
properties: {
company_name: { type: 'string' },
industry: { type: 'string' },
headcount_range: { type: 'string' },
hq_location: { type: 'string' },
tech_stack: { type: 'array' },
value_propositions: { type: 'array' },
target_customers: { type: 'array' },
},
},
effort: 'standard',
})
console.log(company) // structured, no parsing
} catch (err) {
if (!(err instanceof APIError)) throw err
console.error(err.status, err.message)
}The old way
Lead enrichment means five vendors and stale records.
Every data provider covers a different slice, bills per record, and answers from a cache that's weeks old. You pay for coverage you don't use and still hit gaps on the accounts that matter, then reconcile conflicting fields by hand.
Stitched together
- A different vendor for firmographics, tech stack, and funding
- Conflicting fields you reconcile by hand
Stale & expensive
- Per-record pricing whether the data is fresh or not
- Cached records that are weeks behind the live site
/extract/json
Turn a company's site into structured firmographics.
Point /extract at a domain and define the JSON shape you want back: industry, headcount, HQ, tech stack, positioning. No parsing, no cleanup on JS-heavy pages, no scraper to maintain. One call returns schema-matched data you can write straight to your CRM.
Features
- ✓Schema-driven extraction, no parsing code
- ✓Firmographics, tech stack, and positioning in one call
- ✓Clean output from JS-heavy pages
- ✓geo_target for region-specific data
import Tabstack, { APIError } from '@tabstack/sdk'
const client = new Tabstack()
// One domain in, a company profile out.
try {
const company = await client.extract.json({
url: 'https://acme.com',
json_schema: {
type: 'object',
properties: {
company_name: { type: 'string' },
industry: { type: 'string' },
headcount_range: { type: 'string' },
hq_location: { type: 'string' },
tech_stack: { type: 'array' },
value_propositions: { type: 'array' },
target_customers: { type: 'array' },
},
},
effort: 'standard',
})
console.log(company) // structured, no parsing
} catch (err) {
if (!(err instanceof APIError)) throw err
console.error(err.status, err.message)
}import Tabstack from '@tabstack/sdk'
const client = new Tabstack()
// Funding and buying signals, live web.
const stream = await client.agent.research({
query: 'Latest funding and hiring at Acme?',
mode: 'fast',
nocache: true,
})
for await (const event of stream) {
if (event.event === 'complete') {
console.log(event.data.report) // cited
}
if (event.event === 'error') {
console.error(event.data.error.message)
}
}/research
Pull funding, hiring, and buying signals from the live web.
Give /research a question about an account and it reads the live web, finds the sources, and returns a synthesized answer with a citation on every claim. Catch a funding round, a leadership hire, or a new product the day it happens, not the month a vendor refreshes its cache.
Features
- ✓Live-web, multi-source research in one call
- ✓Citations and source URLs on every claim
- ✓nocache to bypass the cache and refetch
- ✓Streams over SSE
/generate/json
Score ICP fit before a lead ever hits a rep.
Point /generate at the same domain with your scoring instructions and get back a structured fit score against your ICP. It reads the page and applies the instructions in one call. Route, tier, and prioritize every inbound automatically, so reps spend their time on the accounts that convert instead of qualifying by hand.
Features
- ✓Structured scoring against your own ICP
- ✓Tiering and routing you can automate
- ✓One credit currency with the rest of the pipeline
import Tabstack, { APIError } from '@tabstack/sdk'
const client = new Tabstack()
// Read the site and score ICP fit in one call.
try {
const fit = await client.generate.json({
url: 'https://acme.com',
instructions:
'Score this company against our ICP: mid-market B2B SaaS. ' +
'Return a 0-100 score, a tier, and a one-line rationale.',
json_schema: {
type: 'object',
properties: {
icp_fit_score: { type: 'number' },
tier: { type: 'string' },
rationale: { type: 'string' },
},
},
})
console.log(fit) // route the lead before it hits a rep
} catch (err) {
if (!(err instanceof APIError)) throw err
console.error(err.status, err.message)
}Try it live
Enrich any domain from the live web.
Enter a company domain and watch a real, cited profile stream in. It runs three live Tabstack calls (/extract/json, /research, /generate/json) and caches the result in your browser.
Runs three live Tabstack calls (/extract/json, /research, /generate/json).
Own it vs. buy it
You are paying vendors for data you could pull yourself.
Enrichment data is public. A data vendor charges you per record for a cache on top of information that is live on the web right now. Build the enrichment step you actually need on a handful of calls, own it, and verify every field against the source.
Data vendors
- Per-record fees whether you use the data or not
- A cache you cannot inspect or verify
- Coverage gaps on the accounts that matter most
Per-record billing
Build on Tabstack
owned- Usage-based credits across five endpoints
- Build the enrichment step you need and own it
- Open every source and verify the field yourself
Who builds on this
Teams that enrich leads without a data vendor.
Growth & data engineers
Enrichment in the pipeline, not five vendor integrations.
RevOps & sales teams
Every inbound scored and routed before a rep sees it.
Founders & investors
A live read on any account, no seat to buy.
Agents
Account context pulled fresh, mid-workflow.
Mozilla-backed
Privacy, Transparency, and Control
When you build on /research, your users' questions and the data behind every answer stay yours. Tabstack is a Mozilla-backed platform, and we handle live-web research responsibly, so you can ship features your users actually trust.
Private by default.Queries and retrieved pages are used to build your answer and support you, then purged. Never sold, never used to train models.
Verifiable by design.Every answer returns source URLs and inline citations, so you and your users can confirm exactly where each claim came from.
Yours to control.You set the mode, scope, and depth of every call. No retained corpus, no lock-in, just clean, cited data you own.
See exactly how we source and handle data in the documentation.
Mozilla ManifestoPricing & Plans
All prices in USD.
Starter
100,000 credits included
For tinkerers & hobbyists who want to simply connect their systems to the internet.
Get StartedTeam
500,000 credits included
Low-latency, predictable cost automation so you can focus on your core product.
Get StartedPro
3,000,000 credits included
For teams deploying and managing production workloads efficiently at scale.
Get StartedEnterprise Plan
Need Custom Pricing?
Custom API quotas, dedicated support, and SLAs for high-volume teams.
Cost per action
Every endpoint bills in credits. Extract and Generate are a single action per call. Automate and Research run a variable number of actions per task, so cost scales with the work they do.
- Extract (Markdown)10 credits
- Extract (JSON)50 credits
- Generate100 credits
- Automate100 credits
- Research (Fast)250 credits
- Research (Balanced)350 credits
Qualify an inbound before a rep opens it.
Start with 10,000 free credits, no card.