# Ubersuggest Scraper (`scrapers-hub/ubersuggest-scraper`) Actor

Ubersuggest Scraper pulls domain SEO metrics - Moz domain authority, backlinks, referring domains, follow and nofollow split, organic keywords and traffic, keyword position buckets, traffic history and top pages. 📊 For competitive SEO.

- **URL**: https://apify.com/scrapers-hub/ubersuggest-scraper.md
- **Developed by:** [Scrapers Hub](https://apify.com/scrapers-hub) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 📈 Ubersuggest Scraper – Domain Authority, Backlinks & Organic Traffic SEO Data

The **Ubersuggest Scraper** pulls domain-level SEO metrics for any list of websites and returns them as structured JSON, ready for a spreadsheet, a dashboard, or a competitive analysis pipeline. For each domain you supply, the actor collects the Moz domain authority, backlink and referring-domain counts split by follow and nofollow, organic keyword and organic traffic figures with their prior-month comparisons, SERP position distribution across the top 3, top 10, top 50 and top 100, historical traffic series, top-country traffic breakdown, top pages and referral authority distribution.

That combination is what makes the dataset useful. Most free SEO checkers hand you a single authority score and stop. This Ubersuggest scraper returns the authority score alongside the keyword portfolio, the traffic history and the position distribution that explain it — which is the difference between knowing a competitor is strong and knowing why.

It runs as a lightweight HTTP client built on `curl_cffi`, using browser-grade TLS impersonation to reach the Ubersuggest API rather than driving a headless browser. There is no proxy configuration to set up, and country and language targeting are both exposed as inputs so you can pull metrics for the market you actually compete in.

***

### 📊 What Data Can You Extract with This Ubersuggest Scraper?

Each dataset item is a domain-level SEO record. The fields group into six analytical categories.

| Category | Fields | What it gives you |
|---|---|---|
| **Record context** | `data_captured_at`, `type`, `domain`, `country`, `last_updated` | The capture timestamp, the record type, the domain analysed, the country code the metrics were localised to, and when the underlying data was last refreshed |
| **Authority & backlinks** | `moz_domain_authority`, `backlinks_count`, `referral_domains`, `follow_backlinks`, `nofollow_backlinks` | The Moz domain authority score plus the size and composition of the backlink profile, split by follow status |
| **Organic keywords** | `organic_keywords`, `organic_keywords_last_month` | How many keywords the domain ranks for now and last month, giving you a month-on-month delta for free |
| **Organic traffic** | `organic_traffic`, `organic_traffic_last_month`, `traffic_history` | Estimated organic sessions now and last month, plus the historical series behind them |
| **SERP position distribution** | `keywords_in_top_1_3`, `keywords_in_top_4_10`, `keywords_in_top_11_50`, `keywords_in_top_51_100` | How the keyword portfolio spreads across ranking bands — the shape of a domain's visibility, not just its size |
| **Geography & pages** | `top_country_traffic`, `top_pages`, `referral_authority_distribution` | Which countries the traffic comes from, which pages earn it, and how backlink authority is distributed across referring sources |

The most informative field group is the position distribution. Two domains can report an identical `organic_keywords` total while being in completely different competitive positions: one with most of its portfolio in `keywords_in_top_1_3` is capturing real traffic, while one concentrated in `keywords_in_top_51_100` has visibility on paper and almost none in practice. Any credible competitor assessment has to read the distribution, and the ratio of `keywords_in_top_1_3` to total keywords is one of the fastest quality signals available.

***

### 🌟 Key Features of the Ubersuggest Scraper

| Feature | Description |
|---|---|
| 🌐 **Batch domain analysis** | Pass an array of domains in `urls` and each is analysed in turn, producing one comparable record per site |
| 🔤 **Country and language targeting** | `country` and `language` localise the metrics, so figures reflect the market you actually compete in rather than a global default |
| 🔗 **Backlink profile composition** | Total backlinks, referring domains, and the follow versus nofollow split are returned as separate fields for link-quality assessment |
| 📊 **Month-on-month comparisons** | Organic keywords and organic traffic each come with a last-month counterpart, so trend direction is available without a second run |
| 🏅 **SERP position bands** | Keyword counts across top 1–3, 4–10, 11–50 and 51–100 reveal the shape of a domain's visibility |
| 📉 **Historical traffic series** | `traffic_history` returns the traffic trend rather than a single point, which is what you need to distinguish growth from a spike |
| 🗺️ **Geographic traffic split** | `top_country_traffic` shows which markets actually drive a domain's organic sessions |
| 🎛️ **Toggleable data sections** | Overview, backlinks, backlinks overview, keywords and top pages each have their own boolean input |
| ⚡ **No browser, no proxy setup** | Built on `curl_cffi` with browser-grade TLS impersonation and requiring no proxy configuration from you |

***

### 🚀 Why Choose This Ubersuggest Scraper?

**Distribution, not just totals.** The four position-band fields turn an abstract keyword count into an interpretable competitive picture. A domain with 40,000 keywords and 200 in the top three is a very different opponent from one with 8,000 keywords and 1,500 in the top three, and only the distribution tells you which you are facing.

**Trend data built into a single run.** `organic_keywords_last_month`, `organic_traffic_last_month` and `traffic_history` mean one run yields a direction, not just a snapshot. You can identify a domain that is climbing or sliding without having waited a month to collect a second data point.

**Backlink quality, not only quantity.** Splitting `follow_backlinks` from `nofollow_backlinks` and pairing raw `backlinks_count` with `referral_domains` exposes the difference between a link profile built from thousands of links on a handful of sites and one built from a genuinely broad set of referrers. `referral_authority_distribution` adds the authority spread on top.

**Batch-native and automation-ready.** `urls` takes a list, every record carries `data_captured_at` and `domain`, and the actor is callable through the Apify API and schedulable on cron. That makes running your whole competitive set weekly and appending to a time series a matter of configuration rather than code.

***

### 📥 Input

```json
{
  "urls": ["make.com"],
  "keyword": "ai automation",
  "country": "us",
  "language": "en",
  "include_overview": true,
  "include_backlinks": true,
  "include_backlinks_overview": true,
  "include_keywords": true,
  "include_top_pages": false
}
```

#### 🔧 Ubersuggest Scraper Input Fields

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `urls` | array of strings | ✅ Yes | `["make.com"]` | List of target URLs. |
| `keyword` | string | No | `ai automation` | Target keyword. |
| `country` | string | No | `us` | Country code (e.g., `us`). |
| `language` | string | No | `en` | Language code (e.g., `en`). |
| `include_overview` | boolean | No | `true` | Fetch overview data. |
| `include_backlinks` | boolean | No | `true` | Fetch backlinks data. |
| `include_backlinks_overview` | boolean | No | `true` | Fetch backlinks overview. |
| `include_keywords` | boolean | No | `true` | Fetch keywords data. |
| `include_top_pages` | boolean | No | `false` | Fetch top pages data. |

#### 💡 Input Examples

**Single-domain overview**

```json
{
  "urls": ["example.com"],
  "keyword": "project management software",
  "country": "us",
  "language": "en",
  "include_overview": true
}
```

**Competitive set in a non-US market**

```json
{
  "urls": ["competitor-a.de", "competitor-b.de", "competitor-c.de"],
  "keyword": "projektmanagement software",
  "country": "de",
  "language": "de",
  "include_overview": true,
  "include_backlinks": true
}
```

**Full pull including top pages**

```json
{
  "urls": ["example.co.uk"],
  "keyword": "crm software",
  "country": "gb",
  "language": "en",
  "include_overview": true,
  "include_backlinks": true,
  "include_backlinks_overview": true,
  "include_keywords": true,
  "include_top_pages": true
}
```

***

### 📤 Output

Each dataset item is one domain-level SEO record.

```json
{
  "data_captured_at": "2026-01-15T10:22:41.318204",
  "type": "domain",
  "domain": "make.com",
  "country": "US",
  "last_updated": "2025-12-01T00:00:00",
  "moz_domain_authority": 71,
  "referral_domains": 18420,
  "backlinks_count": 2914503,
  "follow_backlinks": 2103877,
  "nofollow_backlinks": 810626,
  "organic_keywords": 184320,
  "organic_keywords_last_month": 179804,
  "organic_traffic": 1420553,
  "organic_traffic_last_month": 1388210,
  "keywords_in_top_1_3": 6210,
  "keywords_in_top_4_10": 14880,
  "keywords_in_top_11_50": 62430,
  "keywords_in_top_51_100": 100800
}
```

#### 🧾 Ubersuggest Scraper Output Fields

| Field | Type | Description |
|---|---|---|
| `data_captured_at` | string | null | When the data captured happened. |
| `type` | string | null | Type of the item. |
| `domain` | string | null | Domain name of the item. |
| `country` | string | null | Country. |
| `last_updated` | string | null | Last updated of the item. |
| `moz_domain_authority` | number | null | Moz domain authority of the item. |
| `referral_domains` | number | null | Referral domains of the item. |
| `backlinks_count` | integer | null | Number of backlinks. |
| `follow_backlinks` | string | null | Follow backlinks of the item. |
| `nofollow_backlinks` | string | null | Nofollow backlinks of the item. |
| `organic_keywords` | number | null | Organic keywords of the item. |
| `organic_keywords_last_month` | number | null | Organic keywords last month of the item. |
| `organic_traffic` | number | null | Organic traffic of the item. |
| `organic_traffic_last_month` | number | null | Organic traffic last month of the item. |
| `keywords_in_top_1_3` | number | null | Keywords in top 1 3 of the item. |
| `keywords_in_top_4_10` | number | null | Keywords in top 4 10 of the item. |
| `keywords_in_top_11_50` | number | null | Keywords in top 11 50 of the item. |
| `keywords_in_top_51_100` | number | null | Keywords in top 51 100 of the item. |
| `traffic_history` | array | null | Traffic history of the item. |
| `top_country_traffic` | array | null | Top country traffic of the item. |
| `top_pages` | array | null | Top pages of the item. |
| `referral_authority_distribution` | object | null | Referral authority distribution of the item. |

`traffic_history`, `top_country_traffic`, `top_pages` and `referral_authority_distribution` are nested structures. If you export to CSV they will be flattened or serialised, so take JSON when you intend to work with them programmatically.

***

### 💻 How to Use the Ubersuggest Scraper (Step by Step)

#### Step 1: Open the Ubersuggest Scraper on Apify

Sign in to Apify and open the actor page. Create a free account if you do not have one — an API token will also be needed if you intend to call the Ubersuggest scraper from a script or wire it into a reporting pipeline, which is how most SEO teams end up using it. Click **Try for free** or **Start** to open the input form. Every field arrives with a working default, so a demonstration run against `make.com` requires no configuration at all.

#### Step 2: Build your domain list

`urls` is the only required input and takes one domain per line in the string list editor. Bare domains such as `example.com` are the natural unit here, since the metrics returned are domain-level rather than page-level. Assemble a list that means something analytically: your own site plus four or five direct competitors gives you a comparable cohort, whereas a random assortment of domains produces numbers with nothing to compare them against. Keep the list stable across runs so your time series stays consistent.

#### Step 3: Set the target keyword

`keyword` defines the focus term for the analysis and defaults to `ai automation`. Choose the head term for the category you compete in — the phrase you would most want to rank for, not a long-tail variant. It is worth running the same domain list against two or three different head terms when your product spans several categories, since a domain's competitive position can look strong in one category and weak in an adjacent one.

#### Step 4: Choose country and language

`country` takes a two-letter code such as `us`, `gb` or `de`, and `language` takes a language code such as `en` or `de`. These localise the metrics, and getting them right matters more than it might appear. Organic traffic and keyword counts for a European competitor pulled with `country` set to `us` will understate their actual position substantially. Match both fields to the market you are analysing, and if you compete in several markets, run the same domain list once per market and keep the results separate.

#### Step 5: Select which data sections to fetch

Five boolean toggles control what the run collects: `include_overview`, `include_backlinks`, `include_backlinks_overview`, `include_keywords` and `include_top_pages`. The first four default to enabled and `include_top_pages` defaults to disabled. The overview section is what populates the core authority, backlink, keyword and traffic metrics, so leave it on unless you have a specific reason not to. Turning off sections you do not need keeps runs leaner.

#### Step 6: Run the Ubersuggest scraper and check the log

Click **Start**. The log reports which domain is being fetched as the run proceeds and records any domain it could not collect data for. Watching it on a first run is worthwhile: a domain that fails usually indicates a typo, a domain with too little search presence to have metrics, or a transient upstream issue that a retry will clear.

#### Step 7: Export and build your comparison

Open **Storage → Dataset** when the run finishes. Export to JSON if you want the nested `traffic_history`, `top_pages` and `top_country_traffic` structures intact, or to CSV or Excel for a flat comparison table of the scalar metrics. The first derived column worth adding is the ratio of `keywords_in_top_1_3` to `organic_keywords` — it normalises portfolio quality across domains of very different sizes and usually reorders a naive ranking by keyword count immediately.

***

### 🔌 API Access & Integrations

Call the Ubersuggest scraper from your own code or scheduler.

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~ubersuggest-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["make.com", "zapier.com"],
    "keyword": "ai automation",
    "country": "us",
    "language": "en",
    "include_overview": true
  }'
