# Domain Overview & Semrush API Alternative: Organic Traffic (`plainrows/domain-seo-overview`) Actor

Domain overview and SEO API, website SEO checker, Semrush API and Semrush MCP tool, bulk: organic traffic, keyword counts and 1,000 competitor keywords per site, 94 countries. A Semrush, Ahrefs, SpyFu, Similarweb alternative. Pay per domain and keyword found, + $0.012/run. Free plan: 2 domains/run.

- **URL**: https://apify.com/plainrows/domain-seo-overview.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** SEO tools, AI, Developer tools
- **Features:** Limited permissions
- **Stats:** 6 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 domains

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Domain Overview & Semrush API Alternative: Organic Traffic

A bulk **website traffic checker** (Domain SEO Overview): for any list of websites, get the **estimated Google organic traffic, number of ranking keywords, ranking position distribution, paid search footprint and the keywords that bring each site the most traffic**, in 94 countries.

Built on a commercial SEO data provider: **no scraping of SEO tools, no accounts, no subscriptions**. It keeps working when third-party tool websites change. **You pay for domains and keywords that have data, plus $0.012 to start each run.**

### Typical uses

- Check a competitor's website traffic: who gets the most organic visits from Google, from which keywords and pages.
- Bulk website traffic checks: hundreds of domains in one run, one row each, instead of pasting them one by one into a free checker.
- Competitor keyword research: every keyword a competitor ranks for (up to 1,000 per site) with position, ranking URL, volume, CPC and difficulty, as a spreadsheet with one row per keyword.
- PPC competitor research (a SpyFu-style view): with `keywordType: "paid"`, the keywords a competitor shows Google Ads for, with ad position, landing page, ad title and ad text, and its estimated monthly ad spend.
- Qualify leads or partners by their organic search visibility, in bulk.
- Track your own and your competitors' organic traffic and keyword counts over time by scheduling runs.
- Feed SEO dashboards, spreadsheets, n8n / Make workflows or AI agents with clean JSON.

### What you get for each domain

| Field | Description |
|---|---|
| `domain` | The website analysed (lowercase, without `www.`) |
| `found` | `false` when no ranking data exists for the domain (not billed; `message` says why: new, very small, misspelled or redirected domain, or another country) |
| `organicTraffic` | Estimated monthly clicks from Google organic results in the selected country, computed from the domain's ranking keywords (search volume × click-through rate). Usually far below Semrush or Similarweb "visits", which use other models: use it to compare domains with each other |
| `organicKeywords` | Number of keywords the domain ranks for in the top 100 |
| `paidTraffic`, `paidKeywords` | Estimated Google Ads traffic and number of keywords with ads |
| `organicTrafficValueUsd` | What that organic traffic would cost in Google Ads\* |
| `organicPositions` | Ranking keywords per position bucket: 1, 2-3, 4-10, 11-20, 21-50, 51-100\* |
| `topKeywords` | The keywords bringing the most traffic: keyword, position, ranking URL, estimated traffic, search volume, CPC, difficulty, intent\* |
| `topKeywordsType` | `organic` or `paid`: what `topKeywords` holds (input `keywordType`) |
| `paidTrafficCostUsd` | With `keywordType: "paid"`: estimated monthly cost of the domain's Google Ads traffic\* |
| `observedAt` | When this run fetched the data (UTC) |

\* Filled when `topKeywords` is 10 or more. With `topKeywords: 0` you get the traffic metrics only, at the lowest price. With `keywordType: "paid"`, `organicTrafficValueUsd` and `organicPositions` stay `null`, each top keyword also has `adTitle` and `adDescription`, and its `position` and `url` are the ad's position and landing page.

Missing values are always `null`, never guessed.

### Input

```json
{
  "domains": ["apify.com", "https://www.semrush.com/blog/", "moz.com"],
  "country": "US",
  "languageCode": "",
  "topKeywords": 10,
  "keywordType": "organic"
}
```

