sfoln/seo-competitor-snapshot · SEO tools, Lead generation, Developer tools On request
One record per domain: organic traffic and keyword estimates, position buckets, top 20 keywords, top 10 competitors, brand vs non-brand share and the live tech stack. $150 per 1,000 domains; $45 per 1,000 when only the overview has data.
Get a one-row SEO snapshot of any domain: estimated organic traffic and its ad-equivalent value, ranking keyword count with position buckets, the top 20 keywords by traffic (position, volume, URL), the top 10 organic competitors by shared keywords, the website's technology stack by category, and derived scores — traffic per keyword, top-10 share, value per visit and brand vs non-brand traffic share. Built for agency pitches, competitor research, M&A and investor screening, and sales prospecting where you need the SEO picture of many domains in one table.
Price
Price per delivered record
Event
Price
Per 1,000
Charged for
SEO competitor snapshot seo-competitor-snapshot
$0.15
$150 / 1,000
Charged once per domain: organic traffic and keyword overview, position buckets, top 20 keywords by traffic, top 10 organic competitors, technology stack and derived scores.
SEO overview only seo-overview-only
$0.045
$45 / 1,000
Charged instead of seo-competitor-snapshot when only the domain overview could be delivered, or when the domain has no ranking data but DataForSEO billed the overview lookup.
Apify free plan: up to 2 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.
Run
Call it from code, an agent or the Console
This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com
POST https://api.apify.com/v2/actors/sfoln~seo-competitor-snapshot/runs?maxTotalChargeUsd=1
GET https://api.apify.com/v2/actor-runs/{runId} # until status is SUCCEEDED
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json
Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Compare the organic traffic, top keywords and main SEO competitors of apify.com and zyte.com in the United States.
Input
Input fields
List domains. Each domain produces one dataset record with organic traffic, top keywords, competitors and technologies.
Field
Type
Default
Meaning
domains *
array
required
Domains Domains or website URLs (apify.com, https://www.apify.com/store), one per line. Paths are ignored; duplicates are removed. Accounts on the Apify free plan can process up to 2 domains per run.
location
string
"2840"
Location DataForSEO location code (2840 = United States, 2826 = United Kingdom, 2276 = Germany) or full location name (e.g. "United Kingdom"). Applies to traffic, keywords and competitors.
languageCode
string
"en"
Language code Language code, e.g. en, de, fr, es.
excludeTopDomains
boolean
true
Exclude top domains from competitors Drop very large generic sites (Wikipedia, Amazon, YouTube…) from the competitor list.
brandTerms
array
—
Brand terms Words that mark a keyword as branded (e.g. apify, crawlee). Default: the domain name without its suffix (apify.com → apify).
maxItems
integer
100
Max domains Safety cap on how many domains are processed in this run. Range 1–1000.
concurrency
integer
2
Concurrency Domains processed in parallel (1–4). After the overview, each domain runs 2 DataForSEO tasks in parallel, next to one homepage fetch for the tech stack. Range 1–4.
itemTimeoutSecs
integer
600
Per-domain timeout (seconds) Time limit per domain (300–1800). A section that failed with a server error is retried only while one more request fits in it. Range 300–1800.
includeRaw
boolean
false
Include raw upstream response Attach the unmodified DataForSEO results and the full technology list (versions, confidence, evidence) under `raw` (large output).
Example input
{
"domains": [
"apify.com"
]
}
Output
One record per input item
Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.
Field
Type
Meaning
input
string | object
Input The input item this record corresponds to.
status
string
Status ok (snapshotType full or overview-only, charged) | not_found (no ranking data; charged seo-overview-only only if DataForSEO billed the lookup) | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
charged
boolean
Charged Whether this record incurred a pay-per-event charge.
chargedEvent
string
Charged event Pay-per-event event charged for this record.
source
string
Source Upstream data source (dataforseo+website = DataForSEO Labs for traffic, keywords and competitors; the website and its DNS for technologies).
fetchedAt
string
Fetched at ISO timestamp.
error
object
Error code / message when status is not ok (or a partial failure).
Has ranking data DataForSEO has organic rankings for the domain in this location/language.
snapshotType
string | null
Snapshot type full (charged seo-competitor-snapshot) | overview-only (charged seo-overview-only: only the overview has data, or a section failed) | none.
Brand traffic share % Estimated traffic of branded keywords ÷ traffic of topKeywords × 100.
topKeywords
array
Top keywords Up to 20 keywords by estimated traffic { keyword, position, searchVolume, etv, url, cpc, keywordDifficulty, searchIntent, isBrand }.
topCompetitors
array
Top competitors Up to 10 organic competitors by shared keywords { domain, intersections, avgPosition, organicEtv, organicKeywords, sharedKeywordsEtv }.
technologies
object | null
Technologies Technologies detected live on the homepage and in DNS, by category: { category: [names] } (a technology appears under each of its categories); null when the homepage could not be fetched.
technologyNames
array
Technology names All detected technologies.
technologyCount
integer | null
Technology count Number of detected technologies.
cms
string | null
CMS Content management system detected on the homepage (WordPress, Webflow, …).
ecommercePlatform
string | null
E-commerce platform Shopify, WooCommerce, Magento, … when detected.
Tech page Final URL of the homepage the technologies were detected on; null when it could not be fetched.
sections
object | null
Sections { overview, rankedKeywords, competitors, technologies }: ok | empty | error (failed; a DataForSEO request that failed without running is retried once; technologies never change the charge).
Where do the traffic and keyword numbers come from?
From DataForSEO's Labs database: monthly estimates modelled from Google rankings and search volumes for the chosen location and language. They are comparable across domains but are not Google Search Console or analytics data.
When do I pay the lower overview-only price?
When the domain has ranking data but ranked keywords and competitors are both empty, or one of them failed (a request that failed without running is retried once), you pay $0.045 instead of $0.15 and keep everything that loaded. The tech stack is detected from the website itself and never changes the price.