Internal endpoint for the Cron service to check visibility for a single prompt.
Called once per sampled prompt (10 prompts per day) by the cron job.
What It Does
- Takes a single prompt
- Checks all 8 platforms in parallel (each platform uses native search, then Gemini 3 Flash evaluates):
- ChatGPT - OpenAI Direct w/ Search → Gemini 3 Flash evaluates
- Claude - Anthropic Direct w/ Search → Gemini 3 Flash evaluates
- Gemini - GCP AI Studio Direct w/ Search → Gemini 3 Flash evaluates
- Perplexity - Sonar API → Gemini 3 Flash evaluates
- Copilot - Parallel Search API → Gemini 3 Flash evaluates
- DeepSeek - Firecrawl Search API → Gemini 3 Flash evaluates
- Grok - X.AI Direct w/ Search → Gemini 3 Flash evaluates
- Google AI - Serp API (AI Overview) → Gemini 3 Flash evaluates
- Returns 8 boolean values indicating if business was mentioned
Request Body
Business identifier (org_slug)
Response
The prompt that was analyzed
True if business mentioned on ChatGPT
True if business mentioned on Claude
True if business mentioned on Gemini
True if business mentioned on Perplexity
True if business mentioned on Copilot
True if business mentioned on DeepSeek
True if business mentioned on Grok
True if business mentioned on Google AI Overview
curl -X POST https://searchcompany-main.up.railway.app/api/cron/analyze-visibility \
-H "Content-Type: application/json" \
-H "X-API-Key: search-company" \
-d '{
"business_id": "nike",
"prompt": "What are the best running shoes for marathons?"
}'
{
"status": "success",
"prompt": "What are the best running shoes for marathons?",
"chatgpt": true,
"claude": true,
"gemini": false,
"perplexity": true,
"copilot": false,
"deepseek": true,
"grok": false,
"google_ai": true
}
Sampling Architecture
This endpoint is called 10 times per customer per day (once per sampled prompt).
We sample 10 prompts from the total pool, prioritizing untested prompts.
Workflow:
- Cron calls
/api/cron/sample-prompts to get 10 prompts (untested first, then random)
- For each sampled prompt, call this endpoint
- Results are stored via
/api/cron/store-visibility-report (updates last_tested_at)
Notes
- Called by Cron 10 times per customer (once per sampled prompt)
- All 8 platform checks run in parallel for speed
- Each platform uses native search capabilities, then Gemini 3 Flash provides unified evaluation
- Results use pass/fail paradigm (true = visible, false = not visible)
- After all 10 prompts, Cron calls
/api/cron/store-visibility-report to save results