```

Python, using the official client:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run_input = {
    "urls": ["make.com", "zapier.com", "n8n.io"],
    "keyword": "workflow automation",
    "country": "us",
    "language": "en",
    "include_overview": True,
    "include_backlinks": True,
}

run = client.actor("scrapers-hub/ubersuggest-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    total = item.get("organic_keywords") or 0
    top3 = item.get("keywords_in_top_1_3") or 0
    share = (top3 / total * 100) if total else 0
    print(f"{item['domain']}: DA {item['moz_domain_authority']}, "
          f"{total} keywords, {share:.1f}% in top 3")
```

The Ubersuggest scraper also connects to Zapier, Make, Google Sheets and Slack through Apify's integrations, and a webhook on run completion can push each refreshed SEO snapshot into your reporting stack automatically.

***

### 💡 Best Use Cases for Ubersuggest SEO Data

#### 🏆 Competitor SEO benchmarking

Run your domain alongside your closest competitors with identical `keyword`, `country` and `language` settings, then compare `moz_domain_authority`, `organic_keywords`, `organic_traffic` and the four position bands side by side. Identical parameters are what make the comparison valid — mixing country codes across a cohort produces a table that looks comparable and is not.

#### 🔗 Link building prospecting and gap analysis

`referral_domains`, `follow_backlinks`, `nofollow_backlinks` and `referral_authority_distribution` describe the shape of a link profile. A competitor with far more referring domains than you at similar authority indicates a breadth gap; one with similar domains but higher authority indicates a quality gap. The two call for completely different outreach strategies.