- **domains**: domains or full URLs, up to 5,000 per run. URLs are reduced to their domain; subdomains other than `www` are kept (`blog.example.com`). Duplicates are removed for free.
- **country**: two-letter code of one of 94 countries: the US, Canada, the UK and most of Europe, Latin America, Asia-Pacific, the Middle East and Africa (full list in the input form).
- **languageCode**: optional, defaults to the country's main language. A language the data source doesn't offer for that country stops the run with a clear message and no charge (apart from the $0.012 start fee).
- **topKeywords**: 0 (traffic only) or 10 to 1,000 keywords per domain. Default 10.
- **keywordType**: `organic` (default, SEO keywords) or `paid` (Google Ads keywords, with the ad text). Same price per keyword. Run once per type if you want both.
- **minSearchVolume**, **maxPosition**, **excludeKeywords** (optional filters): keep only keywords with at least this monthly volume, at this position or better, and without these words (up to 6, e.g. your brand). The data source applies them, so keywords left out are neither returned nor billed. With a filter set, `organicPositions`, `organicTrafficValueUsd` and `paidTrafficCostUsd` stay `null` (the source would compute them on the kept keywords only).

### Output example

Real row from a run on 2026-10-07 (US, `topKeywords: 10`, first 2 keywords shown):

```json
{
  "domain": "moz.com",
  "found": true,
  "country": "US",
  "languageCode": "en",
  "organicTraffic": 43510.31,
  "organicKeywords": 23045,
  "paidTraffic": 1.46,
  "paidKeywords": 1,
  "organicTrafficValueUsd": 337059.79,
  "organicPositions": {
    "pos1": 1207,
    "pos2to3": 1244,
    "pos4to10": 5122,
    "pos11to20": 4983,
    "pos21to50": 7567,
    "pos51to100": 2922
  },
  "topKeywords": [
    {
      "keyword": "seo tools",
      "position": 2,
      "url": "https://moz.com/free-seo-tools",
      "estimatedTraffic": 4269.41,
      "searchVolume": 110000,
      "cpcUsd": 21.79,
      "keywordDifficulty": 66,
      "searchIntent": "commercial"
    },
    {
      "keyword": "domain authority checker",
      "position": 1,
      "url": "https://moz.com/domain-analysis",
      "estimatedTraffic": 3284.7,
      "searchVolume": 9900,
      "cpcUsd": 4.64,
      "keywordDifficulty": 72,
      "searchIntent": "informational"
    }
  ],
  "observedAt": "2026-10-07T12:04:27.655Z",
  "schemaVersion": "1.0"
}
```

### Pricing

Pay per result, no subscription; each run costs $0.012 to start. See the **Pricing** tab for current prices:

- one event per **domain with data**: $0.006 (FREE) / $0.005 (BRONZE) / $0.004 (GOLD+);
- one event per **top keyword returned**: $0.003 (FREE) / $0.002 (BRONZE+).

**Example on the Apify Starter plan: 100 domains with the default 10 top keywords each cost $2.51** ($0.012 start + 100 × $0.005 + 1,000 × $0.002); traffic metrics only (`topKeywords: 0`) cost $0.51 for 100 domains.

Domains without data, duplicates and invalid entries are never billed. Input mistakes cost nothing (apart from the $0.012 start fee). The run never spends more than the maximum cost you set: it returns fewer top keywords, then stops processing domains, before reaching it.

Top keywords are only looked up for domains that rank organically (with `keywordType: "paid"`: that run Google Ads), and never more than the domain has: a site with 4 ranking keywords returns (and is billed) 4. Lists where most domains have no data, or only sites with a handful of ranking keywords, stop early with a clear warning in the run log and the summary: the remaining domains are not looked up and not charged, and some small sites may come back without top keywords (billed as traffic-only rows).

**Free Apify plan:** each run analyses up to 2 domains with up to 10 top keywords each, so you can check the output. A paid Apify plan removes these limits.

### Track your domains every month

Follow your own site and your competitors' organic traffic over time:

