# Website Traffic, Tech Stack and Backlinks Report (`brightgro/website-report`) Actor

For each domain: Google rank and estimated organic and paid traffic, the technologies the site runs, and its backlink profile, from DataForSEO. Pick the sections you need; each section is one row and one price.

- **URL**: https://apify.com/brightgro/website-report.md
- **Developed by:** [Brightgro LLC](https://apify.com/brightgro) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Website Traffic, Tech Stack and Backlinks Report

Give a list of domains and get a short report on each: how the site does in Google search, what it is built with, and how many sites link to it. The data comes from DataForSEO. Pick only the sections you need; each section is one row with its own price.

### Input

- Domains: domains or website URLs, up to 200, for example `apify.com`.
- Sections: `traffic`, `tech` and `backlinks` (all three by default).
- Country for traffic: the Google market for the traffic section (US by default).

### Output

One row per domain and section.

| Section | Fields |
|---|---|
| traffic | organic_keywords, organic_traffic_estimate (estimated monthly visits from Google search), organic_traffic_value_usd, organic_top3, organic_top10, organic_new, organic_lost, paid_keywords, paid_traffic_estimate, paid_traffic_cost_usd |
| tech | title, description, country, language, technologies, technologies_by_category, social_profiles |
| backlinks | rank, backlinks, referring_domains, referring_main_domains, referring_ips, backlinks_spam_score, broken_backlinks, first_seen and the link type breakdowns |

Traffic figures are DataForSEO estimates of search traffic, not total site visits from all sources.

A row with `status` `invalid_input`, `provider_error` or `no_data` says what went wrong. A provider error is not charged. For a small or new site, DataForSEO may answer the traffic check with no figures: that row says `no_data` and is still charged, because the check itself is paid. Tech and backlinks rows with no data are not charged.

### Price

One event for each section row, at the prices shown on this page: traffic, tech and backlinks are priced on their own. When the run's spending limit is reached, the run stops and keeps the rows it already has.

### Limits

- Small or new sites may have no traffic or backlink data.
- Contact details found on a site (emails, phone numbers) are left out.

# Actor input Schema

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

Domains or website URLs, up to 200, for example apify.com.

## `sections` (type: `array`):

Which sections to return for each domain. Each is priced on its own.

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

The Google market for the traffic section.

## Actor input object example

```json
{
  "domains": [
    "apify.com"
  ],
  "sections": [
    "traffic"
  ],
  "country": "US"
}
```

# Actor output Schema

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

For each domain: Google rank and estimated organic and paid traffic, the technologies the site runs, and its backlink profile, from DataForSEO. Pick the sections you need; each section is one row and one price.

# 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"
    ],
    "sections": [
        "traffic"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("brightgro/website-report").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"],
    "sections": ["traffic"],
}

# Run the Actor and wait for it to finish
run = client.actor("brightgro/website-report").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"
  ],
  "sections": [
    "traffic"
  ]
}' |
apify call brightgro/website-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brightgro/website-report"
        }
    }
}
```

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/J2Lu5xRc7hjdihCqn/builds/B3cKpcmvz07TmeVaR/openapi.json