#### 📉 Organic traffic trend monitoring

Schedule weekly or monthly runs across a fixed domain list and accumulate `organic_traffic`, `organic_keywords` and `data_captured_at` into a time series. Pair that with `traffic_history` from each run and you can distinguish a genuine algorithmic hit from ordinary seasonal variation, which a single snapshot never reveals.

#### 🎯 Content gap and keyword portfolio analysis

The position bands show where a competitor's opportunity lies. A domain with a large `keywords_in_top_11_50` count has a substantial set of near-miss rankings, and those pages are where their next traffic gains will come from. Watching that band across scheduled runs is an early indicator of where a competitor is about to strengthen.

#### 🌍 International SEO and market prioritisation

Run the same domains with different `country` and `language` combinations, and read `top_country_traffic` to see where organic sessions actually originate. This exposes markets where a competitor is dominant and markets where the category is still open, which is directly useful when deciding where to invest in localisation.

#### 💼 Agency reporting and client pitches

The combination of authority score, keyword portfolio, traffic estimate and position distribution is exactly the evidence base a client audit or a new-business pitch needs. Because every record carries `data_captured_at` and `domain`, reports remain reproducible and auditable months later.

#### 🔍 Acquisition and domain due diligence

When evaluating a site for purchase, `moz_domain_authority`, `backlinks_count`, the follow-to-nofollow ratio, `organic_traffic` and `traffic_history` together indicate whether organic performance is durable or declining. A domain with strong headline authority but a falling traffic history is a materially different proposition from one on an upward trend.

