GEO Brand Monitor
Pricing
Pay per usage
Go to Apify Store
GEO Brand Monitor
Track how AI search engines talk about your brand. Automatically identify citation sources, check which ones mention you, and find contacts to reach out to for brand authority building.
Monitor your brand's visibility in ChatGPT Search results. This Actor checks two layers of brand presence:
- Direct AI citation - Does ChatGPT Search mention your brand in its response?
- Source-level presence - Do the third-party sources that ChatGPT cites also mention your brand?
Sources that don't mention your brand are outreach opportunities. For those, the Actor scrapes contact details you can use for content placement outreach.
How it works
For each search query you provide, the Actor:
- Queries ChatGPT Search via Google Search Scraper to get the AI-generated response and cited sources.
- Checks brand mention in the AI response using case-insensitive text matching.
- Filters sources by removing your own domains and competitor domains, leaving only third-party sources.
- Crawls each source page using Website Content Crawler.
- Checks brand mention in each source using case-insensitive text matching.
- Scrapes contacts from sources that don't mention your brand (outreach opportunities) using Contact Details Scraper.
Input
| Field | Type | Description |
|---|---|---|
queries | string (textarea) | One search query per line |
brand | string | Brand name to search for (case-insensitive) |
ownDomains | string[] | Your domains to exclude from analysis |
competitorDomains | string[] | Competitor domains to exclude |
maxContactsPerDomain | integer | Max contact leads per source domain (default: 3) |
maxSourcesPerQuery | integer | Max sources to process per query (default: 10) |
Example input
{"queries": "best web scraping tools\nweb scraping platforms\nhow to scrape websites","brand": "Apify","ownDomains": ["apify.com", "use-apify.com"],"competitorDomains": ["brightdata.com", "oxylabs.io", "scrapingbee.com", "scraperapi.com","zyte.com", "octoparse.com", "parsehub.com", "import.io","webscraper.io", "diffbot.com", "phantombuster.com", "crawlbase.com","thunderbit.com", "browserbase.com"],"maxContactsPerDomain": 3,"maxSourcesPerQuery": 10}
Output
Each row in the output dataset represents one source per query:
| Field | Description |
|---|---|
query | The search query |
aiResponse | Full ChatGPT Search response text |
brandMentionedInAI | Whether the brand appears in the AI response: Yes, No, or Error |
sourceUrl | URL of the cited source |
sourceDomain | Domain of the source |
brandMentionedInSource | Whether the brand appears in the source content: Yes, No, or Error |
contacts | Array of contact details (only for outreach opportunities) |
Example output
{"query": "best web scraping tools","aiResponse": "The full ChatGPT Search response text...","brandMentionedInAI": "Yes","sourceUrl": "https://example.com/article","sourceDomain": "example.com","brandMentionedInSource": "No","contacts": [{"name": "John Doe","email": "john@example.com","position": "Editor"}]}
Use cases
- Generative Engine Optimization (GEO) - Track how your brand appears in AI-generated search results.
- Brand monitoring - Monitor which queries surface your brand in ChatGPT Search.
- Competitive analysis - Understand where competitors are mentioned and you're not.
- Outreach opportunities - Find third-party sites that cover your topic but don't mention your brand, along with contact details for outreach.
Actors used
This Actor orchestrates three Actors:
- Google Search Scraper - Fetches ChatGPT Search results
- Website Content Crawler - Crawls cited source pages
- Contact Details Scraper - Scrapes contact information from outreach opportunity domains
Cost considerations
- Google Search Scraper with ChatGPT Search is the base cost per query.
- Website Content Crawler runs once per source (controlled by
maxSourcesPerQuery). - Contact Details Scraper runs only for sources that don't mention your brand. Use
maxContactsPerDomainto limit costs.
To minimize costs during testing, use 1-2 queries with maxSourcesPerQuery set to 3.