1. Run the Actor once with your list, then click **Save as a new task** (your input is kept).
2. In the task, click **Schedule** and pick the same day each month.
3. Send each run to your tool: the task's **Integrations** tab (Google Sheets, Slack, a webhook…), or the n8n / Make Apify nodes.
   Compare `organicTraffic` and `organicKeywords` from one month to the next to see who grows (see **Pricing** for the cost of each run).

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~domain-seo-overview/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["apify.com", "moz.com"], "country": "US", "topKeywords": 10}'
```

**n8n, Make, Zapier:** use the Apify integration and pick `plainrows/domain-seo-overview` as the Actor; map the dataset items to your sheet, CRM or database.

**AI agents (MCP):** add `https://mcp.apify.com?tools=plainrows/domain-seo-overview` to Claude, Cursor or any MCP client. The agent gets a typed tool with the input and output schemas of this page and pays per result.

### What this is not

- Traffic figures are **estimates of Google organic (and paid) search traffic**, not total website visits from all channels, and not analytics data.
- No backlink or "domain authority" metrics: this tool focuses on search traffic and keywords.
- Not affiliated with Google, Ahrefs, Semrush or Similarweb.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): domains submitted, found, not found, billed, keywords billed, duplicates removed, invalid entries with the reason, and anything skipped because of the free-plan or budget limit (`skippedBudgetLimit`) or an early stop (`skippedUncoveredCost`: domains not looked up; `keywordsSkippedUncoveredCost`: domains returned without top keywords).

### FAQ

**How do I check the traffic of a website?**
Enter the domain (or many, up to 5,000 per run), pick the country and run. Each row gives the estimated monthly Google organic traffic, the number of ranking keywords and, if you ask for them, the top keywords.

**Is this the site's total traffic?**
No: it estimates visits from Google search (organic, and paid separately) in the selected country, not visits from all channels and not analytics data. Use it to compare sites with each other.

**Can I check competitors in another country?**
Yes: 94 countries (full list in the input form). Run once per country you care about.

**Which keywords bring a site its traffic?**
Set **topKeywords** to 10 to 1,000: you get each keyword with position, ranking URL, estimated traffic, search volume, CPC and difficulty.

**Which keywords does a competitor buy on Google Ads?**
Set **keywordType** to `paid` and **topKeywords** to 10 to 1,000: each keyword the domain advertises on comes with the ad position, landing page, ad title, ad text, search volume and CPC, and the row gives its estimated monthly ad spend (`paidTrafficCostUsd`). Domains without ads come back with traffic data only. Same price as organic keywords.

**Can I get one row per keyword (Excel, CSV, Google Sheets)?**
Yes. In the run's **Output** tab, open the **Ranking keywords** view: one row per keyword with its domain, ready to export. From the API, add `view=keywords` (or `unwind=topKeywords`) to the dataset items URL, for example `https://api.apify.com/v2/datasets/DATASET_ID/items?view=keywords&format=csv`. Same data, same price: only the layout changes.