***

### ⚙️ Tips for Better Ubersuggest Scraping Results

- **Keep `country` and `language` identical across a comparison set.** Mixing localisation parameters within a competitive cohort silently invalidates the comparison, because the underlying metrics are market-specific.
- **Use bare domains rather than deep URLs in `urls`.** The metrics returned are domain-level, so supplying a full article URL adds no precision and can confuse the analysis.
- **Compute the top-3 share as a derived metric.** `keywords_in_top_1_3` divided by `organic_keywords` normalises portfolio quality across domains of different sizes and is far more informative than either number alone.
- **Schedule runs on a fixed cadence and keep the domain list stable.** Consistency is what makes the resulting time series interpretable; adding and removing domains between runs makes trend comparison unreliable.
- **Export to JSON when you need the nested fields.** `traffic_history`, `top_pages`, `top_country_traffic` and `referral_authority_distribution` are structured objects and arrays, and CSV export flattens or serialises them.
- **Treat traffic and keyword figures as estimates.** These are modelled metrics derived from third-party data, not measurements from a site's own analytics. They are reliable for relative comparison between domains and much less so as absolute values.

***

### 🛠️ Troubleshooting

**A domain returned no data.**
Check the spelling first, then whether the domain has enough search presence to have metrics at all — very new or very small sites frequently do not. The run log records which domains could not be collected. If a domain you know is established fails repeatedly, retry the run, since transient upstream failures do occur.

