Get Website Traffic & SEO Maturity With DataForSEO Labs API
Most lead enrichment stacks describe a prospect well before they tell you whether that prospect is worth calling. You get firmographics, tech stack data, employee count, funding round, and maybe a LinkedIn URL. What you do not get is any read on whether the company’s website is doing anything for them. A B2B SaaS with 200 employees showing up in 150,000 organic SERPs is a very different account from one with 200 employees showing up in five. Adding website traffic and SEO maturity to the enrichment payload closes that gap. Below is how to do it with our DataForSEO Labs API, framed around a batch workflow you can run against an existing CRM list.
Why lead enrichment needs SEO data
Firmographic enrichment answers the question of who a company is. Traffic and SEO maturity answer what shape the company is in right now. Sales teams have started to notice the gap between the two.
Before a representative opens an account, they want to know whether the domain’s organic footprint is growing or stalled. Is there a paid search program running alongside the SEO? Does the company invest in content the way a real marketing team would? Firmographic providers cannot answer any of that. They tell you a company exists and roughly how large it is, and then they stop.
For teams building enrichment products, this is a gap you can close cheaply. Our DataForSEO Labs API returns traffic estimates and ranking distribution for any domain, on demand, in structured JSON. You do not have to build a crawl layer or maintain your own rank index. You pick which domains to enrich and decide how the metrics slot into your schema.
The two DataForSEO Labs endpoints that cover the enrichment job
Two endpoints do most of the work here, and they split along a clean line between batch scoring and single-domain drill-downs.
Bulk Traffic Estimation accepts up to 1,000 domains, subdomains, or URLs per request. For each target, it returns the estimated traffic volume count and the number of ranking SERPs. Reach for it when you want to score a whole list at once.
Domain Rank Overview takes a single target and returns the same core metrics plus a full ranking distribution: counts of ranking SERPs at positions from 1 to 10, and further down. This one is for the moment a rep opens a specific account in the CRM and needs the full picture.
Most enrichment workflows run both. Bulk Traffic Estimation runs on a schedule across the whole database. Domain Rank Overview is used on demand when someone opens a record. To keep things straightforward, the workflow below focuses on the bulk call, since that is where enrichment products spend most of their compute.
Use case: enriching a B2B prospect list with traffic and SEO maturity
A nightly job pulls domains from your CRM or lead database, chunks them into groups of up to 1,000, and sends each chunk to Bulk Traffic Estimation. Back come estimated monthly visits and a ranking SERP count for every domain. Those values go into your enrichment schema, each record gets a maturity tier attached, and the rest is handed off to whatever routing logic already exists downstream.
A single batch request against four B2B SaaS domains, ranging from mature enterprise to early-stage, all scored against the United States market:
Request example:
POST https://api.dataforseo.com/v3/dataforseo_labs/google/bulk_traffic_estimation/live
[
{
"targets": ["hubspot.com", "notion.so", "linear.app", "railway.app"],
"location_name": "United States",
"language_code": "en",
"item_types": ["organic", "paid"]
}
]
The items array in the response holds one entry per domain, and each entry carries the metrics you will use for enrichment.
Response example:
{
"version": "0.1.20250825",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.4321 sec.",
"cost": 0.0111,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"id": "07211729-1535-0391-0000-4858cd85ec9a",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.3812 sec.",
"cost": 0.0111,
"result_count": 1,
"path": [
"v3",
"dataforseo_labs",
"google",
"bulk_traffic_estimation",
"live"
],
"data": {
"api": "dataforseo_labs",
"function": "bulk_traffic_estimation",
"se_type": "google"
},
"result": [
{
"se_type": "google",
"location_code": 2840,
"language_code": "en",
"total_count": 4,
"items_count": 4,
"items": [
{
"se_type": "google",
"target": "hubspot.com",
"metrics": {
"organic": {
"etv": 1500077.437,
"count": 149890
},
"paid": {
"etv": 720.662,
"count": 58
}
}
},
{
"se_type": "google",
"target": "notion.so",
"metrics": {
"organic": {
"etv": 143955.541,
"count": 643
}
}
},
{
"se_type": "google",
"target": "linear.app",
"metrics": {
"organic": {
"etv": 43834.823,
"count": 1502
}
}
},
{
"se_type": "google",
"target": "railway.app",
"metrics": {
"organic": {
"etv": 2.352,
"count": 5
}
}
}
]
}
]
}
]
}
The four domains give you a clean spread of what SEO maturity looks like in the data. HubSpot is the mature footprint: close to 150,000 ranking SERPs, an estimated 1.5M monthly visits, and an active paid search program on top. Notion ranks on far fewer SERPs (643) but pulls a healthy 144K estimated visits, so the keywords it ranks for are high-value ones. Linear ranks on more SERPs than Notion (1,502) but brings in fewer visits (44K), the signature of a growing footprint whose rankings have not fully climbed yet. Railway shows the other end: five ranking SERPs and effectively no organic traffic.
In practice, two fields carry most of the enrichment weight. The count field is the total number of organic SERPs where the domain appears, a proxy for how much content and SEO effort the company has put in. The etv is the estimated traffic volume, which is the approximate number of monthly visits those rankings can drive to the website. One tells you how wide the footprint is; the other tells you how much of it earns traffic. When paid shows up, that is a third signal: the company is buying search ads, which usually points to an active marketing team and a real budget.
With those three fields, you can build a scoring rubric that your product can expose directly. Something like this maps traffic to a maturity tier and a downstream sales action:
| Ranking SERPs | Est. monthly visits (ETV) | Maturity tier | Sales routing |
|---|---|---|---|
| 50,000+ | 500,000+ | Mature enterprise | Enterprise AE, competitive displacement play |
| 500 to 50,000 | 10,000 to 500,000 | Growth stage | Mid-market AE, expansion narrative |
| 50 to 500 | 500 to 10,000 | Emerging | SMB queue, product-led onboarding |
| Under 50 | Under 500 | Early or dormant | Nurture, top-of-funnel content |
These thresholds are a starting point. Every enrichment product tunes them against its own customer base, and the tuning happens in your business logic once the metrics are in your schema, not in the data pipeline that got them there.
For most enrichment workflows, that tier is enough. When a rep needs more, Domain Rank Overview is the drill-in call. Same request shape as Bulk Traffic Estimation, one target instead of a list, and the response adds a full ranking distribution breakdown. That lets you show whether the domain’s traffic comes from a handful of top-3 positions or from a long tail of page-2 rankings.
Notes on scale and cost for enrichment workloads
Bulk Traffic Estimation is priced per row, not per request. A call with 1,000 targets costs the same as 1,000 calls with one target each, so there is no reason to under-fill the batch. Most teams schedule the enrichment sweep overnight and run it only against domains added or updated that day, which keeps the working set small enough to remain cost-predictable. See all the pricing details at the DataForSEO Labs Pricing page.
For teams enriching a full CRM the first time, the pattern is usually a one-off backfill followed by incremental daily runs. The backfill fills every existing record. The daily job only touches new or changed domains, so you are not paying to re-enrich data that has not moved.
Wrap up
Firmographic data tells you a company exists. Traffic and SEO maturity tell you whether that company is a fit for outreach today or a name to file away for later. Layering the second signal onto your enrichment payload is a small integration that changes how downstream teams prioritize the accounts they see. The endpoints are live, they return structured JSON, and pay-as-you-go pricing means you can try for free against a slice of your CRM before wiring the workflow into production.