How to Get Estimated Revenue
You’re enriching new signups and leads, and your sales team needs an estimated revenue range to route accounts into the right tier in your CRM. By the end of this guide, you’ll be able to call Klazify with a domain, extract the company’s estimated revenue range alongside size and location, and safely plug those fields into your pipeline with caching, batching, and fallback handling.
Why Klazify is the right fit for estimated revenue from domains
Revenue is most useful when it’s consistent across your domain intelligence stack—classification, enrichment, and downstream routing. Klazify’s domain intelligence API combines rich website and company analysis so you can retrieve an estimated revenue range and related firmographics directly from a domain.
- Accurate website categorization using AI: Klazify analyzes on-site content rather than relying only on metadata. When you also need industry classification to complement revenue tiers, you can map domains to IAB categories and align them with your ICP.
- Global coverage: Many signups don’t come from a single country. Klazify parses multi-language sites, so you can enrich global leads with countryCode and stateCode along with revenue.
- Real-time classification: Results are generated from live content, which helps you avoid stale enrichment when routing accounts by revenue today.
- Industry-level categories: Use IAB taxonomy to tag each domain’s sector alongside revenue, enabling nuanced segmentation (e.g., “B2B SaaS ≥ $50M revenue”).
- Simple API integration: A single REST API gives you estimated revenue, employeesRange, location, and tags—easy to consume in lead forms, ingestion jobs, and ETL tasks.
- Compliance and filtering: When you combine revenue enrichment with IAB categories, you can whitelist or filter domains that don’t fit your policy before syncing to production systems.
The endpoint you’ll use to get estimated revenue
For company enrichment from a domain, call the Company endpoint:
- Method: POST
- URL: https://www.klazify.com/api/domain_company
- Auth: Bearer token
- Body: JSON with a url field
Returned fields include:
- name
- city
- stateCode
- countryCode
- employeesRange
- revenue (a range, not an exact figure)
- raised
- tags
Important: revenue is returned as a range to help you segment accounts without assuming a precise financial statement. Use it for tiering (e.g., SMB, Mid-Market, Enterprise) and routing logic rather than financial reporting.
Quick start: cURL request you can copy
This example shows how to request estimated revenue for a single domain. Replace YOUR_API_KEY with your token.
curl -X POST "https://www.klazify.com/api/domain_company" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://cbsnews.com"}'
Tip: When enriching multiple domains, parallelize multiple POST requests within your allowed rate window, and add a cache to avoid re-querying the same domain repeatedly.
Python example: enrich a domain and map the revenue range to a tier
The snippet below calls the Company endpoint, extracts the enrichment fields, and demonstrates a safe way to handle a revenue range. Keep your parsing defensive: treat revenue as a range string and only coerce to numbers if the format meets your criteria.
import os
import re
import requests
API_KEY = os.getenv("KLAZIFY_API_KEY", "YOUR_API_KEY")
ENDPOINT = "https://www.klazify.com/api/domain_company"
def parse_revenue_range(revenue_value):
# Handle revenue returned as a range string like "10M-50M" or "1B+"
if not revenue_value:
return None, None, "UNKNOWN"
text = str(revenue_value).upper().replace(" ", "")
# Simple normalization: convert tokens with K/M/B to integers
mult = {"K": 1_000, "M": 1_000_000, "B": 1_000_000_000}
def to_int(token):
m = re.match(r"^(\d+(\.\d+)?)([KMB])\+?$", token)
if not m:
return None
num = float(m.group(1))
unit = mult[m.group(3)]
return int(num * unit)
# Ranges like "10M-50M"
if "-" in text:
lo, hi = text.split("-", 1)
lo_val = to_int(lo) or None
hi_val = to_int(hi) or None
return lo_val, hi_val, "RANGE"
# Open-ended like "1B+"
if text.endswith("+"):
base = text[:-1]
base_val = to_int(base) or None
return base_val, None, "OPEN_ENDED"
# Fallback: if it's a single token we can parse
single = to_int(text)
if single is not None:
return single, single, "EXACT_COERCED"
# Unknown format
return None, None, "UNKNOWN"
def revenue_tier(low, high):
# Example tiering; adjust thresholds to your GTM policies
# Avoid guessing; define buckets that make sense for your ops
bound = high if high is not None else (low if low is not None else 0)
if bound < 1_000_000:
return "SMB"
if bound < 50_000_000:
return "MID_MARKET"
return "ENTERPRISE"
def enrich_domain(url):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {"url": url}
resp = requests.post(ENDPOINT, headers=headers, json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
# Expected keys from the Company endpoint
name = data.get("name")
city = data.get("city")
state = data.get("stateCode")
country = data.get("countryCode")
employees = data.get("employeesRange")
revenue_raw = data.get("revenue") # Treat as a range, not exact
raised = data.get("raised")
tags = data.get("tags", [])
lo, hi, kind = parse_revenue_range(revenue_raw)
tier = revenue_tier(lo, hi)
return {
"name": name,
"location": ", ".join([x for x in [city, state, country] if x]),
"employeesRange": employees,
"revenue_raw": revenue_raw,
"revenue_low": lo,
"revenue_high": hi,
"revenue_kind": kind,
"tier": tier,
"raised": raised,
"tags": tags
}
if __name__ == "__main__":
result = enrich_domain("https://cbsnews.com")
print(result)
How to use the fields:
- revenue_raw: store the canonical range in your warehouse for traceability.
- revenue_low/revenue_high: optional normalized integers for analytics (e.g., segmentation by lower bound).
- employeesRange: add to routing rules to detect outliers (e.g., large headcount but modest revenue).
- tags: feed to scoring models or match to your product-market segments.
Reference response and how to read it
Below is the official example response. While the Company endpoint you used above returns company fields directly, this sample illustrates the structure you’ll also see when classifying a domain via the categorization endpoint. It includes company attributes such as name, employeesRange, revenue, and tags that you will use similarly for enrichment and routing.
{
"domain": {
"categories": [
{
"confidence": 0.92,
"name": "/Computers & Electronics/Consumer Electronics",
"IAB-632-596": "Consumer Electronics/Technology & Computing/Consumer Electronics"
},
{
"confidence": 0.89,
"name": "/Internet & Telecom/Mobile & Wireless/Mobile Phones"
}
],
"social_media": null,
"logo_url": "https://klazify.s3.amazonaws.com/2110787991611585019600ed5fb1d1300.04730104.png"
},
"success": true,
"objects": {
"company": {
"url": "https://www.apple.com/",
"name": "Apple",
"city": "Cupertino",
"stateCode": "CA",
"countryCode": "US",
"employeesRange": "100K+",
"revenue": 274515000000,
"raised": null,
"tags": [
"E-commerce",
"Consumer Electronics",
"Mobile",
"B2C"
],
"tech": [
"omniture_adobe_analytics",
"atlassian_confluence",
"successfactors",
"apache_apex",
"talend",
"oracle_peoplesoft",
"salesforce",
"stripe",
"dell_boomi_atomsphere",
"gigya",
"sage_50cloud",
"quickbooks",
"webmethods",
"apache_tomcat",
"alteryx",
"tibco_rendezvous",
"atlassian_jira",
"..."
]
}
},
"domain_registration_data": {
"domain_age_date": "1987-02-19",
"domain_age_days_ago": "13026",
"domain_expiration_date": "2030-02-20",
"domain_expiration_days_left": "123"
},
"similar_domains": [
"bestbuy.com",
"icloud.com",
"microsoft.com",
"macrumors.com",
"google.com",
"samsung.com",
"twitter.com",
"hp.com",
"bhphotovideo.com",
"dell.com"
]
}
What you’ll use for revenue enrichment:
- objects.company.name: display in your CRM and data warehouse.
- objects.company.employeesRange: combine with revenue to improve scoring.
- objects.company.revenue: treat as an enrichment value for segmentation; in the Company endpoint it is returned as a range.
- objects.company.tags: common business descriptors you can map to your internal segment labels.
- domain.categories and IAB code: attach industry context to each enriched record when needed.
Field-to-action mapping for your pipeline
| Field | Purpose | Action in Pipeline | Downstream System |
|---|---|---|---|
| name | Canonical company name | Upsert account; avoid duplicates using domain + name | CRM, CDP |
| employeesRange | Company size band | Scoring and routing rules | CRM, Lead Router |
| revenue (range) | Estimated revenue band | Assign SMB/Mid/Enterprise, entitlement tiers | CRM, Billing, Analytics |
| city/stateCode/countryCode | Geolocation for compliance and territory | Territory assignment, SLA rules by region | CRM, Support |
| raised | Funding indicator | Flag strategic accounts; prioritize outreach | CRM |
| tags | Business descriptors | Map to internal segments and content tracks | Marketing Automation |
Turning estimated revenue into operational value
- Lead routing: Route “Enterprise” revenue bands to senior AEs while “SMB” routes to pooled SDRs.
- CRM enrichment: Store both the raw revenue range and normalized low/high bounds so analytics can bucket consistently.
- Ad targeting and brand safety: Combine IAB categories with revenue band to target industries at specific revenue levels.
- Entitlements: Gate premium product features for higher revenue bands automatically at signup.
Batching, latency, caching, and retries
When you need to enrich thousands of domains, design for throughput and resilience:
- Batching: Fan out parallel POST requests across a worker pool sized to your environment and your allowed rate. Control concurrency with a queue and track in-flight jobs.
- Caching: Cache results by apex domain (e.g., example.com). Choose a TTL aligned with how often you expect material changes; company revenue ranges and employeesRange don’t change daily, so you can cache for longer than transactional data.
- Retries: Implement exponential backoff on transient network errors. Failed or unreachable calls are not billed, which simplifies retry logic.
- Idempotency: If you retry a request for the same domain, use your cache key to avoid unnecessary duplication in downstream systems.
Handling unknown or new domains
If a domain has limited public signals or is newly launched, you may receive partial enrichment. Recommended approaches:
- Progressive enhancement: Store partial results and re-enrich after a delay.
- Fallback categories: If industry is unclear, route by geography and employeesRange until revenue range is available.
- Queue for recrawl: Periodically retry unknown domains and backfill the revenue range once present.
Mapping to your own revenue taxonomy
Klazify’s revenue is a range, which prevents overfitting to a specific reported figure. To align it with your internal taxonomy:
- Define tiers with explicit numeric thresholds (e.g., upper bound of the returned range determines the tier).
- Store the original revenue string and your computed tier to keep lineage.
- Combine with employeesRange for 2D segmentation (e.g., “High headcount, Mid revenue”).
If you also rely on industry segmentation, use the IAB categories from the classification endpoint to align revenue bands with industries in your ICP. See the MCP for governance across your model choices.
Integrating into signup flows and ETL
Real-time signup enrichment
- Trigger a POST to the Company endpoint as soon as a domain is provided.
- Apply a short timeout; if enrichment isn’t ready, proceed with signup and backfill asynchronously.
- Write the raw range to a user or account profile and calculate a tier flag for routing.
Nightly or streaming ETL
- De-duplicate domains before calling the API.
- Respect your rate window; partition the workload across workers.
- Stage results with the raw range plus normalized bounds and tiers for analytics.
Quality and coverage notes that matter for revenue
- Revenue is estimated and returned as a range. Use it for segmentation, not for precise financial reporting.
- IAB categories help disambiguate companies with similar names or varied product lines; use both industry and revenue to route correctly.
- Klazify analyzes website content for real-time classification, which can improve accuracy when sites change their product focus or expand into new markets.
For full parameter and response details, see the Documentation.
Pricing, trial, and billing behavior
- Starter plan is $39.99/month with a 7-day trial.
- Failed or unreachable calls are not billed, simplifying your retry policy.
If you’re ready to test with your own domains, create a free account: Register.
FAQ
-
Is the revenue value exact?
No. Klazify returns an estimated revenue range to support segmentation and routing. Store the raw range and map it to your tiers. -
How often should I refresh revenue?
Refresh on a schedule that matches your GTM needs. Many teams cache for weeks to months and recheck strategic accounts more frequently. -
What if the domain is a subdomain?
Normalize to the apex domain (e.g., app.example.com → example.com) for caching and de-duplication. Use the same apex key for enrichment. -
How do I handle partial or missing data?
Persist partial enrichment, set a retry timer, and use fallback routing (e.g., employeesRange or geography) until revenue is available. -
Can I combine revenue with content categories?
Yes. Use the categorization endpoint for IAB taxonomy and the company endpoint for revenue and firmographics to build compound rules.
Start enriching domains with estimated revenue, employees, and tags in minutes. Create your free account and get an API key here: Register. For endpoints and response schemas, bookmark the Documentation.
Ready to use Klazify?
Start classifying websites, enriching company data, and exploring web intelligence.
Get Started Free