**The nested fields are empty in my CSV export.**
`traffic_history`, `top_pages`, `top_country_traffic` and `referral_authority_distribution` are nested structures, and CSV cannot represent them natively. Export to JSON instead, or flatten the specific values you need in a post-processing step before writing CSV.

**Traffic numbers do not match my Google Analytics.**
They are not supposed to. These are modelled estimates of organic search traffic derived from third-party keyword and ranking data, whereas Analytics measures actual sessions across all channels. Use the scraped figures for competitive comparison, and your own analytics for absolute measurement of your own site.

**`top_pages` is null even though I enabled the toggle.**
`include_top_pages` defaults to `false`, so first confirm it was actually set to `true` in the run input. Beyond that, top-pages data is not available for every domain, and a null value legitimately means the upstream source had nothing to return for that site.

**Metrics look stale compared with what I expect.**
Check `last_updated`, which reports when the underlying data was refreshed, separately from `data_captured_at`, which is when your run collected it. SEO datasets of this kind are refreshed on a periodic cycle rather than continuously, so a gap between the two timestamps is normal.

***

### ❓ Frequently Asked Questions About Ubersuggest SEO Scraping

**What does the Ubersuggest Scraper do?**
It collects domain-level SEO metrics for a list of websites — domain authority, backlink counts and composition, referring domains, organic keyword and traffic figures with month-on-month comparisons, SERP position distribution, traffic history, top-country traffic, top pages and referral authority distribution — and returns them as structured JSON.

**Do I need an Ubersuggest account or subscription?**
No. The actor does not require you to supply any Ubersuggest credentials.

**How many domains can I analyse in one run?**
`urls` accepts a list and the actor processes each entry in turn. There is no fixed cap imposed by the actor, though larger lists naturally take longer to complete.

**What does the `keyword` input actually affect?**
It sets the target keyword the analysis is focused on. It defaults to `ai automation` and should be set to the head term for the category you are analysing.

**Which country codes does the Ubersuggest scraper accept?**
`country` takes a standard two-letter country code such as `us`, `gb`, `de` or `au`, and `language` takes a language code such as `en` or `de`. Match both to the market you are analysing.

**Is the organic traffic figure accurate?**
It is an estimate derived from keyword rankings and modelled click-through rates, not a measurement of actual sessions. It is dependable for comparing domains against each other and should not be treated as a substitute for a site's own analytics.

**What is the difference between `backlinks_count` and `referral_domains`?**
`backlinks_count` is the total number of individual links pointing at the domain, while `referral_domains` counts the distinct websites those links come from. A high backlink count with few referring domains indicates a narrow, repetitive link profile.

**Why are follow and nofollow backlinks reported separately?**
Because they carry different weight. Follow links pass ranking signals; nofollow links generally do not. Splitting them lets you assess the genuinely useful portion of a link profile rather than a headline total.

**What do the keyword position bands mean?**
`keywords_in_top_1_3`, `keywords_in_top_4_10`, `keywords_in_top_11_50` and `keywords_in_top_51_100` count how many of a domain's ranking keywords sit in each SERP position range. The distribution reveals whether visibility translates into traffic.

