# Domain SEO Analyzer: Keywords, Traffic and Gap

> Domain SEO Analyzer is an Apify actor (API) by CheapAPI Labs. Organic traffic, ranked keywords, competitors and top pages for any domain, in bulk. It costs $2.00 per 1,000 rows on every Apify plan, plus $0.015 per report, billed through your Apify account with no API key.

- Page: https://cheapapilabs.com/actors/domain-seo-analyzer/
- Run on Apify: https://apify.com/cheapapi/domain-seo-analyzer
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $2.00 per 1,000 rows on Free, $2.00 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Report | $0.015 | $0.015 | $0.015 | $0.015 |
| Result row | $0.002 | $0.002 | $0.002 | $0.002 |
| Bulk traffic domain | $0.0009 | $0.0009 | $0.0009 | $0.0009 |
| Rank history report | $0.16 | $0.16 | $0.16 | $0.16 |
| Report without results | $0.0004 | $0.0004 | $0.0004 | $0.0004 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~domain-seo-analyzer/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"report":"domainOverview","domains":["apify.com"],"country":"US"}'
```

## Example output row

```json
{
  "id": "01a59e3bf8e1a0dcbc47",
  "report": "rankedKeywords",
  "domain": "example.com",
  "keyword": "1000 keywords",
  "searchVolume": 40,
  "cpc": null,
  "competition": 0.1,
  "competitionLevel": "LOW",
  "keywordDifficulty": 15,
  "searchIntent": "informational",
  "searchVolumeTrend": {
    "monthly": -91,
    "quarterly": -80,
    "yearly": -80
  },
  "monthlySearches": [
    {
      "year": 2026,
      "month": 8,
      "searchVolume": 10
    },
    {
      "year": 2026,
      "month": 7,
      "searchVolume": 110
    }
  ],
  "serpFeatures": [
    "ai_overview",
    "organic",
    "people_also_ask",
    "video"
  ],
  "totalResults": 132,
  "position": 1,
  "absolutePosition": 2,
  "previousPosition": 1,
  …
}
```

## Fields

| Report | One row per | Main fields |
|---|---|---|
| **Domain overview** (default) | domain (or market with "All countries") | organic keywords, estimated monthly organic traffic, traffic value (USD), keywords at position 1, 2 to 3, 4 to 10 … 91 to 100, new / improved / declined / lost keywords, paid keywords & traffic |
| **Ranked keywords** | keyword | keyword, position, previous position, change (new/up/down/same), ranking URL, title, search volume, 12-month history, CPC, competition, difficulty, intent, estimated traffic, SERP features |
| **Competitors** | competitor domain | shared keywords, average position, competitor's total keywords & traffic, your vs their traffic on the shared keywords |
| **Top pages** | page URL | keywords and traffic per page, position distribution, paid data |
| **Subdomains** | subdomain | keywords and traffic per subdomain |
| **Keyword gap** | keyword | keywords a competitor ranks for and you don't (or shared / only yours), both positions and URLs, volume, CPC, difficulty, intent |
| **SERP competitors** | domain | who ranks for YOUR keyword list: average & median position, visibility, estimated traffic, positions per keyword |
| **Rank history** | month | keywords, traffic and position distribution month by month |
| **Bulk traffic** | domain or URL | organic, paid, featured snippet and local pack traffic and keyword counts |

Main output fields:

| Field | Type | Example |
|---|---|---|
| `id` | string | `"01a59e3bf8e1a0dcbc47"`, stable hash of report + domain + row key (keyword, competitor, page, month …) + country + language |
| `report` | string | `"rankedKeywords"` |
| `domain` | string | `"apify.com"` |
| `keyword` | string | `"1000 keywords"` |
| `position` / `previousPosition` | integer | `1` / `1` |
| `positionChange` | string | `"down"` (`new`, `up`, `down`, `same`) |
| `url` / `title` | string | `"https://example.com/free-seo-stats/top-1000-keywords"` |
| `searchVolume` | integer | `40` |
| `monthlySearches` | array | `[{ "year": 2026, "month": 8, "searchVolume": 10 }]` |
| `cpc` | number (USD) or null | `30.87` |
| `competition` / `competitionLevel` | number / string | `0.1` / `"LOW"` |
| `keywordDifficulty` | integer 0 to 100 | `15` |
| `searchIntent` | string | `"informational"` |
| `estimatedTraffic` / `trafficValueUsd` | number | `12.16` |
| `serpFeatures` | array | `["ai_overview", "organic", "people_also_ask"]` |
| `competitorDomain` | string | `"dentaly.org"` |
| `sharedKeywords` / `avgPosition` | integer / number | `152` / `57.43` |
| `gapType` | string | `"competitorOnly"`, `"shared"` or `"yoursOnly"` |
| `yourPosition` / `competitorPosition` | integer | `9` / `44` |
| `pageUrl` / `subdomain` | string | `"https://apify.com/store"` |
| `period` | string | `"2026-09"` (Rank history) |
| `organicKeywords` / `organicTraffic` / `organicTrafficValueUsd` | number | `11625` / `32394.41` / `197346.88` |
| `organicPos1` … `organicPos91to100` | integer | `42` |
| `organicNewKeywords` / `organicLostKeywords` | integer | `9698` / `1948` |
| `paidKeywords` / `paidTraffic` | number | `0` |
| `country` / `language` | string | `"US"` / `"en"` |
| `scrapedAt` | string (ISO time) | `"2026-09-29T05:05:42.761Z"` |

## Compared with alternatives

Typical runs, priced from each Actor's pay per event list (Apify Free plan price, then Bronze to Gold price where the Actor has tiers; Platinum and Diamond pay the Gold price for all of them). The other Actors' prices are their listed fees. For this Actor, Apify platform usage is billed separately by Apify on top of the event fees (at the default 256 MB a small run typically uses about $0.001 to $0.005), shown as "+ usage" in our row:

| Actor | 1 domain overview | Traffic of 100 domains | 1,000 ranked keywords of 1 domain | Backlink / authority data | Same price on every plan |
|---|---|---|---|---|---|
| All in one SEO toolkit Actor (~2,100 users; one flat fee per result row; its Store page says it does not run on the Apify Free plan) | not on Free (paid plans $0.004 to 0.005) | not on Free (paid plans $0.40 to 0.50) | top keywords summary only (its Store page) | ✓ | ✗ |
| Most used website traffic Actor (~4,100 users) | $0.014 ($0.013 per result + $0.001 start) | $1.30 | not offered | ✗ | ✓ |
| Low cost website traffic Actor (~3,000 users) | $0.004 (paid plans $0.0011) | $0.30 (paid plans **$0.10**) | not offered | ✗ | ✗ |
| Website traffic Actor (~1,500 users) | $0.005 (paid plans $0.0015 to 0.002) | $0.50 (paid plans $0.15 to 0.20) | not offered | ✗ | ✗ |
| Per keyword competitor keywords Actor (~270 users) | not offered | not offered | $2.00 (+ $0.00005 start fee) | ✗ | ✓ |
| **Domain SEO Analyzer** | **$0.017** + usage | **$0.105** + usage (Bulk traffic) | **$2.015** + usage | page level counts only | ✓ |

Prices from public Apify Store listings, checked September 2026.

Where others are cheaper, honestly:

- **A single domain summary on a paid Apify plan**: the all in one Actor charges $0.004 to 0.005 per result vs our $0.017 (about 3 to 4× cheaper), and its summary also includes domain rating and backlink counts. If you only need a quick authority + traffic snapshot of a few domains on a paid plan, it is the cheaper choice.
- **Traffic checks on a paid plan**: the low cost website traffic Actor (~3,000 users) charges $0.001 per domain plus a $0.0001 start fee on Bronze and above, so 100 domains cost about $0.10 there vs $0.105 (+ usage) with our Bulk traffic, about equal. On paid plans it stays cheaper up to about 150 domains per run (our $0.015 report fee is spread over more domains above that, e.g. 1,000 domains: $1.00 there vs $0.915 here). At 100 domains our Bulk traffic is cheaper than it only on the Apify Free plan ($0.30 there). The ~1,500-user website traffic Actor charges $0.0015 to 0.002 per domain on paid plans, so against it we become cheaper from about 14 to 25 domains per run; the most used ~4,100-user traffic Actor ($0.013 per domain + $0.001 start) is slightly cheaper for a single domain ($0.014 vs our $0.0159 Bulk traffic) and costs more from 2 domains per run.
- **Full ranked keyword lists**: the per keyword Actor is about $0.015 cheaper per 1,000 keywords (no per report fee), plus our platform usage on top.

What you get here in exchange: traffic checks for 100 domains at $0.105, the full ranked keyword list (up to 10,000 rows per domain), keyword gap, SERP competitors, top pages, subdomains and monthly rank history back to October 2020 in the same Actor and output format, a small monthly allowance on the Apify Free plan, a stable `id` for comparing scheduled runs, and filters that run before rows are charged.

## Limits

- Traffic and traffic value are estimates based on rankings, search volumes and click through rates.
- Google only (no Bing/Yandex). Full backlink profiles ([Backlink Checker](https://cheapapilabs.com/actors/backlink-checker/)) and on page audits ([SEO Site Audit](https://cheapapilabs.com/actors/seo-site-audit/)) are not part of this Actor.
- Rank history is monthly and starts in October 2020.
- The keyword gap compares your domain with each competitor separately (one report per competitor and view).
- "All countries" works only for Domain overview, Top pages, Subdomains and Bulk traffic.
- Options that do not apply to the chosen report are ignored with a warning in the log.

## FAQ

**Is there a limit on the Apify Free plan, and is platform usage included?**
Up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit. Apify platform usage (compute) is not included: Apify bills it separately (about $0.001 to $0.005 for a small run at the default 256 MB; shown per run in Apify Console).

**Is it legal?**
The Actor returns aggregated SEO metrics (rankings, search volumes, traffic estimates) about public websites and public Google results. It does not log in anywhere and collects no personal data. You are responsible for how you use the results.

**How fresh is the data?**
Search volumes are monthly averages with 12 months of history. Rankings are rechecked continuously, popular keywords more often than long tail ones. Each Ranked keywords row has `serpUpdatedAt` showing when the result page was last checked, and every row has `scrapedAt`.

**How accurate is the traffic?**
Traffic is an estimate: position × search volume × typical click through rate, summed over all keywords. It is great for comparing domains and spotting trends; it will not match your own analytics exactly.

**Why did I get fewer results than `maxResults`?**
The domain ranks for fewer keywords in that country, your filters removed rows, or your maximum cost per run was reached (see the log and `RUN_SUMMARY`). Small or new sites may have no data at all.

**Why was I charged $0.0154 for a report with no rows?**
Every report is a paid lookup on our side, even when the domain has no data or your filters remove every row. An empty report costs the $0.015 Report fee plus a $0.0004 "Report without results" fee (twice with Audience insights). Failed requests (errors) are free, but a request that times out after being sent is still charged as if the full page was returned, because it may already have been processed (`unansweredRequests` in RUN_SUMMARY). Check the domain spelling and loosen filters before running large lists.

**How do I control my budget?**
Set *Maximum cost per run* in the run options, lower `maxResults` and use filters (they run before rows are counted). The Actor never charges past your limit.

**Can I schedule and monitor domains?**
Yes. Create an Apify Schedule (e.g. weekly Domain overview or Ranked keywords) and compare runs by the stable `id` field. Rank history gives you monthly figures back to October 2020 in one run.

**Which countries and languages are supported? Can I analyze a single page?**
249 countries. Leave language empty to use the main language of the country, or set a 2-letter code (e.g. `en` for English results in Germany). Ranked keywords and Bulk traffic also accept full page URLs (e.g. `https://example.com/blog/post`).

**Do you store the domains I analyze?**
No. Domains, keywords and results are kept only in your own run's dataset and key value store in your Apify account, under your Apify data retention settings. We do not keep a copy, share your target lists or use them for anything else.

**Where do I get help?**
Open an issue on the Actor's **Issues** tab in Apify Console with your run link, and we will look into it.