**Do I need a Semrush, Ahrefs, SpyFu or Similarweb account?**
No. The data comes from a commercial SEO data provider; you pay per domain with data, with no subscription.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Google Keyword Planner API (Google Ads Search Volume & CPC)](https://apify.com/plainrows/google-keyword-planner-api) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Competitor Keywords API (Ranked Keywords)](https://apify.com/plainrows/competitor-keywords-api) · [Bulk Website Traffic Checker](https://apify.com/plainrows/website-traffic-checker) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Backlink API (Referring Domains & Backlinks Data)](https://apify.com/plainrows/backlink-api) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [SEO Audit API (On-Page SEO Checker)](https://apify.com/plainrows/seo-audit-api) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [AI Overview Tracker (Google AI Overview Citations)](https://apify.com/plainrows/ai-overview-tracker) · [Perplexity Search API (Answers & Citations)](https://apify.com/plainrows/perplexity-search-api) · [ChatGPT Search Scraper (Answers & Citations)](https://apify.com/plainrows/chatgpt-search-scraper) · [Google AI Mode API (Answers & Citations)](https://apify.com/plainrows/google-ai-mode-api) · [Gemini Search Scraper (Answers & Citations)](https://apify.com/plainrows/gemini-search-scraper) · [AI Citations Finder (LLM Mentions in ChatGPT & AI Overviews)](https://apify.com/plainrows/ai-citations-finder) · [Keyword Rank Checker (Google SERP Position)](https://apify.com/plainrows/keyword-rank-checker) · [Google Search API (SERP Scraper & Web Results)](https://apify.com/plainrows/google-search-api) · [Bing Search API (Bing SERP & Web Results)](https://apify.com/plainrows/bing-search-api)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Remote Jobs Scraper (Himalayas, RemoteOK, Jobicy)](https://apify.com/plainrows/remote-jobs-aggregator) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Amazon Keyword Research (Search Volume & Reverse ASIN)](https://apify.com/plainrows/amazon-keyword-research) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [PDF to Markdown Converter (PDF to Text for AI & RAG)](https://apify.com/plainrows/pdf-to-markdown) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

**Compared with other APIs:** [Competitor keyword research](https://nadaho.github.io/plainrows/competitor-keywords-spreadsheet/) · [Semrush API alternative](https://nadaho.github.io/plainrows/semrush-api-alternative/) · [Similarweb API alternative for Google search traffic, pay per domain](https://nadaho.github.io/plainrows/similarweb-api-alternative/) · [SpyFu alternative](https://nadaho.github.io/plainrows/spyfu-alternative/)

### Support

Found a bug or need a field? Open an issue on this page. Issues are read and answered.

# Actor input Schema

## `domains` (type: `array`):

One website per line: example.com, https://www.example.com/page or blog.example.com. Up to 5,000 per run (free Apify plan: 2 domains per run, 10 top keywords each; paid plans: no limit). URLs are reduced to their domain (subdomains other than www are kept). Duplicates are removed for free.

## `country` (type: `string`):

Country whose Google search data you want.

## `languageCode` (type: `string`):

Language code, e.g. "en", "fr" or "zh-TW". Leave empty to use the country's main language (for example German for Switzerland, French for Belgium). Only languages offered by the data source for that country work; others stop the run with a clear message and no charge.

## `topKeywords` (type: `integer`):

How many of the keywords bringing the most organic traffic to return per domain (position, URL, volume, CPC, difficulty, intent). 0 = traffic metrics only, otherwise 10 to 1,000. Each keyword returned is billed: $0.002 on the Starter plan, so 10 keywords add $0.02 per domain to its $0.005 (0 = $0.005 per domain), plus $0.012 per run. Domains without data are free.

## `keywordType` (type: `string`):

Organic = the keywords bringing the most Google search traffic to the domain. Paid = the keywords the domain shows Google Ads for (PPC competitor research, a SpyFu-style view), with the ad position, landing page, ad title and ad text, plus its estimated monthly ad spend. Same price per keyword either way.

## `minSearchVolume` (type: `integer`):

Only return top keywords searched at least this many times a month. Filtered by the data source: keywords left out are not returned and not billed. 0 = no filter.

## `maxPosition` (type: `integer`):

Only return top keywords where the domain ranks (or its ad shows) at this position or better, e.g. 10 = first page. Keywords left out are not billed. 100 = no filter.

## `excludeKeywords` (type: `array`):

Up to 6 words: top keywords containing any of them are left out (not billed), e.g. the brand name to see non-branded keywords only. With any filter set, organicPositions, organicTrafficValueUsd and paidTrafficCostUsd stay empty (the source computes them on the kept keywords only).

## Actor input object example

```json
{
  "domains": [
    "apify.com"
  ],
  "country": "US",
  "topKeywords": 10,
  "keywordType": "organic"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `keywords` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "apify.com"
    ],
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/domain-seo-overview").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "domains": ["apify.com"],
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/domain-seo-overview").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "apify.com"
  ],
  "country": "US"
}' |
apify call plainrows/domain-seo-overview --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/domain-seo-overview"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lOtqOzclssQhlddJq/builds/iRWEyovz3JIBjX77m/openapi.json