**Do I need to configure proxies for this Ubersuggest scraper?**
No. The actor makes direct HTTP requests using `curl_cffi` with browser-grade TLS impersonation, and there is no proxy configuration in the input schema.

**Can I schedule the Ubersuggest scraper to run automatically?**
Yes. Apify's scheduler runs the actor on any cron expression, which is the standard way to build an SEO time series. Attach a webhook if you want each completed run to feed a dashboard or reporting tool.

**Can I export the results to Google Sheets?**
Yes. Apify's Google Sheets integration writes dataset contents directly into a spreadsheet, and CSV, Excel, JSON and XML exports are all available from the Storage tab.

**What is the difference between `data_captured_at` and `last_updated`?**
`data_captured_at` is the timestamp of your run. `last_updated` reflects when the underlying SEO dataset was itself refreshed. The two will normally differ, since the source data is updated on a periodic cycle.

**How often should I run the Ubersuggest scraper for trend tracking?**
Monthly suits most competitive monitoring, since the underlying metrics do not change meaningfully day to day. Weekly is reasonable during an active campaign when you want a finer-grained view of movement.

**Is scraping SEO data legal?**
The actor collects publicly accessible aggregate metrics about websites rather than personal data. You remain responsible for compliance with applicable terms of service and law in your jurisdiction, particularly if you redistribute the collected metrics commercially.

***

### 🆘 Support & Feedback

If a run fails, a domain consistently returns nothing, or a field stops populating, open a ticket on the **Issues** tab of the actor page and include the run ID and the exact input you used.

Need something this Ubersuggest scraper does not currently cover, such as page-level metrics, a different data source, or delivery straight into your own warehouse? Email **scraperhubapi@gmail.com** and describe what you are building.

If the Ubersuggest Scraper is useful to your SEO work, please leave a review on its Apify page. Ratings and written feedback shape which improvements are prioritised next.

***

### ⚖️ Disclaimer

The Ubersuggest Scraper collects publicly available aggregate SEO metrics about websites. It does not access private accounts, analytics properties, or any authenticated data source, and the figures it returns are third-party estimates rather than measurements taken from the analysed sites themselves.

You are responsible for how you use the data this Ubersuggest scraper produces, including compliance with applicable terms of service and with any restrictions on the commercial redistribution of third-party SEO metrics. The metrics returned describe websites rather than people, so personal data is not normally involved; where a domain belongs to an individual, such as a personal site or a sole trader, handle the record in line with the GDPR, UK GDPR and equivalent privacy law in your jurisdiction. Traffic, keyword and authority values are estimates and should not be relied upon as the sole basis for financial or acquisition decisions.

This actor is an independent tool and is not affiliated with, endorsed by, or connected to Ubersuggest, Neil Patel Digital, or Moz. All trademarks referenced belong to their respective owners.

If you believe data collected through this actor relates to you and you would like it removed, contact **scraperhubapi@gmail.com** with the details and the request will be handled promptly.

# Actor input Schema

## `urls` (type: `array`):

List of target URLs.

## `keyword` (type: `string`):

Target keyword.

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

Country code (e.g., us)

## `language` (type: `string`):

Language code (e.g., en)

## `include_overview` (type: `boolean`):

Fetch overview data

## `include_backlinks` (type: `boolean`):

Fetch backlinks data

## `include_backlinks_overview` (type: `boolean`):

Fetch backlinks overview

## `include_keywords` (type: `boolean`):

Fetch keywords data

## `include_top_pages` (type: `boolean`):

Fetch top pages data

## Actor input object example

```json
{
  "urls": [
    "make.com"
  ],
  "keyword": "ai automation",
  "country": "us",
  "language": "en",
  "include_overview": true,
  "include_backlinks": true,
  "include_backlinks_overview": true,
  "include_keywords": true,
  "include_top_pages": false
}
```

# Actor output Schema

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

Records scraped by Ubersuggest Scraper, stored in the run's default dataset.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers-hub/ubersuggest-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapers-hub/ubersuggest-scraper").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 '{}' |
apify call scrapers-hub/ubersuggest-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers-hub/ubersuggest-scraper"
        }
    }
}

```

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/DhTodTnLB5xw4ZkKA/builds/frzaiEc5WdbWoPU6c/openapi.json
