# AI Visibility Check — ChatGPT & Perplexity for Local Business (`moonlings/ai-visibility-check`) Actor

AI brand visibility tracker for local businesses: asks ChatGPT & Perplexity live with web search who they recommend in your category and city. Real appearance counts, competitors named instead of you, and the sites AI answers cite — AEO/GEO ground truth, never an invented score.

- **URL**: https://apify.com/moonlings/ai-visibility-check.md
- **Developed by:** [moonlings](https://apify.com/moonlings) (community)
- **Categories:** AI, Lead generation, SEO tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$790.00 / 1,000 ai visibility checks

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/platform/actors/running/actors-in-store#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

## AI Visibility Check — Is ChatGPT Recommending Your Business?

When locals ask ChatGPT or Perplexity for "the best gym near Cincinnati," your
business either comes up or a competitor gets the customer. This Actor asks
both assistants **live, with web search on**, exactly like a real searcher —
and returns what actually happened: how many answers named you, who was
recommended instead, and which local sites the AI pulled from. One check costs
**$0.79** and takes about 10–30 seconds.

No invented metrics. You get real observed counts — "appeared in 4 of 6
answers, ChatGPT 3/3, Perplexity 1/3" — because that's what the assistants
actually said, and that's the only honest way to measure this.

### What you get back

```json
{
  "businessName": "Graeter's Ice Cream",
  "location": "Cincinnati, OH",
  "asked": 6, "sampled": 6, "appeared": 2,
  "engines": [
    { "engine": "ChatGPT", "sampled": 3, "appeared": 1 },
    { "engine": "Perplexity", "sampled": 3, "appeared": 1 }
  ],
  "recommendedInstead": ["Aglamesis Bro's Ice Cream", "Hello Honey"],
  "citedDomains": ["cincinnatirefined.com", "365cincinnati.com", "yelp.com"],
  "label": "Asked live with web search near Cincinnati"
}
```

- **`appeared` / `sampled`** — real appearance counts over live category
  questions, split per engine.
- **`recommendedInstead`** — the businesses the AI named instead of you.
  This is who is winning your customers in AI search.
- **`citedDomains`** — the local sites the AI answers drew from. Getting
  listed *there* is the concrete lever to change the answer.

### Who uses this

- **Business owners**: find out in one run whether AI search knows you exist.
- **Marketing agencies**: run it on a prospect before the pitch — "ChatGPT
  recommended your competitor in 3 of 3 answers" opens doors.
- **Local SEO consultants**: `citedDomains` is a ready-made citations
  worklist, sourced from what the AI actually reads.
- **AI agents**: callable via the Apify MCP server; returns structured JSON
  and finishes inside a normal tool-call window.

### Input

```json
{
  "businessName": "Graeter's Ice Cream",
  "location": "Cincinnati, OH",
  "businessType": "ice cream shop",
  "website": "https://www.graeters.com"
}
```

`businessType` is required — the assistants are asked category questions, so
without it there is nothing to check. `website` is recommended: a cited
domain counts as an appearance even when the answer words your name
differently. Spell the business name the way Google knows it.

### Pricing

One `visibility-check` event ($0.79) per **delivered** check. Failed runs are
never charged — if no AI answer could be sampled, you pay nothing.

### Not what this does

- It does **not** produce a 0–100 "AI SEO" rating — no such number exists in
  reality, and we won't fabricate one.
- It does **not** track rankings over time in one run — each run is a fresh
  live sample (schedule it weekly if you want a time series).
- It does **not** fix your visibility — it tells you who's winning and which
  sites the AI reads, which is where the fixing starts.
- Not for national brands with no local market: the questions are
  category-plus-city, so a business without a local footprint isn't a fit.

### For AI agents (MCP)

Agents can run this check directly: add Apify's MCP server as a connector —
`https://mcp.apify.com/?actors=moonlings/ai-visibility-check` — and it
appears as the `moonlings--ai-visibility-check` tool, metered through your
Apify account like any other run. Useful as a scheduled watchdog: have your
agent re-check weekly and flag when the appearance counts move.

### FAQ

**Why do counts differ between runs?** AI answers genuinely vary — that's the
point of sampling live. Each run reports exactly what was said this time.

**Which engines?** ChatGPT and Perplexity, both with live web search, asked
as a searcher in the business's own city.

**Want the full picture?** The
[AI Visibility Report](https://apify.com/moonlings/local-business-competitor-analysis)
adds the competitor, review, and ads evidence behind the answer, up to a full
graded research report. The
[Review Gap Check](https://apify.com/moonlings/review-gap-check) measures
the review signals the assistants lean on. The
[Thumbtack Scraper](https://apify.com/moonlings/thumbtack-scraper) pulls the
local-pro competitive field — ratings, hires, and reviews by service and city. The
[AI Fact-Check](https://apify.com/moonlings/ai-fact-check) goes further —
it checks whether what AI says about a business (hours, address, phone) is
actually *correct*.

### Who this is for

Local business owners, marketing agencies, and local SEO / AEO (answer engine
optimization) practitioners who need **AI search visibility** ground truth:
brand monitoring across ChatGPT and Perplexity for "near me" buyer queries,
citation sources worth targeting (GEO), and honest appearance counts to put in
a client report. A lightweight alternative to domain-level AI brand visibility
trackers when the question is a *local* market, not a global brand.

### Works with AI agents

Agent-callable end to end: run it from any agent runtime via the Apify API or
MCP, and it is **x402-payable** — an autonomous agent can discover, pay for,
and run a check with no account. Structured JSON out, ready to pipe onward.

# Actor input Schema

## `businessName` (type: `string`):

The local business to check, e.g. "Harbor Fitness".

## `location` (type: `string`):

City and state/region, e.g. "Cincinnati, OH". AI assistants are asked as a local searcher there.

## `businessType` (type: `string`):

Category, e.g. "gym", "salon", "HVAC contractor". Required — the AI assistants are asked category questions ("best gym near…"), so without it there is nothing to check.

## `website` (type: `string`):

Optional but recommended: if an AI answer cites your domain, that counts as an appearance even when it words your name differently.

## Actor input object example

```json
{
  "businessName": "Harbor Fitness",
  "location": "Cincinnati, OH",
  "businessType": "gym",
  "website": "https://harborfitness.com"
}
```

# Actor output Schema

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

Appearance counts (asked/sampled/appeared), per-engine split, recommendedInstead, citedDomains.

## `run` (type: `string`):

Console view of this run, including the charged event and log.

# 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 = {
    "businessName": "Graeter's Ice Cream",
    "location": "Cincinnati, OH",
    "businessType": "ice cream shop"
};

// Run the Actor and wait for it to finish
const run = await client.actor("moonlings/ai-visibility-check").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 = {
    "businessName": "Graeter's Ice Cream",
    "location": "Cincinnati, OH",
    "businessType": "ice cream shop",
}

# Run the Actor and wait for it to finish
run = client.actor("moonlings/ai-visibility-check").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "businessName": "Graeter'\''s Ice Cream",
  "location": "Cincinnati, OH",
  "businessType": "ice cream shop"
}' |
apify call moonlings/ai-visibility-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=moonlings/ai-visibility-check",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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