# Marketing & SEO Research MCP for AI Agents (`digital_influx/marketing-research-mcp`) Actor

MCP server for Claude, ChatGPT, Gemini and Cursor: SEO audits, broken links, page metadata, email provider and DNS of domains, tech stack, website contacts, App Store reviews, store products and prices, podcasts and Bluesky.

- **URL**: https://apify.com/digital_influx/marketing-research-mcp.md
- **Developed by:** [Bruno Petrelli](https://apify.com/digital_influx) (community)
- **Categories:** MCP servers, SEO tools, Marketing
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Marketing & SEO Research MCP for AI Agents

**An MCP server that gives Claude, ChatGPT, Gemini, Cursor and any other MCP client ten marketing and website research tools:**

| Tool | What the agent gets |
|---|---|
| `audit_website_seo` | A technical SEO audit of a site, page by page: status, title and meta description (missing, too long, duplicate), H1s, word count, images without alt, broken links, canonical, noindex, inlinks and response time, plus a summary per site with robots.txt and sitemap. |
| `find_broken_links` | Every broken link of a site, with its status or error (404, server error, timeout, dead domain) and the pages that link to it. |
| `get_page_metadata` | Title, meta description, Open Graph title and image, favicon, canonical, language, site name and publish date of a list of URLs. |
| `get_domain_info` | Email provider (Google Workspace, Microsoft 365...), SaaS services verified in DNS, SPF senders, DMARC policy, DNS host and SSL certificate of domains. |
| `get_tech_stack` | The technologies of websites: CMS, e-commerce platform, analytics, advertising, marketing automation, chat, payments, CDN, hosting and frameworks. |
| `get_website_contacts` | Emails, phones, social profiles, named people, careers page and job boards that companies publish on their own websites. |
| `get_app_store_data` | Apple App Store apps (rating, rating count, price, genre, version, developer) by app, search or top chart, and their newest reviews. |
| `get_store_products` | Products of online stores (Shopify, WooCommerce and most others): name, brand, price and list price, discount, availability, variants, SKU, GTIN and rating. |
| `find_podcasts` | Podcasts on a topic with the host's contact email, website, episode count, last episode and publishing rhythm. |
| `search_bluesky` | Bluesky posts by search, profile or thread, and profiles by search with emails and website in the bio. |

Ask your agent things like *"Audit the SEO of acme.com and list the pages with missing meta descriptions"*, *"Which of these 20 domains use Google Workspace?"*, *"Is allbirds.com on Shopify?"*, *"What do users complain about in the ChatGPT app reviews this week?"*, *"List the products and prices of thesill.com"* or *"Find B2B marketing podcasts that accept guests, with the host's email"*: it picks the tool and gets clean JSON back.

### Connect your agent

**Easiest, with your Apify account (sign-in in the browser, no token to copy):** add this remote MCP server URL to your client:

```
https://mcp.apify.com?tools=digital_influx/marketing-research-mcp
```

- **Claude** (claude.ai, Claude Desktop): add a custom connector with that URL.
- **ChatGPT:** add it as a connector (MCP server URL) in developer mode.
- **Cursor, VS Code, Windsurf, Gemini CLI and other clients:** add a remote MCP server; with a token instead of the browser sign-in, send `Authorization: Bearer YOUR_APIFY_TOKEN` (Gemini CLI writes `httpUrl` instead of `url`).

**Directly, without the Apify MCP server:** this Actor runs in Standby mode as a Streamable HTTP MCP server: take its Standby URL from the Actor's API tab, add `/mcp`, and send your Apify token. **A record of every call:** each tool call your agent makes is also saved as a row of the Standby run's dataset (tool, arguments, a one-line summary and the result), so you can check later what it asked and got. **Without an agent:** a standard run calls one tool from the input (`tool` and `arguments`) and saves the result to the dataset.

### Arguments

Every tool takes the options of the Actor it runs, with the same names, choices and limits, plus `limit`: the pages audited or crawled per site (SEO audit: 10 by default, at most 50; up to 3 sites), the products per store (up to 3 stores), the reviews per app, the podcasts or posts returned, or the length of a list of URLs, domains or websites (a longer list is cut and the answer says so). Your MCP client shows each tool's full list of arguments. robots.txt is always respected.

### How much it costs

This server charges nothing itself. Each tool runs an Actor of the same author in your account, and that run bills its results at the same price as running it directly: SEO audit USD 0.02 per page; broken links USD 0.005 per page crawled; page metadata USD 0.004 per URL; domain info USD 0.003 per domain; tech stack USD 0.003 per website; website contacts USD 0.01 per website with contact details; App Store USD 0.003 per app and USD 0.0001 per review; store products USD 0.004 per product; podcasts USD 0.02 per podcast; Bluesky USD 0.0015 per post and USD 0.002 per profile. Runs in Standby use 256 MB; each call takes 10 to 90 seconds while the Actor runs.

### Good to know

- **Respectful by design:** the Actors behind these tools use honest User-Agents, read robots.txt (an agent cannot turn it off here), use no proxies and no login, and report a site that refuses them instead of working around it.
- **The same Actors work on their own,** for thousands of sites in one batch, scheduled comparisons with the previous run, and every field.
- **More tools for agents** by the same author: Company Research MCP, Job Search MCP and US & UK Public Records MCP.

# Actor input Schema

## `tool` (type: `string`):

The tool to call in a standard run: an SEO audit, broken links, page metadata, domain DNS and email provider, tech stack, website contacts, App Store apps and reviews, store products, podcasts or Bluesky.

## `arguments` (type: `object`):

The tool's arguments as JSON, e.g. get_domain_info: {"domains": \["stripe.com"]}; audit_website_seo: {"websites": \["example.com"], "limit": 10}; get_app_store_data: {"apps": \["com.openai.chat"], "limit": 20}.

## Actor input object example

```json
{
  "tool": "get_domain_info",
  "arguments": {
    "domains": [
      "stripe.com",
      "notion.so"
    ],
    "limit": 5
  }
}
```

# Actor output Schema

## `results` (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 = {
    "tool": "get_domain_info",
    "arguments": {
        "domains": [
            "stripe.com",
            "notion.so"
        ],
        "limit": 5
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("digital_influx/marketing-research-mcp").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 = {
    "tool": "get_domain_info",
    "arguments": {
        "domains": [
            "stripe.com",
            "notion.so",
        ],
        "limit": 5,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("digital_influx/marketing-research-mcp").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 '{
  "tool": "get_domain_info",
  "arguments": {
    "domains": [
      "stripe.com",
      "notion.so"
    ],
    "limit": 5
  }
}' |
apify call digital_influx/marketing-research-mcp --silent --output-dataset

```

## MCP server setup

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

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/i8uyw9gh3JIixxLTN/builds/k9Syx8WAmFCcbOcSC/openapi.json
