# Article Agent Source: https://docs.trysight.ai/ai-content/ai-agents Your AI content marketing team — customize each writing-pipeline sub-agent to craft articles exactly the way you want. ## Your Content Marketing Team Sight AI gives you a full AI content marketing team. Instead of a single AI writing your articles, **8 specialized agents** each handle a different part of the process — just like a real content team with dedicated roles. You can customize each agent's behavior with specific instructions, giving you fine-grained control over every aspect of your content. The Article Agent page lives at `app.trysight.ai/agents/writing` (formerly `/ai-agents` and `/content/ai-agents` — the old URLs still redirect). > **Heads up:** The Article Agent is composed of 8 *sub-agent roles inside the article-generation pipeline* (Research, Writer, SEO, etc.). It's different from the newer [Automations](/automations/overview), which are *autonomous workers that drive the pipeline for you* (e.g., the Search Opportunity Agent reads your opportunity queue and hands articles off to the Article Agent to write). ## Meet Your Agents ### Research Specialist **What they do:** Gathers information, analyzes competitors, and identifies key points to cover in your article. * Searches for relevant data, statistics, and sources * Analyzes top-ranking competitor content for the target keyword * Identifies content gaps and unique angles * Compiles research into a structured brief for the writing team **When to customize:** When you want research to focus on specific sources, industries, competitors, or data types. For example, instruct the Research Specialist to prioritize academic sources or focus on a specific geographic market. ### Content Strategist **What they do:** Creates the article outline and determines the best structure and flow. * Designs the article's heading structure and hierarchy * Plans the content flow from introduction to conclusion * Determines which subtopics to include and in what order * Ensures the outline targets the focus keyword effectively **When to customize:** When you have a preferred article structure, want to emphasize certain subtopics, or need the outline to follow a specific template. ### Content Writer **What they do:** Writes the full article based on the research brief and strategic outline. * Drafts all sections of the article in your brand voice * Incorporates research data, examples, and supporting evidence * Follows the outline structure while maintaining natural flow * Adapts tone and complexity to your target audience **When to customize:** When you want to adjust writing style, tone, reading level, sentence structure, or the use of specific terminology. This is the most commonly customized agent. ### Quality Editor **What they do:** Reviews the draft for clarity, grammar, readability, and overall quality. * Checks for grammatical errors and awkward phrasing * Improves sentence structure and paragraph flow * Ensures consistency in tone and style throughout the article * Verifies factual accuracy and logical coherence **When to customize:** When you have specific editorial standards, style guide requirements, or quality thresholds you want enforced. ### SEO Optimizer **What they do:** Refines the article for search engine performance. * Optimizes meta title and meta description * Improves keyword placement and density * Enhances heading tags for SEO value * Adds schema markup and structured data * Ensures readability scores meet SEO best practices **When to customize:** When you have specific SEO guidelines, keyword density targets, or want to prioritize certain ranking factors. ### Headline Specialist **What they do:** Crafts compelling headlines and subheadings that drive clicks and engagement. * Writes the primary article headline (H1) * Refines subheadings for clarity and engagement * Optimizes headlines for both search engines and readers * A/B tests headline variations for effectiveness **When to customize:** When you have a preferred headline style, want to include specific power words, or need headlines to follow a particular formula. ### Visual Designer **What they do:** Generates and selects images to enhance the article. * Creates AI-generated images relevant to the article's content * Writes descriptive alt text for accessibility and SEO * Determines optimal image placement within the article * Ensures visual consistency across your content **When to customize:** When you want a specific image style, prefer certain types of visuals (illustrations vs. photography), or have brand guidelines for imagery. ### Link Strategist **What they do:** Adds internal and external links to strengthen the article's SEO and reader experience. * Identifies opportunities for internal links to your existing content * Finds authoritative external sources to cite * Ensures link anchor text is natural and relevant * Balances link density for readability and SEO **When to customize:** When you want to prioritize linking to specific pages, avoid certain external domains, or control how many links appear in each article. ## How to Customize Agents 1. Navigate to **AI Agents** → **Article Agent** in the sidebar (or go directly to `/agents/writing`) 2. Select the agent you want to customize 3. Enter your custom instructions in the text field 4. Click **Save** Your instructions are applied to every article generated for that site. You can update them at any time — changes apply to future articles only. ## Example Instructions ### For the Content Writer ``` Write in a conversational, friendly tone. Use short paragraphs (2-3 sentences max). Avoid jargon and explain technical terms when first introduced. Include real-world examples and analogies to make complex topics accessible. Address the reader directly using "you" and "your." ``` ### For the Research Specialist ``` Focus on data from the last 12 months. Prioritize statistics from industry reports, peer-reviewed studies, and official documentation. Always include at least 3 data points or statistics per article. Avoid referencing competitor products by name unless doing a comparison piece. ``` ### For the Headline Specialist ``` Use numbers in headlines when possible (e.g., "7 Ways to..."). Keep headlines under 60 characters for SEO. Avoid clickbait -- headlines should accurately reflect the content. Include the focus keyword naturally within the first 3 words when possible. ``` ## Team vs. Agent Instructions Sight AI supports two levels of instructions: * **Team instructions** -- Applied globally to all agents. Use these for overarching guidelines like brand voice, target audience, and general content rules. * **Agent instructions** -- Applied to a specific agent only. Use these for role-specific guidance that only affects one part of the pipeline. Agent instructions take priority when they conflict with team instructions for that agent's specific task. ## Business Info and CTA In addition to agent instructions, you can configure: * **Business information** -- Your company name, industry, product/service descriptions, and target audience. This context is shared with all agents to ensure content is relevant and on-brand. * **Call to action (CTA)** -- A default CTA that agents include in articles. Set the CTA text, URL, and placement preferences. ## Troubleshooting ### Tone doesn't match expectations Add more specific instructions to the **Content Writer** agent. Include examples of the tone you want, such as: "Write like a knowledgeable friend explaining something over coffee -- casual but credible." ### Article structure isn't right Customize the **Content Strategist** agent with your preferred outline format. You can provide a template structure that the agent should follow. ### Content lacks depth Instruct the **Research Specialist** to gather more data points and the **Content Writer** to include more examples, case studies, and supporting evidence. ### Headings are too generic Give the **Headline Specialist** examples of headings you like and specific guidelines for the style you prefer. ### SEO score is low Add specific SEO requirements to the **SEO Optimizer** agent, such as target keyword density, meta description length, or heading tag rules. ### Content doesn't reflect your brand Add detailed business context in the **Business Info** section and provide brand voice guidelines in the **Team Instructions**. ### Too many or too few links Adjust the **Link Strategist** instructions with specific rules, such as "Include 3-5 internal links and 2-3 external links per article." ### Images don't match your brand Customize the **Visual Designer** with your preferred image style, color palette, or visual themes. ## Best Practices * **Start with team instructions** to set the overall tone and guidelines, then customize individual agents as needed * **Be specific** -- vague instructions produce vague results. Instead of "write well," say "use short sentences, active voice, and include one example per section" * **Test and iterate** -- generate a test article, review the output, and refine your instructions based on what you see * **Don't over-constrain** -- too many conflicting instructions can confuse agents. Focus on the most important guidelines * **Review periodically** -- update your instructions as your brand voice, audience, or content strategy evolves # Article Types Source: https://docs.trysight.ai/ai-content/article-types Choose the right article format for your content goals. ## Overview Sight AI supports three article types, each designed for a different content goal. The type you choose affects the article's structure, length, and style -- so picking the right one helps you get the best results for your target keyword. ## Explainer Explainer articles are in-depth, educational pieces that thoroughly cover a topic. They are designed to establish authority and provide comprehensive answers to reader questions. **Word count:** 2,500+ words ### Structure * Introduction with context and relevance * Clear definition or explanation of the core topic * Detailed sections covering subtopics and nuances * Supporting examples, data, or case studies * FAQ section addressing common questions * Conclusion with key takeaways ### Best For * Defining concepts or explaining how something works * Educational content that builds trust and authority * Targeting informational search queries * Pillar pages and cornerstone content ### Examples * "What Is Content Marketing? A Complete Guide" * "How Does SEO Work in 2025?" * "Understanding AI Visibility: What It Means for Your Brand" ## Listicle Listicle articles are long-form, list-based pieces that cover multiple items, options, or ideas within a topic. They are highly scannable and tend to perform well in both search and social sharing. **Word count:** 4,500+ words ### Structure * Introduction explaining the list's purpose and selection criteria * Numbered or categorized list items, each with detailed descriptions * Comparison elements or pros/cons where relevant * Supporting images or data for each item * Summary or recommendation section * FAQ section ### Best For * Roundups, comparisons, and "best of" lists * Targeting commercial and transactional search queries * Content that readers want to scan quickly * Topics with multiple options or solutions ### Examples * "15 Best Project Management Tools for Remote Teams" * "10 Proven Strategies to Increase Website Traffic" * "7 AI Writing Tools Compared: Features, Pricing, and Performance" ## Step-by-Step Step-by-Step articles are instructional guides that walk readers through a process from start to finish. They are structured for clarity and ease of following along. **Word count:** 3,000+ words ### Structure * Introduction explaining what the reader will accomplish * Prerequisites or requirements section * Numbered steps with clear instructions * Screenshots, code blocks, or visual aids where appropriate * Tips and common pitfalls for each step * Conclusion with next steps or related resources ### Best For * Tutorials and how-to guides * Technical documentation and setup instructions * Targeting "how to" search queries * Content where readers need to follow a process ### Examples * "How to Set Up Google Analytics 4: A Step-by-Step Guide" * "How to Build a Content Calendar from Scratch" * "How to Connect Your CMS to Sight AI" ## Choosing the Right Type Use this table to match your target keyword's search intent to the best article type: | Query Intent | Example Query | Best Type | | ------------- | -------------------------------- | ------------ | | Informational | "What is link building?" | Explainer | | Commercial | "Best email marketing platforms" | Listicle | | How-to | "How to set up a blog" | Step-by-Step | | Comparison | "Top CRM tools for startups" | Listicle | | Educational | "Understanding domain authority" | Explainer | | Tutorial | "How to install WordPress" | Step-by-Step | ## Setting a Default Article Type You can set a default article type for your site so you don't have to choose one every time: 1. Go to **Site Settings** 2. Navigate to the **Content** section 3. Under **Default Article Type**, select your preferred type 4. Click **Save** This default applies to single generation, bulk generation, and Autopilot. You can always override it when generating individual articles. # Autopilot Source: https://docs.trysight.ai/ai-content/autopilot Automate your content production with daily AI-generated articles. ## Overview Autopilot is Sight AI's fully automated content generation system. Once enabled, it generates **1--30 articles per day** on your behalf -- selecting keywords, creating content, running quality checks, and publishing directly to your CMS. No manual input required. It's designed for teams that want a steady stream of SEO-optimized content without the daily effort of managing article creation. > **Looking for opportunity-driven automation?** Check out [Automations](/automations/overview) — autonomous workers that act on your real Search and AI opportunity queues (Content Gaps, Refreshes, Interlinks, Rising Pages, AI Prompt gaps) instead of running through a fixed keyword pool. The two systems can be used together. ## How It Works Autopilot runs a four-step process for each article: 1. **Keyword selection** -- Pulls the next keyword from your keyword pool based on priority and relevance 2. **Article generation** -- Runs the full multi-agent pipeline (research, strategy, writing, editing, SEO, images, linking) 3. **Quality review** -- Validates the article meets quality thresholds before publishing 4. **CMS publishing** -- Syncs the finished article to your connected CMS automatically Each cycle runs on the schedule you configure, and articles appear in your article list as they're completed. ## Plan Availability Autopilot is included on **Pro** and **Advanced** plans: | Plan | Autopilot Access | | -------- | ----------------------------- | | Starter | Not included — upgrade to Pro | | Pro | Included (credit-metered) | | Advanced | Included (credit-metered) | ## Enabling Autopilot 1. Navigate to **Autopilot** in the sidebar 2. Click **Enable Autopilot** 3. Configure your settings (see below) 4. Click **Save and Start** Autopilot begins generating articles according to your schedule immediately after activation. ## Configuration ### Articles Per Day Set the number of articles Autopilot generates each day, from **1 to 30**. Start with a lower number and increase as you get comfortable with the output quality. ### Default Article Type Choose the article type Autopilot uses: * **Explainer** -- In-depth educational content (2,500+ words) * **Listicle** -- List-based articles with multiple items (4,500+ words) * **Step-by-Step** -- Instructional how-to guides (3,000+ words) * **Mixed** -- Autopilot automatically selects the best type for each keyword based on search intent **Mixed** is recommended for most sites, as it matches article format to the keyword's intent for the best SEO performance. ### Publishing Schedule Configure when Autopilot generates and publishes articles: * **Time of day** -- Set the preferred time for article generation to start * **Days of the week** -- Choose which days Autopilot runs (e.g., weekdays only, every day) ### CMS Settings Autopilot publishes directly to your connected CMS. Configure: * **Auto-publish** -- Articles are published immediately after generation * **Draft mode** -- Articles are saved as drafts in your CMS for manual review before publishing * **Category/collection** -- Set a default category or collection for Autopilot articles A CMS connection is required for automatic publishing. If no CMS is connected, articles are generated and saved in Sight AI for manual export. ## Keyword Management ### Keyword Pool Autopilot draws from your keyword pool — a prioritized list of keywords that it works through sequentially. Sight AI maintains a **90-keyword buffer** per site (auto-refreshed when it drops below 45) so Autopilot always has topics ready. ### Keyword Sources Add keywords to your pool from multiple sources: * **Manual entry** -- Type in keywords directly * **AI suggestions** -- Sight AI recommends keywords based on your site content and industry * **Keyword research** -- Import keywords from your research or SEO tools * **Content gaps** -- Keywords identified from AI Visibility tracking where your brand isn't being mentioned ### Keyword Filters Organize and prioritize your keyword pool with filters: * **Priority** -- High, medium, or low priority * **Status** -- Pending, in progress, completed, or skipped * **Search intent** -- Informational, commercial, transactional, or navigational * **Volume** -- Sort by estimated monthly search volume ## Monitoring ### Dashboard Status The Autopilot dashboard shows: * **Current status** -- Whether Autopilot is active, paused, or stopped * **Articles generated today** -- Progress toward your daily target * **Next scheduled generation** -- When the next article will start * **Keywords remaining** -- How many keywords are left in your pool * **Success rate** -- Percentage of articles that passed quality review ### Article History View a complete history of Autopilot-generated articles: * Article title and keyword * Generation date and time * Article type * Publishing status (published, draft, failed) * Quality score Click any article to open it in the editor for review or manual edits. ## Turning Off Autopilot To turn off Autopilot without losing your configuration: 1. Navigate to **Planner** in the left sidebar. 2. Locate the **Autopilot** toggle at the top of the Planner page. 3. Toggle **Autopilot off**. Autopilot stops generating new articles but retains all settings and keyword progress. To turn Autopilot back on, return to the **Planner** and toggle **Autopilot on**. It picks up right where it left off. ## Troubleshooting ### Articles aren't being generated * Verify Autopilot is toggled on in the **Planner** * Check that your keyword pool has remaining keywords * Confirm your team still has remaining AI credits this billing period * Ensure your publishing schedule includes today's day and time ### Articles aren't being published to CMS * Verify your CMS connection is active in **Site Settings** > **Integrations** * Check that auto-publish is enabled (not draft mode) if you expect immediate publishing * Review the article's publishing status in the article history for error details * Reconnect your CMS if the connection token has expired ## Best Practices * **Start small** -- Begin with 1--3 articles per day to evaluate quality before scaling up * **Use Mixed mode** -- Let Autopilot choose the best article type for each keyword * **Keep your keyword pool full** -- Regularly add new keywords so Autopilot always has content to generate * **Review articles weekly** -- Spot-check Autopilot articles to ensure quality stays high and refine your custom instructions if needed * **Use draft mode initially** -- Start with articles saved as drafts so you can review before publishing, then switch to auto-publish once you're confident in the output * **Monitor your dashboard** -- Check the Autopilot dashboard regularly to catch any issues early # AI Content Editor Source: https://docs.trysight.ai/ai-content/content-editor A powerful editing tool to refine and perfect your AI-generated articles. ## Overview The AI Content Editor is a full-featured editing environment built into Sight AI. Use it to review, refine, and perfect your AI-generated articles before publishing. It combines rich text editing with AI-powered tools, so you can make quick adjustments or completely rework sections without leaving the platform. ## Accessing the Editor To open the editor: 1. Navigate to **AI Content** in the sidebar 2. Click on any article from your article list 3. The editor opens with your article loaded and ready to edit ## Features ### Rich Text Editing The editor supports full rich text formatting: * **Bold**, *italic*, and ~~strikethrough~~ text * Headings (H1 through H6) * Ordered and unordered lists * Blockquotes * Code blocks and inline code * Tables * Horizontal rules * Links and images Use the toolbar at the top of the editor or standard keyboard shortcuts to apply formatting. ### AI-Powered Editing Highlight any text in the editor to access AI editing tools. These tools use AI to transform the selected content: * **Expand** -- Adds more detail, examples, or explanation to the selected text * **Rewrite** -- Rephrases the content while preserving the original meaning * **Summarize** -- Condenses the selected text into a shorter version * **Improve SEO** -- Optimizes the selected text for search engines by improving keyword usage, readability, and structure Select the text you want to modify, choose the AI action, and the editor replaces the selection with the improved version. ### Image Management Manage all images in your article directly from the editor: * **View images** inline within the article content * **Edit alt text** -- Click any image to update its alt text for accessibility and SEO * **Delete images** -- Remove images you don't need * **Reposition images** -- Drag and drop images to move them within the article ### Link Editing Click any link in the editor to modify it: * Update the link URL * Change the link text * Set the link to open in a new tab * Remove the link entirely ## SEO Panel The SEO panel is accessible from the sidebar of the editor. It shows your article's SEO metadata and lets you edit it: * **Meta title** -- The title that appears in search engine results * **Meta description** -- The description shown below the title in search results * **URL slug** -- The URL path for the article * **Focus keyword** -- The primary keyword the article targets * **SEO score** -- An overall score with recommendations for improvement ## Preview Mode Click the **Preview** button to see how your article will look when published. The preview renders the full article with all formatting, images, and links in a clean reading view. ## Saving Your Work ### Auto-Save The editor automatically saves your changes as you type. You'll see a "Saved" indicator in the toolbar when your latest changes are saved. ### Manual Save Click the **Save** button in the toolbar to manually save at any time. Use this when you want to confirm your changes are saved before navigating away. ### Save and Publish Click **Save & Publish** to save your changes and immediately sync the article to your connected CMS. This is the fastest way to go from editing to live. ## Version History The editor keeps a history of your article versions. To access it: 1. Open the article in the editor 2. Click the **Version History** icon in the toolbar 3. Browse previous versions with timestamps 4. Click any version to preview it 5. Restore a previous version if needed ## Keyboard Shortcuts | Action | Mac | Windows | | --------- | ----------------- | ------------------ | | Bold | `Cmd + B` | `Ctrl + B` | | Italic | `Cmd + I` | `Ctrl + I` | | Underline | `Cmd + U` | `Ctrl + U` | | Undo | `Cmd + Z` | `Ctrl + Z` | | Redo | `Cmd + Shift + Z` | `Ctrl + Shift + Z` | | Save | `Cmd + S` | `Ctrl + S` | | Link | `Cmd + K` | `Ctrl + K` | | Heading 1 | `Cmd + Alt + 1` | `Ctrl + Alt + 1` | | Heading 2 | `Cmd + Alt + 2` | `Ctrl + Alt + 2` | | Heading 3 | `Cmd + Alt + 3` | `Ctrl + Alt + 3` | # Custom Instructions Source: https://docs.trysight.ai/ai-content/custom-instructions Guide the AI with specific instructions to match your brand voice and requirements. ## Overview Custom instructions let you control how Sight AI generates content for your site. By providing specific guidance, you can ensure every article matches your brand voice, meets your quality standards, and follows your content strategy -- without manually editing each piece. ## Instruction Levels Sight AI supports two levels of custom instructions: ### Site-Level Instructions Site-level instructions apply to **every article** generated for your site. Use these for consistent, cross-cutting guidelines. * Set in **Site Settings** > **Custom Instructions** * Applied automatically to all generation methods (single, bulk, and Autopilot) * Best for brand voice, audience targeting, and universal formatting rules ### Article-Level Instructions Article-level instructions apply to a **single article** only. Use these for one-off requirements or overrides. * Set when generating an individual article in the "Custom Instructions" field * Override site-level instructions when there's a conflict * Best for topic-specific guidance, unique formatting needs, or special requirements ## Instruction Examples ### Brand Voice ``` Write in a professional but approachable tone. Use "we" when referring to the company and "you" when addressing the reader. Avoid slang, but don't be overly formal. Our brand voice is confident, helpful, and straightforward. ``` ### Target Audience ``` Our target audience is small business owners with limited technical knowledge. Avoid industry jargon and acronyms without explanation. Assume the reader has no prior experience with SEO or content marketing. Use analogies from everyday business operations to explain technical concepts. ``` ### Formatting ``` Use short paragraphs (2-3 sentences maximum). Include a bulleted list in every major section. Add a summary box at the end of each article. Use bold text for key terms when first introduced. Include at least one table per article for easy comparison. ``` ### Content Requirements ``` Every article must include at least 3 real-world examples. Include statistics from reputable sources published within the last 2 years. Add a "Key Takeaways" section at the beginning of each article. End with a clear call-to-action directing readers to our product page. ``` ### SEO Instructions ``` Include the focus keyword in the first paragraph, at least 2 H2 headings, and the conclusion. Keep meta descriptions between 150-160 characters. Use related keywords naturally throughout -- do not keyword-stuff. Ensure the article answers the top 3 "People Also Ask" questions for the target keyword. ``` ## Best Practices * **Be specific** -- "Write in a casual tone" is vague. "Write like you're explaining something to a smart friend over coffee -- use contractions, short sentences, and the occasional question to keep things conversational" is specific. * **Prioritize** -- Put your most important instructions first. If you have many guidelines, agents will weight earlier instructions more heavily. * **Test and iterate** -- Generate a test article, review the output, refine your instructions, and repeat. Small wording changes can have a big impact. * **Avoid contradictions** -- Don't say "keep it brief" and "cover every subtopic in depth" in the same instruction set. If you have conflicting needs, use article-level instructions to override site-level ones for specific articles. ## What to Include * Brand voice and tone guidelines * Target audience description * Formatting preferences * Required sections or content elements * SEO guidelines and keyword rules * CTA text and placement * Topics or angles to emphasize * Preferred sources or data types ## What to Avoid * Overly long instructions (keep it under 500 words per level) * Contradictory guidelines in the same instruction set * Instructions that are too vague to act on * Repeated or redundant instructions * Instructions about topics unrelated to content generation ## Template Instructions Use this template as a starting point and customize it for your site: ``` BRAND VOICE: [Describe your tone, style, and personality. Include 2-3 example phrases.] TARGET AUDIENCE: [Describe who your readers are, their knowledge level, and what they care about.] FORMATTING: [List your formatting preferences -- paragraph length, use of lists, tables, etc.] CONTENT REQUIREMENTS: [Specify what every article must include -- examples, data, sections, CTAs.] SEO GUIDELINES: [Note any keyword rules, meta description requirements, or heading conventions.] THINGS TO AVOID: [List any topics, phrases, tones, or formats you want the AI to stay away from.] ``` # AI Content Overview Source: https://docs.trysight.ai/ai-content/overview Generate high-quality, SEO-optimized articles with our multi-agent AI system. ## Introduction Sight AI uses a multi-agent AI system with **13+ specialized agents** to generate high-quality, SEO-optimized articles for your website. Each agent handles a different part of the content creation process -- from research and strategy to writing, editing, and optimization -- working together like a full content marketing team. The result is long-form, publish-ready content that ranks in search engines and gets cited by AI models. ## How It Works Every article goes through a **7-step pipeline** powered by specialized AI agents: 1. **Research** -- The Research Specialist gathers information about your topic, analyzes competitors, and identifies key points to cover. 2. **Strategy** -- The Content Strategist creates an outline, determines the best structure, and plans the article's flow. 3. **Writing** -- The Content Writer drafts the full article based on the research and strategy, following your brand voice and custom instructions. 4. **Editing** -- The Quality Editor reviews the draft for clarity, grammar, readability, and overall quality. 5. **SEO Optimization** -- The SEO Optimizer refines meta titles, descriptions, headings, keyword placement, and schema markup. 6. **Visual Design** -- The Visual Designer generates AI images and selects relevant visuals to enhance the article. 7. **Link Building** -- The Link Strategist adds internal links to your existing content and relevant external links to authoritative sources. ## Generation Methods ### Single Article Generate one article at a time by entering a keyword or topic. Best for targeted content when you have a specific idea in mind. ### Bulk Generation Generate multiple articles at once by providing a list of keywords. Sight AI queues and processes them sequentially, so you can set it and walk away. ### Autopilot Fully automated content production. Sight AI selects keywords, generates articles, and publishes them to your CMS on a daily schedule -- with zero manual effort. [Learn more about Autopilot](/ai-content/autopilot) ## Article Features Every generated article includes: * **SEO optimization** -- Meta title, meta description, keyword-optimized headings, and schema markup * **Internal linking** -- Automatic links to your existing pages and articles based on relevance * **External linking** -- Citations to authoritative sources that support your content * **AI-generated images** -- Custom images created to match your article's content * **Structured formatting** -- Proper heading hierarchy, bullet points, tables, and other formatting for readability * **Table of contents** -- Automatically generated for easy navigation ## Generation Times Article generation typically takes **5--10 minutes** depending on the article type and complexity. You can monitor real-time progress as each agent completes its step in the pipeline. * **Explainer articles** -- \~5--7 minutes * **Step-by-Step guides** -- \~6--8 minutes * **Listicle articles** -- \~7--10 minutes ## AI Credits by Plan Article generation draws from your team's shared **AI credit pool** (\~100 credits per full article). Monthly grants by plan: | Plan | Monthly Credits | ≈ Articles | | -------- | ------------------ | ---------- | | Starter | 1,500 (fixed) | \~15 | | Pro | 5,000+ (scalable) | \~50+ | | Advanced | 25,000+ (scalable) | \~250+ | Plan credits refresh at the beginning of each billing cycle. Bonus credits from referrals and promos never expire. [Compare plans](/billing/choosing-your-plan). # AI Models We Track Source: https://docs.trysight.ai/ai-visibility/ai-models Sight AI monitors Google and five major AI models to give you comprehensive visibility insights. ## Overview Sight AI tracks your brand's presence across Google and the most widely-used AI models and platforms. Each model has its own training data, response style, and citation behavior, which means your visibility can vary significantly from one platform to another. Understanding these differences is key to a comprehensive AI visibility strategy. ## ChatGPT (OpenAI) ChatGPT is the most widely adopted AI assistant, used by millions for everything from research to recommendations. It generates conversational responses based on its training data and, in some modes, real-time web access. **Why it matters:** ChatGPT's massive user base means a mention or recommendation here reaches the largest AI-assisted audience. Its conversational style means brand mentions are often framed as direct recommendations. **Key characteristics:** * Broad general knowledge across industries * Conversational, recommendation-style responses * Growing integration with search and browsing capabilities * Widely used for product research and comparisons ## Claude (Anthropic) Claude is known for thoughtful, detailed, and nuanced responses. It tends to provide more balanced analysis and is popular among professionals and researchers who value depth and accuracy. **Why it matters:** Claude's detailed responses often include more context about *why* a brand is recommended, which can be especially persuasive for users evaluating options. **Key characteristics:** * Detailed, nuanced analysis * Tends to provide balanced pros and cons * Popular among professional and technical users * Strong at in-depth comparisons and evaluations ## Perplexity Perplexity is an AI-powered search engine that combines generative AI with real-time web search. It always cites its sources, making it unique among AI platforms for transparency and direct attribution. **Why it matters:** Perplexity is the most citation-heavy AI platform. Appearing as a cited source means users can click directly through to your website, making citations here particularly valuable for traffic. **Key characteristics:** * Always cites sources with direct links * Combines AI generation with real-time web search * Growing user base especially among researchers * Citations drive direct referral traffic ## Gemini (Google) Gemini is Google's AI model, integrated across Google's product ecosystem including Search, Workspace, and more. Google AI Overviews -- the AI-generated summaries at the top of search results -- are powered by Gemini. **Why it matters:** Google processes billions of searches daily. AI Overviews appear at the top of search results for an increasing number of queries, making Gemini visibility critical for brands that rely on organic search traffic. **Key characteristics:** * Integrated into Google Search as AI Overviews * Reaches the largest search audience globally * AI Overviews appear above traditional search results * Strong emphasis on authoritative, well-structured content ## Grok (xAI) Grok is xAI's conversational AI with access to real-time information. It's known for its direct, sometimes unconventional response style and integration with the X (formerly Twitter) platform. **Why it matters:** Grok's real-time information access means it can reference very recent content and discussions. Its integration with X gives it unique insight into trending topics and public discourse. **Key characteristics:** * Real-time information access * Integration with X platform data * Direct, conversational response style * Strong awareness of trending topics and current events ## Google Search Google remains the largest discovery channel for most brands. Sight AI tracks your traditional search presence alongside AI visibility, including Google Search rankings and AI Overviews powered by Gemini. **Why it matters:** Google processes billions of searches daily. Tracking both traditional rankings and AI Overviews gives you a complete picture of how your brand appears when people search. ## Model Availability by Plan AI Visibility (all **6 sources**) is included on **Pro** and **Advanced** plans: | Source | Starter | Pro | Advanced | | ---------- | ------- | --- | -------- | | Google | — | Yes | Yes | | ChatGPT | — | Yes | Yes | | Claude | — | Yes | Yes | | Perplexity | — | Yes | Yes | | Gemini | — | Yes | Yes | | Grok | — | Yes | Yes | Starter does not include AI Visibility — upgrade to Pro to track all sources, including Google AI Overview through Gemini. ## Choosing Which Model Runs Your Checks Each AI platform offers multiple model tiers, and you decide which one runs your visibility checks. Every model has a published, flat price in **AI credits per prompt check**, shown in the picker before you commit — no surprise charges. | Platform | Model | Tier | Credits per check | | ---------- | --------------------------------- | -------- | ----------------- | | ChatGPT | GPT-5.4 Mini *(default)* | Fast | 2 | | ChatGPT | GPT-5.6 Luna | Standard | 3 | | ChatGPT | GPT-5.6 Terra | Premium | 7 | | ChatGPT | GPT-5.6 Sol | Premium | 14 | | ChatGPT | GPT-6 Astra | Premium | 25 | | Claude | Claude Haiku 4.5 *(default)* | Fast | 1 | | Claude | Claude Sonnet 5 | Standard | 2 | | Claude | Claude Opus 4.8 | Premium | 5 | | Claude | Claude Fable 5 | Premium | 10 | | Claude | Claude Fable 5.1 | Premium | 12 | | Gemini | Gemini 3.1 Flash Lite *(default)* | Fast | 1 | | Gemini | Gemini 3.8 Flash | Standard | 3 | | Gemini | Gemini 3.5 Flash | Standard | 5 | | Gemini | Gemini 3.1 Pro (Preview) | Premium | 5 | | Perplexity | Sonar *(default)* | Fast | 2 | | Perplexity | Sonar Pro | Premium | 5 | | Grok | Grok 4.5 *(default)* | Standard | 2 | | Grok | Grok 4.6 | Standard | 2 | With the default lineup, one check of one prompt across all five platforms bills **8 credits**. Moving every platform to its top premium tier (GPT-6 Astra, Claude Fable 5.1, Gemini 3.1 Pro, Sonar Pro, Grok 4.6) costs **49 credits** per check — you control the trade-off between depth and spend. The full price list is also available on your **Billing → Usage** page. ### Where to set models * **Site defaults** — set a default model per platform in your site's visibility settings; every prompt inherits these unless it has its own selection. * **Per prompt** — pick models for an individual prompt from the **Models** column on **Visibility → Prompts**. * **In bulk** — select multiple prompts and use **Set Models** to update them all at once. * **When adding prompts** — choose models directly in the add and generate flows. * **Through the AI agent** — ask the agent (in-app chat or Slack) to show the model catalog, see what each prompt runs on, or change a prompt's models. ### Why mix tiers? * **Premium tiers** are the flagship models most real users interact with — the defaults, and the right choice for your highest-stakes prompts. * **Fast tiers** cost a fraction of the credits — ideal for large prompt libraries or broad long-tail coverage. * Mixing tiers per prompt focuses your credits where visibility matters most. If a provider retires a model, prompts using it automatically fall back to that platform's default model — your checks never silently stop. Model selection applies to the five AI platforms; Google Search tracking is not model-based. ## Understanding Model Differences Each AI model may perceive your brand differently due to: * **Training data** -- Models are trained on different datasets and at different times * **Response style** -- Some models are more likely to list recommendations, while others provide narrative responses * **Citation behavior** -- Perplexity always cites sources; other models may or may not include links * **Update frequency** -- Models with real-time web access (Perplexity, Grok) reflect more recent information * **User base** -- Different models attract different audiences, affecting the value of visibility on each This is why Sight AI tracks multiple models -- optimizing for just one gives you an incomplete picture. ## Optimizing for Each Model ### General Tips These strategies work across all AI models: * **Publish comprehensive, authoritative content** that AI models can reference * **Build a strong backlink profile** from reputable sources * **Maintain accurate, up-to-date information** across your web presence * **Use clear, structured content** with headings, lists, and concise answers * **Earn mentions** in industry publications, reviews, and comparison sites ### Perplexity-Specific Tips Since Perplexity relies heavily on real-time web search and always cites sources: * **Optimize for traditional SEO** -- Perplexity's citation behavior is closely tied to search rankings * **Ensure fast page load times** -- Perplexity crawls the web in real time * **Use structured data markup** -- Help Perplexity understand and cite your content accurately * **Publish frequently** -- Fresh content is more likely to be picked up by Perplexity's real-time search * **Target featured snippet formats** -- Content structured as direct answers is more likely to be cited # AI Search Mode Source: https://docs.trysight.ai/ai-visibility/ai-search-mode Turn the services that make you money into keyword clusters phrased the way people ask ChatGPT, Claude, and Perplexity, then track and write for them. ## Why it exists Buyers increasingly skip Google and ask an AI assistant a full question: "what is the best free AI UGC video generator". Those assistants cite pages that answer that exact question. AI Search mode takes the topics your business already converts on, phrases them the way people ask AI assistants, and turns them into keyword groups, tracked prompts, and articles. ## Turning it on Open the Agent, then click the **AI Search** chip next to the mode picker in the composer. The chip is separate from Quick / Standard / Deep research: those control how hard the agent thinks, AI Search controls what it works on. The mode is saved with the chat, so an AI Search chat reopens in the mode and shows a sparkles badge in your chat list. A short intro appears with a **Start** button. Click it and the agent runs four steps. ## The four steps 1. **Discover.** The agent reads what it already knows about your site and infers your services, who buys them, and any conversion evidence. If Cometly is connected, it uses your top-converting pages. If not, it suggests connecting Cometly so results can later be attributed to these clusters. 2. **Interview.** Only for the gaps. Two or three quick questions at a time, each with tap-to-answer options. Answers are saved to your site's profile so you are never asked twice. 3. **Clusters.** For each priority service, the agent proposes clusters: one or two head commercial terms buyers type into Google plus four to eight question-format phrases people ask AI assistants. Anything you already cover is left out. 4. **Land.** One approval lands every cluster. Keywords join an existing keyword group when one already covers the topic; only new topics become a new group named `AI Search: {Cluster}`, marked with a sparkles icon on the Keywords page. Returning with a complete profile skips straight to clusters and extends your existing AI Search groups instead of duplicating them. ## Tracking the questions After the groups land, choose **Track these questions in AI search**. An interactive card lets you: * select or deselect each question, * pick the AI model per prompt and per platform, with the published credit price shown, * set the check cadence (weekly by default), * see credits per check and per week before you approve. Cadence applies to all tracked prompts on the site. Each prompt is linked to its AI Search group, so the dashboard's cluster view reports on them. ## How articles change Every keyword in an AI Search group is written with GEO instructions: the direct answer comes first, your brand is named as a recommended option with a concrete reason, and related questions get short sections. Question keywords become the article title word for word. Standard keywords are unaffected. No new article type is involved. With Autopilot on, choose **Write AI Search groups first** (also in Autopilot settings) to fill daily slots from these groups before any other keyword. ## Credits Cluster generation runs inside the agent chat and bills like any other chat turn. Tracked prompts bill the published flat credit price per model per check, shown on the card before you approve. Articles bill as usual. # Understanding Citations Source: https://docs.trysight.ai/ai-visibility/citations Learn what citations mean and how to use them to improve your GEO (Generative Engine Optimization). ## What Are Citations? A citation occurs when an AI model links to or references your website as a source in its response. Unlike a simple mention of your brand name, a citation means the AI is directing users to your content -- a much stronger signal of trust and authority. ## Why Citations Matter Citations are one of the most valuable signals in AI Visibility because they represent: * **Direct traffic potential** -- Users can click through to your site from AI responses * **Authority recognition** -- AI models only cite sources they consider trustworthy * **Content validation** -- Your content is being used as a reference for AI-generated answers * **GEO success** -- Citations are a key metric for Generative Engine Optimization ## The "You Appeared" Column When reviewing citations, you'll notice the **"You Appeared"** column: * **Green checkmark** -- Your domain appeared as a citation in the AI response for this prompt. This means the AI model linked to or referenced your content. * **Gray dash** -- Your domain did not appear as a citation for this prompt. This represents an opportunity to create or optimize content so that AI models cite you in the future. The "You Appeared" rate is a key metric -- it tells you what percentage of your tracked prompts result in the AI citing your content. ## Filtering Citations ### All Domains View citations across all domains mentioned in AI responses. This gives you a broad picture of which sources AI models trust in your industry. ### Content Types Filter by the type of content being cited -- blog posts, product pages, documentation, landing pages, and more. ### Sources Filter by the AI platform that generated the citation to understand which models are most likely to cite your content. ### You Appeared Toggle to show only prompts where your domain appeared (or didn't appear) as a citation. This is especially useful for identifying gaps and opportunities. ## Citation Details For each citation, you can view: * **Total appearances** -- How many times across all prompts your domain was cited * **Appeared rate** -- The percentage of prompts where your domain was cited * **Average position** -- Where your citation typically appears relative to other cited sources * **Prompts triggered** -- Which specific prompts led to your content being cited * **Competitors** -- Which competitor domains were cited alongside yours ## Using Citations to Improve GEO ### 1. Analyze What AI Trusts Look at which of your pages get cited most frequently. Identify the common characteristics: * What format are they in? (guides, how-tos, data-driven articles) * How comprehensive are they? * What makes them citable? Use these insights to create more content with similar qualities. ### 2. Close Citation Gaps Find prompts where competitors are cited but you aren't. These represent direct opportunities: * Create content that addresses the specific topic of the prompt * Ensure your content is more comprehensive and authoritative than competitors' * Structure your content so AI models can easily extract and cite key information ### 3. Create AI-Optimized Content Structure your content to be easily parsed and cited by AI models: * Use clear headings and subheadings * Include concise, factual statements that can be extracted as answers * Add structured data and schema markup * Maintain a clear, authoritative writing style ### 4. Build Authority AI models prioritize citing authoritative sources: * Earn backlinks from reputable sites in your industry * Get mentioned in industry publications and reports * Build a consistent track record of publishing expert content * Maintain accurate, up-to-date information ### 5. Monitor and Iterate Track your citation metrics over time: * Watch your "appeared rate" trend upward as you optimize * Identify which content changes led to new citations * Adjust your strategy based on what's working ## GEO Quick Wins Five actions you can take today to start improving your citations: 1. **Audit your top pages** -- Identify your most authoritative content and ensure it's well-structured for AI consumption 2. **Answer common questions** -- Create FAQ-style content that directly answers the prompts where you're not being cited 3. **Add structured data** -- Implement schema markup on key pages to help AI models understand your content 4. **Update outdated content** -- Refresh old articles with current information so AI models see you as a reliable, up-to-date source 5. **Study cited competitors** -- Analyze the content of competitors who are being cited and identify what you can do better ## Additional Strategic Uses Beyond improving your own citations, use citation data to: * **Discover industry trends** -- See which topics AI models are directing users toward * **Identify partnership opportunities** -- Find frequently cited sites you could collaborate with * **Inform content strategy** -- Let citation data guide your editorial calendar * **Measure content ROI** -- Track which content investments lead to AI citations ## Exporting Citations Export your citation data in CSV format for deeper analysis. The export includes all citation details, prompt associations, competitor data, and trend information for the selected time period. ## Best Practices * **Focus on "You Appeared" rate** as your primary citation metric * **Review new citations weekly** to understand what's driving them * **Compare citation patterns across AI models** -- each may prioritize different sources * **Track your average position** and work to move higher in citation lists * **Use citation gaps** as your content creation roadmap # AI Prompt Opportunities Source: https://docs.trysight.ai/ai-visibility/content-opportunities Discover content gaps where AI models recommend competitors instead of you. ## Overview **AI Prompt Opportunities** (formerly "Content Opportunities") analyze your tracked AI prompt data to identify topics where AI models recommend competitors but not you. They tell you what content to create so AI assistants start mentioning your brand. They live in the **AI Prompts** tab under **Visibility → Opportunities** at `app.trysight.ai/visibility/opportunities/ai-prompts`. > **Looking for opportunities based on Google Search Console data?** See [Search Opportunities](/ai-visibility/search-opportunities) — Content Gap, Refresh, Interlinks, and Rising Pages all derive from GSC. ## How It Works Sight AI examines your tracked prompt responses to identify: * **Topics where you're not being mentioned** but competitors are * **Questions AI models struggle to answer** about your brand or industry * **Gaps in your content library** that prevent AI models from citing you * **Trending topics** in your space that represent high-potential opportunities Each opportunity comes with a score, suggested article type, and rationale to help you prioritize and act quickly. ## Viewing Opportunities 1. Navigate to **Visibility → Opportunities** 2. Click the **AI Prompts** tab 3. Browse the list of identified opportunities 4. Sort by opportunity score to focus on the highest-potential topics first 5. Click any opportunity to see full details and take action ## Opportunity Details Each opportunity includes: ### Topic / Prompt The tracked prompt or topic that revealed the gap. This is the question AI assistants are getting that you should be the answer to. ### Opportunity Score A score from **0 to 100** that indicates the potential impact of creating content on this topic: * **80–100** — High impact. This topic has strong potential to improve your visibility. * **50–79** — Moderate impact. Worth pursuing, especially if it aligns with your content strategy. * **20–49** — Lower impact. Consider these as secondary priorities. * **0–19** — Minimal impact. Address these only if they fit naturally into your plans. ### Suggested Article Type The recommended format for the content: * **How-to guide** — Step-by-step instructional content * **Comparison article** — Side-by-side analysis of options * **Listicle** — Curated list of recommendations or resources * **In-depth guide** — Comprehensive coverage of a topic * **FAQ page** — Answers to commonly asked questions * **Case study** — Real-world examples and results ### Models Missing & Mentioned Each row shows which AI models *did* mention you for this prompt and which models *missed* you. This helps you target platform-specific gaps. ### Competitors Brands that are appearing in the AI responses for this prompt. Click the competitor count to see the full list and competitor positions. ## Acting on Opportunities ### Generate Article Use Sight AI's built-in article generation to quickly create a draft based on the opportunity. The generated article is optimized for AI visibility and can be edited before publishing. ### Bulk Accept Use the row checkboxes to select multiple opportunities, then click **Accept**. Accepted opportunities appear in the **Accepted** queue (combined with accepted Search Opportunities) for you or the [AI Opportunity Agent](/automations/overview) to act on. ### Reject If an opportunity isn't relevant to your business, reject it. Rejected opportunities won't reappear in subsequent worker runs. ### Hand Off to an Agent The [AI Opportunity Agent](/automations/overview) can work through your AI Prompt opportunity backlog automatically, creating articles on a schedule with budget caps and dedup checks. ## Prioritizing Opportunities When deciding which opportunities to pursue first: 1. **Start with high scores** — Focus on opportunities with scores above 70 for the biggest impact 2. **Align with business goals** — Prioritize topics that match your current marketing objectives 3. **Consider effort vs. impact** — Some opportunities may require less effort to address than others 4. **Check competitor activity** — Opportunities where competitors are actively gaining visibility deserve urgent attention 5. **Balance quick wins and long-term plays** — Mix easy-to-create content with more comprehensive pieces ## Refreshing Opportunities AI Prompt opportunities are updated as new prompt data comes in. As you publish content and your AI visibility changes, new opportunities may emerge while others are resolved. Check back regularly to keep your content strategy aligned with your AI visibility goals. ## Plan Availability | Plan | AI Prompt Opportunities | | -------- | ----------------------------- | | Starter | Not included — upgrade to Pro | | Pro | Full access | | Advanced | Full access | Autonomous [agents](/automations/overview) that act on AI Prompt Opportunities are available as **Automations** — included on **Pro and Advanced** plans and metered in AI credits (no separate add-on). ## Best Practices * **Review opportunities weekly** to stay ahead of content gaps * **Act on high-score opportunities quickly** before competitors fill the gap * **Track the impact** of content you create from opportunities — monitor changes in mentions, citations, and positions * **Pair AI Prompt opportunities with [Search Opportunities](/ai-visibility/search-opportunities)** — the same article often satisfies both an AI gap and a Google content gap * **Combine with [Outreach Opportunities](/ai-visibility/outreach-opportunities)** for maximum impact, then track every reply in the [Outreach Inbox](/ai-visibility/outreach-inbox) ## Next Steps * [Browse Search Opportunities](/ai-visibility/search-opportunities) for GSC-derived ideas * [Set up the AI Opportunity Agent](/automations/overview) to act on opportunities automatically * [Review your AI Visibility dashboard](/ai-visibility/dashboard) to see what's improving * [Open the Outreach Inbox](/ai-visibility/outreach-inbox) to manage outreach conversations alongside content work # AI Visibility Dashboard Source: https://docs.trysight.ai/ai-visibility/dashboard Navigate and interpret your AI Visibility metrics across Mentions, Positions, Citations, and Sentiment. ## Overview The AI Visibility dashboard is your central hub for understanding how AI models perceive your brand. It pulls together mentions, positions, citations, and sentiment into a single, deep-linkable surface. The dashboard lives at `app.trysight.ai/visibility` and opens to the **AI Mentions** tab by default. > **Looking for the combined GSC + AI overview?** That's the new top-level [Dashboard](/getting-started/dashboard) at `/dashboard`. The page you're reading documents the AI-side dashboard at `/visibility`. ## The Four Tabs Each tab has its own canonical URL so you can bookmark or deep-link directly into the view you care about: | Tab | URL | Purpose | | ---------------- | ----------------------- | -------------------------------------------------------------------------------------- | | **AI Mentions** | `/visibility/mentions` | How often your brand is mentioned across ChatGPT, Claude, Gemini, Perplexity, and Grok | | **AI Positions** | `/visibility/positions` | Where your brand ranks in AI answers to your tracked prompts | | **AI Citations** | `/visibility/citations` | External URLs cited alongside your brand — source pages, competitors, and authority | | **AI Sentiment** | `/visibility/sentiment` | How AI talks about your brand — positive, neutral, or negative tone | ## Key Metrics ### Visibility Score Your overall visibility score ranges from **0 to 100** and represents how prominently your brand appears across all tracked AI models and prompts. A higher score means AI models are mentioning, citing, and recommending your brand more frequently and more favorably. ### Mentions The total number of times AI models referenced your brand by name across all tracked prompts. [Learn more about Mentions](/ai-visibility/mentions) ### Positions Where your brand ranks in AI responses (1 = top recommendation). The **Top 3 Rate** card shows what percentage of your tracked prompts put you in the top 3 recommendations. [Learn more about Positions](/ai-visibility/positions) ### Citations The number of times AI models cited your website or content as a source. The **"You Appeared"** column shows whether your domain was included in the AI's response for each prompt. [Learn more about Citations](/ai-visibility/citations) ### Sentiment The overall sentiment of AI responses about your brand, measured on a scale from negative to positive. [Learn more about Sentiment](/ai-visibility/sentiment) ## Dashboard Sections ### Trend Charts Visualize how your key metrics change over time. The trend chart supports both **week** and **month** views, and automatically widens the date range when you switch to month view so you always have multiple data points. ### Per-Model Breakdown See how your visibility varies across different AI platforms: * **ChatGPT** — OpenAI's conversational AI * **Claude** — Anthropic's AI assistant * **Perplexity** — AI-powered search engine * **Gemini** — Google's AI model * **Grok** — xAI's conversational AI * **Google AI Overview** — AI-generated summaries in Google Search Each model may perceive your brand differently, so understanding the breakdown helps you target your optimization efforts. ### Recent Snippets The most recent AI responses to your tracked prompts. Click any snippet to expand the full response with brand mentions highlighted, plus the full prompt, model, and sentiment. ### Competitor Comparison Compare your visibility metrics side-by-side with your tracked competitors. See who's getting mentioned more, who has better sentiment, and where you have opportunities to close the gap. ## Filtering Your Data ### Date Range Select a specific time period to analyze. Use preset ranges (7, 14, 30, 60, 90, 180, 365 days). The default is 30 days for good chart visibility. ### AI Models Filter results by specific AI models to see how your visibility differs across platforms. ### Prompt Type Filter by prompt type to focus your analysis: * **Non-branded** — generic industry queries (the most valuable signal — these are organic recommendations) * **Branded** — prompts that include your brand name (shows how well AI models know your brand) * **All** — every tracked prompt regardless of type ### Sentiment Filter responses by sentiment type — positive, neutral, or negative — to quickly find areas of concern or success. ## Drilling Down Click any prompt or response to open the full detail view, showing: * The complete AI response with your brand highlighted * Which model generated it * The sentiment score * All competitors mentioned and their positions * The exact date and time From the Positions tab, click **Create Article** on any low-position row to spin up an article targeting that prompt. ## Exporting Data Export your AI Visibility data for further analysis or reporting. The dashboard supports exporting to CSV format, which includes all metrics, prompt details, and response data for the selected filters and date range. ## Best Practices * **Use the [combined Dashboard](/getting-started/dashboard) for daily check-ins** and the AI Visibility dashboard for deeper drill-down * **Compare across models** to understand platform-specific differences * **Use date ranges** to measure the impact of content changes or campaigns * **Filter by prompt type** to separate organic recommendations (non-branded) from brand-aware queries (branded) * **Track competitors** to benchmark your performance and identify opportunities ## Next Steps * [Set up tracked prompts](/ai-visibility/tracked-prompts) so the dashboard has data to show * [Browse Search Opportunities](/ai-visibility/search-opportunities) and [AI Prompt Opportunities](/ai-visibility/content-opportunities) to act on what the dashboard surfaces * [Connect your CMS](/integrations/wordpress) so articles created from the dashboard can publish automatically # Google AI Search Source: https://docs.trysight.ai/ai-visibility/google-ai-search See which of your Google queries are losing clicks to AI Overviews — and import Google's official AI-surface impression data. ## Overview **Google AI** is a tab in the Search section (Visibility → Search) focused on how Google's AI features — **AI Overviews** and **AI Mode** — affect your search traffic. As Google answers more queries directly with AI, clicks to the open web fall even when your ranking doesn't change. This tab helps you spot that erosion and act on it. It lives at `app.trysight.ai/visibility/ai-search` and requires a connected [Google Search Console](/integrations/google-search-console) property on a licensed site. The tab has two sub-views: * **AI Overview risk** — queries where Google is *likely* answering with an AI Overview and siphoning your clicks (inferred from your Search Console data). * **Imported AI impressions** — Google's *official* AI-surface impression numbers, brought in from a CSV export. Google doesn't expose AI Overview / AI Mode data through the Search Console API yet — the official report is impressions-only and UI-only. So Sight AI **infers** click loss from the GSC data you already sync, and lets you **import** the official numbers manually when you want them. ## AI Overview risk This is the default view. It surfaces queries where you rank well and get impressions, but your click-through rate has collapsed in a way that's characteristic of an AI Overview eating the click. ### What you see A summary strip shows the count of **at-risk queries** and the **estimated clicks at risk** this period. The table lists each at-risk query with: | Column | Meaning | | ------------------------ | ------------------------------------------------------------------------------------------ | | **Query** + reason badge | The search term and *why* it's flagged (see below) | | **Impressions** | Impressions in the selected window | | **Position** | Average Google position (it must actually rank to be flagged) | | **CTR now** | Current click-through rate | | **Benchmark** | The CTR we'd expect for this query (its own past CTR, or the expected CTR for its ranking) | | **Est. lost clicks** | `impressions × (benchmark CTR − current CTR)` — your estimated click loss | | **Actions** | **Create article** or **Track as prompt** | Rows are sorted by estimated lost clicks (biggest losses first), 25 per page. ### Why a query is flagged | Badge | What it means | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **CTR dropped vs prior period** | The query's CTR fell sharply (≥35%) versus the previous period while its ranking stayed roughly the same — a classic sign an AI Overview started intercepting clicks. | | **Low CTR for its ranking** | The query ranks near the top (position ≤ 8) but earns far less than the typical CTR for that position — clicks are going somewhere other than your result. | To keep signals meaningful, the view only considers queries with enough impressions and an average position of 20 or better. It needs at least **14 days** of Search Console history before it can flag anything. ### Acting on at-risk queries Each row gives you two one-click moves: * **Create article** — open the agent pre-filled to write (or strengthen) content for that query. Stronger, more comprehensive content is the best defense against losing the click outright. * **Track as prompt** — add the query to [AI Visibility](/ai-visibility/what-is-ai-visibility) as a tracked prompt, so you can monitor whether AI assistants mention you for it. (Respects your site's 500-prompt limit and runs an instant check.) AI Overview risk rows are computed live from your GSC data — they're **not** added to your [Search Opportunities](/ai-visibility/search-opportunities) queue. Act on them right from this tab. ## Imported AI impressions Google's Search Console UI has a **Generative AI** performance view that shows impressions on AI surfaces — but there's no API for it. The **Imported AI impressions** sub-view lets you bring those official numbers into Sight AI via CSV so you can see them alongside your articles. ### How to import In Search Console, open **Performance → Generative AI**, pick your date range, switch to the **Pages** tab, and export the CSV. In Sight AI, go to **Visibility → Search → Google AI → Imported AI impressions** and click **Import data**. Choose the **AI surface** you exported (AI Overviews, AI Mode, AI Overviews + AI Mode, or Discover), set the same date range, and upload the CSV (`.csv`, up to 5 MB / 5,000 rows). Once imported, the table lists each page with its AI impressions, linking to the matching Sight AI article where one exists. Sight AI keeps your **6 most recent imports per AI surface**, selectable from a dropdown, so you can compare periods. ## Tracked prompt suggestions (in the background) Separately from this tab, once your GSC history matures Sight AI periodically scans your top queries and suggests **tracked prompts** worth monitoring in AI Visibility. These appear as suggestions on **Visibility → Prompts** for you to accept — no action needed here. ## Related * [Search (Google) Section](/ai-visibility/search-section) — the full GSC query/page/article tables * [What is AI Visibility?](/ai-visibility/what-is-ai-visibility) — track how AI assistants mention your brand * [Search Opportunities](/ai-visibility/search-opportunities) — content gaps, refreshes, interlinks, and rising pages * [Connect Google Search Console](/integrations/google-search-console) — required for this tab to have data # Understanding Mentions Source: https://docs.trysight.ai/ai-visibility/mentions Track how often AI models mention your brand across ChatGPT, Claude, Perplexity, and more. ## What Are Mentions? A mention occurs any time an AI model references your brand by name in a response. Mentions are the most fundamental measure of your AI visibility -- if AI models aren't talking about you, your potential customers aren't hearing about you through these channels. ## Why Mentions Matter As more people turn to AI assistants for recommendations and research, mentions in AI responses become a critical part of brand awareness. Unlike traditional search where you control your listing, AI mentions are earned -- they reflect how well-known and relevant AI models consider your brand to be. More mentions mean: * **Greater brand awareness** among AI-assisted users * **More opportunities** for recommendations and referrals * **Stronger signals** that your content and brand are recognized by AI ## AI Platforms Tracked Sight AI monitors mentions across all major AI platforms: * **ChatGPT** -- OpenAI's widely-used conversational AI * **Claude** -- Anthropic's AI assistant known for detailed, nuanced responses * **Perplexity** -- AI-powered search engine that cites sources * **Gemini** -- Google's AI model integrated across Google products * **Grok** -- xAI's conversational AI with real-time information access * **Google AI Overview** -- AI-generated summaries that appear at the top of Google Search results ## Reading the Mentions Dashboard ### Platform Cards The mentions dashboard displays cards for each AI platform showing: * Total mentions for the selected period * Trend direction (increasing or decreasing) * Percentage change compared to the previous period ### Prompt Type Filter Filter mentions by prompt type to understand where your brand appears: * **Non-branded** -- Prompts that don't mention your brand name (e.g., "What's the best SEO tool?"). Mentions in non-branded prompts are especially valuable because they show AI models recommending you organically. * **Branded** -- Prompts that include your brand name (e.g., "Tell me about \[your brand]"). These show how well AI models know your brand. * **All** -- View all mentions regardless of prompt type. ### Date Range Select different time periods to analyze trends in your mentions. Compare week-over-week or month-over-month to track progress. ## Drilling Down into Mentions Click on any mention to see the full AI response, including: * The exact prompt that triggered the mention * The complete AI response text * Which AI model generated the response * The date and time of the response * Sentiment analysis of the mention * Whether your competitors were also mentioned This detail helps you understand the context in which your brand is being discussed. ## How to Improve Mentions ### Create Authoritative Content AI models learn from publicly available content. The more high-quality, authoritative content you publish, the more likely AI models are to reference your brand. * Publish comprehensive guides and articles in your domain * Maintain an active blog with industry insights * Create content that answers common questions in your space ### Build Your Brand Presence AI models consider overall brand prominence when deciding what to mention. * Get featured in reputable publications and industry sites * Build a strong social media presence * Earn backlinks from authoritative domains * Participate in industry discussions and events ### Study Competitors Use the competitor comparison features to understand why certain brands get mentioned more than others. * Analyze what content competitors have that you don't * Identify the topics where competitors appear but you're absent * Look for patterns in the types of prompts where competitors dominate # Email Forwarding for the Outreach Agent Source: https://docs.trysight.ai/ai-visibility/outreach-email-forwarding Forward collab requests, sponsorship pitches, and roundup invites to the Outreach Agent — including how to set up a friendly vanity address like seo@yourdomain.com. ## Overview Every site licensed for the Outreach Agent gets a unique inbound email address — something like `forward+ABC123XYZ@mail-sightai.com` — that funnels mail into your **Inbox**. You can find it during setup at the top of the Inbox left pane, and any time under **Inbox → Settings → Inbox → Forward emails to your agent**. Three patterns flow into the same bucket, and **all three appear in the Inbox**: * **Forwarded pitches.** A collab pitch lands in your normal inbox; you (or a teammate on a verified email) forward it to the bucket. The agent looks past the "Begin forwarded message" envelope, identifies the *original* prospect, drafts a reply, and (in autonomous mode) sends it to them — not to you. * **Forwarded non-pitches.** A teammate forwards something that *isn't* a backlink/listicle pitch — an auto-reply, a newsletter, a sales email, a customer message. We still store it in your Inbox so you don't lose visibility. If **Auto-handle forwarded and inbound emails** is on, the agent triages it and only replies when it looks like a real outreach conversation; otherwise it waits for you. * **Direct inbound.** A prospect (or anyone) emails the bucket address — or a vanity address that forwards to it — directly. The message lands in the Inbox so you can see it. If auto-handle is on, the agent can triage and reply; if it's off, click **Have the agent take this over** when you want the agent involved. In every case the prospect never sees the inbound bucket address. When you or the agent reply, the response goes out from your verified outbound domain. ## Use a friendly vanity address The default forward address is intentionally long and random because it doubles as authentication: only mail received at *your* address creates opportunities for *your* site. That's great for security but awkward to share publicly. The fix is to set up a vanity address on a domain you control that auto-forwards into the bucket. **Example:** Set `seo@trysight.ai` to forward to `forward+ABC123XYZ@mail-sightai.com`. Now you can list `seo@trysight.ai` on your site, in your email signature, in PR pitches, or on a "work with us" page — every reply lands in the agent's inbox automatically. The vanity address can be anything you want — `seo@`, `partnerships@`, `outreach@`, `links@`, `pr@`. You can wire up multiple vanity addresses to the same bucket if you want different "personalities" for different campaigns. This intake bucket is **separate** from the Reply-To mailbox you configure during [Outreach Email Setup](/ai-visibility/outreach-reply-tracking). That setup expects a real personal mailbox on your **dedicated outreach domain** (e.g. `john.smith@trysightai.com` when your real brand site is `trysight.ai`) so replies from prospects land in your own inbox first. The vanity address described here is just a forwarder pointed at this intake bucket — there's no mailbox behind it, and it doesn't have to live on your outreach domain. The two flows can coexist; pick whichever (or both) match how you want pitches and replies to surface. ## How to set it up by provider ### Google Workspace The simplest path uses an alias plus a forwarding filter: 1. In **Admin** → **Users**, open the mailbox you want to host the vanity address on (or pick a generic shared mailbox), and add `seo@yourdomain.com` as an **Alias**. 2. Sign in as that user, open **Gmail → Settings → Forwarding and POP/IMAP**, and add the inbound address (`forward+...@mail-sightai.com`) as a **Forwarding address**. Google will email a verification code to the inbound address — open the resulting conversation in your Sight AI Inbox to grab the code (or just click the verify link inside it) and confirm. 3. Open **Settings → Filters and Blocked Addresses → Create a new filter**. In **To**, enter `seo@yourdomain.com`. Click **Create filter**, then check **Forward it to** and pick the inbound address. For a vanity address with no real Gmail mailbox behind it, use a **Group** (Admin → Groups) addressed `seo@yourdomain.com` with the inbound address as its only member. Set the group's posting permissions to **Anyone on the web** so external prospects can email it. ### Microsoft 365 / Outlook Two common shapes: * **Mailbox + transport rule.** Add `seo@yourdomain.com` as an alias on an existing mailbox, then in **Exchange Admin Center → Mail flow → Rules** create a rule: *If the recipient is `seo@yourdomain.com`, redirect the message to `forward+...@mail-sightai.com`*. * **Mail-enabled distribution group.** In the Microsoft 365 Admin Center create a distribution group with the address `seo@yourdomain.com` and add the inbound bucket as the only member. Allow external senders. ### Cloudflare Email Routing (free, no mailbox required) If you don't host email at all, Cloudflare's free Email Routing is the easiest option: 1. In your Cloudflare dashboard, open the zone for `yourdomain.com` and go to **Email → Email Routing**. 2. Enable Email Routing and accept the MX record changes Cloudflare proposes. 3. Under **Destination addresses**, add the inbound address from **Inbox → Settings → Inbox → Forward emails to your agent**. Cloudflare will email a verification link to it — open the resulting conversation in your Sight AI Inbox to click through. 4. Under **Custom addresses**, create a route: **Custom address** `seo@yourdomain.com` → **Action** `Send to` → the inbound address. ### Zoho, Fastmail, cPanel, and other generic providers Most providers support a basic forwarder under **Email Forwarders**, **Aliases**, or similar: 1. **Source:** `seo@yourdomain.com` 2. **Destination:** the inbound address from **Inbox → Settings → Inbox → Forward emails to your agent** 3. Save, then send a test email to the vanity address from a verified team-member inbox to confirm it lands in your Inbox tab. If your provider supports **SRS (Sender Rewriting Scheme)**, leave it on — it keeps the original sender's domain intact for SPF on the forward. Most modern providers do this automatically. ## What lands in the Inbox vs. what the agent acts on The two questions are separate: * **Storage** — does the message show up in your Inbox? * **Action** — does the agent auto-reply? Storage is generous on purpose: you should see every authenticated email that hit your bucket address, even if it isn't a pitch the agent should handle. Action is conservative: the agent only auto-drafts and sends when the message looks like a real outreach pitch *and* the immediate sender is a verified team member. For everything else, the row sits in the Inbox flagged **Needs you** with a one-click **Have the agent take this over** button. | Scenario | Lands in Inbox | Agent auto-replies | | ---------------------------------------------------------------------- | -------------- | ---------------------------- | | Verified team member forwards a real pitch | Yes | Yes | | Verified team member forwards an auto-reply / newsletter / sales email | Yes | No (use Take over to opt in) | | External sender (e.g. a prospect) emails the bucket directly | Yes | No (use Take over to opt in) | | Mail that fails SPF *and* DKIM | No | — | | Mail to a rotated / unknown bucket address | No | — | If you've completed [Outreach Email Setup](/ai-visibility/outreach-reply-tracking), matched replies are threaded back to their existing Sight AI conversations first. New forwarded or direct inbound mail that doesn't match an existing conversation still lands in the Inbox pipeline, subject to the safeguards below and your **Auto-handle forwarded and inbound emails** setting. ## Limits and safeguards * **Authentication required.** Mail that fails both SPF and DKIM is dropped at the door — we don't store anything we can't authenticate to a real sending domain. * **500 inbound messages per site per day** are persisted to your Inbox. This is a high-water cap so a misconfigured forwarding rule or a flood of newsletters can't bloat your storage. Legitimate volume never approaches it; contact support if you do hit it. * **100 agent extractions per site per day.** Forwards from a verified team member that the agent acts on (the "real pitch" path above) are capped separately. Once the day's extraction budget is spent, additional forwards still land in the Inbox but the agent waits until tomorrow to act unless you click **Have the agent take this over** manually. * **Suppressions still apply.** When the agent does send a reply, the suppression list is checked first. If the original sender is suppressed, no reply goes out — the conversation is still visible in your Inbox. * **One conversation per pitch.** Each forwarded pitch becomes exactly one thread in the Inbox; the agent never fans out a single forward into multiple opportunities. ## Need to send a reply yourself? Every conversation in the Inbox supports a manual reply, including the ones the agent stored without acting on. Click into the thread, type into the composer (or hit **Draft with AI** to seed a first draft based on the conversation history), and **Send reply**. The reply goes out from your verified outbound domain just like an agent reply, and the agent stays paused on that thread until you turn it back on. ## Rotating the inbound address If you suspect the inbound address has leaked (you posted it in a forum, a contractor with access left, etc.), click **Rotate** on the **Forward emails to your agent** card in **Inbox → Settings → Inbox**. A new address is generated and the old one stops accepting mail immediately — there's no grace period. After rotating, **update your vanity-address forwarding rule** to point at the new bucket. Otherwise mail to `seo@yourdomain.com` will start bouncing. You can rotate as often as you like; the agent and existing opportunities are unaffected. ## Troubleshooting **Forwards aren't showing up in the Inbox.** * Confirm you're using the inbound address shown in the dashboard *today* — if you've rotated, the old address stops accepting mail. * Check the **All** filter in the Inbox left pane, not just **Needs you**. Forwards land in different filters depending on the sender and content. * Confirm the original mail passed SPF or DKIM at your forwarding hop. Mail that fails both is dropped at the door. * Check that you haven't hit the 500/day storage cap for the site. **The agent isn't auto-replying to a forward I sent.** Auto-reply only fires when (a) the forwarder is a verified team member *and* (b) the message looks like a real backlink, listicle, or collab pitch. For everything else the conversation lands in the **Needs you** filter with a **Have the agent take this over** button — click that to draft and send an agent reply on demand. **The agent is replying to me, not to the prospect.** This almost always means the forward stripped the original headers. Some clients (notably mobile Outlook) only quote the body and lose the `From:` of the original message. Two fixes: * Forward as an attachment (the original `.eml`) instead of inline. Most desktop clients support this under **Forward as Attachment**. * Use a server-side forward (Cloudflare Email Routing, Google Workspace routing rule, an Exchange transport rule) instead of clicking Forward in your client. Server-side forwards preserve the original headers cleanly. **Cloudflare or Google asked me to verify the destination address.** The verification email lands in your Sight AI Inbox as a new conversation. Open it to grab the verification link or code. (The Outreach Agent doesn't auto-click links in stored conversations, so this is safe.) **Conversation created but no draft reply.** This is expected when the forwarder isn't a verified team member, when the body was mostly quoted text from a long thread, or when the agent judged the message non-actionable (auto-reply, newsletter, sales email). The conversation is still created so you don't lose the lead. Click **Draft with AI** in the composer to seed a draft you can edit, or click **Have the agent take this over** to put the agent on the thread. ## Related * [Outreach Inbox](/ai-visibility/outreach-inbox) — the three-pane Inbox UI: filters, manual replies, AI drafts, take-over, retry. * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — the broader Outreach Agent surface, including author email lookup and pitch drafting. * [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) — end-to-end setup: dedicated outreach domain, DNS records, inbox setup, and the forwarding relay that routes replies to your real mailbox while keeping the agent in the loop. * [Automations overview](/automations/overview) — how all the autonomous agents fit together. # Outreach Inbox Source: https://docs.trysight.ai/ai-visibility/outreach-inbox Read, reply to, and triage every outreach conversation in one place — agent replies, manual replies, forwarded pitches, and direct inbound from prospects. ## Overview The **Inbox** is where every outreach conversation for a site lives — the threads the Outreach Agent started, the replies recipients sent back, the pitches you forwarded in from your normal inbox, and the direct mail prospects sent to your bucket address. Open it from the **Library** (the **Inbox** card shows a count of threads waiting on you), or go to `/inbox` directly. The Inbox is also the **only place you configure the Outreach Agent**. The agent is not an Automation — there is exactly one per site, and you turn it on, set up its email, and shape how it writes from the **Settings** button in the Inbox header. See [Configuring the Outreach Agent](#configuring-the-outreach-agent) below. The view is three panes: * **Left** — the conversation list, with filters and search, plus the **Settings** button. * **Center** — the active thread, with every inbound and outbound message, engagement counts, and a composer. * **Right** — actions for the active thread (pause AI, mark resolved, hand off to the agent, block the contact) and context (the originating opportunity, the agent's reasoning). ## Configuring the Outreach Agent Click **Settings** in the top-left of the Inbox to open the Outreach Agent settings. Everything the agent needs lives in one modal, organized into tabs: * **Domain** — your **sending domain pool**. Add one or more outbound domains, complete DNS verification, and **Assign** the one the agent sends from. See [Sending domains](#sending-domains) below and the full [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) walkthrough. * **Inbox** — reply tracking: the Reply-To mailbox + forwarding relay so replies route back to the agent, the **Forward emails to your agent** address, and the **Send from** selector (which assigned domain the agent uses). * **Agent** — the on/off switch plus a small set of controls: a **context / guidance** box (plain-English instructions the agent follows on every email), the **voice**, the **sender name** (used in the From line and signature), how many **emails per run**, and an optional **monthly email cap**. The agent must be **on** to send, the switch stays disabled until a sending domain is verified, and it runs on a fixed schedule — **Monday–Friday at 9:00 AM ET** — so there are no cron settings to manage. * **Outreach** — toggles for proactive cold outreach (e.g. listicle placement pitches). * **Suppressions** — your team-wide do-not-contact list: auto-unsubscribe behavior, manual blocking, and **bulk import** (see [Suppressions](#suppressions)). Click **Save settings** to apply. Outreach used to be set up under Automations. It now lives entirely in the Inbox — there is nothing to configure on the Automations page. **Which domain to add.** If you'll run cold outreach (the **Outreach** tab), the sending domain must be a **dedicated domain, not your main brand domain** — cold sending can poison your primary domain's deliverability, the same reason lemlist and Instantly insist on it. If you're only using the agent to reply to people who emailed you first (forwarded pitches and inbound replies, with the Outreach tab off), your **main domain is fine** — those replies are warm, expected mail. The agent sends everything from one assigned domain, so if cold outreach is in play, make it the dedicated one. See [Outreach Email Setup](/ai-visibility/outreach-reply-tracking). ## What's in the list Every row shows the recipient, the latest subject, a one-line preview of the most recent message, and a status pill. ### Filters The left rail groups filters into **Inbox**, **In progress**, and **Closed**, and every filter shows a **live count** that updates in real time as mail arrives and threads change state. | Group | Filter | What it shows | | --------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------- | | **Inbox** | **All** | Every active (non-spam, unresolved) thread for this site. | | | **Unread** | Threads with at least one unread inbound message. | | | **Needs you** | Threads the agent escalated for your review, or forwarded mail it stored without auto-replying. Start here every morning. | | **In progress** | **Open** | Active threads where the agent is on. | | | **Waiting** | Threads where you sent the most recent reply and are waiting on the recipient. | | **Closed** | **Resolved** | Closed conversations. | | | **Declined** | Conversations marked declined — the contact is added to your team-wide suppression list automatically. | | | **Stored** | Forwarded mail the agent kept for reference but didn't act on. | | | **Spam** | Inbound flagged as malicious by Sight AI's link safety scan — the agent doesn't act on these. | ### Unread state A blue dot and bold recipient name flag threads with unread inbound messages. Opening a thread marks it read for the whole team. The **Inbox** card in the Library tracks the number of threads with at least one unread message — if it's at zero, you're caught up. ### Entry source badges Below the subject line you'll see one of: | Badge | Meaning | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *(no badge)* | Started by the Outreach Agent's outbound queue. | | **Forwarded** | A team member forwarded a real pitch; the agent is acting on it. | | **Forwarded · stored** | A team member forwarded something we judged non-actionable (auto-reply, newsletter, sales email). The agent didn't reply; it's there for your review. | | **Direct** | A prospect (or someone external) emailed the bucket address directly. The agent is paused by default — click **Have the agent take this over** if you want it on. | ### Search The search box matches against the recipient email, the recipient's name, and the latest subject. Searches run server-side after a quarter-second pause, so it's safe to type fast. ## What's in the active thread The center pane is a top-to-bottom log of every message in the conversation: * **Outbound bubbles** sent by the agent are tagged **AI**; manual replies you wrote are tagged **You**. * **Inbound bubbles** are tagged **Them**. * Each bubble shows delivery, opens, and clicks (the agent tracks these via Mailgun's engagement webhook). * Failed sends show a **Failed** badge with the failure reason on hover; outbound failures get an inline **Retry** button that re-sends the same content under a fresh dedup key — see *Retrying a failed send* below. If a thread carries a forwarded message, the header shows both addresses: who the prospect is *and* who on your team forwarded it. Replies still go to the prospect. ## Replying You can reply at any time, and the agent stays paused on that thread until you turn it back on so you don't accidentally race the agent. ### Manual reply Click into the composer at the bottom of the thread and type. Cmd/Ctrl + Enter sends. The reply goes out from your verified outbound domain — the recipient sees the same identity as an agent reply. **Attach images.** Click the paperclip to attach an image (JPEG, PNG, GIF, or WebP, up to 5 MB) as a real email attachment, or paste an image to embed it inline in the body. Thumbnails appear in the composer and on the sent message. ### Draft with AI Click **Draft with AI** to fill the composer with a fresh draft based on the conversation history, your configured voice, and your outreach guidance. Edit the draft and click **Send reply** when you're ready. The draft uses your team's monthly LLM budget the same way the agent's drafts do. ### Have the agent take this over For threads in **Needs you** status (forwarded non-pitches, direct inbound from external senders), the right pane shows a violet **Have the agent take this over** button. Click it and the agent flips into action: it triages the latest inbound, drafts a reply, and (subject to your delay and monthly limits) sends it. The agent picks up on whatever message is most recent, so a late inbound during the agent's setup window won't get missed. This requires a **verified sending domain**, which you add from the Inbox **Settings** button (see [Configuring the Outreach Agent](#configuring-the-outreach-agent)). Without one the agent has nowhere to reply from, and the button refuses with a clear message. ## Right-pane controls ### AI auto-replies (per thread) The card at the top shows whether the agent is **on** or **paused** for *this* thread. Toggle it any time. Pausing here doesn't affect the agent on other threads — it's a per-conversation override that's useful when you want to handle a thread personally without disabling the agent everywhere. ### Status * **Mark resolved** — the conversation is done; the agent stops working on it. * **Mark declined** — the conversation is done *and* the contact is added to your team-wide suppression list automatically. The agent will not pitch this contact from any site on your team going forward. * **Reopen conversation** — undoes a resolved or declined state and turns the agent back on (subject to your auto-reply settings). ### Tag the result (wins) When outreach lands a win, tag it in the **Result** card so it shows up in your [Results](#results) view. Choose one: * **Backlink acquired** * **Guest post published** * **Brand mention** Tagging a result also **marks the conversation resolved** automatically. Use **Clear result** to remove the tag (which leaves the status unchanged). If the backlink verifier already detected a link, the card nudges you to confirm it with **Backlink acquired**. ### Move to trash The trash icon in the thread header removes a conversation from your Inbox, counts, and Results. The history is **kept** (not permanently deleted) so the agent won't accidentally re-contact that recipient later. Trashed threads are hidden everywhere and can't be replied to or tagged. ### Block this contact Adds the recipient's email to your team-wide suppression list without resolving the conversation. Useful when someone asks you to stop emailing them — the agent will refuse to send to that address going forward, on any site on the team. ### Agent reasoning For threads where the agent has replied, this card shows what the agent thought it was doing — the triage category (acceptance, decline, negotiation), whether the agent decided to auto-resolve, and any skip reasons that came up along the way. Useful when you want to understand "why did the agent reply that way" without reading raw logs. ### Opportunity For agent-initiated threads, the right pane shows the article the agent pitched: the URL, the domain, the domain rating, and a link to open the article in a new tab. ## Results The **Results** view (the trophy icon at the bottom of the Inbox rail, or `/inbox/results`) is the highlight reel of everything your outreach has landed. It lists every conversation you've [tagged with a result](#tag-the-result-wins), newest first, with summary counts for: * **Backlink acquired** * **Guest post published** * **Brand mention** Each row shows the recipient, domain, domain rating, and a link to the target page, plus a **View** button back to the thread. Tag wins as they happen and this view becomes a running record of outreach ROI you can share with stakeholders. ## Sending domains The agent sends from a **pool** of outbound domains you manage under **Settings → Domain**. You can add more than one domain, but the agent sends every email — cold pitches and replies alike — from the **single assigned domain** (set under **Settings → Inbox → Send from**). * **Add** a domain, then complete DNS verification (SPF, DKIM, DMARC). * **Verify** it — a freshly verified domain can be auto-assigned to the agent. * **Assign** the domain you want the agent to send from; the others stay in the pool as backups. Reply routing and the forward address remain one per site. For the full registrar-by-registrar walkthrough, see [Outreach Email Setup](/ai-visibility/outreach-reply-tracking). ## Suppressions Your **suppression list** is the team-wide do-not-contact list — the agent refuses to email any address on it, from any site on your team. Manage it under **Settings → Suppressions**: * **Auto-unsubscribe** — recipients who ask to stop are suppressed automatically; marking a thread **declined** also adds the contact. * **Block a contact** — add a single address by hand. * **Import a list** — paste addresses (one per line or CSV) or upload a `.csv` / `.txt` file to suppress in bulk (up to 5,000 addresses at a time). Imported entries are reasoned as **manually blocked** and never downgrade a stronger reason like a hard bounce or spam complaint. * **Allow again** — lift a suppression from the live list. Each entry shows a reason: **Blocked** (manual), **Unsubscribed** (opted out), **Bounced**, or **Complained**. ## Retrying a failed send Outbound messages can fail when Mailgun rejects the recipient address, when your sending domain is unverified, when an upstream blip happens, or when the address is on a suppression / hard-bounce list. Failed bubbles show a **Retry** button. What clicking it does: * Re-sends the same subject and body under a new dedup key — so the original failure won't block the new attempt while still preventing accidental double-sends if Mailgun actually accepted the original. * Only retries when the failure looks recoverable. Suppressions, hard bounces, and "invalid recipient" errors are skipped with a clear message — fix the underlying issue (lift the suppression, correct the address) before retrying. * Caps at three retries per message so a stuck button can't spiral. ## Sending domain warnings If the Inbox shows an amber banner across the top — *"Sending domain … is not verified"* — manual replies and agent sends will fail until you finish DNS setup. Click **Open settings** to open the Inbox **Settings**, where the **Domain** tab walks you through the SPF / DKIM / DMARC steps. See [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) for the end-to-end walkthrough, including registrar-specific DNS instructions. ## Forward address During setup, a card at the top of the conversation list shows your inbound bucket address — the one you give to teammates for forwarding pitches and the one you can plug into a vanity address like `seo@yourdomain.com`. Click **Copy** to grab it without leaving the page. You can always find (and **Rotate**) this address under **Settings → Inbox → Forward emails to your agent**. Full setup steps live in [Email Forwarding for the Outreach Agent](/ai-visibility/outreach-email-forwarding). ## Keyboard shortcuts The Inbox is built for keyboard-first triage. Shortcuts are active whenever you're not focused on a text field. | Key | Action | | ------------------------------ | ----------------------------------------------------- | | `j` / `k` | Move to the next / previous conversation in the list. | | `r` | Focus the reply composer. | | `e` | Mark the active thread resolved. | | `[` / `]` | Cycle the status filter. | | `/` | Focus the search box. | | Cmd/Ctrl + Enter (in composer) | Send the reply. | ## Realtime updates The Inbox refreshes itself live — new inbound mail, agent sends, opens, and clicks all appear without a manual refresh. If your network or browser blocks the live connection, the Inbox falls back to a 30-second poll so it never goes more than half a minute stale. ## Related * [Email Forwarding for the Outreach Agent](/ai-visibility/outreach-email-forwarding) — set up the bucket address (and friendly vanity addresses). * [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) — end-to-end setup: dedicated outreach domain, DNS records, inbox setup, and the forwarding relay that routes replies to your real mailbox while keeping the agent in the loop. * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — the broader Outreach Agent surface, including author email lookup and pitch drafting. # Outreach Opportunities Source: https://docs.trysight.ai/ai-visibility/outreach-opportunities Discover link building opportunities from sources AI models recommend. ## Overview Outreach Opportunities identifies websites and domains that AI models frequently cite and recommend in your industry. These represent high-value link building and partnership opportunities -- if AI models trust these sources, getting featured on them can boost your own AI visibility. ## How It Works Sight AI analyzes citations across all tracked AI model responses to find: * **Frequently cited domains** in your industry that you're not yet featured on * **High-authority sources** that AI models trust and reference regularly * **Relevant websites** where a mention, backlink, or guest post could improve your visibility * **Contact information** to help you reach out efficiently ## Viewing Opportunities 1. Navigate to **Visibility** → **Opportunities** 2. Click the **Outreach** tab (URL: `/visibility/opportunities/outreach`) 3. Browse the list of identified outreach targets 4. Sort by domain rating, relevance, or industry 5. Click on any opportunity to see full details and begin outreach ## Opportunity Details Each outreach opportunity includes: ### Website Information * **Domain** -- The website URL * **Domain Rating (DR)** -- A measure of the site's authority and backlink strength * **Industry** -- The primary industry or niche of the website ### Context Details on why this opportunity was identified, including: * Which AI prompts triggered citations to this domain * How frequently AI models cite this source * What type of content on this domain is being cited * How this source relates to your brand and industry ### Contact Information (Advanced) Author and editor contact discovery requires the **Advanced** plan. When entitled, every outreach opportunity unlocks: * **Author name** — pulled from the article byline (JSON-LD, OpenGraph, microdata, or in-body "By Jane Doe" text). This is free. * **Author email** — verified through Hunter's Email Finder + Email Verifier so you only see deliverable addresses, not guesses. * **Provenance label** on each contact (`Verified via Hunter`, `Scraped from byline`, etc.) so you know how strong the signal is before you write to them. **How it gets populated** Author contact info is filled in two ways once your team is on the **Advanced** plan: 1. **Automatically by the Outreach Agent** as it processes each opportunity on its scheduled run. The agent uses the same byline scrape → Hunter lookup pipeline described above. 2. **On demand from the opportunity modal.** Opening any outreach row that doesn't yet have a contact triggers a lookup right away — no need to wait for the next agent tick. This is especially useful for opportunities that already existed in your queue before you upgraded. **Cost guardrail** Hunter usage is metered in credits and capped per site per month — a built-in guardrail (100 lookups by default; adjustable via the API for advanced users). When the cap is reached, the modal shows a clear "monthly cap reached" message instead of silently spending. Lookups for rows that already have contact info (or that previously concluded "no match") are free — we never re-spend on the same row. **Without the Advanced plan** The Outreach Opportunities tab still works on lower tiers — you'll see the article, the domain, the DR, and the article type — but the Author column is replaced with an **Advanced** upgrade prompt, and opening the modal shows the upgrade card instead of a contact email. The API returns `outreach_plan_required` for un-entitled teams; a separate `monthly_cap_reached` response signals the Hunter monthly cap was hit. ## Outreach Workflow ### Tracking Status Each outreach opportunity has a status to help you manage your pipeline: * **New** -- Freshly identified opportunity, not yet contacted * **Contacted** -- You've sent an initial outreach message * **Replied** -- The contact has responded to your outreach * **Success** -- The outreach resulted in a link, mention, or partnership * **Declined** -- The contact declined your outreach request Update the status as your outreach progresses to keep your pipeline organized. ### Email Generation Sight AI can generate personalized outreach email drafts based on: * The website and contact you're reaching out to * Your brand and value proposition * The specific context of why this outreach makes sense * Common outreach best practices Review and customize the generated email before sending to ensure it matches your voice and approach. Once sent, every reply lands in the [Outreach Inbox](/ai-visibility/outreach-inbox) — read the thread, hit **Draft with AI** for a follow-up draft, or let the autonomous Outreach Agent handle it. ### Adding Notes Add notes to any outreach opportunity to track: * Conversation history and key points discussed * Follow-up reminders and next steps * Internal notes about the opportunity's priority or relevance * Any specific requirements or preferences the contact has mentioned ## Prioritizing Outreach When deciding which opportunities to pursue first: 1. **Domain Rating** -- Higher DR sites have more authority and can provide stronger signals to AI models 2. **Relevance** -- Sites closely related to your industry and content are more likely to result in successful outreach 3. **Citation frequency** -- Domains that AI models cite frequently carry more weight 4. **Achievability** -- Consider how realistic it is to get featured on each site 5. **Existing relationships** -- If you already have a connection to the domain, prioritize it ## Best Practices ### Personalize Your Outreach Generic outreach gets ignored. Reference specific content on their site, explain why a collaboration makes sense, and offer clear value to the other party. ### Follow Up Most successful outreach requires at least one follow-up. Set reminders and track your follow-up schedule using the status and notes features. ### Track Everything Keep your outreach statuses up to date so you can measure your success rate and identify patterns in what works. ## Plan Limits Outreach is **Advanced-exclusive**: | Plan | Outreach Opportunities | | -------- | ---------------------- | | Starter | — | | Pro | — | | Advanced | 250 | The autonomous **Outreach Agent**, the **[Outreach Inbox](/ai-visibility/outreach-inbox)**, and Hunter-backed author email lookup require the **Advanced** plan. See [Choosing Your Plan](/billing/choosing-your-plan). ## Combining with Other Opportunities For maximum impact, pair outreach opportunities with content opportunities: * Create content based on an [AI Prompt opportunity](/ai-visibility/content-opportunities) or [Search opportunity](/ai-visibility/search-opportunities) * Use outreach opportunities to get that content featured or linked on high-authority sites * Monitor how the combination of new content and new backlinks affects your AI visibility Looking for backlinks without cold email? The [Collaboration network](/collaboration/overview) lets you trade guest posts, listicle spots, and links with other Sight AI sites using credits — available on any paid plan, not just Advanced. ## Outreach Agent (Advanced) The merged **Outreach Agent** is available on the **Advanced** plan and turns the manual outreach workflow into an autonomous flow: * **Author email + name lookup** populates each opportunity row (see "Contact Information" above). * **Personalized pitch drafting** in your configured voice, using the article context and your site's value proposition. * **Sending from your own dedicated outreach domain** — registered separately from your main brand domain (e.g. `trysightai.com` if your real site is `trysight.ai`) so cold-send reputation stays isolated from the mail your customers and transactional flows rely on. Sight AI provisions the Mailgun SPF and DKIM records for you; you'll also want to add a DMARC record (Gmail, Outlook, and Yahoo all look for it, and the dashboard surfaces a recommended starter record). See [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) for the end-to-end walkthrough. * **Reply triage** with suppressions, the locked Mon–Fri 9 AM ET send window, and per-conversation reply caps. Inbounds outside the window are deferred until the next slot; weekends are always skipped. * **An [Inbox](/ai-visibility/outreach-inbox)** that surfaces every conversation — agent-initiated threads, replies coming back from prospects, pitches your team forwarded in, and direct inbound to your bucket address — with manual reply, AI draft, take-over, and retry controls. * **Optional inbox setup** to route replies to a personal mailbox on your dedicated outreach domain (e.g. `john.smith@trysightai.com`) instead of the Sight AI Inbox, while still letting the agent triage forwarded copies of those replies in the background. Configured as part of the [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) flow. You turn the agent on and configure it entirely from **[Inbox](/ai-visibility/outreach-inbox) → Settings** — it is not an Automation, there is exactly one per site, and it runs on a fixed Mon–Fri 9 AM ET schedule. The Agent works two pitch shapes, both enabled by default: * **Backlink pitches** — high-DR articles mentioning competitors, asking for a mention/link. * **Listicle pitches** — existing roundup articles, asking to be added to the list. When your team isn't on Advanced, the Outreach Opportunities tab still surfaces the rows themselves (so you can do outreach manually) but the author contact discovery and the autonomous send/reply flow stay locked behind the upgrade. ## Sending domain setup The Outreach Agent sends from a domain **you** register only for outbound — never from a shared platform address, and never from your primary product domain. Cold outreach and your transactional / marketing mail need to keep their DNS, sender reputation, and authentication records isolated; if a prospect marks a cold email as spam, you don't want that reputation hit landing on receipts, password resets, or your newsletter. The Agent **refuses to send** until a dedicated outbound domain is configured AND DNS-verified in **Inbox → Settings → Domain**. The full walkthrough — registering a dedicated domain, creating a personal mailbox on it, pasting the Mailgun-generated SPF / DKIM / DMARC records into your registrar (with provider-specific guides for GoDaddy, Cloudflare, Namecheap, Squarespace, and others), verifying the domain, and wiring replies back through inbox setup — lives in a single positioned end-to-end guide: Five-step setup covering the dedicated domain, the personal mailbox (Google Workspace recommended), the DNS records with registrar-specific instructions, domain verification, and the inbox setup + forwarding relay that lets replies land in your own inbox while still being triaged by the agent. The short version of *why* to use a dedicated domain: * **Same name, different TLD** — register a fresh `.com` (or other common TLD) that reads like your brand on a different TLD. Examples: `trysightai.com` if your real site is `trysight.ai`; `acmeio.com` if your site is `acme.io`. * **Avoid suffixes** like `-outreach`, `-mail`, `-team` — they read as a marketing domain to recipients and undermine the personal-feeling From line. * **Don't reuse your main brand domain or a subdomain of it** — even if it already has SPF, DKIM, and DMARC configured. Cold outreach generates bounces and complaints at rates your transactional mail never does, and those signals follow the domain. Do not reuse your primary product domain (or a subdomain of it) as the outbound domain, even if it already has SPF, DKIM, and DMARC configured. A dedicated outbound domain is the only way to keep cold-send reputation from poisoning your customer and transactional mail. # Outreach Email Setup Source: https://docs.trysight.ai/ai-visibility/outreach-reply-tracking End-to-end setup for the Outreach Agent: register a dedicated outreach domain, create a personal mailbox, authenticate with Mailgun, configure inbox setup, and forward replies back to Sight AI. ## Overview The Outreach Agent sends real outreach mail on your behalf. Setting it up cleanly is what protects the deliverability of every other email your business sends — receipts, password resets, newsletters, customer support — and what lets recipients reply to a real person at your team rather than a Sight AI relay address. The agent does two jobs, and they have different domain needs: * **Cold outreach** (the **Outreach** tab) — proactively pitching prospects who've never heard from you. This is the risky one for deliverability, so it belongs on a **dedicated domain, never your main brand domain.** It's the same playbook [lemlist](https://lemlist.com) and [Instantly](https://instantly.ai) drill into every user: isolate cold sending so it can't drag your primary domain down. * **Reply handling** (the **Agent** tab) — answering people who emailed *you* first: forwarded cold pitches and inbound replies. This is warm, expected mail, so your **existing main domain is perfectly fine** here. Nobody flags a reply to a conversation they started. The setup is a positioned five-step flow that touches your **domain registrar**, your **email provider**, and **Sight AI**: 1. **Register a fresh, dedicated domain** just for outreach and create a personal mailbox on it (we recommend Google Workspace). 2. **Add Mailgun's DNS records** to your domain so we can send authenticated mail. 3. **Verify the domain** in Sight AI (DNS propagation usually takes 5–30 minutes, occasionally a few hours). 4. **Configure inbox setup** in Sight AI so replies land in your real mailbox instead of the Sight AI Inbox. 5. **Forward a copy** of every incoming reply back to Sight AI so the agent can triage and follow up. Plan for \~30 minutes of hands-on work plus some DNS propagation wait time. You won't need to babysit the wait — start it once and come back when DNS resolves. This is a one-time setup per site. Once it's done, the agent sends and receives indefinitely with no further configuration. ## Step 1 · Register a new dedicated domain (and create a mailbox) The first and most important rule: **don't reuse your main brand domain**. Cold outreach generates bounces, spam complaints, and unsubscribes at rates your transactional and customer-facing mail never does. Those signals follow the domain — a few weeks of cold sending can quietly poison deliverability for your password resets, receipts, newsletters, and customer support replies. The pattern we recommend is **same name, different TLD** — a fresh registration that reads like your brand but lives on its own DNS island. | Real brand site | Recommended outreach domain | Example mailbox | | --------------- | ----------------------------------------- | ---------------------------- | | `trysight.ai` | `trysightai.com` | `john.smith@trysightai.com` | | `acme.io` | `acmeio.com` (or `acme.com` if available) | `john.smith@acmeio.com` | | `widget.app` | `widgetapp.com` | `john.smith@widgetapp.com` | | `northstar.co` | `northstarco.com` | `john.smith@northstarco.com` | Avoid `-outreach`, `-mail`, or similar suffixes — they read as a marketing domain to recipients and undermine the personal-feeling From line we're trying to build. Register the domain at any reputable registrar (GoDaddy, Cloudflare, Namecheap, Squarespace Domains, Hover, Name.com — they're all fine). Do not reuse your primary product domain (or a subdomain of it) as the outbound domain, even if it already has SPF, DKIM, and DMARC configured. Cold outreach generates bounces, spam complaints, and unsubscribes at rates your transactional mail never does, and those signals follow the domain. A dedicated outbound domain is the only way to keep one from poisoning the other. **The exception — warm reply handling.** This dedicated-domain rule is about *cold outreach*. If you're only using the agent to reply to people who emailed you first — forwarded pitches and inbound replies handled on the **Agent** tab, with the **Outreach** tab left off — that's warm, expected mail, and your existing main domain is perfectly fine. The reputation risk comes from *cold* sending, not from answering someone who already reached out. One caveat: the agent sends *everything* from a single assigned domain, so if you'll run cold outreach at all, make that one domain the dedicated one. ### Set up email on the new domain (Google Workspace recommended) Once the domain is registered, set up email on it. **Google Workspace is what we recommend** — it's the most reliable, gives you a real Gmail-style inbox UI, and the forwarding rule that closes the loop in Step 5 is a single setting. Other options that work fine: * **Microsoft 365** — solid alternative; the forwarding setup is a couple more clicks. * **Cloudflare Email Routing** (free) — forward-only, no inbox UI of its own. Use this if you only need a forwarding address and have a separate inbox to forward into. * **Zoho Mail** (free tier available) — solid budget option. * **Fastmail** — paid, well-regarded for deliverability. Whichever you pick, **create a real personal mailbox using a real first name** — `john.smith@trysightai.com`, not `outreach@trysightai.com` or `hello@trysightai.com`. Cold outreach replies far better when the From line reads as a person rather than a sales tool. This same mailbox becomes your Reply-To in Step 4 and the source of the forwarding rule in Step 5, so set it up once and you'll reuse it across the rest of the flow. Don't reuse your everyday inbox for the outreach mailbox. The forwarding rule in Step 5 sends a copy of *every* incoming message to Sight AI — non-outreach mail is silently discarded, but giving Sight AI access to your daily inbox is unnecessary and surfaces a privacy footprint you don't need. ## Step 2 · Add Mailgun's DNS records In Sight AI, open the **Inbox**, click **Settings** in the header, and open the **Domain** tab to add the dedicated outreach domain you just registered. (You can keep more than one domain in the pool; the agent sends from the single domain you **Assign**.) Sight AI provisions it in Mailgun and surfaces a table of DNS records you'll paste into your domain registrar: | Record | Purpose | Who provisions it | | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | **SPF** (TXT) | Declares Mailgun as an allowed sender for your domain. | Sight AI generates the exact record for you. | | **DKIM** (TXT on `smtp._domainkey.`) | Cryptographically signs outgoing messages so receivers can verify they weren't tampered with. | Sight AI generates the exact record for you. | | **Tracking CNAME** (`email.`) | Powers click and open tracking on outbound mail. | Sight AI generates the exact record for you. | | **DMARC** (TXT on `_dmarc.`) | Tells receivers what to do when a message fails SPF or DKIM, and where to send aggregate authentication reports. | **You add this one yourself** — Sight AI surfaces a recommended starter you can copy. | Each row in the dashboard has a copy button so you can paste the values into your registrar verbatim. The starter DMARC record looks like: ```text theme={null} Type: TXT Name: _dmarc. Value: v=DMARC1; p=none; rua=mailto:postmaster@ ``` `p=none` is **monitor-only mode** — no legitimate mail is rejected while you're still dialling things in. Tighten it to `p=quarantine` or `p=reject` once your DMARC reports confirm everything legitimate is passing alignment. Mailgun only provisions SPF and DKIM. **DMARC is not generated, not verified, and not enforced by Mailgun**, but every major inbox checks it — skipping it is the single most common reason cold outreach from a brand-new domain ends up in spam. ### Add the records at your registrar The fields are universal across registrars even if the UI labels differ. Pick yours: #### GoDaddy 1. Sign in and go to **My Products → Domains**, then click **DNS** next to your outreach domain. 2. For each Sight AI record, click **Add New Record**. 3. **Type** = TXT or CNAME (match the row in Sight AI). 4. **Name** = the host part only. GoDaddy splits the host from the domain — for `smtp._domainkey.yourdomain.com` enter `smtp._domainkey`; for the apex SPF record enter `@`; for `_dmarc.yourdomain.com` enter `_dmarc`; for the tracking CNAME `email.yourdomain.com` enter `email`. 5. **Value** = paste from Sight AI exactly. Don't add quotes — GoDaddy adds them automatically for TXT records. 6. **TTL** = 1 hour (or default). 7. **Save**. GoDaddy DNS changes typically propagate in 5–10 minutes. #### Cloudflare 1. From the Cloudflare dashboard, open the zone for your outreach domain. 2. Go to **DNS → Records → Add record**. 3. For each Sight AI record: * **Type** = TXT or CNAME. * **Name** = the subdomain part. Cloudflare auto-strips the apex — for `smtp._domainkey.yourdomain.com` enter `smtp._domainkey`; for the apex SPF, enter `@`. * **Content / Target** = paste from Sight AI verbatim. * **Proxy status** = **DNS only** (the grey cloud, not the orange one). Mailgun's records must not be proxied. * **TTL** = Auto. 4. **Save**. Cloudflare DNS changes are typically live within seconds. #### Namecheap 1. Sign in and go to **Domain List**, then click **Manage** next to your outreach domain. 2. Open the **Advanced DNS** tab. 3. For each Sight AI record, click **Add New Record**. 4. **Type** = TXT Record or CNAME Record. 5. **Host** = the host part (e.g. `smtp._domainkey`, `email`, `_dmarc`, or `@` for apex SPF). 6. **Value** = paste from Sight AI. 7. **TTL** = Automatic. 8. Click the green checkmark to save each row. Namecheap typically propagates in 30 minutes. #### Google Domains / Squarespace Domains (Google Domains migrated to Squarespace in mid-2024 — same UI underneath.) 1. Sign in to Squarespace Domains and select your outreach domain. 2. Go to **DNS → Custom records**. 3. Click **Add record** for each row from Sight AI. 4. Match the type, host, and value exactly. For host, use the subdomain part only (`smtp._domainkey`, `email`, `_dmarc`, or `@`). 5. **Save**. Propagation is usually under 30 minutes. #### Other providers (Hover, Name.com, Bluehost, DreamHost, AWS Route 53, etc.) The fields map cleanly across registrars even when the labels differ: * **Type** — match what Sight AI shows (TXT or CNAME). * **Name / Host / Hostname** — the subdomain part. For `smtp._domainkey.` use `smtp._domainkey`; for the apex SPF use `@`; for the tracking CNAME use `email`; for DMARC use `_dmarc`. * **Value / Target / Points to / Content** — copy from Sight AI verbatim. * **TTL** — leave default. If your registrar requires a fully qualified name, append your domain to the host (e.g. `smtp._domainkey.trysightai.com`); otherwise use the host part only. ## Step 3 · Verify the domain in Sight AI Once the records are in your registrar, head back to **Inbox → Settings → Domain** and click **Verify DNS**. Mailgun re-checks DNS and flips each record from `pending` to `ok`. Once it verifies, click **Assign** to make it the domain the agent sends from (a freshly verified domain can be auto-assigned for you). **Heads up on timing:** DNS propagation usually takes **5–30 minutes**, but it can take **a few hours** depending on your registrar (and longer still if you're updating records that previously had a long TTL). If verification doesn't pass on the first click, give it 30 minutes and try again — there's nothing to babysit. Once all records flip to **Valid**, the domain is verified and you can move on to Step 4. The agent **refuses to send** until SPF, DKIM, and the tracking CNAME all resolve, so getting this step done is what unlocks everything downstream. DMARC isn't required for verification but is strongly recommended before running real campaigns. ## Step 4 · Configure inbox setup in Sight AI With the sending domain verified and assigned, open the **Inbox** tab in **Inbox → Settings** (the inbox setup card). This is where you tell Sight AI which mailbox you want recipients to reply to, and where you'll wire the relay back to the agent in Step 5. The card walks through three substeps in order — the in-app instructions are intentionally close to what you see here: Inbox setup card showing the Reply-To address, the forwarding address, and the Send test email button ### Step 1 in the card · Reply-To address Paste the personal mailbox you created in Step 1 (e.g. `john.smith@trysightai.com`) into the Reply-To field and click **Save**. Use the same mailbox you set up in Step 1 — that single address is your Reply-To, your From line, *and* the source of the forwarding rule in Step 5, so reusing it keeps everything pointed at one place. The agent doesn't go live with this Reply-To yet — it'll keep using the platform Reply-To until verification succeeds in Step 3 of the card so an in-flight setup never silently drops a reply. ### Step 2 in the card · Forwarding address Sight AI displays a forwarding address that looks like `forward+ABC123XYZ@mail-sightai.com`. **Copy it** — you'll paste it into your mailbox provider as part of Step 5 below. ### Step 3 in the card · Send test email Hold off on clicking **Send test email** until you've finished Step 5 below. Once your forwarding rule is wired up and confirmed, click it and the card will flip to **Active** automatically as soon as the forwarded copy returns to Sight AI. ## Step 5 · Set up email forwarding from your mailbox This is the rule that closes the loop: every incoming message in your outreach mailbox gets forwarded to the Sight AI address you copied in Step 4. Replies still land in your own inbox, *and* the agent sees a copy. The setup steps differ by mail provider — pick yours. ### Gmail / Google Workspace 1. Sign in to the dedicated outreach mailbox (e.g. `john.smith@trysightai.com`) in **Gmail**, click the gear icon → **See all settings**. 2. Open the **Forwarding and POP/IMAP** tab. 3. Click **Add a forwarding address** and paste the Sight AI forwarding address from the Inbox setup card. 4. Gmail sends a confirmation email to the Sight AI forwarding address. Sight AI receives it and surfaces it as a new conversation in your **Inbox** tab — open it and click **Confirm forwarding in Google** to authorize the forward: Sight AI Inbox showing the Google forwarding confirmation email with the Confirm forwarding in Google link highlighted 5. Back in Gmail's **Forwarding and POP/IMAP** tab, choose **Forward a copy of incoming mail to** and select your Sight AI address. In the second dropdown, pick the **keep \[your mailbox]'s copy in the Inbox** option (Gmail substitutes your mailbox's display name into the label) so your original mail stays intact, then click **Save Changes**: Gmail Forwarding and POP/IMAP settings with Forward a copy of incoming mail to selected and Save Changes button highlighted 6. Now jump back to the **Inbox setup** card in Sight AI and click **Send test email**. The probe arrives in your outreach mailbox, the forwarding rule sends a copy back to Sight AI, and the card flips to **Active** automatically. Make sure you pick the **keep \[your mailbox]'s copy in the Inbox** option in Gmail (or the equivalent in your provider) — *not* archive, delete, or mark-as-read. The forward should be a copy, not a redirect, otherwise your replies disappear from your own inbox. ### Microsoft 365 / Outlook 1. Sign in to the dedicated outreach mailbox in Outlook on the web and click the gear icon. 2. Go to **Mail → Forwarding**. 3. Check **Enable forwarding** and paste the Sight AI forwarding address from the Inbox setup card. 4. Make sure **Keep a copy of forwarded messages** is checked. 5. Click **Save**. 6. Back in Sight AI, click **Send test email** in the Inbox setup card. ### Cloudflare Email Routing (no mailbox required) If your dedicated outreach domain is on Cloudflare's free Email Routing: 1. In Cloudflare, open the zone for your outreach domain (e.g. `trysightai.com`, **not** your main brand domain) and go to **Email → Email Routing**. 2. Under **Destination addresses**, add the Sight AI forwarding address from the Inbox setup card. Cloudflare sends a verification link — open the resulting conversation in your Sight AI **Inbox** tab and click through to confirm. 3. Under **Custom addresses**, create a route: **Custom address** = your outreach mailbox address (e.g. `john.smith@trysightai.com`) → **Action** = `Send to` → the Sight AI forwarding address. 4. Back in Sight AI, click **Send test email** in the Inbox setup card. Cloudflare Email Routing is the easiest option if you don't want to pay for a Google Workspace or Microsoft 365 seat — Sight AI handles all sending through your verified outbound domain anyway, so the mailbox is purely for receiving and forwarding replies. If you want to be able to log in and read those replies in a real inbox UI, point Cloudflare's forward at any existing inbox (your personal Gmail, your team's shared inbox, etc.). ### Zoho, Fastmail, cPanel, and other providers Most providers expose a basic forwarder under **Email Forwarders**, **Aliases**, or similar: 1. **Source:** your outreach mailbox (e.g. `john.smith@trysightai.com`) 2. **Destination:** the Sight AI forwarding address from the Inbox setup card 3. Save, confirm any verification email Sight AI surfaces in your Inbox, then click **Send test email** in the Inbox setup card. If your provider supports **SRS (Sender Rewriting Scheme)**, leave it on — it keeps the original sender's domain intact for SPF on the forward. Most modern providers do this automatically. ## How replies are detected Every outbound email the agent sends carries a unique `Message-Id` header. When someone replies, the reply carries an `In-Reply-To` header with that same value. The agent uses this header match to know *which* conversation a forwarded email belongs to. When inbox setup is **active**, matched replies are threaded to the existing Sight AI conversation first. Mail that doesn't match an existing conversation still follows the [Email Forwarding](/ai-visibility/outreach-email-forwarding) intake flow: it can land as a new Inbox thread, and the **Auto-handle forwarded and inbound emails** setting controls whether the agent triages it automatically or waits for you. ## What happens once everything is Active * **Outbound mail** uses your Reply-To address. Recipients see `john.smith@trysightai.com` (or whichever personal mailbox you chose) and have no way to know Sight AI is in the loop. * **Replies** land in your own mailbox like normal email. * **The agent** sees a copy of those replies via the forward and triages them: drafts a follow-up if appropriate, marks the thread resolved, or flags it for your attention. Everything still appears in the **Inbox** tab. * **New forwarded or direct inbound mail** that isn't a reply can create a new Inbox thread. If auto-handle is on, the agent triages it before deciding whether to reply; if auto-handle is off, it waits for your review. ## Privacy and security * **Matched replies are resolved by headers first.** We read `In-Reply-To` and `References` to identify Sight AI conversations before treating an email as a new inbound thread. * **Sender verification.** When a forwarded message matches an outbound-initiated conversation, we check that the sender matches the contact enrolled in that conversation. Replies from unrelated addresses are dropped. * **Per-site forwarding address.** Each site has its own rotatable forwarding token, so a leaked address never grants access to other sites or other workspaces. * **Team-scoped matching.** Forwarded replies can never interact with conversations from other teams. If you suspect your forwarding address has leaked, click **Rotate** in the **Forward emails to your agent** card (under **Inbox → Settings → Inbox**). The old address stops accepting mail immediately — update your forwarding rule to point at the new address afterwards. ## Troubleshooting **The Inbox setup card doesn't flip to Active after I click Send test email.** Wait a couple of minutes — the probe → forward → relay round-trip is usually under 30 seconds but can take a minute or two on cold mailboxes. Then check, in order: 1. **Did the test email actually arrive in your outreach mailbox?** Look in Spam or Promotions too — first emails to a new domain occasionally land there. If it's not there at all, your sending domain probably hasn't fully verified yet (re-check Step 3). 2. **Did your forwarding rule fire?** In Gmail, the Forwarding and POP/IMAP page shows your active forward. In Outlook, check Mail → Forwarding. In Cloudflare, check Email → Email Routing → Routes. 3. **Did you confirm the forward?** Gmail and Cloudflare both require a one-time confirmation step (Step 5 above). If you skipped it, the forwarding rule is configured but inactive. You can re-click **Send test email** as many times as you need. Each click invalidates the previous probe and starts fresh. **DNS verification keeps failing.** DNS propagation usually takes 5–30 minutes but can occasionally take a few hours, especially if you previously had stale records on the domain with long TTLs. Wait 30 minutes and click **Verify DNS** again. If it still fails after a few hours: * Confirm the records are exactly what Sight AI shows — case-sensitive, no trailing spaces, no added quotes. * For TXT records, check that your registrar didn't double-quote the value (Cloudflare and Namecheap both add quotes automatically; pasting them in yourself produces `""v=spf1 ..."`). * For CNAME records, confirm Cloudflare's proxy is **off** (grey cloud, not orange). **Replies are landing in my mailbox but the agent isn't replying.** That can mean either (a) the agent's auto-reply behaviour is paused for that thread (check the right rail in the Inbox), or (b) the forwarding rule isn't actually copying messages back to Sight AI. Send a test reply to one of your own outbound emails and check whether it shows up in the Sight AI Inbox tab within a minute. If it doesn't, re-walk Step 5. ## FAQ Only if you don't set up inbox setup. With a verified Reply-To configured, recipients see your real personal address (e.g. `john.smith@trysightai.com`) and have no way to know Sight AI is in the loop. Outreach still sends and replies still arrive — they'll just show up in the Sight AI **Inbox** tab instead of your personal inbox. The agent triages and replies the same way. Cold outreach generates bounces, spam complaints, and unsubscribes at rates your transactional and customer-facing mail never does. If you reuse your main brand domain for outreach, those signals follow the domain — and a few weeks of cold sending can quietly degrade deliverability for your password resets, receipts, newsletters, and customer support replies. A similar-looking outreach domain on a different TLD (e.g. `trysightai.com` if your main is `trysight.ai`) keeps prospects feeling like they're talking to your team while keeping the reputation hit isolated. This is the same approach [lemlist](https://lemlist.com) and [Instantly](https://instantly.ai) build their whole onboarding around: keep cold sending off your primary domain. Yes. The dedicated-domain rule exists to protect you from *cold* sending. If you're only using the agent to reply to people who contacted you first — forwarded cold pitches and inbound replies on the **Agent** tab — that's warm, expected mail and your main domain is perfectly fine. The moment you turn on cold outreach (the **Outreach** tab), switch to a dedicated domain: the agent sends every email from one assigned domain, so once cold pitches are in the mix, that domain needs to be the dedicated one to keep your primary domain's reputation safe. Cold mail replies far better when the From line reads as a person. A reply from `john.smith@trysightai.com` looks like a real person at Sight AI sent you a thoughtful note. A reply from `outreach@trysightai.com` reads as a sales tool — recipients pattern-match it against the dozens of cold mass emails they've already deleted today and your reply rate drops accordingly. Use a real personal name (yours or whoever the agent is "speaking as") for the local-part of both your From line and your Reply-To. Use a dedicated personal mailbox on your dedicated outreach domain (e.g. `john.smith@trysightai.com`). The forwarding rule sends a copy of *every* incoming email to Sight AI. We discard everything that isn't a Sight AI reply, but you generally don't want a non-Sight AI service receiving copies of your daily mail. A separate mailbox on the separate outreach domain keeps the privacy surface area minimal. No. Cloudflare Email Routing is free and lets you create `john.smith@trysightai.com` as a forward-only address — you don't need a paid mailbox seat at all. The downside is you can't *send* mail from that address through Cloudflare, but Sight AI handles all sending through your verified outbound domain anyway, so the mailbox is purely for receiving and forwarding replies. If you want to be able to log in and read those replies in a real inbox UI, point Cloudflare's forward at any existing inbox (your personal Gmail, your team's shared inbox, etc.). Google Workspace is what we recommend for most teams because the Gmail UI is excellent for actually reading and replying to threads, but Cloudflare is a perfectly valid free alternative. Usually 5–30 minutes. Occasionally a few hours, especially if you previously had records on the domain with long TTLs. The dashboard shows per-record status when you click **Verify DNS**; there's nothing to babysit while DNS propagates — start the records, walk away, come back when you have time. No. Emails are still sent through Sight AI's verified outbound domain. Inbox setup only changes how *replies* find their way back to the agent — not how outbound mail leaves. First confirm the test email actually arrived in your Reply-To mailbox — sometimes the first email from a new domain lands in Spam. If it's there, your forwarding rule didn't fire. Re-check the rule's filter (some providers default to forwarding only mail matching specific addresses) and that you confirmed the forward (Gmail and Cloudflare both require a one-time confirmation click). You can click **Send test email** again to retry. Direct mail without a matching `In-Reply-To` can still become a new Inbox thread through the forwarding intake path. Keep **Auto-handle forwarded and inbound emails** on if you want the agent to triage those messages automatically, or turn it off if you want direct inbound to wait for review. Yes. Click **Remove** on the **Inbox setup** card (under **Inbox → Settings → Inbox**). The agent immediately reverts to its platform Reply-To and replies start landing in the Sight AI Inbox tab again. Yes, if you forward new mail into your agent address or your Reply-To mailbox forwards a new direct inbound message. Matched replies are threaded first; unmatched authenticated mail can create a new Inbox thread, subject to daily caps and your auto-handle setting. ## Related * [Outreach Inbox](/ai-visibility/outreach-inbox) — read, reply to, and triage every conversation, including replies routed back through your real mailbox. * [Outreach Email Forwarding](/ai-visibility/outreach-email-forwarding) — turn forwarded *prospect* emails into new opportunities (this is a different feature; inbox setup handles *replies*). * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — the broader Outreach Agent surface. * [Automations overview](/automations/overview) — how all the autonomous agents fit together. # Understanding Positions Source: https://docs.trysight.ai/ai-visibility/positions Track where your brand ranks when AI models list recommendations or comparisons. ## What Are Positions? When an AI model responds to a prompt with a list of recommendations, comparisons, or rankings, your brand's position in that list matters. Position tracking tells you exactly where you appear -- are you the first recommendation, the third, or not listed at all? ## Why Positions Matter Being mentioned by an AI model is good. Being mentioned *first* is significantly better. Research shows that users pay the most attention to the first few items in any list, whether it's search results or AI recommendations. Your position directly affects: * **Click-through likelihood** -- Higher positions get more attention and engagement * **Perceived authority** -- Being listed first implies the AI considers you the top choice * **Competitive advantage** -- Outranking competitors in AI responses drives preference * **Conversion potential** -- Users who find you at position 1 are more likely to convert ## Reading the Positions Table The positions table shows your ranking data across all tracked prompts: | Column | Description | | --------------- | -------------------------------------------------- | | **Prompt** | The tracked prompt that was sent to AI models | | **Visibility** | Your overall visibility percentage for this prompt | | **Position** | Your numerical rank in the AI's response list | | **Sentiment** | How positively or negatively the AI described you | | **Competitors** | Which competitors appeared and their positions | ## Prompt Types Filter Filter positions by prompt type to focus your analysis: * **Non-branded prompts** -- See where you rank in responses to generic industry queries. These are the most valuable because they represent organic recommendations. * **Branded prompts** -- See how AI models position you when your brand is specifically mentioned. * **All prompts** -- View positions across all prompt types. ## Understanding the Metrics ### Visibility Percentage * **80-100%** -- Excellent. You appear in most or all AI responses for this prompt. * **50-79%** -- Good. You appear frequently but there's room for improvement. * **20-49%** -- Fair. You appear sometimes but are often missing from responses. * **0-19%** -- Low. You rarely appear in AI responses for this prompt. ### Position Number * **Position 1** -- You're the top recommendation. This is the strongest position. * **Position 2-3** -- You're among the top recommendations. Still a strong showing. * **Position 4-5** -- You're mentioned but not prominently. There's room to move up. * **Position 6+** -- You're listed but likely getting less attention from users. * **No position** -- You weren't included in the list at all. ### Sentiment Score * **0.7 to 1.0** -- Strongly positive. The AI speaks very favorably about you. * **0.3 to 0.69** -- Positive. The AI has a generally favorable view. * **-0.29 to 0.29** -- Neutral. The AI describes you without strong opinion. * **-0.69 to -0.3** -- Negative. The AI highlights concerns or drawbacks. * **-1.0 to -0.7** -- Strongly negative. The AI has significant reservations. ## Viewing Response Details Click on any row in the positions table to see the full AI response, including: * The complete response text with your brand highlighted * Your exact position in the list * All competitors mentioned and their positions * The AI model that generated the response * Sentiment analysis of how your brand was described ## Create Content from Positions When you identify prompts where your position is low or absent, use this data to guide content creation: * Click on the prompt to see what the AI said instead * Note which competitors ranked higher and analyze their content * Create targeted content that addresses the specific query * Monitor the prompt in subsequent days to track improvement ## How to Improve Your Positions ### Target Low-Visibility Prompts Focus your optimization efforts on prompts where you have low visibility or no position. These represent the biggest opportunities for improvement. * Identify the topic of each low-visibility prompt * Research what content exists on that topic * Create comprehensive, authoritative content that addresses the query * Ensure your content is better than what competitors offer ### Improve Existing Positions For prompts where you already appear but aren't in the top positions: * Analyze what the top-ranked competitors have that you don't * Enhance your existing content with more depth, data, and authority * Build more backlinks and mentions from reputable sources * Ensure your content is up-to-date and accurate ### Monitor Changes Position data updates on your chosen [recheck cadence](/ai-visibility/tracked-prompts#recheck-schedule) (daily, every other day, weekly, or monthly) as your tracked prompts are reprocessed. Watch for: * **Upward trends** -- Your optimization efforts are working * **Downward trends** -- Competitors may be improving or AI models may have updated * **Volatility** -- Frequent position changes may indicate the AI is uncertain about rankings in your space # Search Opportunities Source: https://docs.trysight.ai/ai-visibility/search-opportunities Content Gap, Refresh, Interlink, and Rising Page opportunities — generated from your Google Search Console data. ## Overview **Search Opportunities** are actionable suggestions generated from your [Google Search Console](/integrations/google-search-console) data. While [AI Prompt Opportunities](/ai-visibility/content-opportunities) tell you where you should rank in AI answers, Search Opportunities tell you where you should rank in Google — and what to do about it. They live under **Visibility → Opportunities** at `app.trysight.ai/visibility/opportunities`. ## The 6 Tabs The Opportunities surface is split into six deep-linkable tabs: | Tab | What it surfaces | Source | | ------------------ | ----------------------------------------------------------- | ------------------------------------------ | | **Search Content** | Content Gaps and Refresh candidates from GSC | Google Search Console | | **Interlinks** | Article-to-article internal-link suggestions | Google Search Console + your article graph | | **Rising** | Pages whose week-over-week impressions are rising fast | Google Search Console | | **AI Prompts** | Topics where competitors appear in AI answers but you don't | Tracked AI prompts | | **Outreach** | High-DR sites that AI models cite frequently | Tracked AI prompts | | **Accepted** | Combined queue of everything you've accepted (AI + Search) | Both sources | This page focuses on the four **Search-based** opportunity types. For the AI-based opportunities, see [Content Opportunities](/ai-visibility/content-opportunities) and [Outreach Opportunities](/ai-visibility/outreach-opportunities). ## Search Content (Gap + Refresh) The Search Content tab merges two opportunity types into one table, distinguished by a Type badge: ### Content Gap Queries where you have meaningful impressions but **no article exists** on that target keyword. These are the highest-leverage opportunities — Google is already trying to send you traffic for these terms; you just need to give it something better to rank. Each row shows: * The search query * Type badge: **Gap** * Currently ranking page (often a tangentially related page on your site) * Current average position * 28-day impressions * Clicks * Opportunity score **Action:** Click **Create Article** to spin up a new article pre-filled with the keyword. ### Refresh Queries where you **already have an article**, but it's ranking on positions 5–15 and underperforming. Refreshing the article (better intro, missing sections, updated stats) is usually faster than writing a new one. Each row shows: * The query * Type badge: **Refresh** * The article that's currently ranking (linked into the editor) * Current average position * 28-day impressions * Clicks * Opportunity score **Action:** Click **Refresh Article** to open the existing article in the editor. ### Bulk Accept Use the row checkboxes plus the **Accept** button to send multiple opportunities to the **Accepted** queue at once. Bulk accepting doesn't generate articles — it queues them for you (or for the [Search Opportunity Agent](/automations/overview)) to act on later. ## Interlinks The Interlinks tab surfaces **article-to-article internal-link recommendations** that should lift an underperforming article into a higher search position. Each row is a triple: * **Boost this article** — an article ranking 10–30 for the target query * **Target query** — the query we want it to rank higher for * **Link from** — a strong-ranking article on a related topic that should link to the target * **Suggested anchor** — the anchor text to use The intuition: when a high-authority page on your site links to a struggling page with relevant anchor text, the struggling page tends to climb in Google. **Action:** Click **Open source** to open the source article in the editor pre-positioned to add the link, or click **Reject** to dismiss the suggestion. ## Rising Pages The Rising tab is the most time-sensitive surface in Sight AI. It identifies **pages whose last-7-day impressions are at least 3× the prior 7 days** (or pages first seen this week). Two flavours, distinguished by the Type badge: ### Rising Article An existing Sight AI article that's suddenly gaining traction. **Boost it now** — add interlinks, update the intro, or hand it to the [Article Boost Agent](/automations/overview). ### Rising Non-Article Google has started sending traffic to a non-article page on your site (e.g., a category page, tag page, or thin landing page). **Wrap it up** — create a proper article on the same target keyword to capture and consolidate the traffic. Each row shows the rising page, the type, current vs. prior impressions, the growth multiplier, and current average position. > **Why this is unique:** Most SEO tools don't store daily GSC snapshots, so they can't surface week-over-week deltas. Sight AI does — Rising Pages is a feature you literally cannot get elsewhere. ## Accepted The Accepted tab is your **single queue of work to do next**. It combines opportunities you've accepted from both the Search side (Content Gap, Refresh, Rising, Interlinks) and the AI side (AI Prompts, Outreach). Each row carries a **Source** badge so you can tell at a glance whether it came from Search or AI. For Search rows, a sub-type badge (Gap, Refresh, Interlink, Rising) tells you the specific play. ### Bulk Generate Select multiple rows and click **Generate Articles** to dispatch all of them to the article generator at once. The bulk generator maps each row to the appropriate article type using the suggested type from the original opportunity. ### Hand Off to Agents Instead of acting manually, you can let an [Automation](/automations/overview) work through the Accepted queue automatically — picking the highest-scoring rows, deduplicating against your existing articles, and dispatching them on a schedule. ## How Search Opportunities Get Generated Search Opportunities are derived from your **daily Google Search Console sync**: 1. **Backfill** — when you first connect GSC, we pull 90 days of search data 2. **Daily sync** — a scheduled job pulls yesterday's data each morning 3. **Generation** — a worker scans the synced data and emits opportunities 4. **Deduplication** — we check whether you already have an article for the target keyword before creating an opportunity 5. **Refresh** — the opportunities table updates as the underlying data changes If you've just connected GSC, opportunities will start appearing within minutes of the backfill completing. ## Readiness Indicator The Opportunities page shows a small status indicator at the top while the GSC pipeline is still preparing data. Once it flips to "ready," all the Search tabs flip from empty states to populated tables in real time — no page refresh needed. ## Operator Notes For self-hosted or admin scenarios: * A bulk operator script (`scripts/utils/run-search-opportunities-all-eligible.ts`) can backfill Search Opportunities for every eligible site * The cron `/api/scheduler/generate-search-opportunities` runs the generator on schedule * The cron `/api/cron/gsc-article-link` re-links GSC pages to articles after canonical URL changes ## Plan Availability | Plan | Search Opportunities | | -------- | ----------------------------- | | Starter | Not included — upgrade to Pro | | Pro | Full access | | Advanced | Full access | Autonomous [agents](/automations/overview) that act on Search Opportunities are available as **Automations** — included on **Pro and Advanced** plans and metered in AI credits (no separate add-on). ## Best Practices * **Act on Rising Pages first** — they're time-sensitive; the window typically closes within 1–2 weeks * **Bulk accept Content Gaps** — accept 10–20 at a time and let the [Search Opportunity Agent](/automations/overview) work through them * **Refresh before you create** — a Refresh opportunity is usually 5–10× faster to act on than a Content Gap and often produces the same lift * **Pair Interlinks with refreshes** — when you're already in the editor refreshing an article, add the suggested interlink in the same pass * **Connect Sight AI to your CMS** so accepted opportunities can publish automatically once generated ## Next Steps * [Connect Google Search Console](/integrations/google-search-console) so the data pipeline can run * [Use the Dashboard](/getting-started/dashboard) for the curated top-10 view * [Browse Search section](/ai-visibility/search-section) for the full data behind the opportunities * [Check Google AI Search](/ai-visibility/google-ai-search) to see which queries are losing clicks to AI Overviews * [Turn on Automations](/automations/getting-started) to act on opportunities automatically # Search (Google) Section Source: https://docs.trysight.ai/ai-visibility/search-section Browse every search query, page, and article that Google sends traffic to — and create or refresh content directly from the data. ## Overview The **Search** section under Visibility is the full-fidelity view of your Google Search Console data inside Sight AI. While the [Dashboard](/getting-started/dashboard) shows a curated top-10 view, the Search section gives you the complete list — every query, every URL, every article — with sortable tables, filters, and bulk article creation. It lives at `app.trysight.ai/visibility/queries` (and the sibling tabs `/pages` and `/articles`). ## The Tabs The Search section is organized into four deep-linkable tabs — three GSC performance tables plus a Google AI view: ### Queries Every search term that drove impressions to your site in the selected window. Each row includes: * The query * Clicks and impressions * CTR * Average position * A **Create Article** button to spin up an article on that keyword This is the single best place to find ideas for new content. If Google is sending people to your site for a query but you don't have a dedicated page on that topic, you're leaving traffic on the table. #### Bulk Create Select multiple queries with the row checkboxes, then click **Create Articles**. A modal opens where you can: * Edit the target keyword for each query * Pick the article type per query (listicle, how-to, explainer) * Add per-query custom instructions Submitting the modal queues all articles for generation in one go. Use this to clear a backlog of high-impression queries in a single sitting. ### Pages Every URL on your site that Google sends traffic to. Each row includes: * The page URL * Clicks and impressions * CTR * Average position * A link into the matching Sight AI article when one exists, otherwise an external link to the page Use this to: * Identify your highest-traffic pages and double down on similar topics * Find pages that are ranking but aren't yet hooked into your Sight AI article inventory * Spot underperforming pages whose ranking has dropped ### Articles Only the pages that map to an article in your Sight AI inventory. Each row includes: * Article title * Status (draft, published, syncing, etc.) * Clicks and impressions * Average position * **Growth %** vs. the prior matching window This is the cleanest "what's working" view. Sort by **Growth** descending to see your fastest-rising articles, or sort by **Clicks** to see your headline winners. ### Google AI The **Google AI** tab focuses on how Google's AI Overviews and AI Mode affect your traffic — surfacing queries that are losing clicks to AI answers, plus a place to import Google's official AI-surface impression data. It's covered in its own guide: [Learn about Google AI Search →](/ai-visibility/google-ai-search) ## Filters & Search All three tabs share the same controls in the top strip: * **Date range** — 7, 28, or 90 days. Defaults to 28 days. Stays sticky across tab switches. * **Search** — filter rows by free text (resets when you switch tabs). * **Sort** — click any column header. Click again to flip direction. * **Pagination** — 25 rows per page; up to 200 rows are loaded server-side. ## How the Data Gets Here The Search section is populated by your [Google Search Console connection](/integrations/google-search-console). When you first connect: 1. We backfill the last **90 days** of search data from Google 2. After the backfill, we sync **daily** to keep the data current 3. The same daily sync also feeds the [Dashboard](/getting-started/dashboard) and [Search Opportunities](/ai-visibility/search-opportunities) You don't need to do anything beyond the initial connection. ## What's Different from the Dashboard? | | Dashboard | Search Section | | ---------------- | --------------------------------- | ------------------------------------------ | | **Scope** | Top 10 queries / pages / articles | Every query, page, article (up to 200/tab) | | **Filtering** | Date range only | Date range, free-text search, column sort | | **Bulk actions** | Per-row create | Multi-select bulk create | | **Use case** | Daily scan | Deep dive when you have 30 minutes | ## Deep Linking Each tab has its own canonical URL, so the dashboard's "All queries →" / "All pages →" links land you on the right view. You can also bookmark a tab — e.g., bookmark `/visibility/articles` if "what's growing" is your daily ritual. ## Plan Availability Search data sync requires a connected Google Search Console property. The feature is available on all paid plans. ## Next Steps * [Set up the GSC connection](/integrations/google-search-console) so this section has data * [Browse Search Opportunities](/ai-visibility/search-opportunities) for content gaps, refreshes, interlinks, and rising-page signals * [Use the Dashboard](/getting-started/dashboard) for the daily 60-second view * [Hand off to Automations](/automations/overview) to create or refresh articles automatically # Understanding Sentiment Source: https://docs.trysight.ai/ai-visibility/sentiment Analyze how positively or negatively AI models describe your brand. ## What Is Sentiment? Sentiment measures the tone and attitude AI models use when discussing your brand. It goes beyond whether you're mentioned to capture *how* you're described -- positively, neutrally, or negatively. Sentiment analysis examines the language, context, and framing of every AI response that mentions your brand. ## Why Sentiment Matters A mention isn't always a good thing. If an AI model mentions your brand but describes it negatively, that can actively harm your reputation and drive potential customers away. Understanding sentiment helps you: * **Protect your reputation** -- Catch negative sentiment early before it spreads * **Measure brand perception** -- Understand how AI models frame your brand * **Guide your strategy** -- Focus on improving areas where sentiment is weak * **Benchmark against competitors** -- See if AI models favor your competitors' brands over yours * **Track improvements** -- Measure how content changes affect AI perception ## Reading the Sentiment Dashboard ### Overall Sentiment Score Your sentiment score is displayed as an aggregate across all tracked prompts and AI models: * **0.7 to 1.0** -- Strongly positive. AI models consistently speak favorably about your brand. * **0.3 to 0.69** -- Positive. Most AI responses are favorable with minor neutral or negative mentions. * **-0.29 to 0.29** -- Neutral. AI models describe your brand without strong positive or negative bias. * **-0.69 to -0.3** -- Negative. AI responses frequently highlight concerns or drawbacks. * **-1.0 to -0.7** -- Strongly negative. AI models consistently frame your brand unfavorably. ### Sentiment Breakdown View the distribution of sentiment across your tracked prompts: * **Positive** -- Responses where AI models describe your brand favorably, highlight strengths, or recommend you * **Neutral** -- Responses where AI models mention your brand factually without strong opinion * **Negative** -- Responses where AI models highlight drawbacks, concerns, or unfavorable comparisons ### Sentiment by Platform Different AI models may have different perceptions of your brand. The platform breakdown shows sentiment scores for each tracked model -- ChatGPT, Claude, Perplexity, Gemini, Grok, and Google AI Overview -- so you can identify platform-specific issues or strengths. ## What Affects Sentiment ### Positive Factors These tend to improve how AI models describe your brand: * Strong customer reviews and testimonials across the web * Positive press coverage and media mentions * High-quality, helpful content on your website * Industry awards and recognition * Active community engagement and support * Consistent, reliable product or service delivery ### Negative Factors These can lead to negative AI sentiment: * Unresolved customer complaints on public forums * Negative reviews on major review platforms * Controversial press coverage or PR incidents * Outdated or inaccurate information on your website * Poor comparison against competitors in independent reviews * Security incidents or data breaches ## How to Improve Sentiment ### Address Negative Signals * **Monitor and respond** to negative reviews on public platforms * **Resolve complaints** that appear in forums and social media * **Update outdated content** that may be feeding AI models inaccurate information * **Publish corrections** if your brand has been misrepresented ### Build Positive Signals * **Encourage satisfied customers** to leave reviews on major platforms * **Publish case studies** and success stories * **Earn positive press coverage** through thought leadership * **Create helpful, educational content** that positions you as an industry leader * **Maintain transparency** about your products, pricing, and practices ### Benchmark Against Competitors * Compare your sentiment scores with tracked competitors * Identify areas where competitors have better sentiment and analyze why * Use competitor analysis to set realistic sentiment improvement goals * Learn from competitors with high sentiment -- what are they doing differently? ### Track Trends Over Time * Monitor sentiment on a weekly basis to catch changes early * Correlate sentiment shifts with specific events (product launches, press coverage, content updates) * Set sentiment improvement targets and measure progress * Celebrate wins when sentiment improves -- it validates your GEO efforts ## Sentiment's Role in GEO Sentiment is a critical component of Generative Engine Optimization. When AI models have positive sentiment about your brand: * They're more likely to **recommend you** in response to relevant queries * They tend to **position you higher** in recommendation lists * They use **more favorable language** when describing your products and services * They're more likely to **cite your content** as a trusted source Improving sentiment isn't just about reputation management -- it directly impacts your visibility and positioning across all AI platforms. # Setting Up Tracked Prompts Source: https://docs.trysight.ai/ai-visibility/tracked-prompts Create prompts to monitor how AI models respond to questions about your brand. ## What Are Tracked Prompts? Tracked prompts are the questions you want Sight AI to send to AI models on your behalf. Think of them as the queries your potential customers might type into ChatGPT, Claude, Perplexity, or other AI assistants. Sight AI re-checks these prompts on a schedule you choose, analyzes the responses, and reports back on mentions, citations, sentiment, and positioning. ## Creating a Tracked Prompt 1. Navigate to **Visibility** → **Prompts** (URL: `/visibility/prompts/tracking`) 2. Click **Add Prompt** 3. Enter your prompt text — this should be a natural question someone might ask an AI assistant 4. Optionally assign a category to organize your prompts 5. Optionally choose which AI models will run the prompt — if you skip this, the prompt inherits your site's default models 6. Click **Save** Your prompt will be included in the next scheduled check for your site. You can also bulk-upload prompts from a CSV at `/visibility/prompts/bulk` or browse historical prompt responses at `/visibility/prompts/history`. ## Best Practices for Writing Prompts ### Be Specific Vague prompts produce vague results. Instead of "What's the best software?", try "What's the best project management software for remote teams?" ### Use Natural Language Write prompts the way a real person would ask an AI assistant. Conversational, question-based prompts yield the most realistic and useful data. ### Cover Different Angles Don't just track one type of question. Create prompts that cover: * **Brand awareness** -- "Have you heard of \[your brand]?" * **Category queries** -- "What are the best \[your category] tools?" * **Comparison queries** -- "How does \[your brand] compare to \[competitor]?" * **Problem-solving** -- "How do I \[solve a problem your product addresses]?" * **Recommendation requests** -- "What \[product type] do you recommend for \[use case]?" ## Suggested Prompt Templates ### Brand Awareness * "What is \[your brand] and what do they do?" * "Tell me about \[your brand]" * "Is \[your brand] a good choice for \[use case]?" ### Category Leadership * "What are the top \[your category] platforms in 2025?" * "What's the best \[product type] for \[target audience]?" * "Which \[your category] tools do experts recommend?" ### Competitive Positioning * "How does \[your brand] compare to \[competitor]?" * "\[Your brand] vs \[competitor] -- which is better?" * "What are the pros and cons of \[your brand] versus \[competitor]?" ## Organizing with Categories Categories help you group related prompts for easier analysis. Common categories include: * **Brand** -- Direct brand awareness queries * **Category** -- Industry and category-level queries * **Competitive** -- Head-to-head comparison queries * **Use Case** -- Problem and solution-oriented queries * **Product** -- Specific product or feature queries You can filter your dashboard and reports by category to focus on specific areas of your AI visibility. ## Choosing AI Models per Prompt Every platform offers multiple model tiers — from fast, low-credit models to the flagship models most real users interact with — and each has a published flat credit price per check. You can: * **Set site defaults** in your visibility settings so all prompts inherit the same lineup * **Pick models for a single prompt** from the **Models** column on the tracking page * **Update many prompts at once** — select them and use **Set Models** * **Ask the AI agent** (in-app chat or Slack) to view or change a prompt's models The Models column shows each prompt's credit total per check, and the page shows live cost estimates as you change selections. Run your money prompts on premium models and your long-tail prompts on fast tiers to stretch your credits. See the full model catalog and per-check prices in [AI Models We Track](/ai-visibility/ai-models). ## Recheck Schedule Tracked prompts are re-checked on a **cadence you choose** for each site, set from the frequency selector on the **Visibility → Prompts** page: | Cadence | Re-checks every | | ------------------ | --------------- | | Daily | 1 day | | Every other day | 2 days | | Weekly *(default)* | 7 days | | Monthly | 30 days | On each run, Sight AI sends your active prompts to their selected AI models and analyzes the responses. **Each scheduled recheck spends AI credits**, and the amount depends on which models each prompt runs on — the default model lineup bills **31 credits per prompt** across all five platforms, while switching every platform to its fastest tier brings that down to as little as **8 credits**. Faster cadences cost more, and the app shows a live credit estimate when you change the frequency or model selections. Weekly is a good balance for most teams; switch to daily when you're actively optimizing and want a tight feedback loop, or monthly to minimize spend. ## Managing Your Prompts ### Editing a Prompt Click on any existing prompt to edit its text or category. Changes take effect on the next scheduled check for your site. ### Deleting a Prompt Remove prompts you no longer need by clicking the delete icon. Historical data from deleted prompts is preserved in your reports. ### Prompt Organization Tips * Review your prompts monthly to ensure they're still relevant * Remove underperforming prompts and replace them with new angles * Balance your prompts across different categories for comprehensive coverage ## Prompt Limits Every site includes up to **500 tracked prompts** — the same on every plan. The limit is per site, so each site you add gets its own 500. If you reach the limit, deactivate prompts you no longer need to free up room. # What is AI Visibility? Source: https://docs.trysight.ai/ai-visibility/what-is-ai-visibility Monitor how AI models perceive and recommend your brand across the internet. ## Overview AI Visibility gives you a window into how artificial intelligence models -- like ChatGPT, Claude, Perplexity, Gemini, and Grok -- perceive, mention, and recommend your brand. As AI-powered search and assistants become the primary way people discover products and services, understanding your presence in these responses is critical. With Sight AI's AI Visibility module, you can track your brand's presence across the most influential AI platforms and take action to improve it. ## Why AI Visibility Matters Traditional SEO focuses on ranking in search engine results. But increasingly, users are turning to AI assistants for recommendations, comparisons, and answers. SparkToro's [2024 Zero-Click Search Study](https://sparktoro.com/blog/2024-zero-click-search-study-for-every-1000-us-google-searches-only-374-clicks-go-to-the-open-web-in-the-eu-its-360/) found that **58.5% of US Google searches now end without a click to an external website** -- a trend that has only accelerated as AI Overviews and AI assistants answer more queries directly on the results page. If your brand isn't showing up in those AI-generated responses, you're missing a rapidly growing channel. AI Visibility helps you: * **Understand your brand's AI footprint** -- see where and how often AI models mention you * **Identify gaps** -- discover where competitors appear but you don't * **Improve your positioning** -- use data-driven insights to optimize for generative engines (GEO) * **Track progress over time** -- monitor trends in mentions, sentiment, and citations ## What You Can Track ### Mentions Track how often AI models reference your brand by name. See which platforms mention you most and identify patterns in how you're discussed. [Learn more about Mentions](/ai-visibility/mentions) ### Citations Discover when AI models cite your website or content as a source. Citations are a strong signal that AI trusts your content as authoritative. [Learn more about Citations](/ai-visibility/citations) ### Sentiment Analyze the tone AI models use when discussing your brand -- positive, neutral, or negative. Sentiment directly impacts whether users trust AI recommendations about you. [Learn more about Sentiment](/ai-visibility/sentiment) ### Positions See where your brand ranks when AI models list recommendations or comparisons. Position 1 means you're the top recommendation. [Learn more about Positions](/ai-visibility/positions) ### Competitor Mentions Monitor how often competitors appear in the same AI responses as your brand, and compare your visibility against theirs. ## Tracked Prompts AI Visibility works by sending **tracked prompts** to AI models on a schedule you choose — **daily, every other day, weekly (the default), or monthly**. These are questions you define -- things your potential customers might ask an AI assistant. Sight AI then analyzes the responses to extract mentions, citations, sentiment, and positioning data. Each scheduled recheck spends AI credits, and each AI model has a published flat credit price per check — so the cadence you pick and the models each prompt runs on control the cost. [Learn how to set up Tracked Prompts](/ai-visibility/tracked-prompts) ## Prompt Limits Every site includes up to **500 tracked prompts**, available on all plans and across all 5 major AI models. The limit is per site, so each site you add gets its own 500. ## Getting Started 1. **Set up your tracked prompts** — Define the questions you want to monitor across AI models. [Set up prompts](/ai-visibility/tracked-prompts) 2. **Review your AI Visibility dashboard** — Once prompts have been processed, explore your visibility metrics across the [Mentions](/ai-visibility/mentions), [Positions](/ai-visibility/positions), [Citations](/ai-visibility/citations), and [Sentiment](/ai-visibility/sentiment) tabs at `/visibility`. 3. **Use the [combined Dashboard](/getting-started/dashboard)** — for a daily 60-second view that pulls AI visibility together with Google Search Console performance. 4. **Act on opportunities** — Use [AI Prompt Opportunities](/ai-visibility/content-opportunities), [Search Opportunities](/ai-visibility/search-opportunities), and [Outreach Opportunities](/ai-visibility/outreach-opportunities) to improve your visibility — or hand them off to [Automations](/automations/overview) to act automatically. 5. **Triage outreach in one place** — Watch agent and manual replies, draft new ones with AI, and take over conversations the agent didn't auto-reply to in the [Outreach Inbox](/ai-visibility/outreach-inbox). # Agent Templates Source: https://docs.trysight.ai/automations/agent-templates Reference for Sight AI's specialist automation templates — what each agent does, default settings, and when to use it. Specialist **agent templates** are pre-built automation engines with constrained tool access, dedup logic, and per-run budgets. Each template maps to a proven SEO workflow. > **Not the Article Agent:** These templates are *autonomous workers* that operate Sight AI on your behalf. The [Article Agent](/ai-content/ai-agents) is the 8-role *writing pipeline* (Research, Writer, SEO, etc.) that template agents call into when dispatching articles. *** ## Search Opportunity Agent **Template key:** `article_creation` **What it does:** Finds the highest-scoring **Search Content Gap** opportunities — queries with impressions where you have no matching article yet — checks for duplicates, and dispatches articles through the Article Agent. **Behavior:** * Picks opportunities above a configurable score threshold * Calls duplicate checks before every dispatch * Uses the suggested article type (listicle, how-to, explainer) * Records a per-run summary for auditing | Default | Value | | ------------- | ------------------------------------------------------------------------------------------------------------------------- | | Schedule | Every 24 hours | | Action budget | 2 articles per run | | Requires | [Google Search Console](/integrations/google-search-console), [Search Opportunities](/ai-visibility/search-opportunities) | **Use it for:** Automatically clearing your Content Gap backlog. *** ## AI Opportunity Agent **Template key:** `ai_prompt` **What it does:** Finds pending **AI Visibility prompt opportunities** — queries where LLMs answer but your brand isn't mentioned — and dispatches articles shaped for LLM citations (clear definitions, sourced lists, structured comparisons). **Behavior:** * Same dedup + dispatch flow as Search Opportunity Agent, but for AI-side opportunities * Uses a higher score threshold by default (AI opportunities need stronger signals) | Default | Value | | ------------- | ------------------------------------------------------------------ | | Schedule | Every 24 hours | | Action budget | 2 articles per run | | Requires | [Content Opportunities (AI)](/ai-visibility/content-opportunities) | **Use it for:** Automatically improving your AI mention rate. *** ## Article Boost Agent **Template key:** `article_boost` **What it does:** Refreshes pages that are gaining traction or underperforming. For each rising/refresh opportunity, it picks one of three approaches: 1. **Freshness pass** — bump dates, regenerate intro and meta if the article already covers the query well 2. **Targeted section addition** — insert one new section that answers the query *(default)* 3. **Full refresh** — replace the body wholesale *(only when explicitly enabled and the article is stale)* After refreshing, it republishes to your CMS. **It never creates new articles.** | Default | Value | | ------------- | --------------------------------------------------------------------------------------------------------------------- | | Schedule | Every 24 hours | | Action budget | 3 boosts per run | | Requires | [Google Search Console](/integrations/google-search-console), existing Sight AI articles, connected CMS for republish | **Use it for:** Capitalizing on Rising Pages and Refresh opportunities automatically. *** ## Interlinking Agent **Template key:** `interlinking` **What it does:** Reads suggested **internal-link opportunities** (from the Interlinks tab in Search Opportunities) and inserts well-placed anchors into source articles. **Behavior:** * Pulls the source article body * Finds where the suggested anchor text fits most naturally * Prefers paragraphs already discussing related concepts; never forces links into the intro * Skips rows with no natural fit (logged with explanation) | Default | Value | | ------------- | ------------------------------------------------------------------------ | | Schedule | Every 24 hours | | Action budget | 5 anchors per run | | Requires | [Search Opportunities → Interlinks](/ai-visibility/search-opportunities) | **Use it for:** Building internal-link equity to underperforming articles after a content burst. Run Interlinking **after** the Search Opportunity Agent has published several new articles — you'll have more source pages to link from. *** ## Site Performance Agent **Template key:** `site_performance` **What it does:** Runs Lighthouse against your highest-traffic pages and writes a prioritized report of fixes. **Behavior:** * Audits Performance, Accessibility, Best Practices, and SEO * Flags missing JSON-LD on AI-generated articles * Files a single report ranked by impact * Sends a one-paragraph TL;DR in notifications | Default | Value | | ------------- | ---------------------- | | Schedule | Weekly | | Action budget | 1 audit report per run | **Use it for:** Keeping technical SEO healthy without manual Lighthouse checks. *** ## Outreach Agent (configured in the Inbox) **The Outreach Agent is not a template automation.** It runs as a single always-on agent per site that you turn on and configure from **[Inbox](/ai-visibility/outreach-inbox) → Settings** — its sending domain, inbox setup, context/guidance, voice, sender name, and daily send volume all live there. It sends on a fixed **Mon–Fri 9 AM ET** schedule, so there's no cron to set and nothing to wire up on the Automations page. Set it up with the [Outreach Inbox](/ai-visibility/outreach-inbox) and [Outreach Email Setup](/ai-visibility/outreach-reply-tracking) guides. Author-email lookup and the opportunity queue it works from are covered in [Outreach Opportunities](/ai-visibility/outreach-opportunities). *** ## Customizing a template When creating or editing a template automation, you can adjust: * **Instructions** — append guidance (e.g. "Only act on opportunities with score above 70" or "Skip competitor comparison topics") * **Schedule** — any preset or manual-only * **End date** — auto-disable after a campaign ends * **Notifications** — email recipients + Slack channel Action budgets are set by the template engine defaults. Contact support if you need higher per-run limits for a specific use case. ## Best practices by template | Template | Recommendation | | ------------------ | --------------------------------------------------------------------------------- | | Search Opportunity | Start here. Review activity logs for one week before adding more agents. | | AI Opportunity | Enable once you have 20+ AI Prompt opportunities and Search agent is stable. | | Article Boost | Pair with Search Opportunity — Boost refreshes existing pages; Search fills gaps. | | Interlinking | Enable after publishing 5+ articles in a burst. | | Site Performance | Weekly is usually enough; increase only for launch periods. | ## Next steps * [Getting started](/automations/getting-started) — create and enable your first automation * [Custom automations](/automations/custom-automations) — when templates aren't enough * [Monitoring](/automations/monitoring-and-troubleshooting) — audit every run # Automation Tools Reference Source: https://docs.trysight.ai/automations/automation-tools Complete reference for every tool available in custom automations — categories, mutating tools, connector tools, and template-only engines. Custom automations run on a schedule with the tools **you** grant. This page is the reference for what's available, what changes live data, and what template automations use instead. **Template automations** (Search Opportunity, Interlinking, etc.) use dedicated specialist engines with a fixed, smaller tool set — not the full catalog below. See [Agent templates](/automations/agent-templates). ## How tools behave in scheduled runs | Behavior | Detail | | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Auto-confirm** | Mutating tools run without a second approval. Only grant tools your instructions need. | | **Site pinning** | Every tool executes against the automation's own site — you cannot cross sites in one automation. | | **Denylist** | `createCustomAction`, `updateAutomation`, and `runAutomationNow` are hidden from the picker and blocked at run time — automations cannot spawn or trigger other automations. | | **Credit gate** | Runs blocked at 0 AI credits. Pro+ plan required. | | **Connector tools** | Granted explicitly from connected [MCP connectors](/integrations/mcp-connectors); run with auto-confirm when granted. | ## Execution limits (custom automations) | Limit | Value | | ---------------------- | ----------------- | | Model | Claude Opus | | Max tool steps per run | 15 | | Max tools grantable | 30 per automation | | Auto-confirm | On | ## Tool categories **78 built-in tools** appear in the Automations builder, grouped into 12 categories. Tools marked **Mutating** change live state. ### Awareness & setup | Tool | Mutating | What it does | | --------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------- | | `getSiteSituation` | | Full SEO snapshot — analytics, content, setup health, autopilot, keywords, opportunities, AI visibility, latest report | | `getAccountHealth` | | Setup health check — GSC, IndexNow, CMS, keywords, sitemap, autopilot blockers | | `list_sites` | | List websites on your account | | `get_site` | | Details and settings for one site | | `searchSiteContent` | | Semantic search over articles and pages | | `proposeCustomAction` | | Draft a scheduled automation for review (does not save) | | `listAutomations` | | List automations with schedule, status, and latest run | | `getSlackStatus` | | Slack connection status and available notification channels | ### Search analytics All accept optional `days` lookback (1–365, default 28). | Tool | Mutating | What it does | | -------------------------------- | -------- | ------------------------------------------- | | `get_search_overview` | | Clicks, impressions, position, CTR summary | | `get_search_timeseries` | | Day-by-day search performance | | `get_search_queries` | | Top search queries (optional `limit` 1–100) | | `get_search_pages` | | Top landing pages (optional `limit` 1–100) | | `get_search_article_performance` | | GSC performance for Sight AI articles | ### AI visibility | Tool | Mutating | What it does | | ------------------------------- | -------- | ----------------------------------- | | `get_ai_visibility_summary` | | Brand mention rate across AI models | | `get_ai_visibility_trends` | | Visibility over time | | `get_ai_visibility_mentions` | | Where and how you're mentioned | | `get_ai_visibility_citations` | | Pages AI assistants cite | | `get_ai_visibility_competitors` | | Visibility vs tracked competitors | | `listTrackedPrompts` | | Monitored AI prompts | | `createTrackedPrompt` | **Yes** | Add a prompt to monitoring | | `setTrackedPromptActive` | **Yes** | Activate or pause a tracked prompt | ### Opportunities | Tool | Mutating | What it does | | ----------------------------- | -------- | --------------------------------------------------- | | `list_opportunities` | | Content opportunities from search and AI data | | `get_opportunities_readiness` | | Whether enough data exists for reliable suggestions | ### Content & articles | Tool | Mutating | What it does | | ---------------------------- | -------- | -------------------------------------------------------------- | | `list_articles` | | List articles by status | | `get_article` | | Full article — title, body, SEO, status | | `get_article_limits` | | Monthly article quota and usage | | `generate_article` | **Yes** | Generate a new SEO article (async — poll until ready) | | `update_article` | **Yes** | Edit title, body, SEO fields, slug | | `refresh_seo_title` | **Yes** | AI-rewrite SEO title only | | `refresh_seo_meta` | **Yes** | AI-rewrite meta description only | | `create_draft_article` | **Yes** | Create empty draft for manual writing | | `edit_article_section` | **Yes** | Surgical body edit — append, replace section, or rewrite intro | | `generate_article_image` | **Yes** | AI-generate cover image | | `set_article_main_image` | **Yes** | Set or clear hero image | | `recommend_article_types` | | Suggest listicle, guide, or explainer per keyword | | `recommend_article_category` | | Suggest CMS category | | `list_article_authors` | | CMS authors for byline assignment | | `create_article_batch` | **Yes** | Queue 1–100 articles through generation | | `project_interlinks` | | Forecast internal links an interlinking run would add | | `sync_article` | **Yes** | Publish ready article to connected CMS | | `get_article_sync_status` | | Per-platform sync status | | `get_cms_status` | | Active CMS integration status | | `list_integrations` | | Connected CMS and platform integrations | ### Keywords | Tool | Mutating | What it does | | ---------------------- | -------- | ----------------------------------------------------------------- | | `list_keywords` | | Tracked keywords with pipeline status | | `get_keyword` | | Single keyword lookup | | `get_keywords_summary` | | Dashboard totals and recommendations | | `add_keywords` | **Yes** | Add keywords (deduped automatically) | | `manage_keywords` | **Yes** | Unified keyword operations — list, get, summary, add, list groups | **Status filters:** `all`, `no_article`, `ready`, `synced`, `scheduled`, `generating`, `failed`, `published` **Source filters:** `all`, `user`, `ai`, `import`, `autopilot` ### Autopilot & planner | Tool | Mutating | What it does | | ------------------ | -------- | --------------------------------------------------------- | | `setAutopilot` | **Yes** | Turn Autopilot on/off, set articles/day, keyword sourcing | | `schedule_article` | **Yes** | Queue ready articles for future CMS publish | | `manage_planner` | **Yes** | Planner settings, scheduled queue, generation plan | **`manage_planner` actions:** `get_settings`, `update_settings`, `list_scheduled`, `update_scheduled`, `remove_scheduled`, `clear_scheduled`, `list_generation`, `clear_generation`, `plan_generation`, `get_autopilot` ### Indexing | Tool | Mutating | What it does | | ------------------------- | -------- | --------------------------------------- | | `submit_sitemap_gsc` | **Yes** | Submit sitemap to Google Search Console | | `get_gsc_status` | | GSC connection status | | `submit_article_indexnow` | **Yes** | Ping IndexNow for a published URL | | `get_indexnow_status` | | IndexNow setup status | | `forceReindexSite` | **Yes** | Re-crawl sitemap and resubmit all URLs | ### SEO report & agents | Tool | Mutating | What it does | | ----------------- | -------- | ------------------------------------------------- | | `getSeoReport` | | Latest Site Performance report | | `runSeoAudit` | **Yes** | Trigger a fresh Site Performance audit | | `list_agents` | | Agent configurations for the site | | `list_agent_runs` | | Recent agent run history | | `update_agent` | **Yes** | Toggle active, adjust budget, schedule, threshold | | `run_agent` | **Yes** | Trigger an on-demand specialist agent run | **Agent keys:** `article_creation`, `ai_prompt`, `article_boost`, `interlinking`, `site_performance`, `outreach` ### Inbox (Outreach — Advanced plan) | Tool | Mutating | What it does | | ---------------------------- | -------- | ----------------------------------------------- | | `list_inbox` | | Outreach conversations with previews | | `read_message` | | Full thread with context | | `get_inbox_unread_count` | | Unread message count | | `mark_conversation_read` | | Mark inbound messages as read | | `reply_to_message` | **Yes** | Send a human-written reply | | `update_conversation_status` | **Yes** | Resolve, decline, reopen, pause, or resume AI | | `take_over_conversation` | **Yes** | Hand thread to Outreach Agent for a draft reply | ### Research | Tool | Mutating | What it does | | ------------------- | -------- | ------------------------------------------------------- | | `webSearch` | | Web search with sourced summary | | `webFetch` | | Fetch and extract text from a public URL | | `fetch_url_content` | | Crawl a URL — title, headings, body | | `getDomainRating` | | Ahrefs Domain Rating (free API — no connector required) | ### Memory | Tool | Mutating | What it does | | ---------- | -------- | ---------------------------------------------------- | | `remember` | | Save durable memory (`scope: site` or `scope: user`) | ## Chat-only tools These work in **Agent chat** but are **not** available in scheduled automations: | Tool | Purpose | | -------------------- | -------------------------------------------------------------------------------------- | | `createCustomAction` | Create a new automation (requires user confirmation) | | `updateAutomation` | Edit an existing automation | | `runAutomationNow` | Trigger a manual run | | `forgetMemory` | Remove a stale memory entry (deleting memory is destructive, so it stays human-driven) | Use Agent chat to create automations, then manage them on the Automations page. ## MCP connector tools Teams with [MCP connectors](/integrations/mcp-connectors) connected see an additional tool group per provider in the picker. Sight AI ships **22+ prebuilt connectors** across SEO, analytics, CRM, automation, and project tracking — see the [full connector list](/integrations/mcp-connectors#available-connectors). | Default permission | Connectors | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------- | | **Always allow** | Read-only SEO and research (Ahrefs, Semrush, DataForSEO, SearchAPI, Firecrawl, Exa, Parallel, Cometly) | | **Ask first** | CRM, billing, support, content, automation, and custom connectors (HubSpot, Stripe, Notion, Zapier, Sentry, Linear, and others) | Tool names are dynamic — they match what each provider exposes after connection. Tools set to **Don't allow** on the connector detail page are hidden from the picker. **Limits:** 5 custom connectors per team · 30 tools per connector · 80 total connector tools in the agent. ## Template-only tools Specialist agents — the **template automations** and the Inbox-configured **Outreach Agent** — use internal engines with a constrained tool set. These tools are **not** in the custom automation picker: | Category | Examples | | ---------------- | -------------------------------------------------------------------- | | Opportunities | `findPendingOpportunities`, `acceptOpportunity`, `rejectOpportunity` | | Articles | `dispatchArticle`, `refreshArticle`, `enqueueCmsSync` | | Internal linking | `findAnchorCandidates`, `insertAnchor`, `insertLinkSentence` | | Site health | `runLighthouseAudit`, `createSiteIssueReport` | | Outreach | `lookupContactEmail`, `generateOutreachEmail`, `sendOutreachEmail` | Each template grants only the subset it needs. See [Agent templates](/automations/agent-templates) for per-template behavior and action budgets. ## Example recipes ### Weekly SEO digest **Instructions:** Pull search overview and AI visibility summary. List top 5 queries gaining impressions and top 3 AI prompts where we're not mentioned. Summarize in 3 bullets. **Tools:** `get_search_overview`, `get_search_timeseries`, `get_search_queries`, `get_ai_visibility_summary`, `listTrackedPrompts` ### Keyword gap filler **Instructions:** List keywords with status `no_article`. Generate articles for up to 2 highest-priority terms. Do not sync to CMS. **Tools:** `list_keywords`, `get_article_limits`, `recommend_article_types`, `generate_article` ### Monday health check **Instructions:** Run `getAccountHealth` and `getSiteSituation`. If any blocker is critical, summarize it. Otherwise post a one-paragraph all-clear. **Tools:** `getAccountHealth`, `getSiteSituation`, `get_search_queries`, `getSlackStatus` Enable [Slack notifications](/integrations/slack) on the automation for delivery. ## Troubleshooting | Symptom | Likely cause | | --------------------------- | --------------------------------------------------------------------------------- | | Tool not in picker | Chat-only tool, connector not connected, or tool set to **Don't allow** | | "No valid tools configured" | Stored tools reference removed or renamed names — re-edit and re-select | | Mutating tool did nothing | Instructions didn't call it, or credits/plan gate blocked the run | | Hit 15-step limit | Split work across automations or reduce scope in instructions | | Connector tool fails | Connector disconnected, expired credentials, or permission set to **Don't allow** | ## Related * [Custom automations](/automations/custom-automations) — create and configure tool-based workflows * [MCP connectors](/integrations/mcp-connectors) — full connector catalog and setup * [Agent templates](/automations/agent-templates) — specialist engines with fixed tool sets * [Monitoring & troubleshooting](/automations/monitoring-and-troubleshooting) — audit runs and debug failures # Custom Automations Source: https://docs.trysight.ai/automations/custom-automations Build scheduled workflows from Sight AI's agent tool catalog — analytics, content, keywords, opportunities, indexing, and more. ## When to use custom automations **Template automations** cover the six most common SEO workflows out of the box. Use a **custom automation** when you need something more specific: * A recurring report that pulls GSC + AI visibility data and summarizes trends * A keyword hygiene job that adds tracked prompts or flags stale articles * A multi-step content workflow that doesn't map to a single specialist agent * A scheduled check that posts to Slack when setup health blockers appear Custom automations give you the same scheduling, notifications, and activity logging as templates — but **you** write the instructions and choose which tools the automation may call. ## Create a custom automation ### From the Automations page 1. Go to **Automations** → **New automation** 2. Choose **Custom** 3. Fill in: * **Name** — descriptive label * **Instructions** — what the automation should do each run (be specific) * **Allowed tools** — check the tools it may call (grouped by category) * **Schedule** — cron preset or manual-only * **Notifications** — optional email/Slack on completion 4. Save and enable ### From Agent chat Ask Sight AI Agent to create one for you: ``` Every Monday, list keywords with no article, pick the top 5 by search volume, and generate articles for them. Schedule it weekly. ``` The agent uses the `createCustomAction` tool to propose name, instructions, tools, and schedule. Review and confirm before it saves. Automations run with **auto-confirm** — state-changing tools execute without a second approval prompt. Only grant tools your instructions actually need, especially mutating ones (generate article, sync, add keywords, send outreach). ## Tool catalog overview Tools are grouped in the builder by category: | Category | Examples | Typical use | | ----------------------- | --------------------------------------------------------------- | ------------------------------- | | **Awareness & setup** | `getSiteSituation`, `getAccountHealth`, `list_sites` | Health checks, setup audits | | **Search analytics** | `get_search_overview`, `get_search_queries`, `get_search_pages` | GSC reporting | | **AI visibility** | `get_ai_visibility_summary`, `listTrackedPrompts` | AI mention tracking | | **Opportunities** | `list_opportunities`, `get_opportunities_readiness` | Queue inspection before acting | | **Content & articles** | `generate_article`, `update_article`, `sync_article` | Content creation and CMS sync | | **Keywords** | `list_keywords`, `add_keywords`, `get_keywords_summary` | Keyword pool management | | **Autopilot & planner** | `manage_planner`, `schedule_article`, `setAutopilot` | Planner and Autopilot control | | **Indexing** | `submit_sitemap_gsc`, `submit_article_indexnow` | Indexing submissions | | **SEO report & agents** | `getSeoReport`, `runSeoAudit`, `run_agent` | Audits and on-demand agent runs | | **Inbox** | `list_inbox`, `reply_to_message` | Outreach inbox (Advanced) | | **Research** | Web research tools | Deep dives for custom reports | | **Memory** | `remember` | Persist facts for future runs | Mutating tools are flagged in the builder so you can see which selections change live data. See the complete list with descriptions in the [Automation tools reference](/automations/automation-tools). ### MCP connector tools If your team has connected [MCP connectors](/integrations/mcp-connectors), an additional tool group appears in the picker for each enabled connector — Ahrefs, HubSpot, Notion, Zapier, and others. Tools are grouped by provider name. Connector tools granted on an automation run with **auto-confirm** during scheduled runs, even if they're set to **Ask first** in chat. Only grant connector tools your instructions actually need. ## Execution limits Custom automations run on **Claude Opus** with these guardrails: | Limit | Value | | ---------------------- | ---------------------------------------------------------------------------------------- | | Max tool steps per run | 15 | | Max tools grantable | 30 per automation | | Auto-confirm | On (no human approval during scheduled runs) | | Credit gate | Blocked at 0 AI credits | | `createCustomAction` | **Not available** in scheduled runs (prevents automations from spawning automations) | | Connector tools | Up to 80 total across all connectors; see [MCP Connectors](/integrations/mcp-connectors) | Template automations use the dedicated specialist engines instead and have their own action budgets (typically 2–10 actions per run). ## Example custom automations ### Weekly SEO digest **Instructions:** ``` Pull search overview and AI visibility summary for this site. Compare to last week. List the top 5 queries gaining impressions and top 3 AI prompts where we're not mentioned. Write a concise bullet summary suitable for a team standup. ``` **Tools:** `get_search_overview`, `get_ai_visibility_summary`, `get_search_queries`, `listTrackedPrompts` **Schedule:** Weekly — Monday at 9 AM UTC *** ### Keyword gap filler **Instructions:** ``` List keywords with status no_article. Sort by priority. Generate articles for up to 2 keywords that don't already have a draft in progress. Do not exceed 2 articles per run. ``` **Tools:** `get_keywords_summary`, `list_keywords`, `get_article_limits`, `generate_article`, `get_article` **Schedule:** Every weekday at 9 AM UTC *** ### Post-publish sync check **Instructions:** ``` List articles in ready status that haven't synced to CMS in the last 7 days. For each, check sync status and attempt sync if CMS is connected. Summarize results. ``` **Tools:** `list_articles`, `get_cms_status`, `get_article_sync_status`, `sync_article` **Schedule:** Daily at 6 PM UTC ## Instructions that work well Good custom automation instructions are: * **Specific** — "Generate up to 2 articles" not "generate some articles" * **Bounded** — include max counts, score thresholds, or date ranges * **Conditional** — "Skip if CMS is not connected" or "Only act on opportunities above score 65" * **Output-oriented** — "Write a 5-bullet summary of actions taken" helps the activity log Site **memory** (facts the agent remembers about your site) is injected automatically into every run, so you don't need to repeat brand voice or competitor names in every automation. ## Custom vs. template: decision guide | Need | Use | | -------------------------------------------------------- | -------------------------------------------------- | | Clear Content Gap articles on a schedule | Search Opportunity **template** | | Refresh rising pages | Article Boost **template** | | Weekly Lighthouse report | Site Performance **template** | | Cross-domain report combining GSC + AI + keywords | **Custom** | | One-off multi-step workflow you'll iterate in chat first | **Custom** (start manual-only, add schedule later) | ## API and MCP Custom automations created in the UI are stored per site and are **not yet exposed** on the v1 REST or MCP API. Programmatic agent control today uses the legacy agent config endpoints: * `GET/PUT /api/v1/sites/{siteId}/agents/{agentKey}` * `POST /api/v1/sites/{siteId}/agents/{agentKey}/run` See [Agents API reference](/developers/api-reference/agents) and [MCP setup](/developers/mcp-setup) for programmatic access to template agent keys. ## Next steps * [Automation tools reference](/automations/automation-tools) — every tool, category, and mutating flag * [MCP connectors](/integrations/mcp-connectors) — connect SEO tools, analytics, CRMs, and custom MCP servers * [Getting started](/automations/getting-started) — schedules, notifications, enable/disable * [Agent templates](/automations/agent-templates) — when a specialist agent is the right fit * [Monitoring](/automations/monitoring-and-troubleshooting) — read activity logs and debug failed runs # Getting Started with Automations Source: https://docs.trysight.ai/automations/getting-started Create, schedule, and enable your first automation from the Automations page or Agent chat. ## Prerequisites Before turning on automations, make sure you have: 1. A site on a **Pro or Advanced** plan with available **AI credits** 2. A connected **[Google Search Console](/integrations/google-search-console)** property (required for Search Opportunity and Article Boost agents) 3. A connected **[CMS integration](/integrations/wordpress)** if you want created or refreshed articles to publish automatically 4. Opportunity data flowing — automations act on [Search](/ai-visibility/search-opportunities) or [AI](/ai-visibility/content-opportunities) queues ## Open the Automations page 1. Select your site from the workspace switcher 2. Click **Automations** in the left sidebar (`app.trysight.ai/automations`) 3. You'll see any existing automations for that site, plus buttons to create new ones Automations are **per site**. Switch sites in the workspace switcher to manage automations for a different property. ## Create a template automation The fastest way to get value is to start with a specialist agent template: 1. Click **New automation** 2. Choose **From template** 3. Pick a template — most teams start with **Search Opportunity Agent** 4. Configure the fields below 5. Click **Save** and toggle **Enabled** on ### Configuration fields | Field | Description | | ----------------------------- | -------------------------------------------------------------------------------------------------- | | **Name** | A label for your automation (e.g. "Daily content gap articles") | | **Instructions** *(optional)* | Extra guidance appended to the agent's built-in playbook — tone, score thresholds, topics to avoid | | **Schedule** | When the automation runs (UTC). See [schedule options](#schedule-options) below | | **End date** *(optional)* | Auto-disables the automation after this date | | **Enabled** | Master on/off switch | | **Notifications** | Email and/or Slack summaries when a run completes | ### Schedule options Schedules use **UTC** and are evaluated every **15 minutes**. Pick from presets like: * Every 15 minutes, hourly, every 6 or 12 hours * Daily at 6 AM, 9 AM, 12 PM, or 6 PM UTC * Weekdays at 9 AM or 6 PM UTC * Weekly (Monday, Wednesday, Friday, Sunday, or Mon & Thu) * Monthly (1st or 15th) Choose **Manual only** to create an automation you trigger on demand (via **Run now** or Agent chat) without a recurring schedule. Start with **every 24 hours** (daily at 9 AM UTC) for content agents. Increase frequency only after you've reviewed a week of activity logs and trust the agent's decisions. ## Create via Agent chat You can also ask Sight AI Agent to set up an automation for you: 1. Open **Agent** in the sidebar (`app.trysight.ai/agent`) 2. Ask something like: *"Set up a weekly interlinking automation for this site"* 3. The agent proposes the automation — review the schedule, tools, and instructions 4. Confirm when prompted Agent chat is especially useful for custom automations with a specific multi-step workflow. ## Run an automation manually Even with a schedule, you can trigger a run immediately: 1. Open the automation on the **Automations** page 2. Click **Run now** Manual runs respect the same credit checks and action budgets as scheduled runs. ## Recommended first setup For most sites, this sequence works well: Search and Article Boost agents need GSC data. [Connect GSC →](/integrations/google-search-console) Schedule daily. Default budget: 2 articles per run. Clears your Content Gap backlog automatically. Confirm the agent is picking sensible opportunities and not creating duplicates. [Monitoring guide →](/automations/monitoring-and-troubleshooting) Once you have a content base, add Article Boost (refreshes) and Interlinking (internal links). Without a CMS, articles are created in Sight AI but won't sync until you connect [WordPress](/integrations/wordpress), [Webflow](/integrations/webflow), or another integration. ## Outreach Agent setup The Outreach Agent is **not** an automation and isn't set up on this page — it's configured entirely from the Inbox. It requires the **Advanced** plan plus a one-time setup: 1. Open the **[Inbox](/ai-visibility/outreach-inbox)** and click **Settings** in the header. 2. On the **Domain** tab, add and verify your **sending domain** and **Assign** it, then finish **Inbox setup** (Reply-To mailbox + forwarding relay) on the **Inbox** tab. Full walkthrough: [Outreach Email Setup](/ai-visibility/outreach-reply-tracking). 3. Under **Agent behavior**, add your context/guidance, voice, and daily send volume, then turn the agent **on**. It sends on a fixed Mon–Fri 9 AM ET schedule. It works from the [Outreach Opportunities](/ai-visibility/outreach-opportunities) queue. ## Legacy agent migration If you previously enabled specialist agents from an older Agents settings page, Sight AI automatically imports active agents as automations the first time you open the Automations page for that site. Your schedules and settings carry over — no action required. ## Next steps * [Agent template reference](/automations/agent-templates) — defaults, budgets, and behavior for each specialist * [Automation tools reference](/automations/automation-tools) — full custom automation tool catalog * [Custom automations](/automations/custom-automations) — build your own from the tool catalog * [Monitoring & troubleshooting](/automations/monitoring-and-troubleshooting) — activity logs, Slack/email notifications, common issues # Monitoring & Troubleshooting Source: https://docs.trysight.ai/automations/monitoring-and-troubleshooting Activity logs, email and Slack notifications, and fixes for common automation issues. ## Activity log Every automation run is recorded with a full audit trail. ### View recent runs 1. Open **Automations** for your site 2. Click an automation to open its detail sheet 3. Click **Activity** (history icon) to open the activity panel Each run shows: * **Status** — completed, failed, or running * **Summary** — natural-language description of what the automation did * **Action count** — how many real actions were taken (articles created, links inserted, etc.) * **Timestamps** — start and finish time ### Tool-call drilldown Click a run to expand every tool call: * Tool name and input parameters * Output (truncated for large responses) * Latency per call This is how you verify *why* an automation skipped an opportunity, which articles it created, or where a run failed mid-flight. ## Notifications Configure notifications when creating or editing an automation. ### Email * Toggle **Email notifications** on * Select team members as recipients * Add optional **context** — extra instructions appended to the notification (e.g. "Flag anything about competitor X") Email summaries include the run status, action count, and the automation's natural-language summary. ### Slack 1. Connect Slack for your site at **Integrations → Slack** (`app.trysight.ai/integrations/slack`) 2. Invite the Sight AI bot to the channel you want notifications in 3. In the automation's notification settings, enable **Slack** and pick a channel Slack posts include the automation name, run outcome, and summary. You can also `@mention` the Sight AI bot in Slack threads to ask questions about your site (read-oriented; mutations still require confirmation in chat). [Full Slack integration guide →](/integrations/slack) Slack must be connected **per site**. Switch sites before connecting if you manage multiple properties. ## How scheduling works * Schedules are stored as **cron expressions in UTC** * A platform cron evaluates due automations every **15 minutes** * Each automation fires **at most once** per 15-minute evaluation window * Schedules whose minute doesn't land exactly on a tick boundary (e.g. `5 * * * *`) still fire once per window **Manual-only** automations (`schedule_cron` empty) never run on the cron — trigger them with **Run now** or via Agent chat. ### End dates Set an optional **end date** to auto-disable an automation after a campaign. Past end dates are skipped and the automation is turned off automatically. ## Common issues Check these in order: 1. **Enabled** — toggle is on 2. **Schedule** — not set to Manual only (unless you're triggering manually) 3. **End date** — not in the past 4. **Plan** — site is on Pro or Advanced with AI credits remaining 5. **Site license** — site is licensed on your team plan 6. **Activity log** — look for failed runs with error messages Scheduled runs are blocked at **0 AI credits**. [Add extra credits](/billing/extra-credits) or wait for your monthly reset. Sight AI enforces one in-flight run per automation. If a run crashes without finishing, a **30-minute janitor** automatically marks stale `running` rows as failed and releases the lock. Wait up to 30 minutes, then trigger a new run or check the activity log for partial tool calls. Usually one of: * **Empty queue** — no eligible opportunities (connect [GSC](/integrations/google-search-console), wait for opportunity sync) * **Score threshold** — opportunities below the agent's threshold were skipped (check activity log for skip reasons) * **Dedup** — articles already exist for those keywords * **Action budget exhausted** — previous rows in the same run used the full budget Open the tool-call drilldown to see skip explanations per row. Automations create articles in Sight AI first. They sync to your CMS when: 1. A [CMS integration](/integrations/wordpress) is connected and active 2. The agent calls `sync_article` (template agents do this for refreshes; new articles may need Planner scheduling depending on your settings) Check **Planner** for unsynced ready articles and verify CMS connection under **Integrations**. The Outreach Agent is configured in the **[Inbox](/ai-visibility/outreach-inbox) → Settings**, not on the Automations page. Confirm: * **Advanced plan** active * The agent is turned **on** under **Inbox → Settings** (Status) * **Sending domain** verified and assigned (**Domain** tab) and **Inbox setup** active (**Inbox** tab) under **Inbox → Settings** * [Outreach Opportunities](/ai-visibility/outreach-opportunities) have eligible rows * It only sends inside the fixed **Mon–Fri 9 AM ET** window — outside it, sends queue up for the next weekday slot Replies and triage happen in the [Outreach Inbox](/ai-visibility/outreach-inbox). 1. Slack connected at `/integrations/slack` for this site 2. Bot invited to the selected channel 3. Slack notifications enabled on the automation with a channel selected 4. Run completed successfully (failed runs still notify if configured) Custom automations cap at **15 tool steps** per run. Split work across multiple automations, reduce scope in instructions (e.g. "process at most 3 items"), or switch to a template agent with a dedicated engine. 1. Connector connected and enabled at [Integrations → Connectors](/integrations/mcp-connectors) 2. Tool not set to **Don't allow** on the connector detail page 3. Re-edit automation and re-select tools if the connector was refreshed or reconnected See [Automation tools reference](/automations/automation-tools#mcp-connector-tools) for connector naming and limits. ## Credit usage Every automation run consumes **AI credits** from your team's pool — the same credits used for article generation, AI visibility checks, and agent chat. Credit cost varies by: * Number of LLM calls (custom automations) * Number of actions taken (template agents — article generation is the largest cost) * Tools invoked (research, image generation, outreach drafts) Monitor usage under **Billing** and [Extra Credits](/billing/extra-credits). Runs are hard-blocked when credits reach zero. ## Best practices for monitoring * **Review activity logs weekly** when first enabling an automation — drop to monthly once you trust it * **Start with low action budgets** and increase after validating output quality * **Enable email notifications** for the first two weeks, then switch to Slack for ongoing visibility * **Pair Search + Boost agents** and watch both logs — Boost should target existing URLs, Search should create new ones ## Next steps * [Automations overview](/automations/overview) * [Getting started](/automations/getting-started) * [Agent templates](/automations/agent-templates) * [FAQs](/faqs/general) — general automation questions # Automations Overview Source: https://docs.trysight.ai/automations/overview Schedule autonomous AI agents that act on your Search and AI opportunity queues — or build custom tool-based workflows. ## What are Automations? **Automations** are scheduled jobs that run Sight AI's agent engines on your behalf. Instead of manually accepting opportunities one by one, an automation reads your queues, decides what to act on, and dispatches real work — article generation, content refreshes, internal links, site audits, and more. The **Outreach Agent** is not an Automation. It is a single always-on agent per site, configured entirely from **[Inbox](/ai-visibility/outreach-inbox) → Settings**, that sends on a fixed Mon–Fri 9 AM ET schedule. There is nothing to set up for it on the Automations page. Open **Automations** in the left sidebar (`app.trysight.ai/automations`) to create, schedule, and monitor them for the active site. **Included on Pro and Advanced.** Every automation run draws from your plan's **AI credits** — the same pool used for article generation, AI visibility checks, and agent chat. ## Automations vs. Autopilot Sight AI has two complementary automation systems. Most teams use both. | | **Autopilot** | **Automations** | | ------------ | ---------------------------------------- | ------------------------------------------------------------------ | | **Trigger** | Fixed daily schedule from a keyword pool | Opportunity queues + your cron schedule | | **Input** | 90 auto-researched keywords | Search Opportunities, AI Prompt Opportunities, site health signals | | **Output** | New articles only | Articles, refreshes, interlinks, audits | | **Best for** | Steady baseline content production | Acting on real performance and visibility signals | [Learn how Autopilot works →](/autopilot/how-autopilot-works) ## Two types of Automations ### Template automations (specialist agents) Five proven agent engines ship as ready-made templates: | Template | What it does | | --------------------------------------------------------------------------------- | ----------------------------------------------------- | | [Search Opportunity Agent](/automations/agent-templates#search-opportunity-agent) | Creates articles for Search Content Gap opportunities | | [AI Opportunity Agent](/automations/agent-templates#ai-opportunity-agent) | Creates articles for AI Prompt gaps | | [Article Boost Agent](/automations/agent-templates#article-boost-agent) | Refreshes rising or underperforming pages | | [Interlinking Agent](/automations/agent-templates#interlinking-agent) | Inserts internal links from suggested opportunities | | [Site Performance Agent](/automations/agent-templates#site-performance-agent) | Runs Lighthouse and writes a prioritized fix report | Pick a template, set a schedule, optionally add guidance, and enable it. The **Outreach Agent** (Advanced) is configured separately, from **[Inbox](/ai-visibility/outreach-inbox) → Settings** — not here. See [Outreach Opportunities](/ai-visibility/outreach-opportunities). ### Custom automations Build your own automation from Sight AI's full **agent tool catalog** — analytics, keywords, articles, opportunities, indexing, inbox, [MCP connector tools](/integrations/mcp-connectors), and more. You write the instructions; Sight AI runs them on a schedule with the tools you allow. [Build a custom automation →](/automations/custom-automations) · [Full tool reference →](/automations/automation-tools) ## How every run works Every automation run follows the same pattern: 1. **Pull** — read the relevant queue or data source (opportunities, articles, inbox, etc.) 2. **Dedup** — skip rows that already have articles, were handled recently, or fail eligibility checks 3. **Act** — call the configured tools (dispatch article, refresh, insert anchor, send pitch, etc.) 4. **Record** — write a per-run summary with every tool call so you can audit what happened Template automations have **constrained tool surfaces** by design — the Interlinking Agent can insert anchors but cannot create new articles, for example. ## Where Automations get their work | Source | Automation that consumes it | | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | | [Search Opportunities → Content Gap](/ai-visibility/search-opportunities) | Search Opportunity Agent | | [Search Opportunities → Refresh / Rising](/ai-visibility/search-opportunities) | Article Boost Agent | | [Search Opportunities → Interlinks](/ai-visibility/search-opportunities) | Interlinking Agent | | [Content Opportunities (AI)](/ai-visibility/content-opportunities) | AI Opportunity Agent | | Site health signals | Site Performance Agent | | [Outreach Opportunities](/ai-visibility/outreach-opportunities) | Outreach Agent — configured in the [Inbox](/ai-visibility/outreach-inbox), not an automation | You can mix manual and autonomous workflows — accept some opportunities yourself, let automations work through the rest. ## Plan availability | Plan | Automations | Outreach Agent | | -------- | ------------------------- | -------------- | | Starter | — | — | | Pro | Included (credit-metered) | — | | Advanced | Included (credit-metered) | Included | [Compare plans →](/billing/choosing-your-plan) ## Safety and cost controls Automations are conservative by default: * **Action budgets** cap how many real actions a single run can take (template automations) * **Tool-call budgets** cap total LLM steps per run (custom automations, up to 15 steps) * **Schedule throttling** — runs are evaluated every 15 minutes; each automation fires at most once per window * **Site eligibility** — automations won't run against unlicensed or paused sites * **Credit checks** — runs are blocked when your team has no AI credits remaining ## Next steps Create your first automation in minutes Deep dive on each specialist agent Build tool-based workflows from scratch Full catalog of built-in and connector tools SEO tools, analytics, CRMs, and 20+ data sources Activity logs, notifications, and common fixes # How Autopilot Works Source: https://docs.trysight.ai/autopilot/how-autopilot-works Autopilot automatically generates targeted keyword phrases for your business and creates fresh content every day. ## Overview Autopilot is Sight AI's hands-free content generation system. Once activated, it automatically researches keywords relevant to your business and generates fresh, SEO-optimized articles every day -- without any manual input. You can configure Autopilot to produce between **1 and 30 articles per day**, depending on your plan and content goals. > **Autopilot vs. Automations:** Autopilot generates articles from a keyword pool on a fixed daily schedule. [Automations](/automations/overview) are smarter — they read your real opportunity queues (Search Opportunities, AI Prompt Opportunities, Outreach Opportunities) and act on the highest-scoring ones, with dedup, score thresholds, and per-run audit trails. Most teams run both. ## How It Works ### Step 1: Keyword Research When you activate Autopilot, Sight AI analyzes your website, industry, and target audience to build a pool of **90 targeted keyword phrases**. These keywords are strategically selected to drive organic traffic and improve your AI visibility. ### Step 2: Instant First Article As soon as Autopilot is activated, Sight AI immediately generates your first article using the highest-priority keyword from the pool. You'll see it in your Planner within minutes. ### Step 3: Daily Generation Cycle From that point on, Autopilot runs on a daily cycle: 1. Selects the next keyword(s) from your queue based on priority and relevance. 2. Generates articles using the full multi-agent AI pipeline (research, strategy, writing, editing, SEO, visuals, and linking). 3. Publishes articles to your connected CMS automatically. 4. Moves to the next keyword(s) the following day. This cycle repeats every day until the keyword pool is exhausted, at which point Sight AI generates a new batch of keywords. ## Configuring Articles Per Day You can adjust how many articles Autopilot generates each day to match your content strategy: * **1 article/day** (default) -- A steady, sustainable pace. Great for most businesses. * **2--3 articles/day** -- Ideal for building topical authority quickly in a competitive space. * **5--30 articles/day** -- Aggressive content production for rapid growth, large sites, or agencies managing multiple brands. To change your daily article count, go to **Settings** > **Autopilot** and adjust the slider. ## Activating Autopilot 1. Navigate to **Autopilot** in the left sidebar. 2. Review your site and content settings. 3. Set your preferred **articles per day**. 4. Click **Activate Autopilot**. Sight AI will begin keyword research immediately and generate your first article within minutes. ## What You Get | Feature | Description | | ------------------------------ | ----------------------------------------------------------------------------- | | **Automated keyword research** | 90 targeted keywords generated for your business. | | **Daily article generation** | 1--30 articles produced every day on autopilot. | | **Full AI pipeline** | Every article goes through all 13+ AI agents for maximum quality. | | **CMS publishing** | Articles are automatically published to your connected CMS. | | **Search engine indexing** | New articles are submitted to search engines via IndexNow and Google Sitemap. | ## Plan Availability Autopilot is included on **Pro** and **Advanced** plans. It is **not** available on Starter — upgrade to Pro to enable automated daily generation. Autopilot runs are metered in AI credits like other AI features. ## Managing Autopilot ### Turning Off Autopilot You can turn off Autopilot at any time directly from the Planner: 1. Navigate to **Planner** in the left sidebar. 2. Locate the **Autopilot** toggle at the top of the Planner page. 3. Toggle **Autopilot off**. Turning off Autopilot stops daily generation but preserves your keyword queue so you can resume later without losing progress. ### Turning Autopilot Back On To resume Autopilot, go back to the **Planner** and toggle **Autopilot on**. It picks up right where it left off in your keyword queue. ### Keyword Queue View and manage your keyword queue from the Autopilot dashboard. You can: * See upcoming keywords and their priority order. * Add custom keywords to the queue. * Remove keywords you don't want articles for. * Reorder keywords to change generation priority. ## Best Practices * **Let it run** -- Autopilot works best with consistency. Give it at least 2--4 weeks to build momentum before evaluating results. * **Review generated articles** -- While Autopilot produces high-quality content, periodically review articles to ensure they align with your brand voice. * **Add custom keywords** -- Supplement the auto-generated keyword pool with your own ideas to cover topics specific to your business. * **Monitor performance** -- Use the AI Visibility dashboard and your analytics to track how Autopilot content performs over time. ## Frequently Asked Questions Yes. All Autopilot-generated articles appear in your Planner and can be edited, rescheduled, or deleted just like any other article. Autopilot generates articles daily. You can configure it to produce between 1 and 30 articles per day depending on your plan and goals. Yes. Go to the **Planner** and toggle **Autopilot off** at any time. Your keyword queue and existing articles are preserved. # Choosing Your Plan Source: https://docs.trysight.ai/billing/choosing-your-plan Find the perfect plan based on your content goals and feature needs. ## Overview Sight AI plans run on a single pool of **AI credits** (\~100 credits = 1 full article). Choosing the right plan comes down to: * **Base plan** — determines your monthly credit pool, feature access (Opportunities, Autopilot, MCP Connectors, Outreach), and included team members. AI Visibility is included on every plan. * **Credit tier** — Pro and Advanced let you scale credits up from a dropdown. * **Extra sites / seats** — additional websites and team members can be added to any plan. ## Quick Comparison | Feature | Starter | Pro | Advanced | | ----------------------- | ---------------------------- | ---------------------------- | ---------------------------- | | Monthly AI credits | 1,500 (fixed) | 5,000+ (scalable) | 25,000+ (scalable) | | ≈ Articles/month | \~15 | \~50+ | \~250+ | | AI Visibility | Yes (up to 500 prompts/site) | Yes (up to 500 prompts/site) | Yes (up to 500 prompts/site) | | AI Opportunities | — | Yes | Yes | | Autopilot & Automations | — | Yes | Yes | | MCP Connectors | — | Yes | Yes | | Outreach Opportunities | — | — | Yes | | Team members included | 1 | 2 | 4 | | Sources tracked | 6 | 6 | 6 | All plans with AI Visibility track **Google**, **ChatGPT**, **Perplexity**, **Claude**, **Gemini**, and **Grok**. ## Decision Framework ### Step 1: Pick your feature tier * **Just publishing content + tracking AI visibility?** → **Starter** (1,500 credits). Includes AI Visibility (up to 500 tracked prompts/site); Opportunities, Autopilot, and Connectors require Pro. * **Want Opportunities, Autopilot, and MCP Connectors?** → **Pro**. * **Need outreach and high volume / agency scale?** → **Advanced** (Outreach-exclusive). ### Step 2: Size your credits \~100 credits = 1 article. Estimate your monthly AI usage (articles, images, visibility checks, editor actions) and pick a credit tier. Pro and Advanced scale from a dropdown; Starter is fixed (upgrade to Pro for more). ### Step 3: Count sites and seats Each plan includes 1 website and 1–4 team members. Extra sites and seats can be added from the billing page. ## Multi-Site & Seats Credits are **shared across all sites** on your team, so you can allocate them to your highest-priority site. Tracked prompts are a **per-site** allowance — every site gets up to **500**, on every plan. ## Extra Credits Bonus credits (from referrals/promos) and any purchased extra credits **never expire** and are spent after your monthly plan pool is exhausted. ## Real-World Recommendations * **Solo blogger / small business** — start with **Starter**, upgrade as you grow. * **Growing company with a content + visibility strategy** — **Pro** with the credit tier that matches your volume. * **Agency managing multiple clients / needs outreach** — **Advanced** with extra site licenses. * **Enterprise / high-volume** — contact **[support@trysight.ai](mailto:support@trysight.ai)**. ## Frequently Asked Questions Yes. Upgrade, downgrade, or change your credit tier anytime from billing settings. [Learn more](/billing/upgrading-downgrading). No — monthly plan credits reset each billing cycle. Bonus and purchased extra credits never expire. Contact **[support@trysight.ai](mailto:support@trysight.ai)** about Enterprise options (custom credit volumes, 1,000+ prompts, SLAs). # Extra Credits Source: https://docs.trysight.ai/billing/extra-credits Scale your AI credit pool, earn bonus credits, and understand how non-expiring balances work. ## Overview Sight AI runs on a single **AI credit pool** per team. Your monthly plan grant refreshes each billing cycle. There are three ways to get credits beyond your monthly plan grant: 1. **Raise your credit tier** — Pro and Advanced plans let you pick a higher monthly credit allowance from a dropdown on the billing page. 2. **Buy a one-time credit pack** — purchase non-expiring extra credits from the billing page whenever you need a top-up. 3. **Bonus credits** — Referrals, promo codes, and other rewards add non-expiring credits to your team balance. ## How credits are spent Everything powered by AI draws from the same pool: articles, images, AI editor actions, visibility checks, agent chat, automations, outreach drafts, and more. **Approximate anchor:** \~100 credits = 1 full SEO article (text + image). Background infrastructure — embeddings (which power site search, agent memory, and retrieval), the website analysis that auto-configures a new site during setup, and internal content classification — is **included and never deducted** from your balance. Credits are consumed in this order: 1. **Monthly plan grant** — refreshes at the start of each billing period 2. **Bonus credits** — referrals, promos (never expire) 3. **Extra credits** — any purchased one-time balance (never expire) ## Scaling your monthly credits (Pro & Advanced) Pro and Advanced plans include a **credit tier dropdown** on the plan-selection and billing pages. Pick the tier that matches your volume: * **Pro** — 5,000 to 40,000 credits/mo * **Advanced** — 25,000 to 200,000 credits/mo Upgrading to a higher tier takes effect immediately with prorated billing. See [Upgrading and Downgrading](/billing/upgrading-downgrading). ### Starter plan Starter includes a **fixed 1,500 credits per month** (\~15 articles). To get more monthly credits or unlock AI Visibility, Autopilot, and Automations, upgrade to **Pro**. ## One-time credit packs Need a top-up without changing your monthly plan? Buy a one-time AI credit pack from **Settings** > **Billing** > **Buy AI Credits**. Packs range from 2,500 to 200,000 credits, and each pack shows an **estimated article count** (\~100 credits ≈ 1 full article) so you know roughly how much content it covers. Credit packs: * **Never expire** * Are **shared across all sites** on your team * Are charged immediately to your subscription's payment method (active subscription required — not available during trial) * Are spent **after** your monthly plan grant and bonus credits are exhausted ## Bonus credits (referrals & promos) Bonus credits are added to your team when you: * **Refer a friend** — you and your friend each receive **2,500 bonus credits** when they subscribe * **Redeem a promo code** — promo grants are credited to your team balance Bonus credits: * **Never expire** * Are **shared across all sites** on your team * Are spent **after** your monthly plan grant is exhausted * Remain in your account even if you change plans or pause your subscription [Learn more about the referral program](/guides/referral-program) ## Tracking your balance View your credit usage from: * **Settings** > **Billing** — monthly grant, used/remaining, bonus balance * **Agent workspace** — live credits badge in the header * **Generation flows** — clear messaging when you're running low ## When to scale credits vs. upgrade plans | Scenario | Recommendation | | ------------------------------------------------------------ | -------------------------------------------------------------------- | | You need more monthly AI capacity on Pro or Advanced | **Raise your credit tier** from the billing page | | You need a one-off top-up without changing your monthly bill | **Buy a one-time credit pack** from the billing page | | You need AI Visibility, Autopilot, or Automations | **Upgrade** to Pro or Advanced — credits alone don't unlock features | | You need Outreach author lookup | **Upgrade to Advanced** — Outreach is Advanced-exclusive | | You're on Starter and need more than 1,500 credits/mo | **Upgrade to Pro** | | You earned credits from a referral or promo | **Use bonus credits** — they never expire | ## Frequently Asked Questions No. Your plan grant refreshes each billing period. Bonus and extra credits never expire and carry over indefinitely. Bonus credits stay on your team. If you reactivate later, they're still available. Yes. Go to **Settings** > **Billing** and click **Buy AI Credits**. Packs start at 2,500 credits (est. \~25 articles), never expire, and are charged immediately to your payment method on file. Referral bonuses are granted when your referred friend converts to a paid subscription. Promo redemption follows the same rules as paid teams. If you're already on Pro or Advanced and just need more volume, raising your credit tier is usually the right move. If you need new features (Visibility, Autopilot, Outreach), upgrade your plan tier first. # Managing Your Subscription Source: https://docs.trysight.ai/billing/managing-subscription View your subscription details, update payment methods, and access invoices. ## Overview Sight AI uses **Stripe** to handle all billing, payments, and invoices. You can manage every aspect of your subscription directly from your dashboard. ## Accessing Billing Navigate to **Settings** > **Billing** in your dashboard to view and manage your subscription. ## Subscription Details Your billing page shows: * **Current plan** -- The plan you're subscribed to and its monthly or annual price. * **Billing cycle** -- Whether you're on monthly or annual billing, and when your next payment is due. * **Status** -- Active, trialing, past due, or canceled. ## Billing Portal Click **Manage Billing** to open the **Stripe-powered billing portal**. From the portal, you can: * Update your payment method * View and download invoices * Update your billing address * Manage your subscription The billing portal is hosted securely by Stripe and handles all sensitive payment information. ## Payment Methods To update your payment method: 1. Go to **Settings** > **Billing**. 2. Click **Manage Billing** to open the Stripe portal. 3. Click **Payment Methods**. 4. Add a new card or update your existing one. Sight AI accepts all major credit and debit cards. ## Invoices All invoices are available through the Stripe billing portal: 1. Go to **Settings** > **Billing**. 2. Click **Manage Billing**. 3. Click **Invoice History** to view and download past invoices. Invoices are generated automatically at the start of each billing cycle and when you purchase add-ons. ## Usage Tracking Monitor your current usage from the billing page: * **AI credits** -- How much of your monthly credit pool you've used and what's remaining. * **Bonus credits** -- Non-expiring credits from referrals and promos. * **Tracked prompts** -- How many prompts are currently being tracked. * **Sites** -- How many sites are connected and how many licenses you have. ## Managing Add-Ons ### Extra credits Raise your monthly credit allowance from the **credit tier dropdown** on Pro and Advanced plans, or earn **bonus credits** through referrals. Bonus credits never expire. [Learn more about extra credits](/billing/extra-credits) ### Site Licensing Add or remove site licenses from **Settings** > **Billing** > **Sites**. Each additional site is billed as a recurring add-on on your subscription. [Learn more about site licensing](/billing/site-licensing) ## Billing Cycle * **Monthly plans** are billed on the same date each month (based on your signup date). * **Annual plans** are billed once per year on your signup anniversary. * **Credit tier changes** prorate immediately on Pro and Advanced plans. * **Site licenses** are billed monthly or annually, prorated from the date they're added. ## Failed Payments If a payment fails: 1. Sight AI will notify you by email. 2. Stripe will automatically retry the charge over the next few days. 3. If all retries fail, your account may be restricted until payment is resolved. To fix a failed payment, update your payment method in the Stripe billing portal. ## Canceling Your Subscription To cancel: 1. Go to **Settings** > **Billing**. 2. Click **Cancel Subscription**. 3. Confirm the cancellation. When you cancel: * You **retain access** to all features until the end of your current billing period. * After the billing period ends, your account is restricted (no new articles, no publishing). * Your data and existing articles are preserved. ## Reactivating Your Subscription If you've canceled and want to come back: 1. Go to **Settings** > **Billing**. 2. Click **Reactivate** or select a new plan. 3. Your subscription resumes immediately with a new billing cycle. # Site Licensing Source: https://docs.trysight.ai/billing/site-licensing Connect multiple websites to your Sight AI account with additional site licenses. ## Overview Every Sight AI plan includes **1 site**. If you need to manage content and AI visibility for additional websites, you can add extra site licenses from the billing page — each additional site is billed as a recurring add-on on your subscription. ## How It Works * **Shared credits** -- All sites on your team share the same AI credit pool. You can allocate credits to whichever site needs them most. * **Independent integrations** -- Each site has its own CMS connection, so you can connect different platforms (e.g., WordPress for one site and Webflow for another). * **Separate tracking** -- AI visibility data (prompts, mentions, citations) is tracked independently for each site. ## Adding a Site 1. Go to **Settings** > **Sites**. 2. Click **Add Site**. 3. Enter the site's domain and details. 4. A new site license is added to your subscription automatically. The new site is available immediately, and billing is prorated from the date you add it. ## Billing * **Prorated** -- When you add a site mid-cycle, you're only charged for the remaining days in your billing period. * **Recurring** -- Site licenses renew automatically with your subscription. * **Combined invoice** -- Site license charges appear on the same invoice as your plan. ## License Management All license management happens on the **Billing** page in the **Sites** section, where every site on your team is listed alongside its license status. ### Assigning a License When you add a site, a license is automatically assigned. Each active site requires one license. If you have unused license slots, you can assign one to an inactive site at any time by clicking **Assign** next to it. ### Deactivating a Site (Removing a License) Deactivating a site removes its license but **keeps all of its data** (articles, keywords, AI visibility history, integrations). The freed license can then be reassigned to another site, or cancelled to lower your bill. To deactivate a site: 1. Go to **Billing** > **Sites**. 2. Find the site you want to deactivate. 3. Click **Deactivate**. 4. Confirm in the dialog that appears. You can deactivate **any** site on your team, including the oldest one, as long as **at least one site remains licensed**. The "Included" label on your oldest site is a billing label — it identifies the site that's covered by your base plan rather than an extra license slot — and does not block deactivation. The freed license is removed from your next invoice. Remaining days in the current cycle may be credited. ## Unlicensed Sites If a site loses its license (e.g., you deactivate it or your subscription lapses): * The site's existing data and articles are preserved. * You cannot generate new articles for the site. * AI visibility tracking is paused. * CMS publishing is disabled. Re-assigning a license restores full functionality. ## Deleting a Site Deleting a site is **permanent** and removes the site along with all of its data — articles, keywords, AI visibility history, CMS connections, sitemap configuration, and Google Search Console links. It is different from deactivation, which just removes the license while preserving data. ### Where to Delete a Site Delete actions live on the **Billing** page (in the **Sites** section), next to each site row. The **Site Settings** page does not have its own delete button — it links you back to Billing. ### How to Delete a Site 1. Go to **Billing** > **Sites**. 2. Find the site you want to delete. 3. Click **Deactivate** if the site is still active, then confirm. (Inactive sites can skip this step.) 4. Click **Delete** next to the now-inactive site. 5. Read the confirmation dialog, which lists everything that will be removed, and click **Delete Site**. ### Who Can Delete a Site * **Team owners** can delete any site on the team. * **Team admins** can delete sites only when the team has no active subscription. While a subscription is active, only the owner can delete sites — this is a safeguard against accidentally destroying paid resources. * **Team members** cannot delete sites. ### Deletion Rules * **You can delete any site, including the oldest one**, as long as your team has at least two sites in total. * **You cannot delete your team's only remaining site.** You must have at least one site so the team retains a workspace and a billing target. To "delete" your last site, change its URL from **Site Settings** instead, or add a new site first and then delete the old one. * Deletion is run by an atomic database operation that locks the team's site list, so it is safe even if you click Delete on two different sites at once. ## What Each Site Gets Every licensed site includes: * Full CMS integration * AI visibility tracking (prompts, mentions, citations, positions, sentiment) * IndexNow and Google Sitemap indexing * Autopilot (if your plan includes it) * Article generation from the shared AI credit pool **Automations** (scheduled agent actions — article creation, AI/Search opportunities, article boost, interlinking, site performance, outreach) are **included on Pro and Advanced plans** and metered in AI credits. See [Automations](/automations/overview). **Outreach** is **Advanced-exclusive**: the [Outreach Inbox](/ai-visibility/outreach-inbox) and Hunter-backed author email lookup require an **Advanced** plan. On other plans the Author column shows an upgrade prompt instead of a contact email. ## Shared vs. Site-Specific Resources | Resource | Shared or Site-Specific | | ---------------------------- | ----------------------------------- | | Monthly AI credit pool | Shared across all sites | | Bonus / extra credits | Shared across all sites | | Tracked prompts | Site-specific (500 per site) | | CMS integrations | Site-specific | | AI visibility data | Site-specific | | Indexing configuration | Site-specific | | Autopilot settings | Site-specific | | Automations (custom actions) | Site-specific | | Slack connection | Site-specific | | Outreach suppression list | Shared across all sites on the team | ## For Agencies If you're an agency managing content for multiple clients, site licensing lets you handle everything from a single Sight AI account: * Add a site license for each client's website. * Use team roles to control access for each client's team. * Allocate credits from your shared pool based on each client's needs. * Track AI visibility independently for every client. For agencies with 10+ sites, contact us at **[support@trysight.ai](mailto:support@trysight.ai)** for volume discounts. ## Frequently Asked Questions No. Extra site licenses require an active paid subscription. Your trial includes 1 site. Articles are associated with a specific site once generated. You cannot transfer articles between sites, but you can use the content editor to create similar content for a different site. Yes. Site licenses follow your subscription's billing interval, and annual billing includes a discount compared to paying monthly. Your sites remain active as long as they have licenses. The plan downgrade only affects your credit pool and feature access -- not the number of sites you can have, and not your per-site tracked prompts (500 per site on every plan). There's no hard limit. You can add as many site licenses as you need. For large deployments, contact us about volume options. Only licensed sites are active. If you remove a license, that site becomes unlicensed and loses access to article generation, AI tracking, and CMS publishing until a license is reassigned. Yes. Any site on your team can be deleted from **Billing** > **Sites** as long as your team has at least one other site. The oldest site is labeled "Included" because it's the one covered by your base plan — that label does not lock the site. If the oldest site is deleted, the next-oldest licensed site automatically becomes the included one. Every team must keep at least one site so it has a workspace and a billing target. If you only have one site and want to start fresh on a different domain, use **Site Settings** > **Change Site URL** instead, or add a new site first and then delete the old one from **Billing** > **Sites**. Admins can delete sites only when the team has no active subscription. While a subscription is active (including `past_due`), only the team owner can delete sites — this prevents an admin from accidentally destroying paid resources. Members cannot delete sites at all. # Free Trial Source: https://docs.trysight.ai/billing/trial Everything you need to know about your 7-day free trial. ## Overview Every new Sight AI account starts with a **7-day free trial**. The trial gives you full access to the platform so you can generate articles, explore AI visibility, connect your CMS, and see the value before committing to a paid plan. ## What's Included During your 7-day trial, you get: * **1,500 AI credits** (≈ 15 articles, or a mix of content, visibility checks, and AI chats) to spend however you like * **Full feature access** -- everything available on your selected plan * **AI visibility tracking** -- monitor your brand across AI models * **CMS integrations** -- connect WordPress, Webflow, and other platforms * **Autopilot access** -- if your selected plan includes it * **1 site included** -- connect one website ## Trial Credits Your trial includes **1,500 AI credits total**. This is a fixed allowance for the entire trial period: * Credits are shared across your **entire team**, not per user. * The 1,500-credit allowance does **not reset** during the trial. * Once you've spent all 1,500 credits, you'll need to upgrade to a paid plan to keep using AI features. ## Adding Sites During Your Trial Your trial includes **1 site**. You cannot add extra sites during the trial period -- additional site licenses require a paid subscription. If you need to test with multiple sites, upgrade to a paid plan and add site licenses from **Settings** > **Billing**. ## Changing Plans During Your Trial You can change your selected plan at any time during the trial: * **Start Now** -- Switch to the new plan immediately. Your trial continues with the new plan's features, and billing begins when the trial ends. * **End of Trial** -- Schedule the plan change for when your trial ends. You keep your current plan's features for the remainder of the trial. ### Upgrading vs. Downgrading During Trial | Action | Effect | | ------------- | --------------------------------------------------------------------- | | **Upgrade** | Immediate access to higher-tier features. No charge until trial ends. | | **Downgrade** | Scheduled for end of trial. You keep current features until then. | ## End Your Trial Early for Bonus Credits If you're ready before day 7, you can convert to a paid plan early — and we'll add a one-time **2,500 bonus credits** (≈ 25 articles) to your balance as a thank-you. Bonus credits never expire and are spent after your monthly plan grant. (This applies when you end the trial early and start your subscription, not when you simply switch your selected plan with **Start Now**.) ## Trial Expiration When your 7-day trial ends: * **Automatic conversion** -- Your account automatically converts to the paid plan you selected during signup. * **First charge** -- Your payment method is charged for the first billing cycle. * **New credits apply** -- Your balance resets to your plan's monthly credit allowance, and all plan features remain active. ## Canceling Before the Trial Ends If you cancel before your trial expires: * You **won't be charged**. * You retain access to your account and data until the trial end date. * After the trial ends, your account will be restricted until you subscribe to a plan. ## Trial Restrictions Some features are only available on paid plans: * **Extra site licenses** -- You cannot add additional sites during the trial. * **Extra credits** -- Buying additional credits requires an active paid subscription. ## Frequently Asked Questions Yes. A credit card is required to start your free trial. You won't be charged until the trial ends, and you can cancel at any time before then. Any articles you generated during the trial remain in your account. However, you won't be able to spend credits on new AI actions or publish to your CMS until you subscribe to a paid plan. Trials cannot be extended. If you need more time to evaluate, reach out to **[support@trysight.ai](mailto:support@trysight.ai)** and we'll do our best to help. No. Regardless of which plan you select, you won't be charged until your 7-day trial ends. You can change plans during the trial without affecting the trial period. Your trial gives you access to the features of whatever plan you select. If you want to try Advanced features (like Outreach), select the Advanced plan during signup -- you can always downgrade before the trial ends. # Upgrading and Downgrading Source: https://docs.trysight.ai/billing/upgrading-downgrading Change your plan to match your needs. ## Overview You can upgrade or downgrade your Sight AI plan at any time to match your evolving content needs. Upgrades take effect immediately, while downgrades are scheduled for the end of your current billing cycle. ## Upgrading ### How to Upgrade 1. Go to **Settings** > **Billing**. 2. Click **Change Plan**. 3. Select the plan you want to upgrade to. 4. Review the pricing changes. 5. Click **Confirm Upgrade**. ### Billing * **Immediate access** -- Your new plan's features and limits are available right away. * **Prorated charges** -- You're only charged the difference between your current plan and the new plan for the remainder of your billing cycle. ### What Changes When You Upgrade * Your monthly AI credit pool increases immediately (or unlocks a credit tier dropdown on Pro/Advanced). * New features (like Autopilot and AI Opportunities on Pro+) become available right away. * Outreach limits increase (Advanced). * AI model tracking expands if applicable. Tracked prompts are a fixed per-site allowance of **500 on every plan**, so they don't change when you upgrade or downgrade. ## Downgrading ### How to Downgrade 1. Go to **Settings** > **Billing**. 2. Click **Change Plan**. 3. Select the plan you want to downgrade to. 4. Review the warnings about feature and limit changes. 5. Click **Confirm Downgrade**. ### Timing Downgrades are **scheduled, not immediate**. You keep your current plan's features and limits until the end of your billing cycle. The new plan takes effect on your next billing date. ### Downgrade Warnings When you downgrade, you may lose access to certain features. Review carefully before confirming: * **Credit pool** -- Your monthly AI credit allowance will be reduced to match your new plan. * **Outreach opportunities** -- Limits will be reduced to match your new plan. ### Data Retention Your existing data is **not deleted** when you downgrade. All articles, AI visibility data, and integrations remain intact. Only active limits and feature access change. ## Plan Restrictions * **During a trial**, downgrades are scheduled for the trial end date rather than the billing cycle end. ## Timing Tips ### Best Time to Upgrade Upgrade whenever you need more capacity. Since charges are prorated, there's no financial penalty for upgrading mid-cycle. ### Best Time to Downgrade Downgrade toward the end of your billing cycle to get the most value from your current plan before the change takes effect. ## Canceling a Scheduled Downgrade If you've scheduled a downgrade but change your mind: 1. Go to **Settings** > **Billing**. 2. You'll see a notice about the pending downgrade. 3. Click **Cancel Downgrade** to stay on your current plan. The scheduled change will be removed and your current plan continues as normal. ## Frequently Asked Questions No. Your monthly plan credit grant refreshes at the start of each billing cycle regardless of plan changes. Bonus and extra credits are unaffected by plan changes and never expire. If your new plan includes Autopilot, it continues uninterrupted. If it doesn't, Autopilot will be deactivated at the end of your billing cycle. Any articles already generated are preserved. Yes, but frequent changes may result in complex prorated charges on your invoice. We recommend choosing a plan and sticking with it for at least one billing cycle to evaluate its fit. # Free Links Directory Source: https://docs.trysight.ai/collaboration/free-links A curated catalog of free, high-authority sites where you can submit your site to earn backlinks — no credits required. ## Overview The **Free links** directory is a hand-curated catalog of reputable, high-authority websites — directories, communities, and listing sites — where you can **submit your site for free** to earn backlinks. It's the simplest, lowest-cost way to start building domain authority. Find it under **Collaboration → Free links** (`app.trysight.ai/collaboration?tab=free-links`). Free links is the successor to the old **Backlinks** page. The old `/backlinks` URL now redirects here. This directory is **separate from the [Collaboration network](/collaboration/overview)**: there are no AI credits, no escrow, and no AI drafting involved. You submit to each site yourself, on your own time. ## Browsing the directory Each entry shows: * **Site name and URL** * **Domain Rating (DR)** — the site's authority, powered by Ahrefs (higher is stronger) * **Link type** — **DOFOLLOW** (passes authority) or **NOFOLLOW** (still valuable for referral traffic and discovery) * **Category/type** — directory, community, profile, etc. Use the controls at the top to: * **Search** by name * **Filter** by type, and toggle **Dofollow only** * **Sort** by DR, name, or type * **Export CSV** to work through the list in a spreadsheet Click **View details** on any row to open submission guidance for that site. ## How to use it Start with the highest-DR **dofollow** sites that fit your niche. A handful of strong, relevant links beats dozens of low-quality ones. Open the site, create an account if needed, and submit your site following the details in the **View details** panel. As your submissions go live, you accumulate backlinks that help build your domain authority over time. ## Dofollow vs. nofollow * **Dofollow** links pass "link equity" (authority) from the host site to yours — these have the most direct SEO value. * **Nofollow** links don't pass authority directly, but they still drive referral traffic, aid discovery, and make for a natural-looking, diverse backlink profile. A healthy backlink profile includes both. Don't skip a relevant, high-traffic site just because it's nofollow. ## Plan availability The Free links directory is included with any **active subscription or trial** — the same access gate as the [Collaboration network](/collaboration/overview). ## Related * [Collaboration Network](/collaboration/overview) — trade placements with other Sight AI sites using credits * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — AI email outreach to external publishers # Collaboration Network Source: https://docs.trysight.ai/collaboration/overview Trade guest posts, listicle spots, and contextual links with other Sight AI sites — settled in AI credits with built-in escrow. ## Overview **Collaboration** is a peer-to-peer placement marketplace **between Sight AI customers**. Instead of cold-emailing strangers on the open web, you browse other Sight AI sites, request a backlink or content placement, and pay for it in **AI credits** — held in escrow until the host delivers. List your own site and you can **earn those credits back** by hosting placements for others. Open it from **Collaboration** in the left sidebar (`app.trysight.ai/collaboration`). Like Outreach, Collaboration is **per site** — pick the site you want to list or request from in the workspace switcher first. **Listing your site is free.** You only spend credits when you *request* a placement, and you earn credits when you *host* one. A single placement is intentionally modest relative to your plan's monthly credits, so collaborating never drains a meaningful share of your budget. The page has two tabs: * **Collaboration** — the peer network (this page). * **Free links** — a curated directory of free, high-authority third-party submission sites. See [Free Links Directory](/collaboration/free-links). ## How it works There are two roles, and most teams play both: * **Requester** — you browse the marketplace, request a placement on another site, and your credits are held in escrow. When the host completes it, you get a real backlink/placement. * **Host** — you list what your site offers. When a request comes in, Sight AI's AI drafts the placement, you approve it (or let it auto-approve), and you **earn the requester's credits**. ### Placement types | Type | What it is | | ---------------------- | ------------------------------------------------------------------------------------------ | | **Guest post** | A full article published on the host's site with a contextual link back to you | | **Listicle inclusion** | Your site added as an entry in an existing roundup or "best of" article on the host's site | | **Link placement** | A contextual link inserted into an existing page on the host's site | ## List your site Until your site is listed, the marketplace is locked behind a **"List your site"** prompt. Click it to open the listing modal: **Profile** * **Display name** — how your site appears to other collaborators * **Site URL** — your homepage (used as the default link target) * **About your site** — a short description; this helps the AI write relevant placements * **What you offer** — choose at least one of Guest post, Listicle inclusion, Link placement * **What you're looking for** — optional; the kinds of placements you want in return **Preferences** * **When a request comes in:** * **Review each request** — the AI drafts the placement and adds it to your approval queue for review * **Auto-approve good fits** — the AI drafts *and* completes the placement automatically (credits settle without manual review) * **Auto-publish via connected CMS** — when on (and a supported CMS is connected), approved placements are published to your site automatically; otherwise you get copy-paste instructions Flip **"List my site on the network"** on to go live, then **Save**. You can turn it off anytime to hide from the marketplace. Once active, your card shows a green **Listed** badge with a **Manage listing** button. Sight AI pre-fills your listing from your existing business info, site URL, and cached [Domain Rating](#domain-rating). Review it, pick your offers, and you're live in under a minute. ## Browse collaborators & send a request The **Browse collaborators** grid shows other teams' active listings, sorted by **Domain Rating** (highest first). Each card shows the site's favicon, name, DR badge, description, and the placement types it offers. Click **Request** on a card to open the request modal: 1. **Pick a placement type** — limited to what that host offers. 2. **Link target URL** — the page you want linked. Required for listicle/link placements; optional for a guest post (defaults to your homepage). 3. **Preferred anchor text** — optional. 4. **Notes for the AI** — optional guidance for the draft. 5. Review the **Estimated cost** — the credits held in escrow now, **refunded if the placement isn't completed within 7 days**. 6. Click **Send request**. A few rules keep the network clean: * You can't request a placement from your own site or another site on your team. * You can have only **one open request per host, per placement type** at a time. * If you don't have enough credits, the request is blocked with the amount you're short. ## Request lifecycle Every request moves through these statuses (track them under **Your requests → Incoming / Outgoing**): | Status | Meaning | | --------------------- | ------------------------------------------------------ | | **Requested** | Created; credits are being placed in escrow | | **AI drafting** | Sight AI is generating the placement | | **Awaiting approval** | The draft is ready for the host to review | | **Approved** | The host approved it; credits are settling | | **Completed** | Done — credits transferred to the host | | **Declined** | The host declined; the requester is refunded | | **Expired** | Not completed within 7 days; the requester is refunded | | **Cancelled** | The requester cancelled; credits refunded | **As a host**, open a request to review the AI draft (summary, highlights, and full body). You can **edit** the title, content, anchor text, and notes, **copy** the draft, optionally paste the **published URL**, then **Approve & earn** the credits — or **Decline** to refund the requester. If your listing is set to **auto-approve**, well-formed drafts settle automatically. **As a requester**, you can track status live (the queue refreshes every few seconds) and **cancel** any request that hasn't completed yet to get your credits back. ## Credits & escrow Collaboration runs on your normal AI credit balance. The cost of a placement is a **base amount per type, multiplied by the host's Domain Rating** (higher-authority placements cost more and earn more): | Placement type | Base credits | | ------------------ | ------------ | | Guest post | 150 | | Listicle inclusion | 100 | | Link placement | 60 | | Host Domain Rating | Multiplier | | ------------------ | ---------- | | 80+ | 2× | | 60–79 | 1.5× | | 40–59 | 1.2× | | Under 40 / unknown | 1× | The final estimate is rounded up to the nearest 10 (minimum 10 credits). For example, a **guest post** costs \~150 credits on a sub-40 DR site, \~180 at DR 40–59, \~230 at DR 60–79, and \~300 at DR 80+. **How escrow works:** 1. When you send a request, the credits are **held** (reserved) from your balance. 2. When the host approves (or auto-approves), the hold is **settled**: it leaves your balance and lands in the **host's bonus credit balance** — a 1:1 transfer. 3. If the request is **declined, cancelled, or expires** (after 7 days), the hold is **released** back to you in full. Credit transfers between collaborators happen regardless of your account's credit-enforcement settings — it's always a real peer-to-peer transfer. Earned credits land in your **bonus balance**, which never expires. ## Fulfillment Once a placement is approved and settled, how it gets onto the host's site depends on the host's preferences: * **Auto-publish** (host opted in, with a supported CMS connected — WordPress, Webflow, Wix, Shopify, HubSpot, or a webhook): * **Guest post** — a new article is created from the draft and synced to the CMS * **Link placement** — Sight AI finds the best-matching existing article and inserts the contextual link * **Listicle inclusion** — Sight AI finds the relevant roundup, adds your site as an entry, and re-syncs * **Manual** — the host copies the draft and places it by hand (the default when auto-publish is off or no CMS is connected) Framer is not supported for collaboration auto-publish — Framer hosts place collaborations manually. ## Domain Rating Domain Rating (DR), powered by **Ahrefs**, appears throughout Collaboration: * It drives the **credit cost** of a placement (the multiplier above). * It's shown as a **DR badge** on every marketplace card so you can prioritize high-authority hosts. * Your own DR is shown when you list your site — hosting placements earns contextual backlinks that can lift it over time. ## Notifications Collaboration updates are delivered by **email** to your team's owners and admins: | Event | Who's notified | | ------------------------------------------ | -------------- | | A new request lands in your approval queue | Host | | Your request was approved | Requester | | Your request was declined (and refunded) | Requester | ## Plan availability The Collaboration network is available on **any plan with an active subscription or trial**. Sending a request also requires the site to have an active license. The **Free links** directory likewise requires an active subscription or trial. ## Collaboration vs. Outreach Collaboration and [Outreach](/ai-visibility/outreach-opportunities) both build backlinks, but they're different products: | | **Collaboration** | **Outreach** | | ------------ | ----------------------------------- | ---------------------------------------- | | Counterparty | Other Sight AI customers | External publishers on the open web | | Mechanism | Peer marketplace, credits in escrow | AI email agent that pitches and replies | | Payment | AI credits (1:1 peer transfer) | Credit-metered agent runs | | Setup | List your site + offers | Verified sending domain + reply tracking | | Plan | Any paid plan | Advanced | Use **Collaboration** for fast, reciprocal placements inside the Sight AI network, and [**Outreach**](/ai-visibility/outreach-opportunities) for pitching external sites at scale. ## Related * [Free Links Directory](/collaboration/free-links) — free high-authority submission sites * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — AI email outreach to external sites * [Choosing Your Plan](/billing/choosing-your-plan) — credits and plan features # Agents Source: https://docs.trysight.ai/developers/api-reference/agents Programmatic control of specialist agent engines via the v1 API and MCP. Requires the site to be on a plan that includes automations (**Pro or Advanced**) and to have sufficient AI credits. ## UI vs. API The **Automations page** (`app.trysight.ai/automations`) is the primary way to create, schedule, and monitor automations — including custom tool-based workflows. See the [Automations documentation](/automations/overview) for setup guides. The v1 API endpoints below operate on the **agent configuration store** (template agent keys). Custom automations created in the UI (`custom_actions`) are **not yet exposed** on the v1 REST or MCP API. ## REST endpoints | Method | Path | Scope | | ------ | ---------------------------------------------- | -------------- | | GET | `/api/v1/sites/{siteId}/agents` | `agents:read` | | GET | `/api/v1/sites/{siteId}/agents/runs` | `agents:read` | | PUT | `/api/v1/sites/{siteId}/agents/{agentKey}` | `agents:write` | | POST | `/api/v1/sites/{siteId}/agents/{agentKey}/run` | `agents:write` | ### Agent keys | Key | Template | | ------------------ | -------------------------------- | | `article_creation` | Search Opportunity Agent | | `ai_prompt` | AI Opportunity Agent | | `article_boost` | Article Boost Agent | | `interlinking` | Interlinking Agent | | `site_performance` | Site Performance Agent | | `outreach` | Outreach Agent *(Advanced only)* | ## MCP tools With `agents:read` / `agents:write` scopes: * `list_agents` / `list_agent_runs` * `update_agent` — toggle or tune an agent * `run_agent` — on-demand run (rate-limited; agent must be active) See [MCP Setup](/developers/mcp-setup) for OAuth and end-to-end workflow examples. ## Typical workflow ``` list_agents → update_agent (enable + schedule) → run_agent → list_agent_runs ``` Or starting from opportunities: ``` list_opportunities → run_agent (article_creation) → list_agent_runs → sync_article ``` Rate limits: agent runs are capped at **5/hour per site**. AI credit affordability is enforced when credits enforcement is active. ## Outreach Agent: outbound vs. inbound The Outreach Agent has two distinct API surfaces: | Endpoint | Purpose | Scope | | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | | `POST /api/v1/sites/{siteId}/agents/outreach/run` | **Outbound discovery** — the agent finds new prospects, looks up their emails, and sends cold pitches. This is the `agents:write` endpoint above. | `agents:write` | | `POST /api/v1/sites/{siteId}/outreach/inbox/messages` | **Inbound ingestion** — push a forwarded collab pitch into the agent's inbox so it triages and replies. Same behavior as forwarding an email to `forward+@`. | `inbox:write` | See [Outreach Inbox](/developers/api-reference/outreach-inbox) for the inbound ingestion endpoint, and [Webhooks](/developers/webhooks) for receiving outbound event notifications when the agent acts. Plan, license, and seat purchases are not available via API. # AI visibility Source: https://docs.trysight.ai/developers/api-reference/ai-visibility AI visibility analytics via API Scope: `analytics:read` | Method | Path | | ------ | -------------------------------------------------------------------- | | GET | `/api/v1/sites/{siteId}/ai-visibility/summary?days=28` | | GET | `/api/v1/sites/{siteId}/ai-visibility/trends?days=28&promptType=all` | | GET | `/api/v1/sites/{siteId}/ai-visibility/mentions?days=28` | | GET | `/api/v1/sites/{siteId}/ai-visibility/citations` | | GET | `/api/v1/sites/{siteId}/ai-visibility/competitors?days=28` | Raw LLM responses are never exposed. # Articles Source: https://docs.trysight.ai/developers/api-reference/articles Create, edit, and refresh SEO via API | Method | Path | Scope | | ------ | -------------------------------------------------------- | ---------------- | | GET | `/api/v1/sites/{siteId}/articles` | `articles:read` | | GET | `/api/v1/sites/{siteId}/articles/{id}` | `articles:read` | | GET | `/api/v1/sites/{siteId}/articles/limits` | `articles:read` | | POST | `/api/v1/sites/{siteId}/articles` | `articles:write` | | PATCH | `/api/v1/sites/{siteId}/articles/{id}` | `articles:write` | | POST | `/api/v1/sites/{siteId}/articles/{id}/refresh-seo-title` | `articles:write` | | POST | `/api/v1/sites/{siteId}/articles/{id}/refresh-seo-meta` | `articles:write` | ## Create blank draft ```json theme={null} POST /api/v1/sites/{siteId}/articles { "title": "Untitled", "article_type": "explainer" } ``` ## Generate article ```json theme={null} POST /api/v1/sites/{siteId}/articles { "targetKeyword": "best crm software", "article_type": "listicle" } ``` Article quota applies. PATCH allows: `title`, `main_content`, `seo_title`, `seo_meta_description`, `post_summary`, `slug` — not `status`. # Opportunities Source: https://docs.trysight.ai/developers/api-reference/opportunities Content opportunities via API Scope: `opportunities:read` | Method | Path | | ------ | ------------------------------------------------- | | GET | `/api/v1/sites/{siteId}/opportunities?source=all` | | GET | `/api/v1/sites/{siteId}/opportunities/readiness` | Query `source`: `ai`, `search`, or `all`. Outreach PII is excluded. # Outreach Inbox Source: https://docs.trysight.ai/developers/api-reference/outreach-inbox Push a forwarded outreach message into the Outreach Agent's inbox via the REST API. ## Ingest a forwarded outreach message `POST /api/v1/sites/{siteId}/outreach/inbox/messages` Push a forwarded-email-style message into the Outreach Agent's inbox. This produces the exact same behavior as if a team member had forwarded a collab pitch to `forward+@`: Sight AI persists the inbound message, optionally runs the LLM extractor to pull out structured opportunities, creates a conversation, and dispatches the Outreach Agent to triage and reply. Use this endpoint when your platform receives a collab pitch (or has a lead) and you want the Sight AI Outreach Agent to handle it end-to-end — triage, draft a reply, send it, and track the response. ### Required headers | Header | Required | Description | | ----------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Authorization` | Yes | `Bearer sai_<64hex>` — see [Authentication](/developers/authentication). | | `Content-Type` | Yes | `application/json`. | | `Idempotency-Key` | Recommended | A client-generated unique key. Repeat requests with the same key replay the cached response instead of re-running the ingestion. See [Idempotency](#idempotency) below. | ### Request body | Field | Type | Required | Description | | --------------- | -------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `from` | string (email) | Yes | The prospect's email address — the person the agent should consider replying to. | | `fromName` | string | No | Display name for the prospect. Rendered in the conversation's recipient field. | | `subject` | string | No | Subject line of the forwarded message. Defaults to an empty string. | | `bodyText` | string | No | Plain-text body of the forwarded message. This is what the LLM extractor parses. Defaults to an empty string. | | `bodyHtml` | string\|null | No | HTML body, if available. Stored for the inbox UI but not parsed by the extractor. | | `messageId` | string\|null | No | RFC 5322 Message-Id of the original email. Used for threading when the prospect replies. | | `inReplyTo` | string\|null | No | In-Reply-To header, if this is a reply on an existing thread. | | `references` | string\|null | No | References header chain, for threading. | | `runExtraction` | boolean | No | When `true` (default), Sight AI runs the LLM extractor on the body to pull out structured opportunities (target URL, anchor, suggested sentence). When `false`, the message is stored without LLM cost and the agent triages via the reply handler. | ### Response #### 201 Created (fresh ingestion) ```json theme={null} { "ok": true, "siteId": "site_abc123", "conversationIds": ["conv_xyz"], "opportunityIds": ["opp_001"], "entrySource": "forwarded_actionable", "aiPaused": false } ``` When the agent is paused for this conversation (noreply sender, agent inactive, or auto-reply disabled), the response is still 201 but with `aiPaused: true` and a `skipReason`: ```json theme={null} { "ok": true, "siteId": "site_abc123", "conversationIds": ["conv_xyz"], "opportunityIds": ["opp_001"], "entrySource": "forwarded_unactionable", "aiPaused": true, "skipReason": "auto_reply_disabled" } ``` #### 200 OK (idempotent replay) Same body as the original 201 response, returned when the same `Idempotency-Key` is reused within the 24h retention window. #### Error responses | Status | Code | Meaning | | ------ | -------------------- | ---------------------------------------------------------------------- | | 400 | `VALIDATION_ERROR` | Invalid request body (bad email, oversize body, etc.) | | 401 | `UNAUTHORIZED` | Missing or invalid API key | | 403 | `INSUFFICIENT_SCOPE` | Key lacks `inbox:write` scope | | 403 | `SITE_NOT_LICENSED` | Site does not have an active license | | 404 | `SITE_NOT_FOUND` | Site does not exist or isn't owned by the key's team | | 402 | `SITE_NOT_LICENSED` | Team subscription or site license problem (when `runExtraction: true`) | | 429 | `RATE_LIMITED` | Rate limit or per-site daily ingestion cap exceeded | | 503 | — | Inngest dispatch failure — retry the request | ### `runExtraction` behavior When `runExtraction: true` (the default): * Sight AI runs a Claude Haiku call on the body to extract structured opportunities (target URL, anchor, suggested sentence, source URL). * The billing gate runs first — the team must have a healthy subscription and the site must be licensed. A 402 response means the gate denied. * The per-site daily extraction cap (default 100/day) applies. When over cap, the message is stored without extraction and the agent triages via the reply handler. When `runExtraction: false`: * No LLM cost. The message is stored as `direct_inbound_external` and the agent triages it via the reply handler's own LLM call (which has its own gate). * Use this when your platform has already parsed the pitch into structured fields and you want the agent to "just handle it" without re-parsing. ### Side effects A successful call creates: * One `ai_visibility_outreach_opportunities` row per extracted ask (or one stub row when no ask is extracted). * One `outreach_conversations` row per opportunity. * One `outreach_messages` row (direction: `inbound`, sender\_type: `recipient`). * An `outreach/reply.received` Inngest event (when the conversation isn't ai\_paused), which triggers the agent to triage + reply. When outbound webhooks are enabled for the site, Sight AI also emits `outreach.opportunity_created` and `outreach.message_received` events to active subscribers. See [Webhooks](/developers/webhooks). ### Idempotency Send an `Idempotency-Key` header to safely retry a failed request without creating duplicate conversations. The key can be any opaque string up to 128 characters (alphanumeric, `.`, `_`, `-`, `:`, `.`). * First request with a given key: runs the ingestion pipeline, returns 201, caches the result. * Repeat request with the same key within 24h: returns the cached response with 200 (no re-ingestion). * The key is scoped to your API key — two different API keys can use the same key value independently. If you omit the header, every call is treated as a fresh ingestion. Only omit it when you genuinely want a new conversation; always send it when retrying a failed or timed-out request. ### Example: push a forwarded collab pitch ```bash theme={null} curl -s -X POST https://app.trysight.ai/api/v1/sites/site_abc123/outreach/inbox/messages \ -H "Authorization: Bearer sai_YOUR_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: pitch-2026-06-29-editor-example-com-001" \ -d '{ "from": "editor@example.com", "fromName": "Jane Editor", "subject": "Collab request for your SEO post", "bodyText": "Hi, I run example.com and loved your piece on X. Would you consider adding a link to our guide on Y? Happy to reciprocate.", "runExtraction": true }' ``` ### Rate limits Inherits the standard `write` rate tier (60 requests/minute per team). A per-site daily ingestion cap (default 500/day) also applies — see [Rate Limits](/developers/rate-limits). The Outreach Agent must be **active** for the site (Inbox → Settings) and the site must have a verified sending domain for the agent to auto-reply. When the agent is inactive, messages still land in the inbox but the agent won't reply until the user turns it on. # Outreach Webhooks Source: https://docs.trysight.ai/developers/api-reference/outreach-webhooks Manage outreach webhook subscriptions via the REST API (OAuth-driven app integrations). ## Create a webhook subscription `POST /api/v1/sites/{siteId}/outreach/webhooks` Create a webhook subscription so Sight AI POSTs outreach events to your endpoint. Used by app integrations after the OAuth flow completes — your app gets an access token, then calls this endpoint to register its webhook URL and choose which events to receive. ### Required headers | Header | Required | Description | | --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ | | `Authorization` | Yes | `Bearer sai_<64hex>` (API key) OR `Bearer sai_oauth_*` (OAuth access token). See [Authentication](/developers/authentication). | | `Content-Type` | Yes | `application/json`. | ### Request body | Field | Type | Required | Description | | ------------ | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `label` | string | Yes | A name for your reference (max 120 chars). | | `url` | string | Yes | The HTTPS URL Sight AI POSTs events to (max 2000 chars). | | `eventTypes` | string\[] | Yes | The subset of events to receive. Must be non-empty; each value must be in the [event catalog](/developers/webhooks#when-webhooks-fire). | ### Response #### 201 Created ```json theme={null} { "subscription": { "id": "sub_abc123", "team_id": "team_xyz", "site_id": "site_abc123", "label": "CRM — inbound handler", "url": "https://your-app.com/webhooks/sightai", "secret_prefix": "sightai_wh_abc…", "event_types": ["outreach.reply_sent", "outreach.conversation_status_changed"], "is_active": true, "consecutive_failures": 0, "created_by_oauth_client_id": "sightai_client123", "created_at": "2026-06-29T12:00:00Z", "updated_at": "2026-06-29T12:00:00Z", "last_delivery_at": null, "last_delivery_status": null }, "secret": "sightai_wh_" } ``` The `secret` is the HMAC signing secret. **Copy it now — it's never shown again.** You'll use it to verify the `SightAI-Signature` header on incoming webhooks. The `subscription` object returned (and all subsequent reads) only includes `secret_prefix`, never the full secret. When the caller is an OAuth token, `created_by_oauth_client_id` is stamped with the owning client so revoking that client cascades to delete this subscription. For API-key callers, it's `null`. #### Error responses | Status | Code | Meaning | | ------ | -------------------- | ------------------------------------------------------------ | | 400 | `VALIDATION_ERROR` | Invalid body (bad URL, empty eventTypes, unknown event type) | | 401 | `UNAUTHORIZED` | Missing or invalid credentials | | 403 | `INSUFFICIENT_SCOPE` | Credentials lack `webhooks:write` | | 403 | `SITE_NOT_LICENSED` | Site does not have an active license | | 404 | `SITE_NOT_FOUND` | Site doesn't exist or isn't owned by the credential's team | ### Example ```bash theme={null} curl -X POST https://app.trysight.ai/api/v1/sites/site_abc123/outreach/webhooks \ -H "Authorization: Bearer sai_oauth_..." \ -H "Content-Type: application/json" \ -d '{ "label": "CRM — inbound handler", "url": "https://your-app.com/webhooks/sightai", "eventTypes": ["outreach.reply_sent", "outreach.conversation_status_changed", "outreach.contact_suppressed"] }' ``` ## List webhook subscriptions `GET /api/v1/sites/{siteId}/outreach/webhooks` List all webhook subscriptions for a site. Returns the safe shape (no plaintext secrets). ### Response ```json theme={null} { "subscriptions": [ { "id": "sub_abc123", "label": "CRM — inbound handler", "url": "https://your-app.com/webhooks/sightai", "secret_prefix": "sightai_wh_abc…", "event_types": ["outreach.reply_sent"], "is_active": true, "consecutive_failures": 0, "created_by_oauth_client_id": "sightai_client123", "created_at": "2026-06-29T12:00:00Z", "last_delivery_at": "2026-06-29T12:05:00Z", "last_delivery_status": "ok" } ] } ``` Requires the `webhooks:read` scope. ## Delete a webhook subscription `DELETE /api/v1/sites/{siteId}/outreach/webhooks/{id}` Delete a webhook subscription. The subscription's delivery history is cascaded (deleted automatically). Requires the `webhooks:write` scope. ### Response ```json theme={null} { "success": true } ``` Returns `404 NOT_FOUND` if the subscription doesn't exist or doesn't belong to the site. ## Revoking an app's access To revoke an app integration's access entirely (all its subscriptions + tokens), delete its OAuth client in **Integrations → Sight AI API → OAuth apps**. This cascades to delete every webhook subscription that client created and revokes its outstanding access/refresh tokens. See [Webhooks](/developers/webhooks#the-oauth-flow) for the full OAuth flow. Subscription management is API-only — there is no dashboard form. The only dashboard surface for revoking a platform's webhooks is deleting its OAuth client. # Search analytics Source: https://docs.trysight.ai/developers/api-reference/search-analytics Google Search Console metrics via API Scope: `analytics:read` | Method | Path | | ------ | -------------------------------------------------- | | GET | `/api/v1/sites/{siteId}/search/overview?days=28` | | GET | `/api/v1/sites/{siteId}/search/timeseries?days=28` | | GET | `/api/v1/sites/{siteId}/search/queries?days=28` | | GET | `/api/v1/sites/{siteId}/search/pages?days=28` | | GET | `/api/v1/sites/{siteId}/search/articles?days=28` | # Sites Source: https://docs.trysight.ai/developers/api-reference/sites List and retrieve sites ## List sites `GET /api/v1/sites` Requires any read scope. ## Get site `GET /api/v1/sites/{siteId}` # Authentication Source: https://docs.trysight.ai/developers/authentication API keys, Bearer tokens, and OAuth scopes for the Sight AI Developer Platform ## REST API (API keys + OAuth) The v1 REST API accepts two credential types: * **API keys** (`sai_<64hex>`) — server-to-server. Create them in **Integrations → Sight AI API**. Shown once at creation. * **OAuth access tokens** (`sai_oauth_*`) — for app integrations that completed the OAuth consent flow. See [MCP Setup](/developers/mcp-setup) and [Webhooks](/developers/webhooks) for the OAuth flow. ```bash theme={null} curl -s https://app.trysight.ai/api/v1/sites \ -H "Authorization: Bearer sai_YOUR_KEY_OR_TOKEN" ``` ### Key format (API keys) * Prefix: `sai_` * 64 hex characters after the prefix * Team-scoped; optional site restrictions at creation time ### OAuth (app integrations) App integrations use OAuth 2.1 Authorization Code + PKCE. Register an OAuth client in **Integrations → Sight AI API → OAuth apps**, redirect users to `/oauth/authorize`, exchange the code at `/oauth/token`. The resulting `sai_oauth_*` access token works on both `/api/v1/*` and `/mcp`. See [Webhooks](/developers/webhooks#the-oauth-flow) for an end-to-end example. PKCE (`S256`) is **required for every client**, including server-side ones. #### Public vs. confidential clients When registering an OAuth app you choose how the client authenticates at the token endpoint: | Type | `token_endpoint_auth_method` | Use it when | Secret? | | ------------ | --------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------- | | Public | `none` | Desktop MCP clients (Cursor, Claude), SPAs, mobile apps — anything that can't keep a secret | No — PKCE only | | Confidential | `client_secret_basic` or `client_secret_post` | A server-side app (CRM, helpdesk, sales tool) with a backend that can store a secret | Yes — secret **and** PKCE | Confidential clients are created only by an authenticated team admin in the dashboard, which returns the `client_secret` (`sai_ocsec_…`) **once**. Store it server-side; it cannot be retrieved later. At the token endpoint, present it alongside PKCE: * `client_secret_basic` — `Authorization: Basic base64(client_id:client_secret)` * `client_secret_post` — `client_id` and `client_secret` in the request body ```bash theme={null} # Confidential client, client_secret_post curl -s -X POST https://app.trysight.ai/oauth/token \ -d grant_type=authorization_code \ -d code=AUTH_CODE \ -d redirect_uri=https://your.app/callback \ -d client_id=sightai_YOUR_CLIENT_ID \ -d client_secret=sai_ocsec_YOUR_SECRET \ -d code_verifier=PKCE_VERIFIER ``` For a stolen refresh token to be redeemed, an attacker would need both the `client_secret` **and** a valid PKCE exchange — so confidential clients add defense-in-depth on top of PKCE. Use a public client only when the integrator genuinely can't hold a secret. #### Rotating a client secret If a `client_secret` is exposed (or just on a schedule), rotate it from **Integrations → Sight AI API → OAuth apps**: 1. Find the confidential client and click **Rotate secret**. 2. Confirm — the old secret stops working immediately. The new secret is shown **once**; store it server-side. 3. Update your integration with the new secret. Rotation generates a new secret and stores only its SHA-256 hash, so it can never be retrieved after this one-time display. Outstanding access tokens remain valid until their natural expiry (\~1 hour); outstanding refresh tokens can no longer be redeemed without the new secret, so anyone holding the old secret is cut off from refreshing. To fully invalidate every issued token, revoke the client instead. Only confidential clients have a secret to rotate — public clients use PKCE alone. ### Scopes | Scope | Access | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `analytics:read` | Search + AI visibility analytics | | `opportunities:read` | AI + search content opportunities | | `articles:read` | List/get articles, limits | | `articles:write` | Create, edit, SEO refresh | | `agents:read` | Agent configs and runs | | `agents:write` | Toggle agents, trigger runs | | `inbox:read` | Read Outreach Agent inbox conversations and messages (contains contact PII) | | `inbox:write` | Reply to inbox threads, update conversation status, take over for the agent, mark as read, and ingest forwarded outreach messages | | `webhooks:read` | List outreach webhook subscriptions | | `webhooks:write` | Create, update, and delete outreach webhook subscriptions | ### Idempotency-Key The `POST /api/v1/sites/{siteId}/outreach/inbox/messages` endpoint accepts an optional `Idempotency-Key` header. When supplied, a repeat request with the same key replays the cached response (HTTP 200) instead of re-running the ingestion pipeline — so you can safely retry a failed or timed-out request without creating duplicate conversations. * Any opaque string up to 128 characters (alphanumeric, `.`, `_`, `-`, `:`). * Scoped to your API key — two different keys can reuse the same value. * Cached for 24 hours; after that the same key is treated as a fresh ingestion. See [Outreach Inbox](/developers/api-reference/outreach-inbox#idempotency) for details. ## MCP (OAuth only) MCP clients **must not** use API keys. Use OAuth 2.1 Authorization Code + PKCE. * Authorization: `GET /oauth/authorize` * Token: `POST /oauth/token` * Metadata: `GET /.well-known/oauth-authorization-server` Only team **owners and admins** can authorize MCP clients. ## Errors | Status | Meaning | | ------ | ------------------------------------- | | 401 | Missing or invalid credentials | | 403 | Insufficient scope or unlicensed site | | 429 | Rate limit exceeded | # API Errors Source: https://docs.trysight.ai/developers/errors Error codes and responses All errors return JSON: ```json theme={null} { "error": "Human-readable message", "code": "ERROR_CODE" } ``` | Code | HTTP | Description | | -------------------- | ---- | ------------------------------------------------------------------------- | | `UNAUTHORIZED` | 401 | Invalid or missing credentials | | `INSUFFICIENT_SCOPE` | 403 | Scope not granted on key/token | | `SITE_NOT_LICENSED` | 403 | Site requires active license | | `SITE_NOT_FOUND` | 404 | Site not in team | | `NOT_FOUND` | 404 | Resource not found | | `VALIDATION_ERROR` | 400 | Invalid request body | | `RATE_LIMITED` | 429 | Too many requests | | `AGENT_NOT_ENTITLED` | 402 | Automations not available on the team's plan (or insufficient AI credits) | | `CREDITS_EXHAUSTED` | 402 | Team AI credit pool exhausted | | `ARTICLE_LIMIT` | 403 | Article quota exhausted (when credit enforcement is off) | # Outreach Integration Guide Source: https://docs.trysight.ai/developers/guides/outreach-integration End-to-end guide for pushing a message into the Outreach Agent and listening for replies via webhooks. ## The big picture This guide walks through a complete integration: your platform receives a collab pitch, pushes it into the Sight AI Outreach Agent via the REST API, and receives real-time webhook notifications as the agent triages, replies, and tracks the conversation. ``` Your platform ──POST──> Sight AI API ──> Outreach Agent ──reply──> Prospect ^ │ │ │ │ │ └──── webhook <─────────┴────────────────┘ (reply_sent, status_changed, contact_suppressed) ``` ## Step 1: Register an OAuth client + authorize 1. Open **Integrations → Sight AI API → OAuth apps** in the Sight AI app. 2. Create a client with your app's name and your HTTPS redirect URI (e.g. `https://your-platform.com/oauth/callback`). For a server-side platform, check **Server-side app (issue a client secret)** to register a confidential client and copy the `client_id` + `client_secret` (`sai_ocsec_…`) shown once. Otherwise copy just the `client_id` (public client). 3. In your platform, add a "Connect Sight AI" button that redirects the user to Sight AI's authorize endpoint with the scopes you need (`webhooks:write`, `webhooks:read`, `inbox:write`) + PKCE: ``` GET https://app.trysight.ai/oauth/authorize ?response_type=code&client_id=YOUR_CLIENT_ID &redirect_uri=https://your-platform.com/oauth/callback &scope=webhooks:write webhooks:read inbox:write &code_challenge=PKCE_CHALLENGE&code_challenge_method=S256&state=RANDOM ``` 4. The user picks a site and approves the scopes on Sight AI's consent screen. Your redirect handler exchanges the code for a `sai_oauth_*` access token at `POST /oauth/token`. See [Authentication](/developers/authentication) for the OAuth flow and scope model, and [Webhooks](/developers/webhooks#the-oauth-flow) for the full sequence. ## Step 2: Create the webhook subscription via API After your platform has an access token, create the webhook subscription programmatically (no dashboard form needed): ```bash theme={null} curl -X POST https://app.trysight.ai/api/v1/sites/site_abc123/outreach/webhooks \ -H "Authorization: Bearer sai_oauth_..." \ -H "Content-Type: application/json" \ -d '{ "label": "CRM — inbound handler", "url": "https://your-platform.com/webhooks/sightai", "eventTypes": ["outreach.reply_sent", "outreach.conversation_status_changed", "outreach.contact_suppressed"] }' ``` The response includes the **signing secret** (shown once). Store it in your environment as `SIGHTAI_WEBHOOK_SECRET`. See [Outreach Webhooks API](/developers/api-reference/outreach-webhooks) for the full reference, and [Webhooks](/developers/webhooks) for the event catalog. ## Step 3: Push a message When your platform receives a collab pitch (e.g. a prospect emailed your support inbox), POST it to the ingestion endpoint: ```bash theme={null} curl -s -X POST https://app.trysight.ai/api/v1/sites/site_abc123/outreach/inbox/messages \ -H "Authorization: Bearer sai_oauth_..." \ -H "Content-Type: application/json" \ -H "Idempotency-Key: pitch-2026-06-29-editor-example-com-001" \ -d '{ "from": "editor@example.com", "fromName": "Jane Editor", "subject": "Collab request for your SEO post", "bodyText": "Hi, I run example.com and loved your piece on X. Would you consider adding a link to our guide on Y? Happy to reciprocate.", "runExtraction": true }' ``` The response includes the `conversationId` and `opportunityId` Sight AI created. Store these so you can correlate webhook events back to the original pitch. ```json theme={null} { "ok": true, "siteId": "site_abc123", "conversationIds": ["conv_xyz"], "opportunityIds": ["opp_001"], "entrySource": "forwarded_actionable", "aiPaused": false } ``` See [Outreach Inbox](/developers/api-reference/outreach-inbox) for the full request/response reference. Always send an Idempotency-Key header. If the request times out or fails, you can safely retry with the same key without creating a duplicate conversation. ## Step 4: Verify the signature on incoming webhooks Your webhook handler must verify the `SightAI-Signature` header before processing the payload. The header is in the format `t=,v1=` where the hex is HMAC-SHA256 over `${timestamp}.${raw_body}` using your signing secret. ```javascript theme={null} import crypto from 'node:crypto'; export async function POST(request) { const rawBody = await request.text(); const sig = request.headers.get('SightAI-Signature'); const eventType = request.headers.get('SightAI-Event'); if (!verifySignature(rawBody, sig, process.env.SIGHTAI_WEBHOOK_SECRET)) { return new Response('Invalid signature', { status: 401 }); } const event = JSON.parse(rawBody); // Process the event... return new Response('ok', { status: 200 }); } function verifySignature(rawBody, signatureHeader, secret, toleranceSeconds = 300) { const parts = Object.fromEntries( signatureHeader.split(',').map((p) => p.split('=')), ); const timestamp = Number(parts.t); const signature = parts.v1; if (!timestamp || !signature) return false; if (Math.floor(Date.now() / 1000) - timestamp > toleranceSeconds) return false; const expected = crypto .createHmac('sha256', secret) .update(`${timestamp}.${rawBody}`) .digest('hex'); return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature)); } ``` See [Webhooks → Verifying the signature](/developers/webhooks#verifying-the-signature) for Python and more detail. ## Step 5: Handle `outreach.reply_sent` When the agent sends a reply, you'll receive a `outreach.reply_sent` event: ```json theme={null} { "id": "outreach.reply_sent:1719655200000:abc123", "type": "outreach.reply_sent", "siteId": "site_abc123", "teamId": "team_xyz", "timestamp": 1719655200000, "data": { "conversationId": "conv_xyz", "messageId": "msg_outbound_001", "mailgunMessageId": "<20260629...@mail-sightai.com>", "triage": "accept", "autoResolved": false, "sendOutcome": "sent" } } ``` Use the `conversationId` to correlate this reply with the original pitch you pushed in Step 3. Update your CRM with the reply details (e.g. "Sight AI agent replied — accepted the collab request"). ## Step 6: Handle `outreach.conversation_status_changed` When the conversation reaches a terminal state, you'll receive this event: ```json theme={null} { "type": "outreach.conversation_status_changed", "data": { "conversationId": "conv_xyz", "oldStatus": "open", "newStatus": "resolved", "resolvedBy": "agent", "resolutionOutcome": "accept" } } ``` Map this to your CRM's deal stages: * `resolved` → "Closed — collab accepted" * `declined` → "Closed — declined" * `awaiting_human` → "Needs human review" ## Step 7: Handle `outreach.contact_suppressed` When a prospect opts out (or bounces / complains), you'll receive this event. **Remove them from your outbound lists immediately** — continuing to email a suppressed contact risks deliverability damage. ```json theme={null} { "type": "outreach.contact_suppressed", "data": { "email": "prospect@example.com", "reason": "opted_out", "source": "inbound_classifier", "upgraded": false } } ``` ## Troubleshooting | Problem | Cause | Fix | | ---------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | | `402` response | Team subscription or site license problem | Ensure the team has an active subscription and the site is licensed | | `403 INSUFFICIENT_SCOPE` | API key lacks `inbox:write` | Re-create the key with the `inbox:write` scope | | `429` response | Rate limit or per-site daily ingestion cap | Slow down your request rate; contact support to raise the daily cap | | Webhooks not arriving | Subscription auto-disabled or endpoint returning non-2xx | Check the Developers page for auto-disabled status; verify your endpoint returns 200 within 10s | | Duplicate conversations | Missing `Idempotency-Key` header on retries | Always send the same `Idempotency-Key` when retrying a failed request | | `aiPaused: true` in response | Agent is inactive, auto-reply is off, or sender is a noreply address | Turn on the Outreach Agent in Inbox → Settings; the message still lands in the inbox for manual triage | ## Next steps * [Outreach Inbox API reference](/developers/api-reference/outreach-inbox) * [Webhooks reference](/developers/webhooks) * [Authentication](/developers/authentication) * [Rate limits](/developers/rate-limits) # MCP Setup Source: https://docs.trysight.ai/developers/mcp-setup Connect Cursor or Claude Desktop to Sight AI via OAuth This page covers **Sight AI's outbound MCP server** — connecting external clients *to* Sight AI. To pull data *from* third-party apps *into* Sight AI Agent and Automations, see [MCP Connectors](/integrations/mcp-connectors). ## Prerequisites * Sight AI team owner or admin * MCP client that supports OAuth 2.1 + PKCE (Cursor, Claude Desktop) ## MCP server Sight AI exposes a single MCP endpoint for every team: ``` https://app.trysight.ai/mcp ``` ## OAuth endpoints | Resource | URL | | ------------------ | ---------------------------------------------------------------- | | OAuth metadata | `https://app.trysight.ai/.well-known/oauth-authorization-server` | | Protected resource | `https://app.trysight.ai/.well-known/oauth-protected-resource` | ## Register a client Cursor and Claude Desktop can register automatically via OAuth Dynamic Client Registration (RFC 7591) when you connect — no manual setup required. You can also pre-register a public client from the dashboard if your MCP client requires a stable `client_id`: 1. Sign in as a team owner or admin. 2. Go to **Integrations → Sight AI API → OAuth apps**. 3. Click **Create OAuth client**, give it a recognizable name, and add a loopback redirect URI such as `http://127.0.0.1/oauth/callback` (or `cursor://anysphere.cursor-mcp/oauth/callback` for Cursor). Leave **Server-side app** unchecked — MCP clients are public clients that authenticate with PKCE only. 4. Copy the generated `client_id` if your MCP client requires a static client (see below). Loopback redirect URIs (`http://127.0.0.1/...`, `http://localhost/...`) match **any port** at runtime, per [RFC 8252 §7.3](https://www.rfc-editor.org/rfc/rfc8252#section-7.3). One registered loopback URI covers every Cursor/Claude Desktop session, even though each one picks a random callback port. The MCP server URL itself (for pointing your client) lives on **Integrations → MCP**. ## Authorize In Cursor, add an MCP server pointing at `https://app.trysight.ai/mcp`. Cursor will discover OAuth, register a client automatically, and open the Sight AI consent screen where you pick your team, sites, and scopes. If your client does not support dynamic registration, supply a pre-registered `client_id` from the dashboard: ```json theme={null} { "mcpServers": { "sight-ai": { "command": "npx", "args": [ "-y", "mcp-remote", "https://app.trysight.ai/mcp", "--static-oauth-client-info", "{\"client_id\":\"YOUR_CLIENT_ID\"}" ] } } } ``` The client initiates OAuth 2.1 with PKCE, you'll be redirected to Sight AI to sign in, pick the team, and approve scopes, and the token is then returned to your MCP client. ## Available MCP tools (v1) Sight AI MCP now mirrors most of the REST v1 Developer API. Tools are grouped by workflow. ### Sites & analytics (`analytics:read`) * `list_sites` / `get_site` * `get_search_overview` / `get_search_timeseries` / `get_search_queries` / `get_search_pages` / `get_search_article_performance` * `get_ai_visibility_summary` / `get_ai_visibility_trends` / `get_ai_visibility_mentions` / `get_ai_visibility_citations` / `get_ai_visibility_competitors` ### Opportunities (`opportunities:read`) * `list_opportunities` — filter by `source` (ai/search/all) and `status` (e.g. pending) * `get_opportunities_readiness` — pipeline warmup status ### Articles Read (`articles:read`): * `list_articles` — filter by `status` (draft, generating, ready, failed) * `get_article` — full article body, SEO fields, target keyword, and status * `get_article_limits` — monthly quota check before generating * `get_article_images` — list hero/thumbnail/inline images for an article * `fetch_url_content` — crawl a public URL (title, headings, body) for rewrite workflows * `get_writing_guide` — pipeline writing playbook for listicle / step-by-step / explainer + business context * `recommend_article_types` — recommend an article type per keyword * `recommend_article_category` — recommend a CMS category from keyword/title * `list_article_authors` — list Webflow/WordPress authors for batch assignment * `project_interlinks` — estimate interlink-automation output for a given cron + end date Write (`articles:write`): * `generate_article` — start async generation from a keyword (poll `get_article` until `ready`) * `create_draft_article` — create a blank draft (counts against quota) * `update_article` — edit title, HTML body, SEO fields, slug, and summary (status is not exposed) * `edit_article_section` — surgical body edits: append/replace a section or rewrite the intro * `refresh_seo_title` / `refresh_seo_meta` — AI SEO rewrites (rate-limited) * `generate_article_image` — AI cover image (requires billed image access) * `set_article_main_image` — set/clear the hero image from a URL * `create_article_batch` — queue 1–100 articles through the full pipeline (author round-robin, categories, interlinking focus) Authoring & batch workflows: ``` # Rewrite an existing page fetch_url_content → get_writing_guide → create_draft_article → edit_article_section → update_article → sync_article # Plan a batch recommend_article_types → list_article_authors → create_article_batch ``` ### Keywords (`keywords:read` / `keywords:write`) Keyword pipeline tools for Autopilot and manual generation workflows. Read (`keywords:read`): * `list_keywords` — paginated list with pipeline status; filter `status: no_article` for generation candidates * `get_keyword` — lookup by `keywordId`, exact `keyword` text, or `slug` * `get_keywords_summary` — totals, counts by status, and planning recommendations * `manage_keywords` actions `list`, `get`, `summary` — unified alternative to the dedicated tools Write (`keywords:write`): * `add_keywords` — single keyword or bulk (comma/newline, max 100); dedupes existing slugs * `manage_keywords` action `add` — same as `add_keywords` Smart workflow: ``` get_keywords_summary → list_keywords (status: no_article) → add_keywords → generate_article → get_article (poll) → update_article → sync_article ``` ### Agents & Automations (`agents:read` / `agents:write`) * `list_agents` / `list_agent_runs` * `update_agent` — toggle or tune an agent * `run_agent` — on-demand run (rate-limited, agent must be active) Agent keys: `article_creation`, `ai_prompt`, `article_boost`, `interlinking`, `site_performance`, `outreach` Automations are included on Pro/Advanced and metered in AI credits. The v1 REST/MCP agent endpoints operate on the agent configuration store; custom automations from the UI are not yet exposed on the v1 API. See [Automations](/automations/overview) for the full setup guide. ### CMS & integrations (`integrations:read` / `integrations:write`) Requires re-authorization if MCP was connected before these scopes were added. * `list_integrations` — connected CMS/platform integrations and which one is active * `get_cms_status` — active CMS, sync eligibility, and manual-only integrations (Framer) * `get_article_sync_status` — per-platform sync state for an article * `sync_article` — push a **ready** article to the active CMS (WordPress, Webflow, Wix, Shopify, HubSpot, webhook) ### Planner (`planner:read` / `planner:write`) * `schedule_article` — queue ready articles for a future CMS publish date * `manage_planner` — settings, scheduled queue, reschedule/remove, autopilot health * Actions: `get_settings`, `update_settings`, `list_scheduled`, `update_scheduled`, `remove_scheduled`, `get_autopilot` ### Indexing & setup health (`indexing:read` / `indexing:write`) * `submit_sitemap_gsc` — submit the configured sitemap URL to Google Search Console * `get_gsc_status` — GSC connection, property, and sync state * `submit_article_indexnow` — submit one article URL to IndexNow (after CMS sync) * `get_indexnow_status` — IndexNow verification + optional URL lookup * `get_account_health` — composite setup troubleshooting (CMS, GSC, IndexNow, autopilot, blockers) ### Outreach inbox (`inbox:read` / `inbox:write`) Requires Outreach Agent license. Contains contact PII (emails, names, message bodies). * `list_inbox` — conversation list with latest preview; filter by `status` (`unread`, `open`, `awaiting_human`, etc.) * `read_message` — full conversation thread + opportunity context + agent reasoning * `get_inbox_unread_count` — unread thread/total counts * `mark_conversation_read` — clear unread state on a thread * `reply_to_message` — send a human reply (requires Outreach email setup) * `update_conversation_status` — resolve, decline, reopen, pause, or resume AI * `take_over_conversation` — hand `awaiting_human` threads to the Outreach Agent ### End-to-end content workflow ``` list_sites → get_keywords_summary → list_keywords (status: no_article) → add_keywords (optional) → get_article_limits → generate_article → get_article (poll) → update_article (optional) → refresh_seo_title (optional) → get_cms_status → sync_article ``` Or starting from opportunities: ``` list_sites → get_opportunities_readiness → list_opportunities → get_article_limits → generate_article → get_article (poll) → refresh_seo_title (optional) → get_cms_status → sync_article ``` Or with an automation (agent): ``` list_agents → run_agent → list_agent_runs → sync_article ``` Articles must be in **ready** status with a title and body before `sync_article` succeeds. Framer is manual-export only — use the Sight AI UI to export. Rate limits: article generation (10/day per team), SEO refresh (20/hr), agent runs (5/hr per site), keyword adds (100/hr per site). AI credit affordability is enforced via the credits system when enforcement is on. # Overview Source: https://docs.trysight.ai/developers/overview # Sight AI Developer Platform The Sight AI Developer Platform exposes your team's proprietary analytics, opportunities, articles, and agent controls through: * **REST API** (`/api/v1`) — authenticated with team API keys (`sai_*`) * **MCP server** (`/mcp`) — authenticated with OAuth 2.1 (for Cursor, Claude Desktop, and other MCP clients) ## What you can access | Area | REST | MCP | | ---------------------------------------------------------------------------------- | ---- | --------- | | Search analytics (GSC) | Yes | Yes | | AI visibility metrics | Yes | Yes | | Content opportunities | Yes | Yes | | Articles — read/write + SEO refresh | Yes | Yes | | Articles — drafts, inline section edits, images, URL fetch, batch, recommendations | — | Yes (MCP) | | Agents (read/control runs) | Yes | Yes | | Outreach inbox — ingest forwarded messages | Yes | — | | Outreach webhooks — outbound event notifications | Yes | — | ## What is not available via API * Billing, subscription changes, or plan/seat purchase * Article publish/status changes (no `articles:publish` scope in v1) Outreach contact PII (prospect email addresses) IS exposed via the ingestion endpoint — but only when your platform supplies it. Sight AI does not expose prospect emails you didn't push in. The inbox:read scope gates read access to existing inbox conversations. ## Getting started 1. For REST API access, open **Integrations → Sight AI API** in the Sight AI app and create an API key with the scopes you need. OAuth apps (for app integrations and webhooks) live on the same page. 2. For MCP, open **Integrations → MCP** and point your client at the MCP server URL — see [MCP Setup](/developers/mcp-setup). ## Base URL ``` https://app.trysight.ai/api/v1 ``` ## Support Documentation: [docs.trysight.ai/developers](https://docs.trysight.ai/developers/overview) # Rate limits Source: https://docs.trysight.ai/developers/rate-limits Per-key and per-token rate limits Limits apply per API key or OAuth access token. | Tier | Limit | | ---------------------------- | ---------------------- | | Read endpoints | 300 requests / minute | | Write endpoints | 60 requests / minute | | Article generate / agent run | 10 requests / minute | | Article generate (daily) | 10 / day / credential | | SEO refresh | 20 / hour / credential | | Agent manual run | 5 / hour / site | When limited, the API returns `429` with a `Retry-After` header. # Security Source: https://docs.trysight.ai/developers/security Key hygiene, rotation, logging, and incident response ## Key storage * API keys are stored as SHA-256 hashes — we cannot recover a lost key. * OAuth access and refresh tokens are hashed at rest. * Full secrets are never written to audit logs. ## Rotation 1. Create a new key (or use **Rotate** on an existing key in the Developers page). 2. Update your integration to use the new key. 3. Revoke the old key. OAuth client secrets are rotated from **Integrations → Sight AI API → OAuth apps → Rotate secret**. The old secret stops working immediately; outstanding refresh tokens can't be redeemed without the new secret. To invalidate all issued tokens, revoke the client instead. ## Logging We log: route, method, status code, latency, key prefix, and IP — **not** request/response bodies or Authorization headers. ## Incident response If a key is exposed: 1. Revoke it immediately in **Integrations → Sight AI API**. 2. Review recent API logs in the Developers page. 3. Create a new key with minimum required scopes. ## MCP OAuth * Redirect URIs must be HTTPS or localhost/127.0.0.1 only. * PKCE (`S256`) is required for authorization code exchange — for every client, including confidential ones. * OAuth tokens are bound to a single team selected at consent. ## OAuth client authentication * **Public clients** (`token_endpoint_auth_method: none`) authenticate with PKCE only — for desktop MCP clients, SPAs, and mobile apps that can't hold a secret. * **Confidential clients** (`client_secret_basic` / `client_secret_post`) authenticate with a client secret **and** PKCE. The secret is hashed at rest (SHA-256) and returned once at creation; it can never be recovered. Use a confidential client for server-side integrations so a stolen refresh token can't be redeemed without the secret. * Confidential clients are issued only by an authenticated team admin via the dashboard. Open Dynamic Client Registration (`POST /oauth/register`) is public-only — anonymous callers can never obtain a secret. ## Outreach webhook verification When you subscribe to [Outreach Webhooks](/developers/webhooks), Sight AI signs every POST with an HMAC-SHA256 signature in the `SightAI-Signature` header (format: `t=,v1=`). **Always verify the signature before processing the payload** — an unverified webhook could be a forged request from anyone who knows your endpoint URL. The signing secret is shown once at subscription creation. Store it in your environment and never expose it in client-side code or logs. See [Webhooks → Verifying the signature](/developers/webhooks#verifying-the-signature) for Node.js and Python verification code. ## API-key-trusted sender semantics When you push a message into the Outreach Agent via `POST /api/v1/sites/{siteId}/outreach/inbox/messages`, the `from` field you supply is treated as the prospect's email address — Sight AI does not verify that the email actually belongs to the person your platform claims it does. The API key holder is a trusted forwarder (analogous to a team member forwarding an email), so the platform is responsible for the accuracy of the `from` field. A compromised API key could inject arbitrary "forwarded" messages and cause the agent to send replies to arbitrary addresses. Mitigations: * **Rotate exposed keys immediately** via the Developers page. * **Use minimum scopes** — a key with only `inbox:write` can't read analytics or trigger other agents. * **Restrict to specific sites** at key creation time when possible. * The per-site daily ingestion cap (default 500/day) bounds the blast radius. * The suppression list + noreply filter + agent triage are still honored regardless of the sender. # Webhooks Source: https://docs.trysight.ai/developers/webhooks Receive outbound webhook events when the Outreach Agent acts on a conversation. ## What are outreach webhooks? Outreach webhooks let your platform receive real-time notifications when the Sight AI Outreach Agent acts on a conversation you pushed in via the [Ingestion API](/developers/api-reference/outreach-inbox) or that arrived via email forwarding. Instead of polling the inbox, Sight AI POSTs an event to your URL the moment something happens. ## When webhooks fire Sight AI emits events at these points in the outreach lifecycle: | Event | When it fires | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | `outreach.opportunity_created` | A new outreach opportunity row is created (from a forwarded pitch, a direct inbound, or the API ingestion endpoint). | | `outreach.message_received` | An inbound message lands in the inbox (forward, direct inbound, or reply on an existing thread). | | `outreach.reply_sent` | The agent sends a reply to the prospect. | | `outreach.conversation_status_changed` | A conversation's status transitions to a terminal state (`resolved`, `declined`, `awaiting_human`). | | `outreach.contact_suppressed` | A contact is added to the team-wide suppression list (opt-out, bounce, complaint, or manual). | ## Subscribing Webhook subscriptions are managed via the REST API after a platform completes the OAuth flow. There is no manual dashboard form — a platform registers an OAuth client, the user authorizes it, and the platform creates its subscription programmatically. ### The OAuth flow 1. **Register an OAuth client** (one-time, developer setup). In **Integrations → Sight AI API → OAuth apps**, create a client with your app's name and HTTPS redirect URI. For a server-side app, check **Server-side app (issue a client secret)** to register a confidential client — copy the `client_id` and the `client_secret` (`sai_ocsec_…`) shown once. For a desktop/SPA client, leave it unchecked (public client, PKCE only). See [Authentication → Public vs. confidential clients](/developers/authentication#public-vs-confidential-clients). 2. **Redirect the user to authorize.** Your app redirects the user to Sight AI's authorize endpoint with the scopes it needs (`webhooks:write`, `inbox:write`, etc.) and PKCE: ``` GET https://app.trysight.ai/oauth/authorize ?response_type=code &client_id=YOUR_CLIENT_ID &redirect_uri=https://your-app.com/oauth/callback &scope=webhooks:write webhooks:read inbox:write &code_challenge=PKCE_CHALLENGE &code_challenge_method=S256 &state=RANDOM_STATE ``` 3. **User consents.** The user picks the site(s) to grant access to and approves the requested scopes on Sight AI's consent screen. 4. **Exchange the code for an access token.** Your app exchanges the authorization code for a `sai_oauth_*` access token. Confidential clients also send their `client_secret`; public clients rely on PKCE alone: ```bash theme={null} # Confidential client (client_secret_post) — send the secret in the body curl -X POST https://app.trysight.ai/oauth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "authorization_code", "code": "AUTH_CODE", "client_id": "YOUR_CLIENT_ID", "client_secret": "sai_ocsec_YOUR_SECRET", "redirect_uri": "https://your-app.com/oauth/callback", "code_verifier": "PKCE_VERIFIER" }' ``` 5. **Create the webhook subscription.** Your app uses the access token to create its subscription, selecting the event types it wants: ```bash theme={null} curl -X POST https://app.trysight.ai/api/v1/sites/SITE_ID/outreach/webhooks \ -H "Authorization: Bearer sai_oauth_..." \ -H "Content-Type: application/json" \ -d '{ "label": "CRM — inbound handler", "url": "https://your-app.com/webhooks/sightai", "eventTypes": ["outreach.reply_sent", "outreach.conversation_status_changed"] }' ``` The response includes the **signing secret** (shown once — store it securely). See [Outreach Webhooks API](/developers/api-reference/outreach-webhooks) for the full request/response reference. You can create multiple subscriptions per site (e.g. one for your CRM, one for your analytics pipeline) and multiple event types per subscription. To revoke a platform's access, delete its OAuth client in **Integrations → Sight AI API → OAuth apps** — this cascades to delete all webhook subscriptions that client created. Event types are selected when you create the subscription, not as OAuth scopes. The webhooks:write scope grants the capability to create subscriptions; the eventTypes array in the create request chooses which events you receive. ## Verifying the signature Every webhook POST includes a `SightAI-Signature` header in the Stripe-style format: ``` t=,v1= ``` The signature is an HMAC-SHA256 over `${timestamp}.${raw_request_body}` using your subscription's signing secret. ### Verify in Node.js ```javascript theme={null} import crypto from 'node:crypto'; function verifySignature(rawBody, signatureHeader, secret, toleranceSeconds = 300) { const parts = Object.fromEntries( signatureHeader.split(',').map((p) => { const [k, v] = p.split('='); return [k, v]; }), ); const timestamp = Number(parts.t); const signature = parts.v1; if (!timestamp || !signature) return false; // Reject replays older than the tolerance const age = Math.floor(Date.now() / 1000) - timestamp; if (age > toleranceSeconds) return false; const expected = crypto .createHmac('sha256', secret) .update(`${timestamp}.${rawBody}`) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature), ); } // In your handler: // const rawBody = await request.text(); // IMPORTANT: use the raw body, not parsed JSON // const sig = request.headers.get('SightAI-Signature'); // if (!verifySignature(rawBody, sig, process.env.SIGHTAI_WEBHOOK_SECRET)) { // return new Response('Invalid signature', { status: 401 }); // } ``` ### Verify in Python ```python theme={null} import hmac import hashlib import time def verify_signature(raw_body: bytes, signature_header: str, secret: str, tolerance: int = 300) -> bool: parts = dict(p.split('=', 1) for p in signature_header.split(',')) timestamp = int(parts.get('t', 0)) signature = parts.get('v1', '') if not timestamp or not signature: return False if int(time.time()) - timestamp > tolerance: return False expected = hmac.new( secret.encode(), f"{timestamp}.".encode() + raw_body, hashlib.sha256, ).hexdigest() return hmac.compare_digest(expected, signature) ``` Always verify the signature **before** processing the payload. An unverified webhook could be a forged request from anyone who knows your endpoint URL. ## Event payload All events share the same envelope shape: ```json theme={null} { "id": "outreach.reply_sent:1719655200000:abc123", "type": "outreach.reply_sent", "siteId": "site_abc123", "teamId": "team_xyz", "timestamp": 1719655200000, "data": { ... } } ``` The `data` object is event-specific: ### `outreach.opportunity_created` ```json theme={null} { "data": { "opportunityId": "opp_001", "conversationId": "conv_xyz", "entrySource": "forwarded_actionable" } } ``` ### `outreach.message_received` ```json theme={null} { "data": { "conversationId": "conv_xyz", "opportunityId": "opp_001", "messageId": "msg_abc", "entrySource": "forwarded_actionable" } } ``` ### `outreach.reply_sent` ```json theme={null} { "data": { "conversationId": "conv_xyz", "messageId": "msg_outbound_001", "mailgunMessageId": "<20260629...@mail-sightai.com>", "triage": "accept", "autoResolved": false, "sendOutcome": "sent" } } ``` ### `outreach.conversation_status_changed` ```json theme={null} { "data": { "conversationId": "conv_xyz", "oldStatus": "open", "newStatus": "resolved", "resolvedBy": "agent", "resolutionOutcome": "accept" } } ``` ### `outreach.contact_suppressed` ```json theme={null} { "data": { "email": "prospect@example.com", "reason": "opted_out", "source": "inbound_classifier", "upgraded": false } } ``` ## Responding to webhooks Your endpoint must return a **2xx status code** within **10 seconds**. Anything else (3xx, 4xx, 5xx, or a timeout) is treated as a failure and triggers a retry. Sight AI does not inspect the response body — only the status code matters. ## Retries Failed deliveries are retried up to **3 times** with exponential backoff. A failure is: * A non-2xx HTTP response. * A network error (DNS failure, connection refused, timeout). * A response that takes longer than 10 seconds. Retries use Inngest's built-in retry mechanism. Each retry re-sends the same event payload (same `id`), so your endpoint can dedup on `id` if needed. ### Auto-disable After **10 consecutive failures**, Sight AI auto-disables the subscription (`is_active = false`) to stop hammering a broken endpoint. The subscription appears as **auto-disabled** in the Developers page. Fix your endpoint and re-create the subscription to resume delivery. A successful delivery (2xx) resets the consecutive-failure counter to 0. ## Security * **Verify the signature** on every incoming webhook. Never process an unverified payload. * **Never expose the signing secret** in client-side code, logs, or error messages. * **Use HTTPS** for your endpoint URL. Sight AI does not POST to HTTP URLs. * **Rotate the secret** by deleting and re-creating the subscription if you suspect it's been exposed. * Sight AI does not currently publish stable egress IPs for allowlisting. Rely on the HMAC signature for authentication rather than IP-based access control. ## Delivery history The Developers page shows the last delivery status for each subscription. For full per-event delivery history (payload, response status, retry schedule), contact support — the `outreach_webhook_deliveries` audit table records every attempt. # General FAQs Source: https://docs.trysight.ai/faqs/general Answers to frequently asked questions about Sight AI. ## Getting Started Sight AI is an AI-powered content and visibility platform that helps you generate high-quality, SEO-optimized articles and track how your brand appears across AI models like ChatGPT, Perplexity, Gemini, and others. It combines multi-agent article generation with AI visibility monitoring to help you rank in both search engines and AI assistants. Yes. Every new account gets a **7-day free trial** with **1,500 AI credits** included. You get full access to all features on your selected plan during the trial. A credit card is required to start. [Learn more about the trial](/billing/trial). Yes. A credit card is required to start your free trial. You won't be charged until the 7-day trial ends, and you can cancel at any time before then. Sight AI integrates with **WordPress**, **Webflow**, **Framer**, **Shopify**, and **Wix**. You can also use webhooks and Zapier to connect with other platforms. ## Content Generation Articles are typically **1,500--3,000+ words** depending on the article type and topic. Explainer articles tend to be shorter, while step-by-step guides and listicles are longer and more detailed. Most articles are generated in **5--10 minutes**. You can watch real-time progress as each of the 13+ AI agents completes its step in the pipeline. Yes. You can provide custom instructions, set your brand voice, and edit any article after generation using the built-in content editor. [Learn more about custom instructions](/ai-content/custom-instructions). Yes. Every article is generated from scratch by our multi-agent AI system. The content is unique, not copied from existing sources, and optimized for both search engines and AI models. ## AI Visibility AI visibility measures how often and how favorably your brand appears in AI-generated responses. When someone asks ChatGPT, Perplexity, or Gemini a question related to your industry, AI visibility tracks whether your brand is mentioned, cited, or recommended. [Learn more](/ai-visibility/what-is-ai-visibility). Sight AI tracks your brand across **Google**, **ChatGPT**, **Perplexity**, **Gemini**, **Claude**, and **Grok**. Every paid plan includes all 6 sources. [See AI models](/ai-visibility/ai-models). Tracked prompts are refreshed regularly to capture changes in how AI models respond over time. The exact refresh frequency depends on your plan and the number of prompts being tracked. ## Autopilot Autopilot is Sight AI's fully automated content generation system. Once activated, it researches keywords relevant to your business and generates fresh articles every day -- with zero manual effort. [Learn more about Autopilot](/autopilot/how-autopilot-works). Autopilot is available on **Pro** and **Advanced** plans (credit-metered). Starter focuses on manual content generation — upgrade to Pro for Autopilot. When you activate Autopilot, Sight AI analyzes your website, industry, and target audience to generate a pool of **90 targeted keyword phrases**. You can also add your own custom keywords to the queue. ## Agents & Automations Automations turn your opportunity backlog into autonomous action. They include the [Search Opportunity Agent](/automations/agent-templates#search-opportunity-agent), [AI Opportunity Agent](/automations/agent-templates#ai-opportunity-agent), [Article Boost Agent](/automations/agent-templates#article-boost-agent), [Interlinking Agent](/automations/agent-templates#interlinking-agent), [Site Performance Agent](/automations/agent-templates#site-performance-agent), and [Outreach Agent](/automations/agent-templates#outreach-agent) — plus the [Outreach Inbox](/ai-visibility/outreach-inbox) and Hunter-backed author email lookup on outreach opportunities. Create and schedule them from the **Automations** page (`app.trysight.ai/automations`) or ask Agent chat to set one up. [Getting started guide →](/automations/getting-started) **Autopilot** generates articles from a keyword pool on a fixed daily schedule — it's a scheduler. **Automations** are specialist autonomous workers that read your opportunity queues (Search, AI, Outreach), decide what to act on, and call the right tools (article dispatch, content refresh, anchor insertion, outreach send + reply, Lighthouse audit) on a cron schedule you set. Most teams run both — Autopilot handles broad keyword coverage, Automations act on signal. Automations are **included on Pro and Advanced** plans and metered in **AI credits** — each run draws from your plan's credit pool. The **Outreach Agent** requires the **Advanced** plan. [See Choosing Your Plan](/billing/choosing-your-plan). The [Outreach Inbox](/ai-visibility/outreach-inbox) is a three-pane reading + reply UI surfacing every outreach conversation for a site: agent-initiated threads, replies coming back from prospects, pitches your team forwarded in, and direct inbound to your forward bucket address. You can reply manually, hit **Draft with AI** to seed a draft, or **Have the agent take this over** for stored conversations the agent didn't auto-reply to. ## Billing Sight AI offers monthly and annual billing through Stripe. Your subscription renews automatically at the start of each billing cycle. [View plans](/billing/choosing-your-plan). No. Your monthly plan credit grant refreshes at the beginning of each billing cycle. Bonus credits (from referrals and promos) never expire and carry over indefinitely. Yes. You can upgrade or downgrade at any time from your billing settings. Upgrades take effect immediately with prorated charges. Downgrades are scheduled for the end of your billing cycle. [Learn more](/billing/upgrading-downgrading). Go to **Settings** > **Billing** and click **Cancel Subscription**. You retain access until the end of your current billing period. [Learn more](/billing/managing-subscription). ## Teams Yes. Sight AI supports team collaboration with role-based access. You can invite team members as Owners, Admins, or Members. [Learn more about teams](/teams/managing-teams). Each team has its own subscription. All team members share the team's AI credit pool and site licenses (tracked prompts are a per-site allowance of 500 each). There is no additional per-user charge beyond plan seats — billing is based on your plan, credit tier, and add-ons. *** ## Still Have Questions? If you didn't find what you're looking for, reach out to our support team at **[support@trysight.ai](mailto:support@trysight.ai)**. We're happy to help. # Troubleshooting Source: https://docs.trysight.ai/faqs/troubleshooting Solutions to common issues and how to resolve them. ## Account Issues * Double-check that you're using the correct email address. * Try resetting your password from the login page. * Clear your browser cache and cookies, then try again. * If you signed up with Google or another social provider, make sure you're using the same sign-in method. * If the issue persists, contact **[support@trysight.ai](mailto:support@trysight.ai)**. * Check your spam or junk folder. * Make sure you entered the correct email address during signup. * Try requesting a new verification email from the login page. * Add **[noreply@trysight.ai](mailto:noreply@trysight.ai)** to your email contacts to prevent future filtering. * If you still don't receive it, contact **[support@trysight.ai](mailto:support@trysight.ai)**. ## Article Generation * Check the error message in the article's detail view for specific details. * Make sure your team still has remaining AI credits this billing period. * Try generating the article again -- transient errors are usually resolved on retry. * If the keyword is very niche or ambiguous, try rephrasing it for better results. * If failures persist, contact support with the article ID and error details. * Article generation typically takes 5--10 minutes. Wait a few more minutes before taking action. * Refresh your browser to check for an updated status. * If the article has been generating for more than 20 minutes, it may have encountered a silent error. Try deleting and regenerating it. * If this happens frequently, contact **[support@trysight.ai](mailto:support@trysight.ai)**. * Use **custom instructions** to provide more context about your brand voice, audience, and expectations. [Learn about AI agents and custom instructions](/ai-content/ai-agents). * More specific keywords tend to produce better results than broad, generic ones. * Edit the article using the content editor to refine it to your standards. * Try generating another article on the same topic with different phrasing. ## CMS Integration * Verify that the Sight AI WordPress plugin is installed and activated on your site. * Make sure your WordPress site is publicly accessible (not behind a firewall or localhost). * Check that your WordPress REST API is enabled and not blocked by a security plugin. * Try disconnecting and reconnecting the integration from **Settings** > **Integrations**. * If you're using a managed WordPress host, ensure API access is not restricted. * Confirm that your Webflow API token is still valid and hasn't expired. * Check that the correct CMS collection is selected in your integration settings. * Verify that the collection fields match what Sight AI expects (title, body, slug, etc.). * Try disconnecting and reconnecting the Webflow integration. * Verify the article status is **Published** (not Scheduled or Draft) in the Planner. * Check your CMS to confirm the article was received and is set to a published state. * Some CMS platforms require cache clearing before new content appears on the public site. * For WordPress, check that the post status is set to "Published" rather than "Draft" in your WordPress admin. ## AI Visibility * AI visibility data can take up to 24--48 hours to populate after you set up your tracked prompts. * Make sure you have at least one tracked prompt configured in **AI Visibility** > **Tracked Prompts**. * Verify that your brand name or domain is correctly entered in your site settings. * If data hasn't appeared after 48 hours, contact support. * Not all prompts will return mentions of your brand -- this is normal and reflects your current AI visibility. * Try tracking variations of the prompt to capture different phrasings. * AI model responses change over time. Results may appear in future refreshes as AI models update their training data. ## Indexing * Make sure you're signing in with the Google account that has access to the Search Console property. * Verify that the site URL in Sight AI matches the property in Google Search Console exactly (including http vs. https and www vs. non-www). * If your site uses `www.`, make sure your Sight AI site URL also includes `www.` -- you can update this in **Site Settings** > **Change Site URL**. * Try revoking the Sight AI connection in your Google account permissions and reconnecting. * Confirm that your IndexNow API key is correctly configured. * Check that the IndexNow key file is accessible at the expected URL on your domain. * Verify your site is publicly accessible and not behind a maintenance page. * Some hosts block automated requests -- check with your hosting provider. * If your site uses `www.` but Sight AI shows it without, go to **Site Settings** > **Change Site URL** and re-enter your domain with the `www.` prefix. * Sight AI preserves your www preference when you enter it during setup or when changing your URL. * Make sure to enter the domain exactly as it appears in your browser (e.g., `www.yoursite.com` not `yoursite.com`). * Make sure your sitemap is accessible at a standard location (e.g., `/sitemap.xml`). * Verify the sitemap is valid XML and contains the correct URLs. * For WordPress sites, check that your SEO plugin is generating the sitemap correctly. * Try submitting your sitemap URL manually in Google Search Console. ## Billing * Check that your credit card is not expired and has sufficient funds. * Update your payment method in **Settings** > **Billing** > **Manage Billing**. * Stripe will automatically retry failed payments over the next few days. * If the issue persists after updating your card, contact your bank or **[support@trysight.ai](mailto:support@trysight.ai)**. * Review your invoice in the Stripe billing portal (**Settings** > **Billing** > **Manage Billing**). * Prorated charges from plan changes or mid-cycle add-ons may cause unexpected amounts. * If you believe there's an error, contact **[support@trysight.ai](mailto:support@trysight.ai)** with your invoice details and we'll investigate promptly. ## Performance * Try refreshing the page or clearing your browser cache. * Check your internet connection speed. * Disable browser extensions that might interfere with the application. * Try a different browser to rule out browser-specific issues. * If the issue persists, it may be a temporary server issue -- try again in a few minutes. * Hard-refresh the page (Cmd+Shift+R on Mac, Ctrl+Shift+R on Windows). * Clear your browser's local storage and cookies for the Sight AI domain. * Make sure your browser is up to date. * Try accessing the dashboard from an incognito/private window. * If the problem continues, contact **[support@trysight.ai](mailto:support@trysight.ai)** with a screenshot of the issue. *** ## Still Need Help? If you weren't able to resolve your issue using the guides above, contact our support team at **[support@trysight.ai](mailto:support@trysight.ai)**. Include as much detail as possible -- screenshots, error messages, and steps to reproduce -- so we can help you quickly. # Adding Your First Site Source: https://docs.trysight.ai/getting-started/adding-your-first-site Connect your website to Sight AI and start generating content. ## Overview After creating your account, the first step is to add your website to Sight AI. This allows the platform to generate content tailored to your site, track your AI visibility, and submit new content to search engines. ## Adding a New Site Adding a site takes a single input — just the domain: 1. From the sidebar, click **Add Site** (on your very first site, you're guided through this during onboarding). 2. Enter your website **domain** (e.g., `example.com` or `www.example.com`). 3. Continue — Sight AI creates the site and immediately kicks off **automatic setup** in the background. If your site uses `www.` (e.g., `www.example.com`), include it. Sight AI preserves your www preference and uses it consistently for article URLs, indexing, and integrations. Your plan includes **1 website**; adding more requires a [site license](/billing/site-licensing). Trial accounts are limited to one site. ## Automatic setup (auto-configure) Instead of filling out forms, Sight AI configures your new site with AI: * **Sitemap detection** — probes common locations (`/sitemap.xml`, `/sitemap_index.xml`, and others) on your domain and its `www` variant. * **Blog URL pattern** — detects where your articles live (defaults to `/blog/`). * **Business info** — analyzes your homepage to fill in company name, industry, target audience, brand voice, key products/services, and unique selling points. This runs automatically right after you add a site. You can re-run it anytime with **Auto-configure with AI** on the **Your website** card in the Setup hub. AI business analysis runs once your trial or subscription is active; sitemap and blog detection always run. Auto-configure never overwrites details you've already filled in by hand. ## The Setup hub After a site is created, you land in the **Setup hub** — a panel in the Agent workspace you can reopen anytime from **Setup** in the sidebar (or by visiting `/setup`). It tracks three required tasks plus optional enhancements, with a progress bar showing how many of the **3 core tasks** are done. **Required** 1. **Your website** — sitemap, blog URL pattern, and business details. Click **Edit** to adjust the **site icon** (favicon by default, or upload your own), the **sitemap & blog URLs**, or the **business details**. 2. **Google Search Console** — connect to unlock search analytics, the dashboard, and opportunities. 3. **Website CMS** — connect a platform for automatic publishing. **Optional** * **Slack** — bring the agent into your workspace * **MCP Connectors** — plug in SEO tools, analytics, and CRMs (Pro and above) * **Outreach** — AI email outreach to earn backlinks (Advanced) * **AI Visibility** — set your brand, competitors, and recheck cadence * **Indexing** — Google sitemap submission and Bing IndexNow ### Connect your CMS Connect a CMS to enable automatic publishing (optional — you can always copy content manually): * [WordPress Integration](/integrations/wordpress) * [Webflow Integration](/integrations/webflow) * [Framer Integration](/integrations/framer) * [Shopify Integration](/integrations/shopify) * [Wix Integration](/integrations/wix) ### Configure indexing From the Setup hub's **Indexing** row you can connect **Google Search Console** for automatic sitemap submission, enable **Bing IndexNow** for real-time URL submission, and confirm your sitemap. ## Managing Multiple Sites If you have multiple sites, you can switch between them using the site selector in the sidebar. Each site has its own: * Articles and content queue * Keyword research pool * AI visibility tracking * Integration settings * Autopilot configuration ## Next Steps Now that your site is set up, you can: 1. [Connect your CMS integration](/integrations/wordpress) 2. [Generate your first article](/ai-content/overview) 3. [Set up AI visibility tracking](/ai-visibility/what-is-ai-visibility) 4. [Configure search engine indexing](/indexing/how-it-works) # Creating Your Account Source: https://docs.trysight.ai/getting-started/creating-your-account Step-by-step guide to creating your Sight AI account and starting your free trial. ## Sign Up Options You can create a Sight AI account using one of two methods: * **Google Account** -- Sign up instantly with your Google account (recommended) * **Email & Password** -- Create a traditional account with your email address ## Creating Your Account ### Option 1: Sign Up with Google 1. Go to [app.trysight.ai/signup](https://app.trysight.ai/signup) 2. Click the "Continue with Google" button 3. Select your Google account 4. Authorize Sight AI to access your basic profile information 5. You'll be automatically signed in and ready to go ### Option 2: Sign Up with Email 1. Go to [app.trysight.ai/signup](https://app.trysight.ai/signup) 2. Enter your email address 3. Create a secure password (minimum 8 characters) 4. Click "Create Account" 5. Check your email for a verification link 6. Click the verification link to confirm your email 7. Sign in with your new credentials ## Free Trial All new accounts start with a **7-day free trial** that includes: * **1,500 AI credits** to spend during the trial period (\~15 articles plus a few AI chats) * Full access to all plan features * Credit card required to start (not charged until trial ends) * Automatic conversion to paid subscription (unless canceled) You can choose any plan during signup, and you'll have full access to its features during your trial. ## Choosing a Plan During the onboarding process, you'll be asked to select a plan. Here's a quick overview: | Plan | Credits/mo | Tracked Prompts | AI Visibility | | ------------ | ------------------ | --------------- | -------------- | | **Starter** | 1,500 (fixed) | 500 per site | Yes | | **Pro** | 5,000+ (dropdown) | 500 per site | Yes | | **Advanced** | 25,000+ (dropdown) | 500 per site | Yes + Outreach | \~100 credits = 1 article. See [Choosing Your Plan](/billing/choosing-your-plan) for a detailed feature comparison. ## Team Setup When you create an account, a team is automatically created for you. All your sites and billing are managed at the team level. You can: * Invite team members (Admin or Member roles) * Share sites across your team * Manage billing from one central location Learn more about [managing teams and roles](/teams/managing-teams). ## Next Steps Once your account is created, you're ready to: 1. [Add your first website](/getting-started/adding-your-first-site) 2. [Connect your CMS integration](/integrations/wordpress) 3. [Generate your first article](/ai-content/overview) # Your Dashboard Source: https://docs.trysight.ai/getting-started/dashboard The Sight AI dashboard combines Google Search Console performance with AI visibility into one daily-decision view. ## Overview The Sight AI dashboard is your daily-decision view. It combines **Google Search Console** organic-search performance with your **AI visibility** summary, so you can see organic traffic, AI mentions, ranking opportunities, and article performance in one place. The dashboard lives at `app.trysight.ai/dashboard` and is the first thing you see when you open Sight AI. ## What's New The dashboard was rebuilt in April 2026 as the centerpiece of a wider information-architecture refresh. Highlights: * **Combined view** — organic-search KPIs (impressions, clicks, CTR, avg. position) and AI visibility (mentions, top model, top-3 rate) on a single page * **GSC-powered** — connects to Google Search Console and backfills 90 days of search data automatically * **Article performance** — see which AI-generated articles are pulling clicks and where they rank * **Keyword opportunities** — surfaces low-hanging-fruit queries you already rank for on pages 1–3 but aren't capturing * **AI summary** — top-3 rate, top-performing AI model, and recent mention trend ## Page States The dashboard adapts to where you are in setup: | State | What it means | What to do | | ----------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | | **Preview** | Google Search Console isn't connected yet. We show realistic mock data with a clear "Connect" call-to-action. | [Connect Google Search Console](/integrations/google-search-console) to start syncing real data | | **Syncing** | GSC is connected and we're backfilling 90 days of search data. Skeletons fill the metric cards. | Wait — backfills typically finish within 5–10 minutes | | **No data** | GSC is connected and the backfill is done, but Google hasn't returned any rows yet (very new sites). | Check back tomorrow — Google needs at least one day of data | | **Ready** | Real data is showing. | Use the dashboard to drive decisions every morning | ## Top KPIs The headline strip shows: * **Impressions** — how often your URLs appeared in Google's results * **Clicks** — how often someone actually clicked through * **CTR (click-through rate)** — clicks / impressions * **Average position** — your average rank in Google's results (lower is better) * **Unique queries** — how many distinct search terms you appeared for Each KPI shows the **current period vs. the prior period** so you immediately see growth or regression. ### Date range Toggle between **7 days**, **28 days**, and **90 days** in the top-right of the page. Comparisons recalculate against the previous matching window (e.g., the previous 28 days). ## Performance Chart A daily time-series chart shows clicks and impressions side by side. Use this to spot: * **Growth trends** — articles you publish should pull the line upward over weeks * **Day-of-week patterns** — most B2B sites dip on weekends * **Algorithm shifts** — sudden drops or spikes that don't track with your publishing cadence ## Article Performance This table lists your top AI-generated articles by clicks and shows: * Article title and URL * Clicks and impressions in the selected window * Average position in Google * **Growth %** vs. the prior period Click any row to jump to the article in the editor. Use this view to: * Identify your best performers and double down on similar topics * Spot articles whose growth has stalled (good candidates to hand off to the [Article Boost Agent](/automations/agent-templates)) * See which articles are starting to gain traction so you can interlink to them ## Keyword Opportunities This table surfaces **search queries you're already ranking for on pages 1–3 (positions 5–25)** but where you're not capturing the click traffic you could. Each row includes: * The query * Current impressions and clicks * Average position * The page that's currently ranking * A flag for whether you already have an article on that target keyword * A suggested article type (listicle, how-to, explainer) Click **Create Article** to start a new article pre-filled with the keyword. If you already have an article ranking, the row will deep-link to the editor so you can refresh it instead. The same opportunities (and more) live in the [Search Opportunities](/ai-visibility/search-opportunities) tab under Visibility. ## Top Pages and Top Queries Two side-by-side tables show: * **Top Pages** — your highest-traffic URLs in the window, with clicks, impressions, and average position. Pages that map to a Sight AI article are linked into the editor; the rest are external links. * **Top Queries** — the search terms driving the most traffic, sorted by clicks. Click **All pages →** or **All queries →** to dive into the full [Search section](/ai-visibility/search-section) under Visibility. ## AI Visibility Summary The right-rail summary card pulls a single-day snapshot of your AI Visibility data: * **Total mentions** in the selected window with prior-period comparison * **Top-performing AI model** (e.g., ChatGPT, Perplexity, Claude) * **Top-3 rate** — how often your brand lands in the top 3 of an AI's recommendation list * **Last check** — when your tracked prompts were last sent to AI models Click any metric to drill into the [AI Visibility dashboard](/ai-visibility/dashboard). ## Platform Value The Platform Value card answers a question every executive will eventually ask: **"How much of my organic traffic is coming from articles Sight AI helped create?"** It compares the share of clicks and impressions attributable to Sight AI articles versus the rest of your site. ## Best Practices * **Check the dashboard every morning** — it's designed to be the first 60 seconds of your SEO routine * **Use the 28-day view by default** — short enough to be actionable, long enough to smooth out daily noise * **Act on the keyword opportunities table weekly** — these are the single highest-leverage actions in Sight AI * **Connect GSC during onboarding** — every dashboard panel below the AI summary depends on it * **Combine with [Search Opportunities](/ai-visibility/search-opportunities)** — the dashboard surfaces the headline opportunities; the dedicated tab gives you the full backlog plus interlink and rising-page signals ## Next Steps * [Connect Google Search Console](/integrations/google-search-console) so the dashboard has real data to show * [Set up tracked prompts](/ai-visibility/tracked-prompts) to populate the AI summary card * [Explore Search Opportunities](/ai-visibility/search-opportunities) to see every keyword opportunity, not just the top ten * [Turn on Automations](/automations/getting-started) to act on opportunities automatically * [Open the Outreach Inbox](/ai-visibility/outreach-inbox) to read and reply to every outreach conversation in one place # Quick Start Guide Source: https://docs.trysight.ai/getting-started/quick-start-guide Get up and running with Sight AI in 5 minutes. ## Overview This guide will walk you through the essential steps to start using Sight AI. By the end, you'll have your account set up, your first site connected, and be ready to generate content. ## Step 1: Create Your Account **Time: 1 minute** 1. Go to [app.trysight.ai/signup](https://app.trysight.ai/signup) 2. Sign up with Google (fastest) or create an account with email 3. Your 7-day free trial starts automatically (credit card required, not charged until trial ends) ## Step 2: Add Your Website **Time: 1 minute** 1. From the onboarding flow, enter your website **domain** (we'll use HTTPS and detect your sitemap for you) 2. Pick a plan to start your trial 3. Sight AI **finishes setup automatically** — it detects your sitemap and blog and uses AI to fill in your business info (name, industry, audience, brand voice) You'll land in the **Setup hub** (in the Agent workspace), where you can review the auto-filled details, connect Google Search Console and your CMS, and turn on optional features. You can re-run AI setup or edit anything anytime — see [Adding Your First Site](/getting-started/adding-your-first-site). ## Step 3: Connect Your CMS (Optional) **Time: 2-5 minutes** For automatic publishing, connect your CMS: * **WordPress** -- Install the Sight AI plugin and generate an API key * **Webflow** -- Generate an API token in Webflow and map your CMS fields * **Framer** -- Generate an API key in Sight AI and install the Framer plugin * **Shopify** -- Create a custom app and enter your store URL and Admin API token * **Wix** -- Enter your Wix Site ID and API key * **Webhook** -- Send article data to any custom endpoint Only one CMS can be active per site at a time. *You can skip this step and manually copy content if you prefer.* ## Step 4: Generate Your First Article **Time: 5-10 minutes (generation time)** 1. Click **"Generate Article"** from the dashboard 2. Enter a keyword or topic for your article 3. Select the article type: * **Explainer** -- Best for educational content (2,500+ words) * **Listicle** -- Best for roundups and lists (4,500+ words) * **Step-by-Step** -- Best for tutorials (3,000+ words) 4. Optionally add custom instructions 5. Click **"Generate"** Watch the real-time progress as our AI agents research, write, and optimize your article. ## Step 5: Review and Publish **Time: 5 minutes** 1. Once generation completes, review your article in the editor 2. Make any edits using the AI Content Editor 3. Preview the final result 4. Either: * **Sync to CMS** — Automatically publish to your connected CMS * **Download** — Export as HTML or copy the content manually ## Step 6: Connect Google Search Console **Time: 1 minute** For the full Sight AI experience, connect Google Search Console to unlock: * The [combined Dashboard](/getting-started/dashboard) showing real organic-search performance alongside AI visibility * [Search Opportunities](/ai-visibility/search-opportunities) — Content Gap, Refresh, Interlinks, and Rising Pages generated from your actual GSC data * The full [Search section](/ai-visibility/search-section) — every query, page, and article that Google sends traffic to Just go to **Integrations → Google Search Console**, click **Connect**, and pick your property. We'll backfill 90 days of data automatically. ## What's Next? Now that you've generated your first article, explore these features: The single daily-decision view that pulls everything together. Monitor how AI models mention your brand. Content Gaps, Refreshes, Interlinks, and Rising Pages from your GSC data. Let autonomous agents work through your opportunity backlog on a schedule. Read, reply to, and triage every outreach conversation — including forwarded pitches and direct inbound from prospects. Submit your content to Google and Bing automatically. Use bulk generation to create many articles at once. ## Need Help? If you run into any issues: * Check our [FAQs](/faqs/general) for common questions * Review the [Troubleshooting Guide](/faqs/troubleshooting) * Contact support at [support@trysight.ai](mailto:support@trysight.ai) # What is Sight AI? Source: https://docs.trysight.ai/getting-started/what-is-sight-ai An AI-powered platform for content generation, SEO optimization, and AI visibility tracking. ## Overview Sight AI is a comprehensive AI-powered content generation and SEO optimization platform that helps businesses and content creators improve their online presence. The platform automatically creates, optimizes, and publishes SEO-friendly articles to your website while tracking how AI models see your brand. ## Core Features Sight AI brings five capabilities together so SEO and GEO (generative-engine optimization) live in one workflow: ### Combined Dashboard A single daily-decision view that pulls together Google Search Console performance and AI visibility — impressions, clicks, top queries, top pages, article performance, AI mentions, and a curated list of keyword opportunities. [Learn more](/getting-started/dashboard). ### AI Visibility Tracking Monitor how major AI models like ChatGPT, Claude, Perplexity, Gemini, Grok, and Google AI respond to prompts about your brand and industry. Understand how AI sees your brand and discover opportunities for improvement. * Track specific prompts about your brand * See [mentions](/ai-visibility/mentions), [positions](/ai-visibility/positions), [citations](/ai-visibility/citations), and [sentiment](/ai-visibility/sentiment) across AI models * Browse the full [Search section](/ai-visibility/search-section) — every query, page, and article from GSC ### AI Content Generation Generate high-quality, SEO-optimized articles automatically using our multi-agent AI system. Specialized [AI Agents](/ai-content/ai-agents) work together to research, write, optimize, and review every article. * **Explainer Articles** — Deep dives on topics, comprehensive guides (2,500+ words) * **Listicle Articles** — Round-ups, "best of" lists, resource compilations (4,500+ words) * **Step-by-Step Guides** — How-to guides, tutorials, playbooks (3,000+ words) ### Opportunities & Automations Sight AI surfaces actionable opportunities and (optionally) acts on them for you: * [Search Opportunities](/ai-visibility/search-opportunities) — Content Gap, Refresh, Interlinks, and Rising Page suggestions from your GSC data * [AI Prompt Opportunities](/ai-visibility/content-opportunities) — gaps where competitors appear in AI answers but you don't * [Outreach Opportunities](/ai-visibility/outreach-opportunities) — high-DR sites AI models trust * [Automations](/automations/overview) — autonomous workers that turn opportunities into published articles, refreshes, interlinks, and outreach replies on a schedule * [Outreach Inbox](/ai-visibility/outreach-inbox) — every outreach conversation in one place: agent replies, manual replies, forwarded pitches, and direct inbound from prospects ### Website Indexing Automatically submit your content to search engines for faster indexing. Sight AI integrates with Google Search Console and Bing IndexNow to ensure your new content gets discovered quickly. * Automatic sitemap submission to Google * Real-time URL submission via IndexNow (Bing) * New content detection and monitoring * Indexing status verification — fully searchable activity log with filters and stats ## CMS Integrations Sight AI seamlessly integrates with popular CMS platforms to automatically publish your generated content: * **WordPress** -- Direct publishing with categories, authors, and images * **Webflow** -- API token-based CMS collection integration * **Framer** -- Plugin-based content sync * **Shopify** -- Blog publishing for e-commerce stores * **Wix** -- Native blog integration * **Webhook** -- Custom integration for any platform ## Autopilot Mode Set up automated daily article generation with Autopilot. Once configured, Sight AI will automatically generate and publish up to 30 high-quality articles per day to your connected CMS -- no manual intervention required. * Smart keyword research and management * Automatic article generation and publishing * Distributed scheduling across time zones * Available on Starter plan and above ## Who is Sight AI For? Sight AI is designed for: * **Content Marketing Agencies** -- Manage multiple client websites with high-volume content * **E-commerce Businesses** -- Create product-focused content and optimize SEO * **SaaS Companies** -- Generate technical content and build brand visibility * **Bloggers & Content Creators** -- Scale content production consistently * **SEO Professionals** -- Optimize client websites with AI-powered insights ## Getting Started Ready to get started? Follow our [Quick Start Guide](/getting-started/quick-start-guide) to set up your account and generate your first article in minutes. # Account Settings Source: https://docs.trysight.ai/guides/account-settings Manage your profile, security, notifications, and active sessions. ## Overview Account Settings let you manage your personal profile, security preferences, and notification options. Access them from **Account Settings** in the sidebar. ## Profile ### Personal Information Update your account details: * **Name** -- Your display name shown across Sight AI * **Email** -- Your login email address * **Company** -- Your company or organization name * **Timezone** -- Used for scheduling and activity timestamps * **Profile Image** -- Upload a profile photo ### Updating Your Profile 1. Go to **Account Settings** 2. Edit the fields you want to change 3. Click **"Save Changes"** ## Two-Factor Authentication (2FA) Add an extra layer of security to your account with two-factor authentication using an authenticator app. ### Enabling 2FA 1. Go to **Account Settings** or **Security** 2. Click **"Enable Two-Factor Authentication"** 3. Scan the QR code with your authenticator app (Google Authenticator, Authy, etc.) 4. Enter the 6-digit verification code from your app 5. Save your **backup codes** in a secure location Store your backup codes safely. If you lose access to your authenticator app, backup codes are the only way to recover your account. ### Disabling 2FA 1. Go to **Security** 2. Click **"Disable 2FA"** 3. Enter a verification code from your authenticator app to confirm ### Regenerating Backup Codes If you've used or lost your backup codes: 1. Go to **Security** 2. Click **"Regenerate Backup Codes"** 3. Enter a verification code to confirm 4. Save the new backup codes ## Active Sessions View and manage all devices where you're currently logged in. 1. Go to **Security** 2. View the list of active sessions, including: * **Device** -- Browser and operating system * **Location** -- Approximate location based on IP * **Last Active** -- When the session was last used 3. Click **"Revoke"** next to any session to log it out Your current session is labeled so you don't accidentally log yourself out. ## Notification Preferences Control which notifications you receive: | Notification | Description | | ------------------------- | --------------------------------------------------------------------------------------- | | **Email Notifications** | General email notifications from Sight AI | | **Usage Alerts** | Alerts when you're approaching article or feature limits | | **Weekly Reports** | Weekly summary of your content and AI visibility performance | | **Product Updates** | News about new features and improvements | | **Content Opportunities** | Notifications when new content opportunities are discovered from AI visibility tracking | ### Updating Preferences 1. Go to **Account Settings** 2. Toggle each notification type on or off 3. Click **"Save Changes"** # AI Settings Source: https://docs.trysight.ai/guides/ai-settings Configure business info, custom instructions, CTAs, and image generation to shape your AI-generated content. ## Overview AI Settings control how Sight AI generates content for your site. Access them from **AI Settings** in the sidebar. Settings are organized into four tabs: **Instructions**, **Business Info**, **CTA**, and **Images**. ## Instructions Add custom instructions that guide the AI when generating articles. These are applied to every article generated for this site. **Examples:** * "Always write in a conversational, friendly tone" * "Include data and statistics when available" * "Avoid jargon and keep language accessible" For more details on custom instructions, see [Custom Instructions](/ai-content/custom-instructions). ## Business Info Provide context about your business so the AI can write more relevant, on-brand content. The more detail you provide, the better your articles will be. | Field | Description | | ------------------------- | -------------------------------------------------------------------------------------------------- | | **Company Name** | Your business name, used in articles and CTAs | | **Industry** | Your industry or niche (e.g., "SaaS", "E-commerce", "Healthcare") | | **Target Audience** | Who you're writing for (e.g., "Small business owners", "Enterprise CTOs") | | **Brand Voice** | How your brand communicates (e.g., "Professional but approachable", "Technical and authoritative") | | **Key Products/Services** | Your main offerings the AI should reference | | **Unique Selling Points** | What differentiates you from competitors | | **Blog URL** | Your blog's URL for internal linking | Click **"Auto-Fill with AI"** to have Sight AI analyze your website and pre-populate these fields. Review and adjust the results to ensure accuracy. ## Call to Action (CTA) Configure the default call-to-action included at the end of generated articles. ### Default Mode Uses a standard CTA based on your company name and key products. No additional configuration needed. ### Custom Mode Create a fully custom CTA with: * **CTA Text** -- The full call-to-action paragraph * **Hyperlink Phrase** -- The text within the CTA that becomes a link * **Hyperlink URL** -- Where the link points to ## Image Settings Control how AI-generated images appear in your articles. ### AI Image Generation Toggle AI image generation on or off. When enabled, Sight AI generates a featured image and in-body images for each article. ### Main Image Style Choose the default style for featured images: * **Brand** -- Clean, branded graphics using your brand color * **Cinematic** -- Dramatic, high-quality photographic style * **Realistic** -- Natural, realistic photo style * **Diagram** -- Informational diagrams and illustrations ### Content Image Background Set the background color for in-body content images: * **White** -- Clean white background * **Light Gray** -- Subtle gray background * **Black** -- Dark background ### Brand Color Set your brand's primary color (hex code). This is used in brand-style images and diagrams. # Referral Program Source: https://docs.trysight.ai/guides/referral-program Earn bonus AI credits and commissions by referring new users to Sight AI. ## Overview The Sight AI Referral Program rewards you for bringing new users to the platform. Earn **bonus AI credits** for your team and recurring commissions on paid subscriptions. Access the program from **Referral Program** in the sidebar. ## How It Works 1. Share your unique referral link with colleagues, clients, or your audience 2. When someone signs up using your link and subscribes to a paid plan, **both of you receive 2,500 bonus AI credits** 3. Track your referrals, earnings, and bonus credits from the Referral Program dashboard ## Your Referral Link Your unique referral link is displayed on the Referral Program page. Click **"Copy Link"** to copy it to your clipboard. ## Rewards ### Bonus AI Credits You and your referral each earn **2,500 bonus AI credits** (≈ 25 articles) when they subscribe to a paid plan. Bonus credits are added to your team's balance, **never expire**, and can be spent on anything that uses AI across any of your sites. ### Commission Earnings Earn recurring commissions on paid subscriptions from users you refer. Track your earnings including: * **Visitors** -- How many people clicked your referral link * **Leads** -- How many signed up * **Conversions** -- How many subscribed to a paid plan * **Commission Total** -- Your total earned commissions * **Unpaid Earnings** -- Commissions awaiting payout * **Paid Earnings** -- Commissions already paid out ## Payouts ### Setting Up Payouts 1. Go to **Referral Program** 2. Enter your **PayPal email address** for receiving commission payouts 3. Click **"Save"** Commissions are paid out periodically to your registered PayPal address. ## Sending Invitations Invite people directly from the Referral Program page: 1. Enter the recipient's email address 2. Click **"Send Invite"** 3. They'll receive an email with your referral link View your recent invitations and their status (sent, signed up, converted) on the dashboard. ## Customizing Your Referral Token Team owners can customize their referral token (the identifier in the referral URL) for a more branded experience: 1. Click the **edit icon** next to your referral token 2. Enter your preferred token 3. Click **"Save"** # Site Settings Source: https://docs.trysight.ai/guides/site-settings Configure your site's name, blog URL pattern, sitemap, and more. ## Overview Site Settings let you configure how Sight AI interacts with your website. Access them by navigating to **Site Settings** from the sidebar. ## Site URL and WWW Preference Your site URL is the domain that Sight AI uses to generate article URLs, submit pages for indexing, and match your site across integrations. Sight AI respects your **www preference**. If your site uses `www.yoursite.com`, enter it with the `www.` prefix during setup or when changing your URL. Sight AI will preserve this preference and use it consistently across: * Article URL generation * IndexNow submissions * Google Search Console matching * Webhook payloads * AI visibility tracking Enter your domain exactly as it appears in your browser's address bar. If your site redirects to `www.yoursite.com`, enter `www.yoursite.com`. If it redirects to `yoursite.com` (without www), enter `yoursite.com`. ## Site Name Your site name is used throughout Sight AI to identify your website. It appears in the dashboard, article listings, and team views. 1. Click **"Edit"** next to your site details 2. Update the **Site Name** field 3. Click **"Save"** ## Blog URL Pattern The blog URL pattern tells Sight AI where blog posts live on your site. This is used for sitemap monitoring and article URL generation. **Examples:** * `/blog/` -- Articles at `yoursite.com/blog/article-slug` * `/insights/` -- Articles at `yoursite.com/insights/article-slug` * `/resources/blog/` -- Articles at `yoursite.com/resources/blog/article-slug` 1. Click **"Edit"** 2. Enter your blog URL pattern (e.g., `/blog/`) 3. Click **"Save"** ## Sitemap URL Sight AI monitors your sitemap to detect new content and submit URLs for indexing. The sitemap URL is auto-detected during setup but can be changed. 1. Click **"Edit"** 2. Update the **Sitemap URL** (e.g., `https://yoursite.com/sitemap.xml`) 3. Click **"Save"** If you change your sitemap URL, Sight AI will re-crawl the new sitemap on its next monitoring cycle. ## Site Icon Upload a custom icon for your site that displays in the dashboard and site switcher. 1. Click the icon upload area 2. Select an image file 3. The icon is saved automatically ## Shared Links Manage shared article links for your site. Shared links let you share article previews with people who don't have a Sight AI account. ## Changing Your Site URL If your website domain has changed, you can update the URL: 1. Click **"Change Site URL"** 2. Enter the new site URL (include `www.` if your site uses it) 3. Type the confirmation text to proceed 4. Click **"Confirm"** Your www preference is preserved when changing your site URL. If you enter `www.newdomain.com`, Sight AI will use the `www.` version throughout the platform. Changing your site URL will reset your sitemap monitoring and may affect integrations that depend on the domain. Previously published articles are not affected. ## Deleting a Site Site deletion is managed from the **Billing** page (not Site Settings) because sites are tied to your license slots. The Site Settings page shows a **Delete Site** card at the bottom that links you straight there. To permanently remove a site: 1. From Site Settings, scroll to the **Delete Site** card and click **Go to Sites Section** — or open **Billing** > **Sites** directly. 2. Find the site you want to delete in the Sites table. 3. If the site is still active, click **Deactivate** first and confirm. (You don't need to do this if the site is already inactive.) 4. Click **Delete** next to the site. 5. Review the confirmation dialog (it lists every type of data that will be removed) and click **Delete Site**. You can delete **any** site on your team — including the oldest one — as long as your team has at least one other site remaining. The only thing the system will not let you do is delete your team's last remaining site; in that case use **Change Site URL** above to repoint the existing site, or add a new site first. Deletion is permanent and removes all articles, keywords, AI visibility data, CMS connections, sitemap configuration, and Google Search Console links for the site. It cannot be undone. Only **team owners** can delete a site while a subscription is active. **Admins** can delete sites only when the team has no active subscription, and **members** cannot delete sites. See [Site Licensing](/billing/site-licensing#deleting-a-site) for the full breakdown. # Google Sitemap Submit Source: https://docs.trysight.ai/indexing/google-sitemap Automatically submit and manage your sitemap with Google Search Console. ## Overview When you connect Google Search Console to Sight AI, you can automatically submit your sitemap to Google. This ensures Google knows about all the pages on your site and can crawl them efficiently. ## Prerequisites * **Google Search Console connected** -- [Connect GSC](/integrations/google-search-console) first * **Valid XML sitemap** -- Your site needs a properly formatted sitemap * **Sitemap accessible** -- Google must be able to access your sitemap URL ## Sitemap Requirements Your sitemap should: * Be valid XML format * Include all important pages * Be under 50MB uncompressed (or 50,000 URLs) * Be accessible without authentication * Use consistent URL formats (with or without www) ### Common Sitemap Locations Sight AI checks these locations automatically: * `https://yoursite.com/sitemap.xml` * `https://yoursite.com/sitemap_index.xml` * `https://yoursite.com/sitemap-index.xml` * `https://yoursite.com/post-sitemap.xml` (WordPress) ## Submitting Your Sitemap ### Automatic Detection When you add a site to Sight AI: 1. Sight AI searches for your sitemap automatically 2. If found, it's stored for monitoring 3. You can submit to GSC after connecting ### Manual Submission 1. Go to **Site Settings -> Indexing** 2. Verify your sitemap URL is correct 3. Click **"Submit to Google"** 4. Sight AI submits the sitemap via the GSC API 5. Check the submission status ### Using a Custom Sitemap URL If your sitemap is at a non-standard location: 1. Go to **Site Settings** 2. Find **Sitemap URL** 3. Enter your custom sitemap URL 4. Save changes 5. Submit to Google ## Sitemap Index Files If your site uses a sitemap index (multiple sitemaps), Sight AI handles this automatically: * Detects sitemap index files * Parses all child sitemaps * Monitors all sitemaps for changes * Submits the index file to Google ## Checking Submission Status After submitting, view the status: * **Pending** -- Submitted, waiting for Google to process * **Success** -- Google accepted the sitemap * **Error** -- Issues detected (see error message) Google typically processes sitemap submissions within a few hours. ## Automatic Resubmission Sight AI can automatically resubmit your sitemap: * When significant changes are detected * Periodically to ensure Google has the latest version * After you manually trigger a refresh ## Common Issues ### Sitemap Not Found * Verify your sitemap URL is correct * Check that the sitemap is publicly accessible * Try accessing the URL in an incognito browser * Manually enter the sitemap URL in site settings ### Submission Errors Common errors and solutions: * **"Could not fetch"** -- Google can't access the sitemap URL * **"Invalid format"** -- Sitemap has XML errors * **"URLs not in property"** -- Sitemap URLs don't match GSC property ### Slow Indexing Despite Submission Sitemap submission doesn't guarantee immediate indexing. Google decides when to crawl based on: * Site authority and crawl budget * Content quality signals * Server response times * Historical crawl data ## Best Practices * **Keep sitemap updated** -- Ensure your CMS updates the sitemap automatically * **Include last modified dates** -- Helps Google prioritize crawling * **Remove old URLs** -- Don't include 404 pages * **Use consistent URLs** -- Avoid mixing http/https or www/non-www * **Validate regularly** -- Check your sitemap for errors ## Next Steps * [Set up IndexNow for Bing](/indexing/indexnow) * [Monitor your sitemap status](/indexing/monitoring) * [Enable Autopilot for automated content](/ai-content/autopilot) # How Indexing Works Source: https://docs.trysight.ai/indexing/how-it-works Get your content discovered by search engines faster with automatic indexing. ## Overview Sight AI helps your content get discovered by search engines faster through automatic sitemap monitoring, URL submission, and integration with Google Search Console and IndexNow (Bing). ## Why Indexing Matters When you publish new content, search engines need to discover and index it before it can appear in search results. This can take anywhere from hours to weeks depending on how often search engines crawl your site. Sight AI speeds this up by proactively notifying search engines about new content, rather than waiting for them to discover it naturally. ## How Sight AI Helps ### 1. Sitemap Monitoring Sight AI continuously monitors your sitemap for changes: * **Hourly checks** -- Detect new content within an hour * **Daily full sync** -- Complete sitemap comparison * **Change detection** -- Identify new, modified, and removed URLs ### 2. Google Search Console Integration When connected to GSC, Sight AI can: * Submit your sitemap to Google * Request indexing for new URLs * Check indexing status of your pages * Monitor crawl and index statistics Learn more: [Google Search Console Integration](/integrations/google-search-console) ### 3. IndexNow (Bing) IndexNow provides instant notification to Bing: * Real-time URL submission * Supported by Bing * No API limits * Submit URLs immediately upon detection Learn more: [IndexNow Setup](/indexing/indexnow) ## Automatic Workflow Here's what happens when you publish new content: 1. **Content Published** -- Article goes live on your site 2. **Sitemap Updated** -- Your CMS updates the sitemap 3. **Detection** -- Sight AI detects the new URL (hourly or immediately if published via Sight AI) 4. **Google Notification** -- If GSC is connected, indexing is requested 5. **IndexNow Ping** -- If enabled, Bing is notified instantly 6. **Status Tracking** -- Sight AI tracks submission status ## Supported Search Engines | Search Engine | Method | Speed | | ------------- | ------------------ | ---------------- | | Google | Search Console API | Hours to days | | Bing | IndexNow | Minutes to hours | ## Setup Checklist To enable full indexing capabilities: * **Sitemap configured** -- Ensure your site has a valid XML sitemap * **Google Search Console** -- [Connect GSC](/integrations/google-search-console) for Google indexing * **IndexNow enabled** -- [Set up IndexNow](/indexing/indexnow) for Bing * **Auto-submission on** -- Enable in site settings ## Checking Indexing Status The full audit trail lives at **Indexing → Activity** (`/indexing/activity`): 1. Open the Indexing Activity page 2. Filter by **Type** (Submissions / Detections / Connections) or **Status** (Success / Failed) 3. Search by URL or source 4. Click any row to drill into the URLs that were submitted The companion **Sitemap** page (`/indexing/sitemap`) shows current URL counts, last-checked time, and the historical URL-count chart. [Learn more about the Indexing Activity page](/indexing/monitoring). ## Best Practices * **Keep sitemap updated** -- Ensure your CMS updates the sitemap when you publish * **Use both methods** -- Connect both GSC and IndexNow for best coverage * **Monitor status** -- Check indexing status regularly for issues * **Quality content** -- Search engines prioritize indexing quality content * **Fix errors** -- Address any crawl or indexing errors promptly ## Limitations While Sight AI helps speed up indexing, keep in mind: * Google ultimately controls when content is indexed * New sites may take longer to get indexed * Low-quality content may not be indexed regardless of submissions * Google has daily limits on indexing requests ## Next Steps * [Set up IndexNow for Bing](/indexing/indexnow) * [Configure Google sitemap submission](/indexing/google-sitemap) * [Learn to monitor your sitemap](/indexing/monitoring) # IndexNow (Bing) Source: https://docs.trysight.ai/indexing/indexnow How Sight AI uses the IndexNow protocol to push your URLs to Bing the moment they change. ## What is IndexNow? IndexNow is an open protocol that lets websites instantly notify search engines about new or updated content. Instead of waiting for a crawler to find your changes on its own schedule, you push the URL directly to the search engine and the engine prioritizes crawling it. Sight AI uses IndexNow to submit your URLs to **Bing**. Bing relays each submission to every other participating engine, so a single ping reaches: * **Bing** — Microsoft's search engine * **Yandex** — Russia's largest search engine * **Seznam** — Czech Republic's search engine * **Naver** — South Korea's largest search engine **Google does not participate in IndexNow.** For Google indexing, use the [Google Search Console integration](/integrations/google-search-console). Run both in parallel for full search-engine coverage. ## Setup The full setup walkthrough — including hyper-specific instructions for custom sites on Vercel, Netlify, Cloudflare Pages, GitHub Pages, Apache, Nginx, IIS, S3, Shopify, Ghost, and more — lives in the dedicated integration guide: Generate your key, host the verification file at your site root, and verify — with platform-specific instructions for every major hosting setup and a deep troubleshooting section for every error message. **Before any of the steps below, you need a free Bing Webmaster Tools account with your site added and verified inside it.** Bing requires this — Sight AI can't ping IndexNow on behalf of a domain Bing doesn't recognize. Sign up at [bing.com/webmasters](https://www.bing.com/webmasters/about), then follow [Microsoft's "Add and Verify your site" guide](https://www.bing.com/webmasters/help/add-and-verify-site-12184f8b). For any issues *inside* Bing Webmaster Tools, contact [Bing Webmaster Support](https://www.bing.com/webmasters/help/webmaster-support-24ab5ebf) — Sight AI can't help with Microsoft's product. The full prerequisite walkthrough is in the [integration guide](/integrations/bing-indexnow#prerequisite-bing-webmaster-tools). The short version of what you'll do once Bing Webmaster Tools is set up: Go to **Integrations → Bing IndexNow**, pick your workspace, and click **Generate IndexNow key**. Sight AI creates a 32-character key and a downloadable `.txt` file for you. Upload the file so it's reachable at `https://yourdomain.com/.txt` and returns the key as plain text. The exact "how" depends on your hosting platform — see the [integration guide](/integrations/bing-indexnow#custom-site-setup) for step-by-step instructions per platform. Sight AI fetches both the apex and `www` variants. As long as one returns the exact key, you're verified and submissions start automatically. ## How submissions work after setup Once verified, IndexNow runs in the background. You don't need to do anything else. ### What gets submitted * **New URLs in your sitemap** — picked up during Sight AI's hourly sitemap check * **Articles you publish through Sight AI** — submitted the moment they sync to your CMS * **Updated URLs** — re-submitted when the URL appears in your sitemap with a new `lastmod` Each request to Bing's IndexNow endpoint includes: * **`host`** — your verified domain * **`key`** — the IndexNow key Bing already verified you own * **`keyLocation`** — the URL of your key file (so Bing can re-verify on demand) * **`urlList`** — up to 10,000 URLs per submission ### Manual submissions You don't usually need to submit URLs manually because the automation covers everything, but if you want to ping a specific URL right now, the Sight AI Indexing Activity page shows a **Submit URL** action. ## Monitoring Every submission is recorded with a status, response code, and timestamp. View them in [Indexing Activity](/indexing/monitoring): * Recent submissions and their batch IDs * HTTP status from Bing's IndexNow endpoint * URLs included in each batch * Error messages for any failed submissions ## Limits & expectations * **No rate limits to worry about** — Sight AI batches submissions and Bing accepts up to 10,000 URLs per request * **Bing acks the submission instantly** — but actual indexing still takes hours to a day or two * **IndexNow is a notification, not a guarantee** — Bing will only index pages it considers crawlable and quality content; low-quality, blocked, or duplicate pages won't appear regardless ## Disconnecting To turn off IndexNow: 1. Go to **Integrations → Bing IndexNow** 2. Click **Disconnect** 3. Confirm The key file on your server is harmless to leave in place. If you want to clean up, you can delete it after disconnecting. ## Troubleshooting Most issues come up at the verification step. The [integration guide's troubleshooting section](/integrations/bing-indexnow#troubleshooting) walks through every error message Sight AI surfaces — from "key file not accessible" through TLS errors, WAF blocks, and content mismatches — with the exact fix for each. If submissions are passing verification but the [Indexing Activity](/indexing/monitoring) page still shows failures, the most common cause is a host mismatch: your sitemap URLs use a different host (apex vs `www`, or a different subdomain) than the one you verified. Make your sitemap consistent with the verified host. ## Next steps * [Set up the integration](/integrations/bing-indexnow) — full step-by-step setup * [Monitor indexing activity](/indexing/monitoring) — see every submission and its outcome * [Set up Google Search Console](/integrations/google-search-console) — for Google indexing * [Learn how Sight AI handles indexing overall](/indexing/how-it-works) # Indexing Activity & Monitoring Source: https://docs.trysight.ai/indexing/monitoring Track every URL submission, detection, and connection event with the rewritten Indexing Activity page. ## Overview Sight AI continuously monitors your sitemap, submits new URLs to search engines, and logs every event so you can audit what's happening. The **Indexing Activity** page is the audit trail. It lives at `app.trysight.ai/indexing/activity`. The Sitemap status page is its sibling at `/indexing/sitemap`. ## What's New The Indexing Activity page was rewritten in April 2026 to fix several count and redirect bugs and to add: * **Stats strip** — totals for submissions, detections, and connections in the lookback window * **Type filter** — filter to Submissions / Detections / Connections / All * **Status filter** — filter to Success / Failed / All * **Free-text search** — find activity by URL or source * **Pagination** — browse the full 90-day history without scrolling forever * **Per-row drill-down** — click any submission row to see exactly which URLs were submitted If you're an existing user, the new page is a drop-in replacement at the same nav location ("Indexing → Activity"). ## Activity Types Every entry on the page is one of: | Type | What it means | | -------------- | -------------------------------------------------------------------------------------------------------------------------- | | **Submission** | URLs sent to a search engine — Google Search Console, IndexNow (Bing), or via a CMS hook (WordPress, Webflow, Shopify) | | **Detection** | New URLs discovered in your sitemap (or new URLs processed after detection) | | **Connection** | A connection event — Google Search Console connected, Bing connected, Webflow connected, GSC property linked, site created | Use the type filter chips at the top of the page to narrow down to one category. ## Status Each entry has one of three statuses: | Status | Meaning | | ----------- | --------------------------------------------------------------- | | **Success** | The action completed and the search engine accepted the request | | **Failed** | The action errored — see the row detail for the exact reason | | **Pending** | The action is queued and will be retried automatically | Use the status filter to surface only failures when you're debugging. ## Reading a Row Each row shows: * **Title** — what happened (e.g., "Submitted 5 URLs to Google", "Detected 12 new URLs") * **Description** — context (e.g., the source CMS, the property URL, the error message) * **Timestamp** — relative ("2 hours ago") and absolute on hover * **URL count** — for submissions and detections, the number of URLs involved (normalized across the various backend field names) * **Drill-down** — for rows where individual URLs are tracked (new URLs detected, IndexNow submissions), click to expand and see the URL list ## Sitemap Status The companion **Sitemap** page (`/indexing/sitemap`) shows: * **Total URLs** — number of URLs currently in your sitemap * **Last Checked** — when the sitemap was last scanned * **Next Crawl** — when the next scheduled scan will run * **New This Week** — URLs detected in the past 7 days * **Pending Submissions** — URLs waiting to be submitted A historical chart shows URL count over time so you can spot sudden drops or spikes. ## Monitoring Schedule Sight AI checks your sitemap on a regular schedule: * **Hourly checks** — quick scan for new URLs * **Daily full sync** — complete sitemap comparison * **On-demand** — immediate check when you publish via Sight AI ## Manual Refresh To trigger an immediate sitemap check: 1. Go to **Indexing** → **Sitemap** 2. Click **"Refresh Now"** 3. Sight AI will scan your sitemap immediately 4. New URLs will be detected and submitted, and the events will appear in the Activity page ## Troubleshooting ### New URLs Not Being Detected * Verify the URLs are in your sitemap * Check that the sitemap URL is correct in Site Settings * Ensure the sitemap is accessible (no auth required) * Try a manual refresh on the Sitemap page ### Sitemap Errors * Validate your sitemap XML at [XML sitemap validator](https://www.xml-sitemaps.com/validate-xml-sitemap.html) * Check for encoding issues * Ensure URLs use consistent formatting * Look for duplicate entries ### Submission Failures * Use the status filter on the Activity page to surface only failures * Click into a failed row to see the underlying error message * Common causes: GSC token expired (reconnect), IndexNow key file missing (re-verify), or the URL returned a non-200 to the search engine's crawl ### Stale Monitoring Data * Check when the last check occurred on the Sitemap page * Try a manual refresh * Verify your site is accessible * Contact support if issues persist ## Best Practices * **Keep sitemap updated** — ensure your CMS updates it automatically * **Filter to "Failed" weekly** — a 30-second scan catches indexing problems before they become traffic problems * **Use lastmod dates** — help Sight AI identify updated content for re-submission * **Use the search box** to confirm a specific URL was submitted (paste the slug) ## Next Steps * [Submit sitemap to Google](/indexing/google-sitemap) * [Set up IndexNow for Bing](/indexing/indexnow) * [Connect Google Search Console](/integrations/google-search-console) # WordPress Sitemap Not Updating Source: https://docs.trysight.ai/indexing/wordpress-sitemap-not-updating How to fix WordPress sitemap caching issues that prevent new articles from being detected. ## The Problem Your Sight AI dashboard shows the same **Total URLs** count even though you're regularly publishing new articles to your WordPress site. The URL count appears stuck, and new posts aren't showing up in your Activity Feed. ## Why This Happens Sight AI crawls your sitemap every hour to detect new URLs. When you publish a new article, your WordPress SEO plugin (Yoast SEO, RankMath, AIOSEO, etc.) should automatically regenerate the sitemap to include it. However, if a **caching layer** is serving an old version of your sitemap, Sight AI only sees the stale copy -- even though the articles are live on your site. This is the most common cause of a "stuck" URL count on WordPress sites. ## How to Confirm This Is Your Issue ### Step 1: Check if a new article is missing from your sitemap 1. Open a recently published article on your site and copy the URL 2. Open your sitemap in a new tab: `https://yoursite.com/sitemap_index.xml` 3. Click into your post sitemap (usually `post-sitemap.xml`) 4. Use **Ctrl+F** (or **Cmd+F** on Mac) to search for your article URL 5. If the article is live on your site but **not in the sitemap**, you have a caching issue ### Step 2: Check the sitemap's last modified date Look at the `` date in your sitemap index. If it shows a date from days or weeks ago rather than today, the sitemap is being served from cache. ### Step 3: Check HTTP headers (advanced) Open your browser's Developer Tools (F12), go to the **Network** tab, and load your sitemap URL. Look for these headers in the response: * `x-cache-age` -- if this shows a large number, your sitemap is cached * `cf-cache-status: HIT` -- Cloudflare is serving a cached version * `x-litespeed-cache: hit` -- LiteSpeed Cache is active ## Common Causes and Fixes ### 1. WordPress Caching Plugin **Affected plugins:** WP Rocket, W3 Total Cache, WP Super Cache, LiteSpeed Cache, Breeze, WP Fastest Cache, Hummingbird, and others. Most caching plugins cache all server responses by default, including sitemap XML files. You need to exclude sitemaps from your cache. #### WP Rocket 1. Go to **WP Rocket -> Advanced Rules -> Never Cache URLs** 2. Add these patterns: `/sitemap_index.xml` `/(.*)sitemap(.*)\.xml` 3. Click **Save Changes**, then **Clear Cache** #### W3 Total Cache 1. Go to **Performance -> Page Cache -> Advanced** 2. Add sitemap URLs to the **Never cache** list 3. Purge all caches #### LiteSpeed Cache 1. Go to **LiteSpeed Cache -> Cache -> Excludes -> Do Not Cache URIs** 2. Add: `/sitemap` 3. Purge cache from **LiteSpeed Cache -> Toolbox -> Purge All** #### WP Super Cache 1. Go to **Settings -> WP Super Cache -> Advanced -> Rejected Strings** 2. Add: `sitemap` #### Breeze (Cloudways) 1. Go to **Settings -> Breeze -> Advanced Options -> Never Cache URLs** 2. Add: `/sitemap` 3. Clear cache from **Settings -> Breeze -> Basic Options** #### Any other caching plugin Look for "exclude URLs" or "never cache" settings and add your sitemap URL patterns. Then clear/purge the entire cache. ### 2. Cloudflare CDN Caching Cloudflare can cache XML responses at the edge and serve stale sitemaps to Sight AI. 1. Log into your [Cloudflare Dashboard](https://dash.cloudflare.com/) 2. Go to **Caching -> Cache Rules** 3. Create a new rule: * **When:** URI Path contains `sitemap` AND URI Path contains `.xml` * **Then:** Cache eligibility = **Bypass cache** 4. Save and deploy the rule 5. Go to **Caching -> Configuration** and click **Purge Everything** ### 3. Server-Level Hosting Cache Managed WordPress hosts often have server-level caching (Nginx, Varnish) that sits in front of WordPress entirely. #### WP Engine Go to your WP Engine dashboard -> Sites -> Your Site -> **Clear All Caches**. Contact WP Engine support to exclude sitemaps from their caching layer. #### Cloudways (Varnish) Log into the Cloudways console -> Your Application -> **Varnish** -> click **Purge**. Add sitemap exclusions under Application Settings -> Varnish Settings -> Exclude URLs. #### Kinsta Go to your Kinsta dashboard -> Sites -> Your Site -> **Tools -> Clear Cache**. Contact Kinsta support to add sitemap exclusions. #### SiteGround Go to **SiteGround Site Tools -> Speed -> Caching** and purge the dynamic cache. Add sitemap exclusions under the cache settings. #### Other hosts Contact your hosting provider and ask them to add a cache bypass rule for sitemap XML URLs. They will know how to configure this for their infrastructure. ### 4. SEO Plugin Sitemap Cache Yoast SEO and RankMath store sitemaps in WordPress transients (an internal cache). Occasionally this cache fails to refresh when new posts are published. #### Yoast SEO 1. Go to **Yoast SEO -> General -> Features** 2. Toggle the **XML sitemaps** switch **off** 3. Click **Save Changes** 4. Toggle it **back on** and click **Save Changes** again 5. Visit your sitemap to confirm new articles now appear #### RankMath 1. Go to **RankMath -> Sitemap Settings** 2. Toggle the sitemap module off and back on 3. Or click **Update Sitemap** if available ### 5. Object Cache (Redis / Memcached) If you're using Redis or Memcached as a WordPress object cache, stale sitemap data may persist even after your SEO plugin regenerates the sitemap. 1. Open the **Redis Object Cache** or **Memcached** plugin in WordPress Admin 2. Click **Flush Cache** or **Flush Object Cache** 3. Alternatively, ask your hosting provider to flush the object cache 4. Check your sitemap to confirm it now includes recent articles ## After Fixing Once you've cleared the cache and confirmed your sitemap includes the new articles: 1. Sight AI will **automatically detect the new URLs** on the next hourly crawl (within 60 minutes) 2. The **Total URLs** count on your Indexing Activity page will update 3. New URLs will be submitted to Google Search Console and IndexNow (if configured) 4. You'll see a **"New URLs Detected"** entry in your Activity Feed ## How to Prevent This in the Future * **Always exclude sitemaps from caching** -- add sitemap URL patterns to your cache plugin's exclusion list * **Test after cache plugin updates** -- caching plugins can reset exclusion rules after updates * **Test after hosting migrations** -- moving hosts often changes the caching layer * **Monitor your dashboard** -- if the URL count stops growing while you're publishing, check your sitemap first ## Still Not Updating? If you've tried all the steps above and your sitemap still isn't updating: * Check that your articles are set to **Published** status (not Draft or Scheduled) * Verify your SEO plugin hasn't excluded these posts from the sitemap (look for "noindex" or "exclude from sitemap" in per-post settings) * Check if your posts use a custom post type that isn't included in the sitemap * Contact your hosting provider and ask them to verify no server-level caching is affecting sitemap responses If you're still stuck, reach out to us at [support@trysight.ai](mailto:support@trysight.ai) with your site URL and we can help investigate further. ## Related Articles * [Monitoring Your Sitemap](/indexing/monitoring) * [How Indexing Works](/indexing/how-it-works) * [Google Sitemap Submit](/indexing/google-sitemap) * [WordPress Integration](/integrations/wordpress) # Bing IndexNow Integration Source: https://docs.trysight.ai/integrations/bing-indexnow Connect Bing IndexNow so Sight AI can ping Bing, Yandex, Seznam, and Naver the moment your content changes — including step-by-step setup for any custom site. ## Overview IndexNow is an open protocol that lets you instantly notify search engines whenever a URL on your site is created, updated, or deleted. Instead of waiting for crawlers to find your changes, Sight AI pushes the URL straight to Bing's IndexNow endpoint — and Bing relays it to every other participating engine. Once IndexNow is set up, Sight AI handles submissions for you automatically: * New URLs from your sitemap are submitted as soon as we detect them * Articles you publish through Sight AI are submitted the moment they sync to your CMS * Updated URLs are re-submitted when they change **Google does not participate in IndexNow.** Use the [Google Search Console integration](/integrations/google-search-console) for Google indexing. Run both for full search-engine coverage. ### Participating search engines A single IndexNow submission reaches all of these: * **Bing** — Microsoft's search engine * **Yandex** — Russia's largest search engine * **Seznam** — Czech Republic's search engine * **Naver** — South Korea's largest search engine ## How verification works Bing won't accept submissions on behalf of a domain unless it can prove you own that domain. The proof is simple: you host a small text file at the root of your site that contains a unique key, and Bing fetches it whenever it accepts a submission. The Sight AI flow is: A 32-character alphanumeric key is created for your site. This becomes both the file *name* and the file *contents*. The file must be reachable at `https://yourdomain.com/.txt` and return the key as plain text. We fetch both the apex (`yourdomain.com`) and `www.yourdomain.com` variants. As long as one of them returns the exact key, you're verified. From now on every sitemap change and every published article triggers an IndexNow ping. No further action required. ## Before you start You'll need three things — Bing Webmaster Tools is the one most people forget, so we cover it first. Free, takes \~2 minutes. Required by Bing — see the [step-by-step below](#prerequisite-bing-webmaster-tools). The IndexNow setup lives at **Integrations → Bing IndexNow** and operates on the active workspace. Or, on platforms that block root uploads, the ability to add a redirect from `/.txt` to a hosted asset. ### Prerequisite: Bing Webmaster Tools Bing won't accept IndexNow submissions for a domain until that domain is registered and verified inside **Bing Webmaster Tools** — it's a separate Microsoft product from Sight AI, and there's no way to skip it. The good news is the setup is short: Go to [bing.com/webmasters](https://www.bing.com/webmasters/about) and sign in with a Microsoft, Google, or Facebook account. If you already have a Microsoft account (Outlook, Hotmail, Xbox, etc.) you can use that. Once you're in, click **Add a site** in the top-left dropdown and enter your full site URL (with `https://` and the correct `www`/non-`www` variant). Bing offers four ways to verify ownership — XML file, meta tag, CNAME DNS record, or auto-import from Google Search Console (the easiest, if you already have GSC connected). Microsoft's official walkthrough covers every verification method in detail: [Add and Verify your site — Bing Webmaster Tools](https://www.bing.com/webmasters/help/add-and-verify-site-12184f8b). If you've already connected Google Search Console (see the [GSC integration guide](/integrations/google-search-console)), use the **"Import from Google Search Console"** option in Bing — it pulls the property over and verifies it for you in one click. No file uploads or DNS changes needed. A green checkmark next to your domain in the left-hand site picker means you're done. Now you can come back to Sight AI and start the IndexNow setup. **Bing Webmaster Tools is a Microsoft product — Sight AI cannot help with issues inside it.** If you get stuck creating the account, verifying ownership, or anything else *inside* Bing Webmaster Tools, those questions need to go to Microsoft. The right channels are: * [Microsoft's official Bing Webmaster Tools help center](https://www.bing.com/webmasters/help/help-center-661b2d18) — searchable docs for every BWT feature * [Bing Webmaster Support — Raise a support request](https://www.bing.com/webmasters/help/webmaster-support-24ab5ebf) — direct contact form for BWT engineers Once your site shows as verified inside Bing Webmaster Tools, **everything below this point is something we can absolutely help with** — email `support@trysight.ai`. ## Setup by site type In Sight AI, open **Integrations → Bing IndexNow**, pick your workspace, and select the path that matches your site: The Sight AI WordPress plugin handles IndexNow for you. If you've already installed the plugin (see the [WordPress integration guide](/integrations/wordpress)), pick **WordPress** in the IndexNow setup, generate a key, and the plugin will host the file automatically. If you're hosting WordPress yourself and want to do it manually: It will be named `.txt` and contain only the key. Use FTP/SFTP, cPanel File Manager, or a plugin like **WP File Manager**. The file must sit at the same level as `wp-config.php` and `index.php` — **not** inside `/wp-content`, `/wp-admin`, or any other subdirectory. Open `https://yourdomain.com/.txt` in your browser. You should see the key as plain text — nothing else. Once verified, Sight AI starts pinging IndexNow on your behalf. Webflow doesn't let you upload a `.txt` file directly to the site root, so the workflow uses the Webflow **Assets** panel plus a **301 redirect**. Sight AI ships a built-in wizard that walks you through it screen by screen. 1. In **Integrations → Bing IndexNow**, pick **Webflow**. 2. Click **I'm registered with Bing Webmaster — continue**. 3. Follow the five-step wizard: 1. Download the key file 2. Upload it to **Webflow → Assets** 3. Right-click the asset and **Copy link** 4. Add a **301 redirect** under **Site Settings → Publishing → 301 Redirects** with **Old path** = `/.txt` and **Redirect to path** = the asset URL you copied 5. **Publish** your Webflow site, then click **Verify IndexNow Key** The redirect makes `https://yourdomain.com/.txt` resolve to the file in Webflow's CDN. Sight AI follows the redirect during verification. Pick **All other sites** in the setup flow, then follow the platform-specific instructions in the [next section](#custom-site-setup). This covers Vercel, Netlify, Cloudflare Pages, GitHub Pages, Apache, Nginx, IIS, S3, static-site generators, Framer, Ghost, Shopify, Squarespace, Wix, and anything else that lets you serve a file at the site root. ## Custom site setup This section is the deep dive for any site that isn't WordPress or Webflow. The goal is the same in every case: make `https://yourdomain.com/.txt` return your key as plain text. **Make sure you've completed the [Bing Webmaster Tools prerequisite](#prerequisite-bing-webmaster-tools) above before starting.** If your domain isn't verified in BWT, IndexNow submissions will silently fail no matter how perfect the key file is. The setup is just two steps: create a free account at [bing.com/webmasters](https://www.bing.com/webmasters/about) and follow [Microsoft's "Add and Verify your site" guide](https://www.bing.com/webmasters/help/add-and-verify-site-12184f8b). ### Step 1 — Generate the key in Sight AI 1. Open **Integrations → Bing IndexNow**. 2. Pick your workspace. 3. Select **All other sites**. 4. Confirm you've registered with Bing Webmaster Tools. 5. Click **Generate IndexNow key**. Sight AI creates a 32-character key for you. 6. Click **Download key file**. You'll get a file like `aB3xZ9k7…q2P.txt` whose contents are just the 32-character key — nothing else. **The file must contain ONLY the key.** No leading/trailing spaces, no blank lines, no `` wrapper, no UTF-8 BOM. Bing rejects files that don't byte-for-byte match the key. ### Step 2 — Understand "site root" "Site root" means the file is reachable directly under your domain — *not* under any path segment. Test against this rule: | URL | At root? | | -------------------------------------------------- | -------- | | `https://example.com/abc123.txt` | ✅ Yes | | `https://example.com/abc123.txt/` (trailing slash) | ❌ No | | `https://example.com/static/abc123.txt` | ❌ No | | `https://example.com/public/abc123.txt` | ❌ No | | `https://example.com/.well-known/abc123.txt` | ❌ No | | `https://example.com/blog/abc123.txt` | ❌ No | If you can serve a `robots.txt` or `sitemap.xml` from your site, you can serve the IndexNow key file the same way and at the same place. ### Step 3 — Host the file (pick your platform) Drop the file into your project's `public/` directory: ``` your-project/ public/ abc123…q2P.txt ← your downloaded file goes here ``` Anything in `public/` is served from the root, so after deploying it'll be reachable at `https://yourdomain.com/abc123…q2P.txt`. Commit, push, wait for the deploy to finish, then click **Verify** in Sight AI. In the Pages Router, `public/` works the same way. In the App Router, this is still the right place — don't put it inside `app/`. Add the file to whichever directory Netlify publishes from (commonly `public/`, `dist/`, `build/`, or `_site/`). Check **Site settings → Build & deploy → Continuous deployment → Publish directory** if you're not sure. For a static site: ``` your-site/ public/ abc123…q2P.txt ``` Deploy the site, then verify in Sight AI. If you can't drop a file into the build, you can instead add a redirect to `_redirects`: ``` /abc123…q2P.txt https://your-cdn.example.com/abc123…q2P.txt 200 ``` The `200` rewrite (not a `301`) keeps the URL as `yourdomain.com/...` so Bing accepts it. Cloudflare Pages serves the contents of your build output directly. Add the key file alongside your other static assets in the directory that becomes the site root (often `public/`, `dist/`, or the project root for fully static sites). Push and let Pages rebuild. To verify locally before deploying, run `wrangler pages dev` and hit `http://localhost:8788/.txt`. 1. In your repository, drop the `.txt` file at the root of the branch GitHub Pages serves from (usually `main` or `gh-pages`, in the directory configured under **Settings → Pages**). 2. Commit and push. 3. Wait for the Pages build to finish (check the **Actions** tab). 4. Verify by opening `https://your-username.github.io/.txt` (or your custom domain). If you use Jekyll, Jekyll will ignore files starting with `_`. Your key won't start with `_`, but if you also keep a `.nojekyll` file at the root, you're guaranteed the file will be served as-is. Static-site generators all expose a folder whose contents are copied to the site root unchanged: | Generator | Drop the file in | | ------------- | ---------------------------------------------------------------------- | | **Astro** | `public/` | | **Hugo** | `static/` | | **Jekyll** | site root (any file with no front matter) | | **Eleventy** | the directory listed under `passthroughCopy` (often `public/` or root) | | **Gatsby** | `static/` | | **Next.js** | `public/` | | **SvelteKit** | `static/` | | **Nuxt** | `public/` | Rebuild and deploy, then verify in Sight AI. 1. Use FTP/SFTP, cPanel **File Manager**, or `scp` to upload `.txt` to your `DocumentRoot` — the same directory that contains your `index.html` or `index.php`. 2. Make sure the file's permissions are `644` so the web server can read it (`chmod 644 .txt`). 3. If you have an aggressive `.htaccess` rewrite that routes everything through a single PHP entrypoint, add an exception so the `.txt` file is served directly: ```apache theme={null} RewriteEngine On RewriteRule ^[a-zA-Z0-9-]+\.txt$ - [L] ``` Place this **above** your existing rewrite rules. 4. Verify in your browser, then click **Verify** in Sight AI. Upload `.txt` to your site's web root (whatever `root` points to in your `server` block). If your config has a SPA-style catch-all like `try_files $uri $uri/ /index.html`, that catch-all will swallow the `.txt` request and return your HTML page. Add an explicit location block above the catch-all so the key file is served as-is: ```nginx theme={null} location ~* ^/[a-zA-Z0-9-]+\.txt$ { add_header Content-Type text/plain; try_files $uri =404; } ``` Reload Nginx (`sudo nginx -s reload`) and verify. 1. Copy `.txt` into the site's physical directory (the one mapped under **Sites → your-site → Basic Settings → Physical path**). 2. In **IIS Manager → MIME Types**, confirm `.txt` is mapped to `text/plain` (it is by default). 3. If your `web.config` rewrites everything to a single handler, add a precondition above the rewrite: ```xml theme={null} ``` 4. Verify in your browser, then in Sight AI. 1. Upload `.txt` to the S3 bucket that backs your CloudFront distribution. Place it at the bucket root, not inside any prefix. 2. Set the object's **Content-Type** to `text/plain` (the upload UI lets you set this; via CLI: `--content-type text/plain`). 3. Make sure the object is publicly readable, or that your bucket policy allows the CloudFront OAI/OAC to read it. 4. If CloudFront has aggressive caching for `.txt` files, **invalidate** the path: `/.txt`. 5. Verify the URL responds, then click **Verify** in Sight AI. For Workers Sites, drop the file into the directory listed under `[site] bucket` in `wrangler.toml` (commonly `public/`). For a hand-written Worker, add an early route that returns the key as plain text: ```js theme={null} export default { async fetch(request) { const url = new URL(request.url); if (url.pathname === "/abc123…q2P.txt") { return new Response("abc123…q2P", { headers: { "Content-Type": "text/plain" }, }); } // …rest of your worker }, }; ``` Replace both occurrences of `abc123…q2P` with your actual key. Framer doesn't let you upload arbitrary files to the site root, so the cleanest path is to use the Sight AI Framer plugin which handles indexing for you (see the [Framer integration guide](/integrations/framer)). If you don't want to use the plugin, you can use a Custom Code embed plus a redirect through your DNS provider, but in practice we recommend the plugin — IndexNow setup is one of the things it's designed to manage. On a self-hosted Ghost install, place `.txt` in `content/files/` (it will be served at `https://yourdomain.com/content/files/.txt`, which is **not** the root) — so instead use a small Express/Nginx reverse-proxy rule above Ghost: ```nginx theme={null} location ~* ^/[a-zA-Z0-9-]+\.txt$ { alias /var/www/ghost/content/files/$1.txt; } ``` For Ghost Pro (managed hosting), root file uploads aren't supported. Contact Ghost support to host the key file or move IndexNow management into Cloudflare in front of Ghost using a Worker (see Cloudflare Workers above). Shopify doesn't allow root file uploads on the storefront, but you can serve the key file through a redirect: 1. In Shopify admin, go to **Online Store → Navigation → URL Redirects**. 2. Click **Create URL redirect**. 3. **Redirect from**: `/.txt` 4. **Redirect to**: a public URL where the file lives (e.g., a Files entry — upload the `.txt` through **Settings → Files**, copy the CDN URL, paste it here). 5. Save, then verify in Sight AI. Shopify converts redirects to 301s. Sight AI follows redirects during verification, and Bing's verifier follows them too, so this is supported. Squarespace doesn't expose root file uploads on most plans. Two options: 1. **Code Injection (Business plan and above):** doesn't help here because Code Injection runs inside HTML pages, not as a standalone file. Skip this option. 2. **URL redirects:** Squarespace lets you create URL mappings under **Settings → Advanced → URL Mappings**. The syntax is `/.txt -> https://your-cdn.example.com/.txt 301`. Host the file on any public URL (S3, GitHub Pages, etc.) and redirect to it. If neither option works on your plan, IndexNow setup isn't possible on Squarespace — Sight AI's [Google Search Console integration](/integrations/google-search-console) still works as a fallback. Wix doesn't allow custom files at the site root and doesn't support arbitrary 301 redirects to external URLs for non-Wix paths, so IndexNow setup typically isn't possible on Wix. If your site is on **Wix Studio with a custom domain**, you can sometimes use the Wix CLI to upload to the root — contact Wix support to confirm your plan supports it. For most Wix users, fall back to the [Google Search Console integration](/integrations/google-search-console) — it doesn't require any file hosting. Add a single early route that returns the key as plain text. Example for Express: ```js theme={null} app.get("/abc123…q2P.txt", (req, res) => { res.type("text/plain").send("abc123…q2P"); }); ``` Make sure this route is registered **before** any catch-all middleware (404 handler, SPA fallback, etc.). Replace both occurrences with your actual key. Same idea for FastAPI: ```python theme={null} from fastapi.responses import PlainTextResponse @app.get("/abc123…q2P.txt", response_class=PlainTextResponse) def indexnow_key(): return "abc123…q2P" ``` ### Step 4 — Confirm the file is reachable Before clicking Verify in Sight AI, sanity-check the file from your terminal: ```bash theme={null} curl -i https://yourdomain.com/.txt ``` You want a response that looks like this: ``` HTTP/2 200 content-type: text/plain content-length: 32 aB3xZ9k7…q2P ``` The exact `content-type` doesn't have to be `text/plain` — `application/octet-stream` and others work too — but the **status must be 200** and the **body must be exactly your key** with no extras. Run the same check on the `www` variant if your site uses it: ```bash theme={null} curl -i https://www.yourdomain.com/.txt ``` Sight AI tries both during verification, so you only need one of them to work. ### Step 5 — Verify in Sight AI Back in **Integrations → Bing IndexNow**, click **Verify connection**. Sight AI will: 1. Fetch `https://yourdomain.com/.txt` 2. If that fails, try `https://www.yourdomain.com/.txt` 3. Compare the response body (after trimming whitespace) to your key 4. On success: mark the integration as verified, immediately submit your existing sitemap URLs, and start pinging IndexNow on every future change If verification fails, jump to the [Troubleshooting](#troubleshooting) section — it covers every error message we surface. ## After verification Once verified, IndexNow runs entirely in the background: * **New sitemap URLs** — picked up by Sight AI's hourly sitemap check and submitted as a batch * **New articles** — submitted the moment they sync to your CMS * **Updated content** — re-submitted when the URL appears again in your sitemap with a new `lastmod` * **No rate limits to worry about** — Sight AI batches up to 10,000 URLs per IndexNow request and Bing accepts them all * **No further action required from you** — the key file just needs to stay reachable You can review every submission under [Indexing Activity](/indexing/monitoring). **Leave the key file in place forever.** Bing periodically re-verifies ownership by re-fetching the file. If you delete it, future submissions will start failing silently. ## Troubleshooting When verification fails, Sight AI returns one of the messages below. Each section maps the message to its likely cause and the exact fix. ### "Key file not accessible — HTTP 404" The most common failure. Bing tried to fetch `https://yourdomain.com/.txt` and your server returned 404. **Causes and fixes:** * **The file isn't at the root.** Check `curl -I https://yourdomain.com/.txt` — if you get 404, but a path like `https://yourdomain.com/static/.txt` returns 200, you uploaded it to the wrong directory. Move it to the root. * **Your build process didn't include the file.** If you committed it to source but didn't push, or your build folder doesn't include the static files directory, the file won't ship. Confirm the file is in the deployed output (open the URL in a browser tab — incognito to avoid caching). * **A SPA catch-all is swallowing the request.** If you ship a single-page app, your server is probably returning `index.html` for every unknown path. The text response will look like HTML, not your key. See the Apache/Nginx/IIS sections above for how to add a precondition that lets `.txt` files through. * **You're testing the wrong host.** Sight AI tries both `apex` and `www`. Check both manually. ### "Key file content mismatch" Sight AI fetched the file successfully but the body didn't match your key. **Causes and fixes:** * **The file has extra characters.** Open the file in a hex-aware editor (`xxd .txt | head` on macOS/Linux). The bytes should be only `[a-zA-Z0-9]` — no spaces, no newlines, no UTF-8 BOM (`ef bb bf` at the start). * **You uploaded the wrong file.** If you regenerated the key in Sight AI and forgot to re-download, your hosted file is stale. Click **Download key file** again and re-upload. * **A CDN is rewriting the response.** Some CDNs minify or wrap text responses. Disable rewrite rules for this path or set caching to bypass. * **Your server returned an error page with HTTP 200.** Some hosts return a "soft 404" — a 200 status with an HTML error body. Check the actual body of the response (not just the status code). ### "DNS resolution failed — the domain could not be found" Sight AI couldn't resolve the host at all. **Causes and fixes:** * The site host stored on your workspace doesn't match a real domain. Open **Site Settings → General** and confirm the domain is correct. * The domain just changed nameservers and DNS hasn't propagated. Wait 15–30 minutes and try again. * A typo: `example.con` vs `example.com`. ### "TLS/SSL certificate error" Sight AI reached the server but couldn't establish a secure connection. **Causes and fixes:** * Your SSL certificate is expired or doesn't cover the host you're verifying (e.g., the cert covers `example.com` but you're verifying `www.example.com`). * Your server is using an outdated cipher Sight AI doesn't accept. Renew the cert from your hosting provider or run [SSL Labs' test](https://www.ssllabs.com/ssltest/) to diagnose. ### "Connection refused" / "Connection reset" Your server actively rejected Sight AI's request, usually because of a WAF rule or bot-detection layer. **Causes and fixes:** * **Cloudflare Bot Fight Mode / WAF:** allow-list Sight AI's verifier in **Cloudflare → Security → WAF** by exempting requests for `*.txt` paths, or temporarily set Bot Fight Mode to off, verify, then re-enable. * **Vercel firewall rules:** add an allow rule for the `.txt` path. * **Server fail2ban / rate limiter:** check your access logs for blocks on Sight AI's verifier (User-Agent contains `Mozilla/5.0`). ### "Request timeout — unable to access the key file" Your server took longer than 10 seconds to respond. **Causes and fixes:** * The server is overloaded or cold-starting. Wait a few seconds and retry. * The file is being generated dynamically and that handler is slow. Serve it as a true static asset instead. ### Verification succeeded but submissions are still failing Verification passed but the [Indexing Activity](/indexing/monitoring) page shows submissions failing. **Causes and fixes:** * **Your domain isn't registered in Bing Webmaster Tools.** This is the silent killer — Sight AI's verification only checks that the key file is reachable; it doesn't (and can't) check whether you've also added the site to BWT. If you skipped the [BWT prerequisite](#prerequisite-bing-webmaster-tools), Bing will accept the IndexNow request but discard it on its end. Go to [bing.com/webmasters](https://www.bing.com/webmasters/about), add your site, and verify ownership using [Microsoft's guide](https://www.bing.com/webmasters/help/add-and-verify-site-12184f8b). * **You moved or deleted the key file after verifying.** Bing re-verifies ownership periodically. Re-upload the file to the root. * **The submitted URL host doesn't match the verified host.** If your sitemap returns `https://www.example.com/page` but you verified `example.com` (apex only), Bing rejects the submission. The fix is in the *sitemap*, not IndexNow — make your sitemap consistently use the same host you verified, or set the canonical host on your site so both work. * **The page returns a non-2xx status.** Bing's crawler will follow the IndexNow ping but won't index a URL that returns 4xx or 5xx. Check that the page actually loads. ### How to ask for help For anything **inside Bing Webmaster Tools** (creating the account, verifying ownership, settings inside BWT, indexing decisions Bing makes about your URLs), Sight AI can't see what's happening on Microsoft's side — those go to Microsoft directly: * [Bing Webmaster Tools Help Center](https://www.bing.com/webmasters/help/help-center-661b2d18) * [Raise a Bing Webmaster Support request](https://www.bing.com/webmasters/help/webmaster-support-24ab5ebf) For anything on **the Sight AI side** (verification fails, key file logic, submission status, sitemap-host mismatch, our integration UI), email `support@trysight.ai` with: * The exact error text from the verification panel * The output of `curl -i https://yourdomain.com/.txt` * The output of `curl -i https://www.yourdomain.com/.txt` * A screenshot of the **Integrations → Bing IndexNow** page * Confirmation that the domain shows as verified inside Bing Webmaster Tools That's almost always enough to diagnose in a single round-trip. ## Key reference For anyone bringing their own key (under **Use my own key** in the Sight AI UI), it must conform to the IndexNow spec: | Rule | Allowed | | ------------------ | ---------------------------------------------------------------- | | Length | 8 to 128 characters | | Allowed characters | `a-z`, `A-Z`, `0-9`, `-` (hyphen) | | **Not** allowed | underscores, dots, slashes, spaces, any other punctuation | | File name | exactly `.txt` (case-sensitive — keep the `.txt` lowercase) | | File contents | exactly the key, no whitespace, no newline, no BOM | | File location | site root only | If you let Sight AI generate the key, it always meets these rules. ## Disconnect or regenerate You can manage the integration at any time from **Integrations → Bing IndexNow**: * **Regenerate key** — issues a new key and clears the verified flag. You'll need to re-upload a new file and re-verify. Use this if your old key was leaked or you want to rotate it. * **Use my own key** — replace the auto-generated key with one you brought from elsewhere (e.g., one already used with another tool that submits to IndexNow). * **Disconnect** — removes the IndexNow key for the workspace, stops automatic submissions, and clears the verified flag. The file on your server is harmless to leave behind, but you can also delete it. ## Next steps * [Set up Google Search Console](/integrations/google-search-console) — for Google indexing (IndexNow doesn't cover Google) * [Monitor your indexing activity](/indexing/monitoring) — see every IndexNow submission, status, and error * [Learn how Sight AI handles indexing end-to-end](/indexing/how-it-works) * [Enable Autopilot](/autopilot/how-autopilot-works) — let Sight AI generate, publish, and submit articles for you on a schedule # Framer Integration Source: https://docs.trysight.ai/integrations/framer Sync AI-generated articles to your Framer CMS using the Sight AI Framer plugin. ## Overview The Framer integration uses the Sight AI Framer plugin to sync articles and categories from Sight AI directly into your existing Framer CMS collections. The plugin uses API key authentication and allows you to map Sight AI content fields to your collection fields. ## Requirements * **Framer account** -- With CMS capabilities * **Existing CMS collection** -- You must create a collection in Framer before syncing * **Sight AI API key** -- Generated from the Framer integration page in Sight AI * **Framer Desktop or Web** -- To install and use the plugin ## Setup Instructions ### Step 1: Generate an API Key in Sight AI 1. Log in to Sight AI at [app.trysight.ai](https://app.trysight.ai) 2. Navigate to **Integrations > Framer** 3. Click **Generate API Key** 4. Copy and save your API key securely -- you won't be able to see it again ### Step 2: Create Your CMS Collection in Framer Before using the plugin, you need to create a CMS collection in Framer with the fields you want to sync. The plugin syncs to **existing collections only**. Recommended fields for a blog/articles collection: * **Title** -- Text field * **Slug** -- Slug field * **Content/Body** -- Rich text (Formatted Text) field * **Featured Image** -- Image field * **Summary/Excerpt** -- Text field (optional) * **Category** -- Collection reference field (optional, for category linking) * **Published Date** -- Date field (optional) ### Step 3: Install the Sight AI Framer Plugin 1. Open your Framer project 2. Click on the **Plugins** icon (puzzle piece) in the toolbar 3. Search for **"Sight AI"** 4. Click **Install** You can also install directly from the [Framer Marketplace](https://www.framer.com/marketplace/plugins/indexpilot/). ### Step 4: Connect and Sync 1. Open the Sight AI plugin in Framer 2. Enter your **API key** from Step 1 and click **Next** 3. Select an **existing CMS collection** from the dropdown 4. Choose your **data source**: * **Articles** -- Sync your generated articles * **Categories** -- Sync your article categories 5. Map your fields: * Select which **slug field** from the source data to use for item IDs * For each Framer field, select the corresponding **source field** or choose "Don't sync" 6. Click **Import** to sync the content to your collection ## Understanding Field Mapping The plugin auto-matches fields by name when possible, but you can customize the mapping: * **Framer Field** -- The field in your existing Framer collection * **Source Data** -- The corresponding field from Sight AI (title, content, featured\_image, etc.) * **Don't sync** -- Skip this field and don't populate it Fields are matched by case-insensitive name comparison. For example, a Framer field named "Title" will automatically map to the source "title" field. ## Available Source Fields When syncing **Articles**, the following fields are available: * **title** -- Article title (text) * **slug** -- URL-friendly slug (text) * **content** -- Full article content (formatted text/HTML) * **featured\_image** -- Main article image (image) * **meta\_description** -- SEO meta description (text) * **author** -- Author name (text) * **published\_at** -- Publication date (date) * **category** -- Category reference (collection reference) When syncing **Categories**, the following fields are available: * **name** -- Category name (text) * **slug** -- URL-friendly slug (text) ## Syncing Workflow ### Initial Sync 1. Open the Sight AI plugin 2. The plugin will detect your saved API key if you've used it before 3. Select your collection and data source 4. Configure field mappings 5. Click **Import** to sync all content ### Re-syncing Content To update your Framer collection with new or updated content: 1. Open the plugin again 2. It will remember your previous configuration 3. Click **Import** to sync changes The plugin updates existing items (matched by slug) and adds new items. Items that exist in Framer but not in Sight AI are preserved unless manually removed. ## Category Sync When you sync categories through the Framer plugin, they automatically sync back to Sight AI. This enables: * Selecting Framer categories when generating new articles in Sight AI * Maintaining category consistency between both platforms * Article-to-category linking using collection references ## Publishing to Your Site After syncing articles to your Framer CMS: 1. Review the synced articles in your CMS panel 2. Make any final edits if needed 3. Publish your Framer site to make articles live **Note:** Framer integration does not support auto-publish. Articles need to be manually synced through the plugin and your site published through Framer. ## Troubleshooting ### No Collections Available * Create at least one CMS collection in Framer before using the plugin * Ensure your Framer plan supports CMS functionality * Try refreshing the plugin ### API Key Not Working * Verify you copied the full API key (they start with "sight\_") * Check that the API key hasn't been regenerated in Sight AI * Generate a new API key if the current one isn't working ### Sync Failed * Ensure your Framer collection has the expected field types * Check that required fields are properly mapped * Verify you have articles in "Ready" status in Sight AI * Check your browser console for error details ### Images Not Appearing * Ensure you mapped the featured\_image field to an Image type field * Verify your Framer plan supports CMS images * Try re-syncing the articles ### Field Mapping Issues * Check that field types match (text to text, image to image, etc.) * Rich text/HTML content should map to a Formatted Text field * Category references require the categories collection to exist first ## Active CMS Sight AI supports only **one active CMS integration per site** at a time. When you connect Framer and set it as your active CMS, article categories sync from Framer and articles are available for syncing via the Framer plugin. You can switch to a different CMS at any time from the **Integrations** hub -- your Framer configuration and previously synced content are preserved. ## Disconnecting To disconnect the Framer integration: 1. Go to **Integrations > Framer** in Sight AI 2. Click **Disconnect Integration** 3. Confirm the disconnection This will invalidate your API key and remove cached category data. Your existing articles in both Sight AI and Framer will not be affected. ## Next Steps * [Generate articles to sync](/ai-content/overview) * [Set up search engine indexing](/indexing/how-it-works) * [Track your AI visibility](/ai-visibility/what-is-ai-visibility) # Google Search Console Integration Source: https://docs.trysight.ai/integrations/google-search-console Connect GSC to power the dashboard, generate Search Opportunities, and submit your sitemap to Google for faster indexing. ## Overview The Google Search Console (GSC) integration is the engine behind Sight AI's most useful surfaces. When you connect GSC, Sight AI will: * Backfill **90 days** of search data and keep it in sync daily * Power the [combined Dashboard](/getting-started/dashboard) with impressions, clicks, CTR, top queries, and article performance * Generate [Search Opportunities](/ai-visibility/search-opportunities) — Content Gap, Refresh, Interlink, and Rising Page suggestions * Populate the full [Search section](/ai-visibility/search-section) — every query, page, and article that Google sends traffic to * Automatically submit your sitemap to Google and request indexing for new URLs ## What You Unlock Without GSC, the Dashboard shows preview data and Search Opportunities are empty. With GSC connected: | Feature | Without GSC | With GSC | | ------------------------------------------------------------- | ----------------------------- | -------------------------------------------------------------- | | Dashboard | Preview/mock data | Real organic-search performance | | Search section (`/visibility/queries`, `/pages`, `/articles`) | Empty | Up to 200 rows per tab, sortable, searchable, bulk-create-able | | [Search Opportunities](/ai-visibility/search-opportunities) | Empty | Content Gap, Refresh, Interlinks, Rising Pages | | [Article Boost Agent](/automations/agent-templates) | Nothing to act on | Refreshes rising/refresh opportunities automatically | | [Search Opportunity Agent](/automations/agent-templates) | Falls back to AI prompts only | Acts on Content Gap opportunities first | | Indexing | IndexNow only (Bing) | Google + Bing | ## Setup Instructions ### Step 1: Connect Google Account 1. Go to **Integrations** → **Google Search Console** in Sight AI 2. Click **"Connect Google Account"** 3. Sign in with your Google account 4. Grant Sight AI permission to access Search Console data ### Step 2: Select Your Property 1. After connecting, your verified GSC properties appear in a list 2. Use the search box to filter if you have many 3. Click your property to link it to the active site (we match against your site host automatically when possible) 4. The link confirms with a green checkmark If your property isn't shown, ensure it's verified in GSC and that you signed in with the Google account that has access. ### Step 3: Wait for the Backfill Once linked, Sight AI: 1. Pulls the last **90 days** of search data from Google (typically completes in 5–10 minutes) 2. Generates the first batch of [Search Opportunities](/ai-visibility/search-opportunities) once the backfill finishes 3. Switches the [Dashboard](/getting-started/dashboard) from preview mode to "ready" with real data You'll see a status indicator on the Dashboard while the backfill is in progress. ### Step 4 (Optional): Submit Your Sitemap Sight AI will also submit your sitemap to Google on your behalf. Click **"Submit Sitemap"** if you want to trigger an immediate submission, or let the daily sync handle it. ## How the Daily Sync Works After the initial backfill, a scheduled job runs every day to: 1. Pull yesterday's GSC data for every connected site 2. Update the Dashboard, Search section, and Search Opportunities tables 3. Re-link new pages to existing articles where the canonical URL matches 4. Trigger any [Automations](/automations/overview) you have configured You don't need to do anything — the sync runs server-side. Status and last-synced timestamps are visible on the Dashboard. ## Sitemap Submission & Indexing With GSC connected, Sight AI also handles sitemap submission and indexing requests: ### Sitemap Monitoring * **Hourly checks** — New content detected within an hour * **Daily full sync** — Complete sitemap comparison * **Real-time on publish** — Immediate notification when you publish via Sight AI ### Indexing Requests When new content is detected: 1. Sight AI identifies the new URL 2. Sends an indexing request to Google via the API 3. Tracks the request status in the [Indexing Activity](/indexing/monitoring) page 4. Reports success or any issues > **Note:** Google limits indexing requests. Sight AI manages this automatically to stay within limits. ## Status Dashboard View your GSC integration status from the connected page: * **Connection Status** — whether GSC is connected for the active team * **Linked Property** — which GSC property is linked to the current site * **Last Synced** — when the daily sync last ran * **Backfill State** — progress if a 90-day backfill is in flight * **Submission Status** — recent sitemap submissions and outcomes ## Requirements * **Verified GSC Property** — your site must be verified in Google Search Console * **Valid Sitemap** — your site needs a valid XML sitemap (auto-detected during onboarding) * **Google Account Access** — the Google account you connect must have access to the GSC property ## Supported Property Types Sight AI supports both GSC property types: * **URL-prefix property** — e.g., `https://example.com/` * **Domain property** — e.g., `sc-domain:example.com` We pick the matching property automatically based on your site host. ## Troubleshooting For step-by-step fixes for the warning banners that appear on the dashboard (permission issue, access expired, property not found, rate limit, etc.), see the dedicated [Google Search Console Troubleshooting](/integrations/google-search-console-troubleshooting) guide. The banners on the dashboard deep-link straight to the matching section. ### No Properties Showing * Ensure your site is verified in Google Search Console * Check that you're using the correct Google account * Try disconnecting and reconnecting ### "Your Google access expired" This means your OAuth refresh token expired (typically after 6 months of no use). Reconnect from the Google Search Console integration page to restore the connection. See [Access expired](/integrations/google-search-console-troubleshooting#access-expired) for the full step-by-step. ### Backfill Stuck If the backfill state has been "in progress" for more than 30 minutes: * Refresh the page — the state may have completed already * Check that your GSC property is the right one (the wrong property typically returns no rows quickly) * Contact support if it persists ### Search Opportunities Empty After Backfill * Wait a few more minutes — opportunity generation runs after the backfill completes * Check that the backfill state is "ready" on the Dashboard * Make sure you have at least 30 days of impressions in GSC; very new sites may have nothing to surface yet ### Sitemap Submission Failed * Verify your sitemap URL is accessible * Check that the sitemap is valid XML * Ensure the sitemap is at a standard location * Test your sitemap in GSC directly ### Indexing Taking Long * Google controls indexing speed — Sight AI can only request * New sites may take longer to get indexed * Ensure your site has quality content and backlinks * Check GSC for any crawl errors ## Disconnecting To disconnect Google Search Console: 1. Go to **Integrations** → **Google Search Console** 2. Click **"Disconnect"** 3. Confirm the disconnection Your GSC data and settings in Google remain unchanged. Synced data inside Sight AI is retained but stops updating. ## Next Steps * [Use the combined Dashboard](/getting-started/dashboard) to see your real GSC data * [Browse Search Opportunities](/ai-visibility/search-opportunities) for keyword ideas, refreshes, and rising-page signals * [Set up Automations](/automations/getting-started) to act on opportunities automatically * [Set up IndexNow for Bing](/indexing/indexnow) for full search-engine coverage # Google Search Console Troubleshooting Source: https://docs.trysight.ai/integrations/google-search-console-troubleshooting Diagnose and fix common Google Search Console connection and sync issues in Sight AI. If the Sight AI dashboard is showing a "Search Console" warning banner, this page covers what each error means, why it happens, and how to fix it. The banner deep-links straight to the matching section below. After fixing any issue, the easiest path forward is almost always the same — click **Reconnect Search Console** on the dashboard banner (or visit **Integrations → Google Search Console**). Reconnecting clears every paused/error flag automatically and re-runs the daily sync within a few minutes. ## Access expired The Google sign-in Sight AI uses to read your Search Console data has expired or been revoked. This can happen when: * You haven't signed in to Sight AI for \~6 months (Google's refresh-token policy). * You changed your Google password. * You revoked Sight AI's access from your [Google Account permissions page](https://myaccount.google.com/permissions). * Your organization's admin reset OAuth grants for your domain. **Symptoms in Sight AI** * Banner: *"Search Console access expired"* * Underlying error contains `invalid_grant`, `Token has been expired or revoked`, or `401`. **Fix** 1. On the dashboard banner, click **Reconnect Search Console** (or go to **Integrations → Google Search Console** and click **Connect Google Account**). 2. Sign in with the same Google account that originally connected Search Console — using a different account will fail unless that account is also a Search Console Owner / Full user on the property. 3. Grant Sight AI the requested Search Console permissions. 4. Within a few minutes the daily sync resumes and the banner clears automatically. Your historical data is preserved — nothing is re-pulled. ## Permission issue The Google account connected to Sight AI no longer has **Owner** or **Full** access to the linked Search Console property. This is the single most common cause of a paused sync. **Symptoms in Sight AI** * Banner: *"Search Console permission issue"* (often with "sync paused" suffix). * Underlying error contains `does not have sufficient permission`, `permission denied`, `forbidden`, or `403`. **Why it happens** * The property owner removed your account from Search Console. * Your access was downgraded to **Restricted** (Restricted users can't read the API). * The property was migrated from a URL-prefix to a Domain property and you weren't added to the new one. * An organization admin pruned legacy users. **Fix** 1. Open [Google Search Console](https://search.google.com/search-console) and select the property linked in Sight AI. 2. Go to **Settings → Users and permissions** and confirm the account is listed with **Owner** or **Full** access. Restricted is not enough. 3. If access is missing or restricted, ask a current Owner of the property to: * Re-add your Google account, or * Promote you to **Full** user. 4. Once access is restored, click **Reconnect Search Console** in Sight AI to lift the paused flag and trigger a fresh sync. If you're not sure which Google account Sight AI is using, the **Integrations → Google Search Console** page shows the currently connected account next to "Connected as". ## Property not found The property linked to your Sight AI site can't be read right now. The OAuth grant is fine, but Google is returning no rows or a `404` for the property URL we have on file. **Why it happens** * The property was deleted from Google Search Console. * The property was renamed (e.g., URL-prefix `https://www.example.com/` → Domain `sc-domain:example.com`). * The property was unverified in Google. * Your site's host changed (HTTP↔HTTPS, www↔root) and the original property no longer matches. **Fix** 1. Open [Google Search Console](https://search.google.com/search-console) and confirm the property still exists and is verified. 2. If the property URL changed, in Sight AI go to **Integrations → Google Search Console** and click the **Re-link property** button to choose the current property. 3. If the property was deleted, recreate and verify it in Search Console first, then re-link in Sight AI. 4. After the property is fixed, click **Reconnect Search Console** on the dashboard banner. ## Temporary rate limit Google enforces a per-user **100 queries/minute** quota and a per-project **1,200 queries/minute** quota on the Search Analytics API. If a sync runs into either limit, the daily run aborts mid-way and the banner appears. **Symptoms in Sight AI** * Banner: *"Temporary Search Console rate limit"* (warning, not paused). * Underlying error contains `quota`, `rate limit`, or `429`. **What to do** * **Most cases — nothing.** Sight AI keeps retrying automatically on the next scheduler tick. The banner clears as soon as a sync succeeds, usually within 24 hours. * If you also use other tools that hit the same Google account's Search Console API (e.g., a CLI script, Looker Studio dashboards refreshing aggressively), spacing those out reduces collisions. * If the banner has been showing for **multiple days** despite normal usage, contact **[support@trysight.ai](mailto:support@trysight.ai)** with your site URL and the error timestamp so we can investigate. Rate-limit errors do **not** pause the sync — they're recoverable on their own. You don't need to reconnect for this category. ## Unknown error The dashboard shows the verbatim error text from Google when we can't bucket it into one of the categories above. This usually means a transient API hiccup or something new on Google's side. **What to do** 1. Take note of the error text shown in the banner. 2. Wait until the next scheduled sync (within 24 hours) — most "unknown" errors are transient and resolve themselves. 3. If the banner is still showing 24+ hours later, click **Reconnect Search Console**. Reconnecting forces a fresh OAuth grant and re-runs the sync immediately. 4. If reconnecting doesn't clear it, contact **[support@trysight.ai](mailto:support@trysight.ai)** with: * The exact error text from the banner * The site URL * When the issue started ## How Sight AI handles GSC sync errors For context on what's happening behind the scenes: * **Daily sync (cron):** runs every day around 03:00 UTC and pulls yesterday's clicks/impressions/queries/pages. * **Backfill:** kicks off the first time you connect a property and pulls the last 90 days in 7-day chunks. * **Permission errors auto-pause** the sync (`gsc_sync_paused = true`) so we don't keep hammering Google with requests we know will fail. Reconnecting always clears this flag. * **Other errors** are recorded as `last_error` on the sync state but don't pause the sync — the next scheduled run gets a fresh attempt. * **Successful syncs clear** the last error automatically. The dashboard banner disappears as soon as one sync succeeds. ## Still stuck? Email **[support@trysight.ai](mailto:support@trysight.ai)** with the banner text, the affected site, and a screenshot. Including the [Google Search Console](https://search.google.com/search-console) **Settings → Users and permissions** screenshot is the single fastest way for us to diagnose permission issues. # HubSpot Integration Source: https://docs.trysight.ai/integrations/hubspot Automatically publish AI-generated articles to your HubSpot blog via OAuth. ## Overview The HubSpot integration lets Sight AI publish articles directly to your HubSpot CMS blog using HubSpot's secure OAuth flow — no API keys to copy around. Connect once, pick a default blog, author, tags, and publish state, and every article Sight AI generates can be pushed to HubSpot as a Draft or Published post. ## Requirements * **HubSpot account** -- Content Hub Professional/Enterprise or Marketing Hub Professional/Enterprise (the `content` scope is gated to these tiers) * **At least one blog** -- Set up under **Marketing** → **Website** → **Blog** in HubSpot * **HubSpot admin access** -- Required to install third-party apps in your portal * **Sight AI workspace** -- Owner or admin role on the team that owns the site ## How it works Sight AI uses HubSpot's new developer-platform OAuth flow (CLI-built apps, platform version `2026.03`). When you click **Connect HubSpot**, you'll be redirected to HubSpot to authorize the **Sight AI** app to read your blogs, authors, and tags, and to create and update blog posts. We never see your HubSpot password; HubSpot returns short-lived access tokens that we refresh automatically. Behind the scenes: 1. We exchange the authorization code for an access + refresh token at `api.hubapi.com/oauth/v1/token`. 2. Both tokens are AES-256-GCM encrypted at rest and scoped to the specific Sight AI site you connected from. 3. When you generate a Sight AI article, we publish it via `POST https://api.hubapi.com/cms/blogs/2026-03/posts` using your default blog, author, tags, and publish state. ## Setup Instructions ### Step 1: Open the HubSpot integration page 1. In Sight AI, go to **Integrations**. 2. Make sure the site you want to connect HubSpot to is selected in the sidebar. 3. Click the **HubSpot CMS** card. ### Step 2: Connect HubSpot 1. Click **Connect HubSpot**. 2. You'll be redirected to HubSpot's authorization page. 3. Pick the HubSpot account you want to install Sight AI in. 4. Review the requested scopes (`oauth`, `content`) and click **Connect app**. HubSpot will redirect you back to Sight AI and you'll see the **HubSpot portal connected** confirmation. ### Step 3: Pick a default blog 1. The wizard automatically loads the blogs from your connected portal. 2. Pick the blog that Sight AI articles should publish to. If you don't see any blogs, double-check that your HubSpot plan includes Content Hub or Marketing Hub blog access, then click **Retry**. ### Step 4: Pick author + tag defaults (optional) 1. **Default author** — every Sight AI post will show this person as the byline. Leave as **Use HubSpot default** to defer to HubSpot's per-blog default author. 2. **Default tags** — Sight AI will attach these tags to every post for downstream HubSpot reporting. ### Step 5: Choose draft vs. publish * **Save as draft** *(recommended)* — Sight AI sends the post to HubSpot as a draft. You can review and publish from inside HubSpot. * **Publish immediately** — Sight AI publishes the post live as soon as it's synced. Click **Save settings** to finalize the connection. HubSpot will now be set as the active CMS for this Sight AI site. ## What Gets Synced * **Title** -- Post name (mapped to HubSpot's `name`) * **Content** -- Full HTML body * **Featured Image** -- Main cover image * **In-Body Images** -- Images within the content (alt text auto-applied) * **Slug** -- SEO-friendly URL slug * **Meta description** -- HubSpot's `metaDescription` * **HTML title** -- HubSpot's `htmlTitle` (uses Sight AI's SEO title if set) * **Author** -- Your configured default `blogAuthorId` * **Tags** -- Your configured default `tagIds` * **Publish date** -- Set to now() when publishing immediately ## Troubleshooting ### "HubSpot authentication failed. Please reconnect the integration." The OAuth refresh token has been revoked (usually because someone uninstalled the app from inside HubSpot). Reconnect via the integration page. ### "HubSpot rejected the request (missing scope or insufficient permission)." Your HubSpot plan doesn't include the `content` scope. The blog publishing endpoint requires Content Hub Professional/Enterprise or Marketing Hub Professional/Enterprise. Upgrade in HubSpot or contact your account admin. ### "No blogs found" Your HubSpot portal doesn't have any blogs yet. Create one in HubSpot under **Marketing** → **Website** → **Blog**, then click **Retry** on the integration page. ### "HubSpot rate limit exceeded. Please retry in a moment." HubSpot's Public API allows \~100 requests per 10 seconds per portal. Sight AI paces bulk syncs at 15 seconds per article and retries automatically — you should never see this in normal usage. If you do, wait a minute and retry; if it persists, contact support. ### Posts are stuck in Draft state This is the default behavior. If you want every Sight AI post to publish immediately, change the **Publish state** to **Publish immediately** in the integration settings. ## Disconnecting 1. Go to **Integrations** → **HubSpot CMS**. 2. Click **Disconnect** in the top right. 3. Confirm. We'll revoke the refresh token on HubSpot's side and delete the stored credentials. Already-published posts in HubSpot stay where they are — disconnecting only stops new syncs. # MCP Connectors Source: https://docs.trysight.ai/integrations/mcp-connectors Connect SEO tools, analytics, CRMs, and more so Sight AI Agent and Automations can pull live data from the apps your team already uses. ## Overview **MCP Connectors** let your team plug external data sources into Sight AI. Once connected, the agent can use provider tools in **Agent chat** and in **custom automations** — keyword research, SERP data, attribution metrics, CRM records, support conversations, and more. Open **Integrations** ([app.trysight.ai/integrations](https://app.trysight.ai/integrations)) and filter by **Connectors**, or scroll to the **Connectors** section on the hub. Each card shows an **MCP** badge in the top-right corner. Connectors are **team-scoped**, not site-scoped. One connection per provider is shared across every site on your team. Automations still run against a single site's data — connector tools supply external context. **Connectors are a Pro and Advanced feature.** Starter plans don't include MCP connectors — upgrade to Pro to connect external data sources. If a team downgrades, existing connections stay listed but become unavailable to the agent until the team is back on Pro or higher. **HubSpot has two integrations.** The [HubSpot CMS integration](/integrations/hubspot) publishes articles to your HubSpot blog. The **HubSpot connector** (below) gives the agent access to CRM data — contacts, companies, deals, and marketing records. They are separate connections. ## Available connectors Sight AI ships prebuilt connectors for the providers below. Each uses the provider's official connection method. ### SEO & web data | Connector | What you get | How to connect | | -------------- | -------------------------------------------------------------- | --------------- | | **Ahrefs** | Backlinks, keyword research, rankings, site audits | API key | | **Semrush** | Keyword analytics, domain overviews, competitive data | API key | | **DataForSEO** | SERP results, keyword volume, ranked keywords, backlinks | API credentials | | **SearchAPI** | Live Google, Bing, and other search-engine SERP data | API key | | **Firecrawl** | Scrape, crawl, map, search, and extract web content | API key | | **Exa** | Neural web search and content discovery | No key required | | **Apify** | Run web scrapers and data Actors (SERP, social, reviews, etc.) | API token | | **Parallel** | Agent-grade web search and research | Sign in (OAuth) | ### Analytics & attribution | Connector | What you get | How to connect | | ----------- | ------------------------------------------------------- | ------------------ | | **Cometly** | Marketing attribution, ROAS, CAC, customer journey data | Space ID + sign in | | **PostHog** | Product analytics, insights, feature flags, experiments | Sign in (OAuth) | ### Content & assets | Connector | What you get | How to connect | | -------------- | ---------------------------------------------------- | --------------- | | **Notion** | Read, search, create, and update pages and databases | Sign in (OAuth) | | **Canva** | Generate and fetch on-brand designs and visuals | Sign in (OAuth) | | **Cloudinary** | Manage, transform, and search media assets | Sign in (OAuth) | ### CRM & revenue | Connector | What you get | How to connect | | ------------ | ---------------------------------------------------- | --------------- | | **HubSpot** | CRM contacts, companies, deals, and marketing data | Sign in (OAuth) | | **Stripe** | Customers, subscriptions, invoices, and revenue data | Sign in (OAuth) | | **Intercom** | Conversations, contacts, and support insights | Sign in (OAuth) | | **Attio** | Records, lists, and CRM data | Sign in (OAuth) | | **Close** | Leads, opportunities, and sales activity | API key | ### Automation | Connector | What you get | How to connect | | ------------ | ---------------------------------------------------------------- | --------------- | | **Zapier** | Trigger actions across apps via your configured Zapier MCP tools | API key | | **Composio** | Connect to hundreds of SaaS tools through Composio (Rube) | Sign in (OAuth) | ### Project & error tracking | Connector | What you get | How to connect | | ---------- | ------------------------------------ | --------------- | | **Sentry** | Issues, errors, and performance data | Sign in (OAuth) | | **Linear** | Issues, projects, and cycles | Sign in (OAuth) | ## How to connect Go to **Integrations** and select the **Connectors** category (or scroll to the Connectors section). Click the provider card you want to connect. Follow the prompt on screen: * **Sign in (OAuth)** — click **Continue with \[Provider]** and approve access in your browser. You'll return to Sight AI when done. * **API key / credentials** — paste the key or credentials from your provider account, then click **Connect**. * **Cometly** — enter your Space ID first, then complete the sign-in flow. * **Exa** — click **Connect**; no key is required. After a successful connection, open the connector detail page to review available tools and set permissions. Only **team owners and admins** can connect, reconnect, or disconnect connectors. Any team member can use connected tools in Agent chat when the connector is enabled. ### Other ways to connect * **From Agent chat** — click the **+** in the chat composer to search providers and connect one in-context, without leaving the conversation. * **During setup** — the Setup hub's **Connectors** card introduces connectors for new sites and links you to the Integrations hub. ### Where to get API keys In Ahrefs: **Account Settings → API Keys → Generate MCP key**. Requires an **Ahrefs Lite plan or higher**. [Ahrefs MCP documentation →](https://docs.ahrefs.com/en/mcp/docs/introduction) In Semrush: **Profile → Subscription info → API units** — copy your API key. [Semrush MCP documentation →](https://developer.semrush.com/api/introduction/semrush-mcp/) In DataForSEO: **API Access** — use your login and password together when prompted. [DataForSEO MCP documentation →](https://dataforseo.com/model-context-protocol) In SearchAPI: **Dashboard → API Key**. [SearchAPI documentation →](https://www.searchapi.io/docs/mcp) In Firecrawl: **API Keys** at [firecrawl.dev](https://firecrawl.dev). [Firecrawl MCP documentation →](https://docs.firecrawl.dev/mcp-server) In Apify: **Console → Settings → Integrations → API tokens**. [Apify MCP documentation →](https://mcp.apify.com) In Close: **Settings → API Keys**. [Close MCP documentation →](https://help.close.com/docs/mcp-server) Create a Zapier MCP server at [mcp.zapier.com](https://mcp.zapier.com), choose the actions to expose, and copy the API key. [Zapier MCP documentation →](https://mcp.zapier.com) In Cometly: **Space Settings → Space Details**, or check the number at the bottom of the left navigation menu. Enter it in Sight AI before signing in. [Cometly MCP documentation →](https://docs.cometly.com/mcp/overview) The prebuilt PostHog connector connects to the **US cloud**. If your PostHog project is on the EU cloud, add your EU endpoint as a [custom connector](#custom-connectors) instead. ## Custom connectors Add any supported HTTPS MCP server your team runs or subscribes to: 1. Integrations → **Connectors** → **Add custom connector** 2. Provide a **name**, **HTTPS MCP URL**, and authentication: * **OAuth** — browser sign-in (same flow as prebuilt OAuth connectors) * **API key** — paste a key from your provider * **None** — public MCP server only 3. Save and wait for the connection to complete **Limit:** 5 custom connectors per team. Custom connector tools default to **Ask first** permission (see below). Read-only data connectors (Ahrefs, Semrush, DataForSEO, and similar) default to **Always allow**. ## Connector detail page Click any connected connector card to open its detail page. From there you can: * **Enable / disable** the connector for your team * **Refresh tools** — update the tool list from the provider * **Reconnect** — re-authenticate after a key expires or access is revoked * **Disconnect** — remove the connector and delete stored credentials * **Set per-tool permissions** — control how each tool behaves in Agent chat ## Connection health & disconnects Sight AI monitors every connected connector automatically (about once an hour). If a connection breaks — an expired token, a revoked grant, or a provider outage — it's handled for you: * **Expired or revoked access** is flagged immediately; other transient failures are flagged after a second consecutive failed check (to avoid noise from a momentary blip). * **Team owners and admins get an email** identifying the connector that needs attention. * **Automations that depend on the broken connector are paused automatically** (with a per-automation email) so scheduled runs don't fail silently. They're ready to re-enable once you reconnect. * **Reconnecting** (Integrations → the connector → **Reconnect**) clears the alert, refreshes the tool list, and re-arms monitoring. ## Tool permissions Each tool on a connector has one of three permission levels: | Level | Behavior in Agent chat | Behavior in Automations | | ---------------- | ----------------------------------------------- | --------------------------------------------------------------------- | | **Always allow** | Runs without asking | Runs automatically when granted on the automation | | **Ask first** | Shows an Approve/Decline card before every call | Runs automatically when granted (you opted in at automation creation) | | **Don't allow** | Tool is hidden from the agent | Tool is hidden from the automations picker | **Defaults:** * **Always allow** — read-only SEO and research connectors (Ahrefs, Semrush, DataForSEO, SearchAPI, Firecrawl, Exa, Parallel, Cometly) * **Ask first** — connectors that can read or write live business data (CRM, billing, support, project tracking, automation platforms, Notion, PostHog, Apify, and all custom connectors) In **scheduled automations**, any connector tool you grant runs with **auto-confirm** — there is no second approval prompt during the run. Only grant connector tools your automation instructions actually need. ## Using connectors in Agent chat When a connector is enabled and connected: * Tools are grouped by provider so they never collide with built-in Sight AI tools * The agent attributes external data in replies (e.g. "per Ahrefs" or "per HubSpot") * Permission levels control whether each call needs confirmation Connector tools are also available to the **[Slack](/integrations/slack)** agent, so your team can pull connector data straight from a Slack channel or DM. **Example prompts:** * *"What's our domain rating and top referring domains per Ahrefs?"* * *"Pull Semrush keyword volume for 'ai visibility software'."* * *"Search Exa for recent articles about programmatic SEO."* * *"How many open deals do we have in HubSpot this quarter?"* ## Using connectors in Automations Connector tools are available in the **custom automation** tool picker: 1. Create or edit a **Custom** automation 2. In **Allowed tools**, expand the connector group (e.g. **Ahrefs connector**, **HubSpot connector**) 3. Check the tools you want (tools set to **Don't allow** are hidden) 4. Write instructions that tell the automation when to call each tool **Example weekly competitive digest:** ``` Pull Ahrefs domain rating for our site and our top 3 competitors. Summarize backlink growth vs last month in 5 bullets. ``` See [Automation tools reference](/automations/automation-tools) for built-in tools and [Custom automations](/automations/custom-automations) for execution limits. ## Free Domain Rating (no connector required) Sight AI also uses Ahrefs' **free public Domain Rating API** — no MCP key needed: * Your site's DR is cached and injected into agent context automatically * The built-in `getDomainRating` tool returns DR for your site or any competitor domain * Attribution: **"Domain Rating by Ahrefs"** This is separate from the Ahrefs MCP connector, which requires a paid MCP key and exposes the full Ahrefs tool suite. ## Limits | Limit | Value | | ------------------------------ | ----- | | Custom connectors per team | 5 | | Tools per connector | 30 | | Total connector tools in agent | 80 | Tool names depend on what each provider exposes after connection. Use the connector detail page or the automations tool picker to see the live list for your team. ## Who can manage connectors | Action | Who | | -------------------------------- | ------------------------------------------- | | Connect / reconnect / disconnect | Team owner or admin | | Change tool permissions | Team owner or admin | | View status and permissions | Any team member | | Use connector tools in chat | Any team member (when connector is enabled) | ## Troubleshooting Open the connector detail page and click **Reconnect** or **Refresh tools**. Common causes: * **API key connectors** — invalid, expired, or revoked key; plan or quota limits on the provider side * **OAuth connectors** — sign-in not completed; access revoked in the provider's settings * **Cometly** — incorrect Space ID * **Custom** — server unavailable or authentication mismatch Stay signed in to Sight AI through the entire provider sign-in flow. If the browser tab sat idle too long, restart the connect flow from Integrations. * Connector was disabled or disconnected — re-enable from the detail page * Tool was set to **Don't allow** — adjust permissions on the detail page * Access expired — reconnect the provider The automation may reference connector tools that no longer exist (connector disconnected or tools refreshed). Re-edit the automation and re-select tools from the connector group in the picker. Delete unused custom connectors before adding new ones. Maximum **5 custom** connectors per team. If you want to **publish articles** to HubSpot, use the [HubSpot CMS integration](/integrations/hubspot). The **HubSpot connector** is for CRM and marketing data inside Agent chat and automations — not article publishing. ## Related * [Custom automations](/automations/custom-automations) — grant connector tools on scheduled workflows * [Automation tools reference](/automations/automation-tools) — full built-in tool catalog * [HubSpot CMS integration](/integrations/hubspot) — publish articles to HubSpot (separate from the HubSpot connector) * [Sight AI MCP (outbound)](/developers/mcp-setup) — connect Cursor or Claude Desktop *to* Sight AI (different from external connectors) # Sanity CMS Integration Source: https://docs.trysight.ai/integrations/sanity Sync AI-generated articles from Sight AI into Sanity using the webhook integration and a custom receiver. ## Overview Sight AI does not have a native Sanity plugin today. Instead, you connect the two platforms with Sight AI's **[Webhook integration](/integrations/webhook)** plus a small custom API route that writes incoming articles into your Sanity dataset. This is the same pattern Sanity recommends for syncing external systems: Sight AI POSTs a signed `article.ready` payload to your endpoint, and your handler creates or updates Sanity documents via the Content API. This integration requires a developer. If you don't have one in-house, your Sanity agency can usually set this up in half a day. Non-technical teams can also use [Zapier](/integrations/zapier) as a no-code middle layer, though HTML and image handling are more limited. ## How it works When you sync manually, Autopilot runs, or an AI agent publishes, Sight AI POSTs the full article (HTML, SEO fields, images, metadata) to your webhook URL. Your API route verifies the HMAC signature, looks up an existing Sanity document by `article.id`, and creates or updates it. Your Next.js site (or other frontend) continues to fetch content from Sanity with GROQ — nothing changes on the read path. ```mermaid theme={null} flowchart LR SA[Sight AI] -->|POST article.ready| WH[Your webhook handler] WH -->|Content API| S[Sanity dataset] FE[Your site] -->|GROQ| S ``` ## Requirements * **Sanity project** — With a dataset and a `post` (or equivalent) schema * **Sanity write token** — Editor or custom role with create/update permissions * **Public HTTPS endpoint** — Vercel, Netlify, Cloudflare Workers, etc. (local dev via ngrok works for testing) * **Developer access** — To add a schema field, deploy the webhook route, and configure environment variables * **Sight AI workspace** — Owner or admin role to configure the webhook and set it as the active CMS No approval from Sanity is required. You use Sanity's standard public APIs with your own project credentials. ## Step 1: Add a Sight AI ID to your Sanity schema Store Sight AI's stable `article.id` on every document so re-syncs update in place instead of creating duplicates. **Never upsert by slug alone** — users can rename slugs inside Sight AI. Add a hidden, read-only field to your post schema: ```ts theme={null} // schemas/post.ts defineField({ name: 'sightAiId', title: 'Sight AI ID', type: 'string', readOnly: true, hidden: true, }), ``` Also make sure you have fields for the content Sight AI sends. A typical blog schema includes: | Sanity field | Sight AI source | Notes | | -------------------- | ------------------------------ | --------------------------------------------------------------- | | `title` | `article.title` | Required | | `slug` | `article.slug` | Use `{ _type: 'slug', current: article.slug }` | | `bodyHtml` or `body` | `article.content` | See [Body content options](#body-content-options) | | `excerpt` | `article.summary` | Optional | | `seo.title` | `article.seo_title` | Optional | | `seo.description` | `article.seo_meta_description` | Optional | | `mainImage` | `article.main_image_url` | Upload to Sanity assets — see [Image handling](#image-handling) | | `category` | `article.category` | String or reference — map in your handler | | `authorName` | `article.author_name` | Optional string | Deploy your schema changes to Sanity Studio before wiring up the webhook. ## Step 2: Create a Sanity write token 1. Go to [sanity.io/manage](https://www.sanity.io/manage) and open your project 2. Navigate to **API → Tokens** 3. Click **Add API token** 4. Name it `Sight AI webhook` (or similar) 5. Set permissions to **Editor** (or a custom role with document create/update and asset upload) 6. Copy the token — you won't see it again You'll need these values in your handler: | Variable | Example | | -------------------- | ------------ | | `SANITY_PROJECT_ID` | `abc123de` | | `SANITY_DATASET` | `production` | | `SANITY_WRITE_TOKEN` | `sk...` | ## Step 3: Deploy a webhook handler The handler lives in **your** codebase (not inside Sight AI). Below is a complete Next.js App Router example. Drop it at `app/api/webhooks/sight-ai/route.ts`. For the full webhook contract (headers, payload fields, retry behavior, and security details), see the [Webhook Integration](/integrations/webhook) reference. ### Environment variables Add these to your hosting provider (e.g. Vercel → Project → Settings → Environment Variables): ``` SIGHT_AI_WEBHOOK_SECRET=... # from Sight AI webhook settings SANITY_PROJECT_ID=... SANITY_DATASET=production SANITY_WRITE_TOKEN=sk... ``` ### Example handler (HTML body field) This example stores article HTML in a `bodyHtml` text field — the fastest path to a working integration. See [Body content options](#body-content-options) if you need Portable Text instead. ```ts theme={null} // app/api/webhooks/sight-ai/route.ts import { NextResponse } from 'next/server'; import { createClient } from '@sanity/client'; import crypto from 'node:crypto'; const REPLAY_WINDOW_MS = 5 * 60 * 1000; const sanity = createClient({ projectId: process.env.SANITY_PROJECT_ID!, dataset: process.env.SANITY_DATASET!, token: process.env.SANITY_WRITE_TOKEN!, apiVersion: '2024-01-01', useCdn: false, }); export async function GET() { return NextResponse.json({ status: 'ok', endpoint: 'sight-ai' }); } export async function POST(request: Request) { const secret = process.env.SIGHT_AI_WEBHOOK_SECRET ?? process.env.SIGHTAI_WEBHOOK_SECRET; if (!secret) { return NextResponse.json({ error: 'Webhook not configured' }, { status: 503 }); } const rawBody = await request.text(); const signature = request.headers.get('x-sightai-signature') ?? ''; if (!verifySignature(rawBody, signature, secret)) { return NextResponse.json({ error: 'Invalid signature' }, { status: 401 }); } const timestampHeader = request.headers.get('x-sightai-timestamp'); const timestamp = Number(timestampHeader); if ( !Number.isFinite(timestamp) || Math.abs(Date.now() - timestamp) > REPLAY_WINDOW_MS ) { return NextResponse.json({ error: 'Timestamp out of range' }, { status: 401 }); } let payload: SightAiWebhookPayload; try { payload = JSON.parse(rawBody); } catch { return NextResponse.json({ error: 'Invalid JSON' }, { status: 400 }); } if (payload.test === true) { return NextResponse.json({ ok: true, test: true }); } const { article, event_id } = payload; if (!article?.id || !article.slug || !article.title || !article.content) { return NextResponse.json({ error: 'Missing required article fields' }, { status: 400 }); } const existingId = await sanity.fetch( `*[_type == "post" && sightAiId == $id][0]._id`, { id: article.id }, ); const mainImage = await resolveMainImage(existingId, article.main_image_url); const doc = { _type: 'post', ...(existingId ? { _id: existingId } : {}), sightAiId: article.id, title: article.title, slug: { _type: 'slug', current: article.slug }, bodyHtml: article.content, excerpt: article.summary ?? undefined, seo: { title: article.seo_title ?? undefined, description: article.seo_meta_description ?? undefined, }, authorName: article.author_name ?? undefined, category: article.category ?? undefined, targetKeyword: article.target_keyword ?? undefined, featured: article.is_featured, publishedAt: article.published_at ?? undefined, ...(mainImage ? { mainImage } : {}), }; const result = await sanity.createOrReplace(doc); return NextResponse.json({ ok: true, operation: existingId ? 'updated' : 'created', sanityId: result._id, sightAiId: article.id, event_id, }); } async function resolveMainImage( existingDocId: string | null, imageUrl: string | null | undefined, ) { if (!imageUrl) return undefined; if (existingDocId) { const existing = await sanity.fetch<{ mainImage?: unknown } | null>( `*[_id == $id][0]{ mainImage }`, { id: existingDocId }, ); if (existing?.mainImage) return undefined; } const response = await fetch(imageUrl); if (!response.ok) return undefined; const buffer = Buffer.from(await response.arrayBuffer()); const filename = imageUrl.split('/').pop()?.split('?')[0] ?? 'featured.jpg'; const asset = await sanity.assets.upload('image', buffer, { filename }); return { _type: 'image', asset: { _type: 'reference', _ref: asset._id }, }; } function verifySignature(rawBody: string, header: string, secret: string) { if (!header.startsWith('sha256=')) return false; const expected = crypto .createHmac('sha256', secret) .update(rawBody, 'utf8') .digest('hex'); const provided = header.slice('sha256='.length); if (expected.length !== provided.length) return false; return crypto.timingSafeEqual( Buffer.from(expected, 'hex'), Buffer.from(provided, 'hex'), ); } type SightAiWebhookPayload = { test?: boolean; event_id?: string; event: 'article.ready' | string; timestamp: string; site: { id: string; name: string; host: string }; article: { id: string; slug: string; title: string; content: string; summary?: string | null; seo_title?: string | null; seo_meta_description?: string | null; target_keyword?: string | null; main_image_url?: string | null; thumbnail_image_url?: string | null; article_type: string; category?: string | null; author_name?: string | null; read_time_minutes?: number | null; is_featured: boolean; published_at?: string | null; created_at: string; updated_at: string; }; }; ``` Install the Sanity client in your project: ```bash theme={null} npm install @sanity/client ``` Deploy, then verify the route responds: ```bash theme={null} curl https://yourdomain.com/api/webhooks/sight-ai # → {"status":"ok","endpoint":"sight-ai"} ``` ## Step 4: Configure Sight AI In Sight AI, go to **Integrations → Webhook** for your site. Paste `https://yourdomain.com/api/webhooks/sight-ai` and save. Use **Managed by Sight AI** (recommended). Copy the secret when shown and add it as `SIGHT_AI_WEBHOOK_SECRET` in your hosting environment, then redeploy. Click **Test connection**. Your handler should return `2xx`. Test events include `"test": true` — the example above short-circuits those without writing to Sanity. Click **Set as Active CMS**. From now on, articles that ship from Sight AI — manual sync, Autopilot, or AI agents — are delivered to your Sanity handler instead of WordPress, Webflow, or another CMS. Each Sight AI site can have **one active CMS at a time**. Setting webhook as active does not delete other integrations — you can switch back anytime. ## Body content options Sight AI sends `article.content` as **HTML**. Sanity schemas usually use **Portable Text** (`array` of `block` types), not raw HTML. Pick the approach that fits your stack: ### Option A — HTML field (recommended for getting started) Add a string field to your schema and render it with `dangerouslySetInnerHTML` (or an HTML sanitizer) in your frontend: ```ts theme={null} defineField({ name: 'bodyHtml', title: 'Body (HTML)', type: 'text', }), ``` **Pros:** Fastest to implement, no conversion step, preserves Sight AI formatting exactly.\ **Cons:** You manage HTML rendering and sanitization yourself. ### Option B — Portable Text (recommended for production Studio UX) Convert HTML to Portable Text in your handler using [`@portabletext/block-tools`](https://www.npmjs.com/package/@portabletext/block-tools) and your schema's block types. This gives editors a native Sanity editing experience after the initial import. **Pros:** Native Studio editing, consistent with other Sanity content.\ **Cons:** More setup — conversion quality varies by HTML complexity; test with real Sight AI output. If you go this route, replace `bodyHtml: article.content` in the example with a `htmlToBlocks()` call keyed to your block schema. Sanity's guide on [integrating external data sources](https://www.sanity.io/guides/integrating-external-data) covers the sync-plugin pattern in more depth. ## Image handling Sanity expects images in its asset library, not external CDN URLs. Follow these rules to avoid duplicate assets: * **First delivery for an `article.id`** — download `main_image_url` and upload to Sanity (as in the example above) * **Subsequent deliveries** — skip re-upload if the document already has `mainImage` * **User swaps the image in Sight AI** — clear `mainImage` in Sanity (or add an admin action), then re-sync from Sight AI Alternatively, store the CDN URL as a plain string field and skip Sanity assets entirely if your frontend can render external images. ## Category mapping Sight AI sends `article.category` as a **name string**, not a Sanity document ID. In your handler you can: * **Store the name directly** on a string field (simplest) * **Resolve to a category reference** — query `*[_type == "category" && title == $name][0]._id` and set a reference field * **Use Sight AI Filters** — define categories in the webhook **Filters** tab with `external_id` values you map in code (the name is still what arrives in the payload today) ## Publishing workflow ### Manual sync 1. Open an article in Sight AI 2. Click **Send Webhook** (or **Sync to CMS** when webhook is active) 3. Confirm the delivery in **Integrations → Webhook → Monitoring** ### Autopilot and AI agents When webhook is the active CMS, Autopilot and agent-driven publishes use the same delivery path automatically — no extra configuration. ### Trigger mode Under webhook **Advanced settings**: * **Manual** (default) — fires when you explicitly sync, via Autopilot/agents, or bulk actions * **Automatic** — also fires immediately when non-Autopilot generation completes See [Webhook Integration → Trigger mode](/integrations/webhook#trigger-mode) for details. ## Field reference Quick mapping from Sight AI webhook payload to Sanity: | Sight AI path | Sanity field (example) | | ------------------------------ | --------------------------------------- | | `article.id` | `sightAiId` (upsert key) | | `article.slug` | `slug.current` | | `article.title` | `title` | | `article.content` | `bodyHtml` or `body` (Portable Text) | | `article.summary` | `excerpt` | | `article.seo_title` | `seo.title` | | `article.seo_meta_description` | `seo.description` | | `article.main_image_url` | `mainImage` (asset reference) | | `article.category` | `category` (string or ref) | | `article.author_name` | `authorName` | | `article.target_keyword` | `targetKeyword` (optional custom field) | | `article.is_featured` | `featured` (boolean) | | `article.published_at` | `publishedAt` (datetime) | Full payload spec: [Webhook Integration → The payload](/integrations/webhook#the-payload). ## Troubleshooting Same causes as any webhook integration — see [Webhook Troubleshooting → 401 Invalid signature](/integrations/webhook#401-invalid-signature). The most common mistake is hashing a re-parsed JSON body instead of the raw request string. You're likely upserting by `slug` instead of `article.id`. Add the `sightAiId` field, query by it, and use `createOrReplace` with the existing `_id`. Slug renames in Sight AI must update the existing document, not create a new one. You're re-uploading on every webhook delivery. Gate uploads: only fetch and upload when the Sanity document has no `mainImage` yet. Sight AI re-sends the same URL on every edit and re-sync. You're storing HTML in a Portable Text field (or vice versa). Either use a dedicated `bodyHtml` text field, or convert HTML to blocks before writing to a `body` array field. Your write token lacks create/update or asset upload permissions. Regenerate a token with Editor access (or grant `create`, `update`, and `upload` on the relevant document/asset types). The Sanity write succeeded, but your frontend cache hasn't refreshed. If you use Next.js ISR, call `revalidatePath` for the article and listing routes in your handler after the Sanity write. See [Webhook Integration → Cache invalidation](/integrations/webhook#cache-invalidation). Use [Zapier](/integrations/zapier) with a **Webhooks by Zapier → Catch Hook** trigger and a Sanity action module. It's faster to prototype but harder to get right for HTML bodies and featured images. Most Sanity customers work with their agency for a one-time setup. ## Best practices * **Upsert by `article.id`** — store it as `sightAiId` on every document * **Verify HMAC on the raw body** before parsing JSON * **Return 2xx within 30 seconds** — do slow work (image upload) only if it fits your timeout budget * **Don't re-upload images** on every delivery * **Use HTTPS in production** — required for non-localhost webhook URLs * **Keep secrets in env vars** — never commit `SANITY_WRITE_TOKEN` or `SIGHT_AI_WEBHOOK_SECRET` to git * **Monitor deliveries** in Sight AI under **Integrations → Webhook → Monitoring** ## Next steps * [Webhook Integration](/integrations/webhook) — full payload spec, security, and retry behavior * [Autopilot](/ai-content/autopilot) — automate article generation and delivery * [Bing IndexNow](/integrations/bing-indexnow) — notify search engines when new URLs go live * [Sanity: Integrating external data sources](https://www.sanity.io/guides/integrating-external-data) — Sanity's official sync-plugin guide # Shopify Integration Source: https://docs.trysight.ai/integrations/shopify Automatically publish blog posts to your Shopify store. ## Overview The Shopify integration allows Sight AI to publish articles directly to your Shopify store's blog. This is perfect for e-commerce content marketing and SEO. ## Requirements * **Shopify store** -- Any Shopify plan with blog functionality * **Blog created** -- At least one blog in your Shopify store * **Admin access** -- Access to create API credentials ## Setup Instructions ### Step 1: Create a Custom App 1. Go to your Shopify admin 2. Navigate to **Settings > Apps and sales channels** 3. Click **"Develop apps"** 4. Click **"Create an app"** 5. Name it **"Sight AI"** 6. Click **"Create app"** ### Step 2: Configure API Permissions 1. In your new app, click **"Configure Admin API scopes"** 2. Enable these permissions: * `write_content` -- To create blog posts * `read_content` -- To list blogs 3. Save the configuration 4. Click **"Install app"** and confirm ### Step 3: Get API Credentials 1. After installing, go to **API credentials** 2. Copy the **Admin API access token** (shown only once) 3. Note your **store URL** (e.g., `your-store.myshopify.com`) ### Step 4: Connect in Sight AI 1. Go to **Integrations** in Sight AI 2. Click **Shopify** 3. Enter your Shopify store URL 4. Paste the Admin API access token 5. Click **"Connect"** ## Configuration Options ### Select Blog Choose which Shopify blog to publish to. If you have multiple blogs (e.g., "News", "Guides"), select the appropriate one for your content. ### Publish Status * **Published** -- Articles go live immediately * **Hidden** -- Articles are saved but not visible to customers ### Author Set a default author name for published articles. ## Publishing Articles ### Manual Sync 1. Open the article in Sight AI 2. Click **"Sync to CMS"** 3. Select Shopify as the target 4. Choose the blog (if you have multiple) 5. Confirm and publish ### Autopilot Publishing When Autopilot is enabled, articles automatically publish to your selected Shopify blog. ## What Gets Synced * **Title** -- Blog post title * **Content** -- Full HTML content * **Featured Image** -- Main post image * **In-Body Images** -- Images within content * **Summary/Excerpt** -- Post excerpt * **Handle** -- SEO-friendly URL slug * **Author** -- Post author name * **Tags** -- If configured ## SEO Features Shopify articles synced from Sight AI include: * SEO-optimized title * Meta description (from summary) * Clean URL handle * Proper heading structure * Optimized images with alt text ## Active CMS Sight AI supports only **one active CMS integration per site** at a time. When you connect Shopify and set it as your active CMS, articles are published to your Shopify blog instead of any previously active CMS. You can switch to a different CMS at any time from the **Integrations** hub -- your Shopify configuration and previously published posts are preserved. ## Troubleshooting ### Connection Failed * Verify your store URL format (`store-name.myshopify.com`) * Check that the API token has correct permissions * Ensure the custom app is installed * Try regenerating the API token ### Articles Not Appearing * Check the publish status (may be set to Hidden) * Verify the correct blog is selected * Look in **Online Store > Blog posts** in Shopify admin ### Images Not Showing * Check that your Shopify plan supports file uploads * Verify image file sizes are within limits * Try re-syncing the article ## Disconnecting To disconnect Shopify: 1. Go to **Integrations** 2. Click **Shopify** 3. Click **"Disconnect"** Previously published blog posts remain on your Shopify store. ## Next Steps * [Generate product-focused content](/ai-content/overview) * [Set up Autopilot publishing](/ai-content/autopilot) * [Configure search engine indexing](/indexing/how-it-works) # Slack Integration Source: https://docs.trysight.ai/integrations/slack Bring Sight — your AI SEO teammate — into Slack. Ask questions by @mention or DM, approve actions with a tap, and get proactive digests and automation summaries. ## Overview The **Slack integration** puts Sight AI's agent — a bot named **Sight** — right inside your workspace. Once connected, your team can: * **@mention Sight** in any channel it's in, or **DM it directly**, to ask about SEO, content, keywords, rankings, and analytics * **Approve or decline actions** (like generating an article or syncing to your CMS) with **Approve / Decline** buttons — no need to switch to the app * Get **automation run summaries** posted to channels you choose * Receive **proactive digests and nudges** about your sites * See an **App Home** tab that explains what Sight can do Connect at **Integrations → Slack** (`app.trysight.ai/integrations/slack`). **Slack is connected once for your entire team — not per site.** A single workspace connection serves every site you choose to expose, with separate controls for which sites are reachable and which channels map to which site. ## Setup Go to **Integrations → Slack** and click **Connect Slack**, then approve access in Slack's OAuth screen. Only **team owners and admins** can connect, reconnect, or configure Slack. After connecting, set **site access** to **All sites** (every current and future site) or **Selected sites** (an allowlist). Also pick a **default site for DMs** — the site direct messages answer about. Invite the bot to any channel where you want it to answer or post (`/invite @Sight` for private channels). Then map channels to sites under **Channel routing** so mentions resolve to the right site. If you connected Slack before DMs, App Home, or action approvals existed, click **Reconnect** on the Slack settings page to grant the newer permissions. ## Talking to Sight ### @mention in a channel Mention the bot in any channel it has joined — e.g. *"@Sight what's our top query this week?"* Sight replies **in-thread**, adds a ⏳ reaction while it works, and posts a short, task-specific **"on it"** line that restates what you asked (then updates with progress before settling into the final answer). When it's done, the reaction flips to ✅ (or ❌ if something went wrong). It uses the thread's recent history as context. ### Thread follow-ups — no re-mention needed Once Sight is part of a thread (you mentioned it, or it replied there), you can keep talking to it **without tagging it again** — *"yes, break that down by page"* just works. Sight reads each new reply in the thread and decides whether it's addressed to it: * Replies that continue the conversation with Sight (answering its question, follow-up asks, new instructions) get a response. * Replies aimed at other people — side conversation, or messages @mentioning a teammate — are left alone. * If it's ambiguous, Sight stays quiet. An explicit **@mention always gets a response**, so tag it whenever you want to be sure. In threads Sight was **never** part of, and for plain channel messages, only an **@mention** triggers a response. Un-mentioned channel messages are **passively captured** for context — see [Channel awareness](#channel-awareness) — but not answered. ### Direct message DM the bot to have a private conversation — handy for quick questions that don't belong in a shared channel. DMs use your recent DM history as context and answer about your **default site for DMs** (or your only accessible site). ### Slash commands Run `/sight` in any channel the bot is in for quick controls (replies are visible only to you): | Command | What it does | | ------------------------- | -------------------------------------------------------------------- | | `/sight` or `/sight help` | Show the command list | | `/sight status` | Show which site this channel is bound to | | `/sight workspace` | Bind (or rebind) this channel to one of your sites via a picker | | `/sight capture` | Show whether Sight is reading this channel for context | | `/sight capture off` | Stop reading this channel (what was already learned stays available) | | `/sight capture on` | Resume reading this channel | | `/sight capture purge` | Delete everything learned from this channel and stop reading | ### Channel awareness When Sight is added to a channel, it **reads through the recent conversation** to get caught up, and it keeps **passively following** the channel — so it has context on team discussion it was never @mentioned in. Ask things like *"what did the team decide about the blog migration?"* and Sight can recall channel discussion via its conversation memory. Use `/sight capture off` to stop reading a channel, or `/sight capture purge` to wipe what it learned. Channel awareness is **site-scoped**: a channel is read for the site it's mapped to (or your only accessible site). Map a channel with `/sight workspace` so Sight can learn it. ### App Home tab Open Sight's **Home** tab in Slack for a quick orientation: what it can help with, example questions, and a **Manage Slack settings** button. Opening the App Home tab doesn't use any AI credits. ## What Sight can do for whom Sight is a **full agent**, but what each person can do depends on whether their Slack identity is linked to a Sight AI account: | Who | What they can do | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Anyone in the workspace** | Ask read-only questions — analytics, rankings, keyword status, visibility, explanations | | **Linked team members** | Everything above, **plus** propose and run actions that change data (generate/refresh articles, add keywords, sync to CMS, connector actions) — behind an approval step | Sight links your Slack identity to your Sight AI account automatically by **matching your Slack email to a Sight AI team member**. If your email isn't on the team, Sight stays **read-only** for you. ## Approving actions When a linked member asks Sight to do something that changes data, it **never runs it silently**. Instead, Sight posts a card with **Approve** and **Decline** buttons and a summary of what it will do: * **Approve** → Sight runs the action as you and posts the result in-thread. * **Decline** → nothing happens; the card updates to "Declined." * Only **linked team members** can approve or decline; the card ignores taps from unlinked users. * Approval cards **expire after 24 hours** — just ask again if one lapses. ### Progressive autonomy (auto-run) After you approve the **same kind of action on the same site 3 times**, Sight offers a **"Yes, auto-run it"** button. Accept it and that specific action will run automatically on that site from then on — Sight just notifies you instead of asking. Everything else still goes through the approval step. ## Notifications & proactive updates ### Automation run summaries Any [automation](/automations/overview) can post a summary to Slack when it finishes — the automation name, whether it completed or failed, and a natural-language recap — with one-click controls right under it: * **Pause this automation** — stop it from running again until you re-enable it in Sight AI. * **Retry now** — (on failed runs) re-run the automation immediately. * **Open in Sight AI** — jump straight to the Automations page. Choosing a Slack channel for an automation also teaches Sight to associate that channel with the site. Pause/Retry are admin-only actions. ### Proactive system automations Connecting Slack adds three optional **system automations** to your Automations page. They post to the channel linked to a site and run on a fixed schedule (times are UTC): | Automation | Schedule | What it posts | | -------------------------------- | -------------- | --------------------------------------------------------------- | | **Slack daily digest** | Daily, 13:00 | A short daily recap of search, visibility, and indexing changes | | **Slack proactive follow-ups** | Mondays, 14:00 | Nudges about stale opportunities, drafts, or visibility drops | | **Slack automation suggestions** | Mondays, 15:00 | One or two automations worth turning on | They turn on once a channel is linked to the site, and you can disable any of them from the Automations page. They use read-only tools only. ## Credits Sight's answers in Slack — channel mentions, thread follow-ups, DMs, and approved actions — use your team's **AI credits**, the same pool as in-app [Agent chat](/ai-content/ai-agents) and automations. If your team runs out of credits, Sight tells you and stops until you top up. App Home, plain notification posts, and the short "on it" acknowledgment don't cost credits. ## Async results Some actions take a few minutes to finish — notably **article generation**. When you kick off a generation from Slack, Sight posts a "started" reply right away, then **posts the finished article link back into the same thread** when it's ready (or a heads-up if it failed). You don't need to ask "is it done?" — Sight follows up on its own. ## Disconnect To remove Slack for your whole team, go to **Integrations → Slack** and click **Disconnect**. This revokes the connection and clears channel mappings and site access. Automations with Slack notifications will stop posting until you reconnect. ## Troubleshooting Slack OAuth isn't configured for this Sight AI deployment, or you're not a team owner/admin. Only owners and admins can connect Slack — ask one to set it up, or contact [support@trysight.ai](mailto:support@trysight.ai). 1. The bot must be a **member of the channel** (`/invite @Sight`). 2. You must **@mention** it to start a conversation — after that, replies in the same thread don't need a re-mention. 3. If you connected Slack a while ago, click **Reconnect** to grant newer permissions (DMs, thread context, identity matching). Sight only follows threads it's **already part of** (it was mentioned there or replied there), and it deliberately stays quiet when a reply looks aimed at another person or is ambiguous. **@mention it** to guarantee a response. Channel answers resolve via your **channel → site** mappings. Map the channel to the correct site under **Integrations → Slack → Channel routing**. For DMs, set the **default site for DMs**. This happens when a channel isn't mapped and your team has more than one accessible site (or multiple Sight teams share the workspace). Map the channel to a site, or ask in a channel that's already linked. Mutating actions require your Slack email to match a **Sight AI team member**. If it doesn't, Sight stays read-only for you — make sure your Slack account uses the same email as your Sight AI account, then reconnect. Check, in order: Slack is connected; the site is in the access list; the bot is in the chosen channel; and Slack notifications are enabled on the automation with a channel selected. ## Related * [Automations overview](/automations/overview) * [Monitoring & troubleshooting](/automations/monitoring-and-troubleshooting) * [MCP Connectors](/integrations/mcp-connectors) — Sight can use connector tools in Slack too * [Custom automations](/automations/custom-automations) — use `getSlackStatus` to check channel availability # Webflow CMS Integration Source: https://docs.trysight.ai/integrations/webflow Connect your Webflow site to automatically sync AI-generated articles to your CMS collection. ## Overview This guide walks you through how to connect your **Webflow CMS** to **Sight AI** so that AI-generated articles can be automatically synced to your selected CMS collection (e.g., "Blog Posts"). ## Step 1: Generate Your Webflow API Token Navigate to your Webflow Settings: 1. Open your Webflow project 2. In the **left sidebar**, go to `Apps & Integrations` 3. Scroll to "API Access" and click **Generate API Token** ## Step 2: Set Permissions for the Token Name your token (**Tip:** Name it something like `Sight AI`). Webflow's permission modal lists **16 sections** (you'll need to scroll to see them all). Set each one as shown below — every section is accounted for, so you can work down the list without leaving any defaults: | Section | Permission | | ---------------------------------------------------------------------------------------------- | -------------- | | CMS | Read and Write | | Assets | Read and Write | | Components | Read and Write | | Pages | Read and Write | | Sites | Read and Write | | Site Config | Read and Write | | Authorized User | Read-only | | Site Activity | Read-only | | App Subscriptions, Branches, Comments, Custom Code, Ecommerce, Forms, User Accounts, Workspace | No Access | **CMS**, **Sites**, and **Authorized User** are the strict minimum required for Sight AI to authenticate, list your collections, and sync articles. The other Read/Write grants (Assets, Components, Pages, Site Config) future-proof your token against upcoming features so you don't have to regenerate it later. After you have granted the permissions above, click **"Generate token"**. ## Step 3: Connect Webflow to Sight AI In Sight AI, navigate to **Integrations** and select **Webflow**. 1. In Sight AI, go to the **Webflow Integration** tab 2. Paste your token into the **Webflow API Key** input 3. Click **"Validate API Key"** ## Step 4: Select Your Webflow CMS Collection After validating the token, Sight AI will automatically pull in your CMS collections. * Select the one you want to publish articles to (e.g., `Blog Posts`, `Resources`) * You can click **"View fields"** to inspect field structure before continuing ## Step 5: Map Article Fields to Webflow Fields Map the required and optional article fields to the correct Webflow CMS fields. **Required Fields:** * Title * Slug * Main Content (Rich Text) **Optional Fields** (map if available): * Main Image URL * Thumbnail Image URL * SEO Title * SEO Description * Category **Note:** You cannot proceed unless all **required fields** are mapped. ## Step 6: Configure Publication Settings Choose how new articles should be handled when synced: * **Save as Draft** (Recommended) -- review content before it goes live * **Publish Immediately** -- skip manual review and go live automatically You can return to this screen anytime to change the setting. ## Integration Complete Once all steps are completed, you'll see a confirmation: Your Webflow CMS is now connected. You can sync articles to your "Blog Posts" collection. ## Syncing Articles **Go to AI Articles in Sight AI:** 1. Select **Single Article** or **Multiple Articles** 2. Choose your **target keyword** and category 3. Once the article is generated, click **"Sync to Webflow"** Articles will appear in your Webflow CMS according to your publication setting. ## Active CMS Sight AI supports only **one active CMS integration per site** at a time. When you connect Webflow and set it as your active CMS, articles are synced to your Webflow collection instead of any previously active CMS. You can switch to a different CMS at any time from the **Integrations** hub -- your Webflow configuration and previously synced articles are preserved. ## Troubleshooting ### Connection Expired API tokens can expire. If you see connection errors: 1. Go to **Integrations > Webflow** 2. Generate a new API token in Webflow 3. Paste the new token and re-validate ### Field Mapping Issues If content isn't appearing correctly: * Verify field mappings are correct * Check that field types match (Rich Text for content) * Ensure required fields are mapped ### Site Not Publishing If items are created but not visible on your site: * Manually publish your Webflow site * Check that items aren't saved as drafts ## Next Steps * [Generate your first article](/ai-content/overview) * [Set up Autopilot publishing](/ai-content/autopilot) * [Configure search engine indexing](/indexing/how-it-works) # Webhook Integration Source: https://docs.trysight.ai/integrations/webhook Receive every Sight AI article on your own endpoint — including custom sites, headless CMSes, and any platform we don't natively support. ## Overview The webhook integration is the **build-it-yourself** path. Every time an article is ready to ship — whether it was generated manually, by Autopilot, or by an AI agent — Sight AI POSTs the full article (HTML, SEO copy, images, metadata) as a single signed JSON request to a URL you control. What happens next is up to you: write it to your CMS, push it through a Zapier/Make scenario, drop it into a database, fan it out to multiple downstream systems — anything that can accept an HTTP POST. This page is the official guide for building that endpoint. If you're integrating with a custom Next.js site (the most common case), we walk you through the entire route handler at the bottom — copy, paste, change three lines, ship. ## How it works (read this first) A 30-second mental model that prevents 90% of the bugs we see: Every successful sync from Sight AI fires a single event named **`article.ready`**, regardless of whether it's the first time the article has ever shipped or the hundredth re-sync. Don't branch on the event name — branch on whether the article already exists in your system. `article.id` is Sight AI's stable identifier and **never changes** for the lifetime of an article. `article.slug` *can* change — users edit it from inside Sight AI when they want to rename a URL. If you key on slug, a rename in Sight AI will look like "delete the old article + create a new one" on your side. **Always upsert by `article.id`.** Each delivery includes an `event_id`. If the same `event_id` arrives twice (network retry, queue at-least-once, etc.), it's the same logical event — drop the duplicate. Sight AI also dedupes server-side within a 60-minute window, so this is belt-and-braces for the rare cases that slip through. Verify `X-SightAI-Signature` against the **raw request body** before you trust anything in the payload. Then return a 2xx within 30 seconds — even if you haven't finished processing yet. Long synchronous handlers cause timeouts and trigger retries you don't need. That's the whole contract. Everything below is the spec for each piece, and a worked Next.js example. ## Use cases * **Custom sites** built on Next.js, SvelteKit, Nuxt, Astro, Remix, etc. * **Headless CMSes** we don't natively integrate with (Payload, [Sanity](/integrations/sanity), Strapi, Contentful, Hygraph, Storyblok, Directus…) * **Automation tools** like Zapier, Make, n8n, Pipedream * **Custom pipelines** that fan content out to multiple destinations * **Internal CMSes** behind your firewall (with a public-facing relay) ## The endpoint contract | Item | Value | | ----------------- | ----------------------------------------------------------- | | Method | `POST` | | Content-Type | `application/json` | | Auth | HMAC-SHA256 signature in `X-SightAI-Signature` | | Replay window | 5 minutes (`X-SightAI-Timestamp` in milliseconds) | | Expected response | `2xx` within **30 seconds** | | Retry policy | Up to 3 retries with exponential backoff on `5xx` / timeout | | Auto-pause | After 10 consecutive failed deliveries | ### Headers Sight AI sends | Header | Value | Notes | | ---------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `Content-Type` | `application/json` | Always. | | `X-SightAI-Signature` | `sha256=` | HMAC-SHA256 of the **raw request body**, keyed with your webhook secret. The `sha256=` prefix is part of the value. When signing is disabled, this is the literal string `unsigned`. | | `X-SightAI-Timestamp` | `` | Unix timestamp in **milliseconds** when the request was signed. Reject anything more than 5 minutes off your clock. | | `X-SightAI-Version` | `1.0` | Payload schema version. | | `User-Agent` | `SightAI-Webhook/1.0` | Helpful in your access logs. | | `X-IndexPilot-Signature` / `X-IndexPilot-Timestamp` / `X-IndexPilot-Version` | (legacy) | Identical values to the `X-SightAI-*` headers, sent for backward compatibility with older integrations. New integrations should read only the `X-SightAI-*` headers. | Some runtimes lowercase header names. In Next.js / Vercel, read the signature as `request.headers.get('x-sightai-signature')` (all lowercase). HTTP header names are case-insensitive per the spec — both forms work. ### The payload ```json theme={null} { "event_id": "a1b2c3d4e5f6...", "event": "article.ready", "timestamp": "2026-05-05T14:30:15.000Z", "site": { "id": "site_abc123", "name": "My Site", "host": "https://example.com" }, "article": { "id": "art_xyz789", "slug": "how-to-build-better-content", "title": "How to Build Better Content", "content": "

How to Build Better Content

...

", "summary": "Learn how to build better content with this guide.", "seo_title": "How to Build Better Content | My Site", "seo_meta_description": "Learn how to build better content...", "target_keyword": "build better content", "main_image_url": "https://cdn.sightai.io/images/main.jpg", "thumbnail_image_url": "https://cdn.sightai.io/images/thumb.jpg", "article_type": "explainer", "category": "Content Marketing", "author_name": "Sight AI", "read_time_minutes": 5, "is_featured": false, "published_at": null, "created_at": "2026-05-05T12:00:00.000Z", "updated_at": "2026-05-05T14:30:15.000Z" } } ``` #### Field reference | Path | Type | Required | What it's for | | ------------------------------------- | ----------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `event_id` | string | Yes | Idempotency key. Same logical event → same `event_id`. Use it to dedupe retries on your side. | | `event` | string | Yes | Currently always `"article.ready"`. See [Event types](#event-types). | | `timestamp` | ISO-8601 string | Yes | When the event was generated. (Replay protection uses the `X-SightAI-Timestamp` header, not this.) | | `site.id` / `site.name` / `site.host` | string | Yes | The Sight AI workspace this article belongs to. `site.host` is whatever the user entered in their site settings, including the protocol. | | `article.id` | string | Yes | **The upsert key.** Stable for the article's lifetime. | | `article.slug` | string | Yes | URL slug — use this to construct `/blog/`. Can change between deliveries if a user renames the article. | | `article.title` | string | Yes | Display title. | | `article.content` | string (HTML) | Yes | Full article body, ready to render. | | `article.summary` | string | Optional | Short excerpt. May be `null`. | | `article.seo_title` | string | Optional | ≤60 chars recommended. May be `null`. | | `article.seo_meta_description` | string | Optional | ≤160 chars recommended. May be `null`. | | `article.target_keyword` | string | Optional | The primary keyword the article targets. | | `article.main_image_url` | string (URL) | Optional | Featured image. May be `null`. See [Image handling](#image-handling). | | `article.thumbnail_image_url` | string (URL) | Optional | Smaller version of the featured image. | | `article.article_type` | string | Yes | e.g. `"explainer"`, `"listicle"`, `"how-to"`. | | `article.category` | string | Optional | The category **name** assigned in Sight AI (not an ID). Use the `Filters` tab in Sight AI to set an `external_id` for mapping. May be `null`. | | `article.author_name` | string | Optional | Display name. | | `article.read_time_minutes` | number | Optional | Estimated read time. | | `article.is_featured` | boolean | Yes | Whether the user marked it as a featured article. | | `article.published_at` | ISO-8601 string \| null | Optional | When the article was published in Sight AI. `null` if unpublished. | | `article.created_at` | ISO-8601 string | Yes | When the article was first created in Sight AI. | | `article.updated_at` | ISO-8601 string | Yes | When the article was last edited in Sight AI. Useful for "is this newer than what I have?" checks. | Optional fields may be **`null`** or **absent from the JSON entirely** — your parser must accept both. Don't assume every key is present. ### Event types `event` is currently always **`"article.ready"`**. Every sync — first publish, manual re-send, autopilot delivery, agent-driven update — uses this same event name. The receiver decides whether it's a create or an update by looking at whether `article.id` already exists in your system. `article.updated` and `article.published` are reserved for future use and are not emitted by Sight AI today. If you want to be forward-compatible, treat any unknown event name as "ignore, return 200" so future event types don't break your endpoint. ## What to do when a webhook arrives Your handler should do these six things, roughly in this order: Don't let a body parser run first. You need the **exact bytes** of the request to verify the HMAC signature. In Next.js App Router that means `await request.text()` (not `request.json()`). Compute `HMAC-SHA256(secret, raw_body)` and compare it (timing-safe) to the value of `X-SightAI-Signature` after stripping the `sha256=` prefix. If it doesn't match, return **`401`** and stop. Reject if `|Date.now() - X-SightAI-Timestamp| > 5 minutes`. This prevents an attacker from replaying a captured request days later. Return **`401`** on failure. Now that the body is verified, parse it. Validate that `article.id`, `article.slug`, `article.title`, and `article.content` exist — return **`400`** if not. Look up the article in your database by `article.id`. If found → update it in place. If not found → create a new record. Don't branch on `event` — `article.ready` covers both cases. Return a 200 response **as soon as the database write is committed**. If you also need to fetch images, push to a third-party API, regenerate static pages, etc., kick those off in the background or do them inline only if they're fast (\<1s). Aim to acknowledge well under the 30-second timeout. ## Verifying the signature The HMAC signature is the only thing standing between your endpoint and an attacker who knows the URL. Get this right. ```ts theme={null} import crypto from 'crypto'; function verifySignature(rawBody: string, signatureHeader: string, secret: string): boolean { if (!signatureHeader || !signatureHeader.startsWith('sha256=')) return false; const expected = crypto .createHmac('sha256', secret) .update(rawBody, 'utf8') .digest('hex'); const provided = signatureHeader.slice('sha256='.length); // Both buffers must be the same length for timingSafeEqual. if (expected.length !== provided.length) return false; return crypto.timingSafeEqual( Buffer.from(expected, 'hex'), Buffer.from(provided, 'hex'), ); } ``` **Sign the raw bytes, not a re-stringified object.** If you `JSON.parse(body)` and then `JSON.stringify` it again before hashing, key order and whitespace will drift and the HMAC will mismatch. Always hash the exact string you received over the wire. ## Image handling Sight AI sends `main_image_url` and `thumbnail_image_url` as URLs hosted on our CDN. You have two reasonable strategies: ### Strategy 1 — reference the URL directly (simplest) Just store the URL string and render it as ``. No download, no copy, no media library bookkeeping. Recommended for most custom sites unless you have a specific reason to host the image yourself. ### Strategy 2 — download and host the image yourself Common when you're feeding a CMS that has a Media collection (Payload, Sanity, etc.) and wants every asset stored locally. The trick is **don't re-download on every webhook** — Sight AI re-sends the article (with the same image URL) on every edit, every autopilot run, every manual re-sync. If you naively re-download each time, you'll pile up duplicates. A safe rule of thumb: * **First time you see this `article.id`** → download and store the image, save a reference on the article record. * **Article exists but has no stored image yet** → download. * **Article already has a stored image** → leave it alone, even if `main_image_url` looks slightly different. CDN cache-buster query params drift cosmetically without the underlying asset changing. * **User wants to swap the image** → expose a manual "clear stored image" admin action, then trigger a re-send from Sight AI. The next webhook will see "no stored image" and download fresh. If your CMS has its own asset deduplication (e.g. content-hash-keyed storage), you can skip this state machine and just upload every time — the CMS will collapse duplicates on its end. ## Cache invalidation If your site uses ISR, SSG, edge caching, or any kind of build-time rendering, the live page won't reflect the new content until the cache expires. Bust the cache for the affected paths inside your handler so users see the update immediately. For Next.js App Router that means calling `revalidatePath` for every page that displays this article — the article page, the index/listing, and any topic/category page it appears on. Other frameworks have equivalents (`unstable_revalidate` for SvelteKit, `purge` for Astro, etc.). ```ts theme={null} import { revalidatePath, revalidateTag } from 'next/cache'; revalidatePath(`/blog/${article.slug}`); revalidatePath('/blog'); if (article.category) { revalidatePath(`/topics/${slugify(article.category)}`); } revalidateTag(`article:${article.id}`); ``` Wrap revalidation in a `try/catch`. The database write is your source of truth — if revalidation throws for some transient reason, your ISR backstop will pick up the change within a minute, so it's not worth failing the webhook over. ## Worked example: Next.js App Router A complete, copy-paste-ready route handler for a Next.js site. Drop this at `app/api/webhooks/sight-ai/route.ts`, set `SIGHT_AI_WEBHOOK_SECRET` in your environment, and you're done. ```ts theme={null} // app/api/webhooks/sight-ai/route.ts import { NextResponse } from 'next/server'; import { revalidatePath, revalidateTag } from 'next/cache'; import crypto from 'node:crypto'; import { db } from '@/lib/db'; // your DB client (Prisma, Drizzle, raw, …) const REPLAY_WINDOW_MS = 5 * 60 * 1000; // 5 minutes export async function GET() { // Useful for uptime monitors and "is this deployed?" checks. return NextResponse.json({ status: 'ok', endpoint: 'sight-ai' }); } export async function POST(request: Request) { const secret = process.env.SIGHT_AI_WEBHOOK_SECRET ?? process.env.SIGHTAI_WEBHOOK_SECRET; if (!secret) { return NextResponse.json( { error: 'Webhook not configured' }, { status: 503 }, ); } // 1. Read the RAW body — required for signature verification. const rawBody = await request.text(); // 2. Verify the signature. const signature = request.headers.get('x-sightai-signature') ?? ''; if (!verifySignature(rawBody, signature, secret)) { return NextResponse.json({ error: 'Invalid signature' }, { status: 401 }); } // 3. Verify the timestamp (replay protection). const timestampHeader = request.headers.get('x-sightai-timestamp'); const timestamp = Number(timestampHeader); if ( !Number.isFinite(timestamp) || Math.abs(Date.now() - timestamp) > REPLAY_WINDOW_MS ) { return NextResponse.json( { error: 'Timestamp too old or in future' }, { status: 401 }, ); } // 4. Parse and validate the payload. let payload: SightAiWebhookPayload; try { payload = JSON.parse(rawBody); } catch { return NextResponse.json({ error: 'Invalid JSON' }, { status: 400 }); } const { article, event_id } = payload; if (!article?.id || !article.slug || !article.title || !article.content) { return NextResponse.json( { error: 'Missing required article fields' }, { status: 400 }, ); } // 5. Idempotency: if we've already processed this event_id, no-op. if (event_id && (await db.webhookEvent.exists({ event_id }))) { return NextResponse.json({ ok: true, deduped: true }); } // 6. Upsert by article.id (NOT slug — slugs can change). const existing = await db.article.findByExternalId(article.id); const data = { external_id: article.id, // store this — it's your upsert key slug: article.slug, // may have changed since last delivery title: article.title, content_html: article.content, summary: article.summary ?? null, seo_title: article.seo_title ?? null, seo_description: article.seo_meta_description ?? null, main_image_url: article.main_image_url ?? null, thumbnail_image_url: article.thumbnail_image_url ?? null, category: article.category ?? null, author_name: article.author_name ?? null, read_time_minutes: article.read_time_minutes ?? null, is_featured: article.is_featured, published_at: article.published_at ?? new Date().toISOString(), sight_updated_at: article.updated_at, }; const operation = existing ? 'updated' : 'created'; if (existing) { await db.article.update(existing.id, data); } else { await db.article.create(data); } if (event_id) { await db.webhookEvent.record({ event_id, article_id: article.id }); } // 7. Bust caches so the live site reflects the new content immediately. try { revalidatePath(`/blog/${article.slug}`); revalidatePath('/blog'); if (existing && existing.slug !== article.slug) { revalidatePath(`/blog/${existing.slug}`); // old URL when slug changed } revalidateTag(`article:${article.id}`); } catch (err) { console.warn('[sight-ai] revalidation failed (ISR will recover)', err); } return NextResponse.json({ ok: true, operation, article_id: article.id, slug: article.slug, }); } function verifySignature(rawBody: string, header: string, secret: string) { if (!header.startsWith('sha256=')) return false; const expected = crypto .createHmac('sha256', secret) .update(rawBody, 'utf8') .digest('hex'); const provided = header.slice('sha256='.length); if (expected.length !== provided.length) return false; return crypto.timingSafeEqual( Buffer.from(expected, 'hex'), Buffer.from(provided, 'hex'), ); } type SightAiWebhookPayload = { event_id?: string; event: 'article.ready' | string; timestamp: string; site: { id: string; name: string; host: string }; article: { id: string; slug: string; title: string; content: string; summary?: string | null; seo_title?: string | null; seo_meta_description?: string | null; target_keyword?: string | null; main_image_url?: string | null; thumbnail_image_url?: string | null; article_type: string; category?: string | null; author_name?: string | null; read_time_minutes?: number | null; is_featured: boolean; published_at?: string | null; created_at: string; updated_at: string; }; }; ``` The handler covers every behavior we recommend: * ✅ Verifies the HMAC against the **raw** body * ✅ Rejects timestamps older than 5 minutes * ✅ **Upserts by `article.id`** (so slug renames don't create duplicates) * ✅ **Dedupes by `event_id`** (so retries are no-ops) * ✅ **Revalidates** the article page, the listing, and the old slug if the URL changed * ✅ Falls back gracefully if revalidation throws ### Setting it up Save the code above as `app/api/webhooks/sight-ai/route.ts` in your Next.js project. Add `SIGHT_AI_WEBHOOK_SECRET` to your hosting environment (Vercel → Project → Settings → Environment Variables, or your platform's equivalent). The value must match what you configure in Sight AI's webhook settings. If you're using Vercel, use Sight AI's **Managed by Sight AI** secret mode, copy the value the first time it's shown, and paste it into Vercel as a production environment variable. Deploy your site so the new route is live, then verify it responds: `curl https://yourdomain.com/api/webhooks/sight-ai` should return `{"status":"ok","endpoint":"sight-ai"}`. In Sight AI, go to **Integrations → Webhook**, enter `https://yourdomain.com/api/webhooks/sight-ai`, save, and click **Test connection**. You should see a green "Connection successful". On the same page, click **Set as Active CMS**. From now on every article that ships from Sight AI — manual sync, Autopilot, or AI agents — will arrive on your endpoint. ## Configuring the webhook in Sight AI ### Webhook URL The endpoint Sight AI will POST to. Must be HTTPS in production (HTTP is allowed for `localhost` during development). Allowed ports: 80, 443, 3000, 8080, 8443. ### Webhook secret You have two choices: * **Managed by Sight AI** *(recommended)* — Sight AI generates a strong random secret for you. You see the value once, after the first save. Copy it into your endpoint's environment, then save again to confirm. Rotate anytime from the Connect tab. * **Bring your own** — paste a secret you generated. Stored AES-256 encrypted at rest. Useful if you have central secret management. ### Sign requests On by default. When on, every delivery includes the `X-SightAI-Signature` HMAC. **Leave this on in production** unless you have a very specific reason — your endpoint URL alone is not authentication. ### Verify SSL On by default. When on, Sight AI rejects endpoints with invalid TLS certificates. Disable only for local development against self-signed certs. ### Trigger mode Under **Advanced settings**: * **Manual** *(default)* — webhooks fire only when a user clicks **Send Webhook** on an article, or runs a bulk sync, or it's triggered by Autopilot / an AI agent's planner queue. * **Automatic** — webhooks fire as soon as article generation completes, with no human in the loop. In practice, **Manual mode + Autopilot/Agents will still send webhooks automatically** because those systems trigger the same delivery pathway as the manual button. "Automatic" specifically targets the *generation completion* moment for non-Autopilot workflows. ### Max retries / Request timeout Under **Advanced settings**: | Setting | Default | Range | | --------------- | ---------- | --------------- | | Max retries | 3 | 0 – 10 | | Request timeout | 30 seconds | 5 – 120 seconds | Failed deliveries (5xx response or timeout) retry with exponential backoff. After **10 consecutive failures** across deliveries, the integration is auto-paused and you'll get an in-app notification — fix your endpoint and click **Reactivate**. ### Filters (categories) Optional. The **Filters** tab lets you define category names that appear as options when generating an article. Each category can have an `external_id` you set, which is *not* sent in the payload today — but `article.category` (the category **name** the user picked) is, so you can map names to your downstream IDs in your handler. ## Testing your endpoint ### From inside Sight AI The **Test connection** button on the Connect tab fires a real signed request to your URL with the `event` set to `article.ready` and the additional field `"test": true` in the payload. The article fields contain example data — your endpoint should accept it and return 2xx for the test to pass. To distinguish test events from real ones in your handler, check for `payload.test === true` or for `event_id` starting with `test_`. We recommend short-circuiting test events: ```ts theme={null} if (payload.test === true) { return NextResponse.json({ ok: true, test: true }); } ``` That way a test never writes to your real database. ### From the command line ```bash theme={null} SECRET='your-shared-secret' TS=$(($(date +%s) * 1000)) BODY='{"event_id":"manual-test","event":"article.ready","timestamp":"2026-05-05T14:30:15.000Z","site":{"id":"s","name":"S","host":"https://example.com"},"article":{"id":"art_local_test","slug":"hello","title":"Hello","content":"

Hello

","article_type":"explainer","is_featured":false,"created_at":"2026-05-05T14:30:15.000Z","updated_at":"2026-05-05T14:30:15.000Z"}}' SIG="sha256=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $2}')" curl -i -X POST https://yourdomain.com/api/webhooks/sight-ai \ -H 'Content-Type: application/json' \ -H "X-SightAI-Signature: $SIG" \ -H "X-SightAI-Timestamp: $TS" \ -H 'X-SightAI-Version: 1.0' \ --data "$BODY" ``` If your endpoint logs the request and returns 2xx, you're done. ## Response handling Your endpoint should respond with: | Status | Meaning | Sight AI behavior | | -------------- | ---------------------------------------------------- | ------------------------------------------------------------------- | | `2xx` | Delivery accepted | Marked as delivered. No retry. | | `4xx` | Permanent failure (bad payload, bad signature, etc.) | **Not retried** — the request itself is wrong, retrying won't help. | | `5xx` | Transient failure | Retried up to 3 times with exponential backoff. | | Timeout (>30s) | Treated as transient | Retried. | Respond as quickly as you can — definitely under 30 seconds, ideally under a couple. If you need to do slow work (image processing, third-party API calls), commit the database write first, return 2xx, and finish the slow work in a background job. ## Delivery logs and monitoring Inside Sight AI, the **Monitoring** tab on the webhook integration page shows: * Total deliveries / success rate / failure count * The most recent 20 deliveries with HTTP status, timing, and error messages * A "Refresh" button that hits the same data live If a webhook fails, click the row to see the full error response from your endpoint. The most common errors are: * `401 Invalid signature` — see [Troubleshooting](#troubleshooting) * `500 Internal Server Error` — your handler threw; check your server logs * `Request timeout` — your handler took longer than the configured timeout ## Active CMS Each Sight AI workspace can have **one active CMS at a time**. When you click **Set as Active CMS** on the webhook page, every article that ships from Sight AI for that workspace — manual, Autopilot, or AI agent — flows through your webhook instead of any previously connected CMS (WordPress, Webflow, etc.). Switching to a different CMS later is a one-click change; your webhook configuration is preserved. ## Disconnecting To stop sending webhooks for a workspace: 1. Go to **Integrations → Webhook** for that workspace. 2. Click **Disconnect**. Your saved categories are preserved in case you reconnect later. If you also want to wipe the secret, use the rotate flow on the Connect tab before disconnecting. ## Troubleshooting Almost always one of: * **You hashed the wrong bytes.** Body parsers (Express `body-parser`, Hono's `c.req.json()`, etc.) consume the raw body before you see it. Capture the raw body *first*, hash that, then parse. * **You re-stringified the JSON.** `JSON.stringify(JSON.parse(body))` does **not** produce the same bytes — key order and whitespace can differ. Always hash the original string. * **Wrong secret.** Confirm the secret in your environment matches what's in Sight AI exactly. No whitespace, no quotes, no `Bearer` prefix. * **Missing `sha256=` prefix.** The header value is `sha256=`. Don't strip the prefix before storing it; do strip it before comparing. * **Hex case mismatch.** We send lowercase hex. Use a buffer comparison, not a string `===`. `X-SightAI-Timestamp` is a Unix timestamp in **milliseconds** (not seconds). It must be within 5 minutes of your server's clock. * If your code is reading it as seconds, multiply by 1000 (or vice versa). * If your server clock is drifting, enable NTP (`timedatectl status` on Linux). * If your queue or proxy can buffer requests longer than 5 minutes, that's a problem — by the time the request lands the timestamp is already stale. Sight AI's retry will re-sign with a fresh timestamp on the next attempt, so this usually self-corrects. Your endpoint returned 503 because the `SIGHT_AI_WEBHOOK_SECRET` (or `SIGHTAI_WEBHOOK_SECRET`) environment variable isn't set. Add it to your hosting environment and redeploy. Your handler asked for a field that the payload didn't include. The hard-required fields are `article.id`, `article.slug`, `article.title`, and `article.content`. Everything else can be `null` or absent — make sure your validator accepts that. You're upserting by `article.slug` instead of `article.id`. When a user renames an article inside Sight AI, the slug changes but the `id` doesn't — so a slug-keyed receiver looks like "delete + re-create" while an `id`-keyed receiver correctly updates in place. Migrate your lookup to `article.id` (store it as a column on your articles table) and the duplicates stop. Your database wrote the new content, but a cached copy of the page is still being served. Two checks: * **Did you call `revalidatePath` (or your framework's equivalent)?** ISR/SSG will eventually pick up the change on its next regeneration window, but until then the stale page sticks. * **Did the field you care about actually change?** A re-send of an unedited article is intentionally a no-op visually — the database write happens, but the rendered HTML is identical. You're re-downloading `main_image_url` on every webhook. Sight AI re-sends the same article — with the same image URL — on every edit, every Autopilot run, every manual sync. Add a guard: only download when the article is brand new on your side, or when the local image record is missing. See [Image handling](#image-handling). After 10 consecutive failed deliveries, Sight AI auto-pauses the integration to stop hammering a broken endpoint. Fix the underlying issue (check delivery logs for the error message), then click **Reactivate** on the webhook page. ## Best practices * **Be idempotent.** Use `event_id` as a dedupe key. Retries and at-least-once delivery should produce the same end state, not duplicate writes. * **Upsert by `article.id`.** The single most important rule. Never key on `slug`. * **Verify the HMAC on the raw body.** Don't parse, don't re-stringify, don't trim. * **Acknowledge fast, work async.** A 200 within seconds is the goal; long synchronous handlers cause needless retries. * **Use HTTPS in production.** Required for non-localhost endpoints. * **Store secrets safely.** Treat the webhook secret like an API key — secrets manager or hosting env vars only, never in source control. * **Bust your cache.** If your site is statically rendered or behind ISR, revalidate the affected paths inside your handler. * **Log generously while you're integrating.** Once you're confident, dial logs back to errors only — `article.content` can be large, and you don't need it in every log line. ## Example integrations ### Zapier (Webhooks by Zapier) 1. New Zap → trigger: **Webhooks by Zapier → Catch Hook** 2. Copy the unique webhook URL Zapier generates. 3. Paste it into Sight AI under Integrations → Webhook → Webhook URL. 4. (Optional) Skip request signing in Sight AI — Zapier doesn't natively verify HMACs. Treat the URL itself as the secret. 5. Add Zap actions (Create Notion page, append to Google Sheets, post to Slack, etc.). ### Make (Integromat) 1. New scenario → **Webhooks → Custom webhook**. 2. Copy the URL Make assigns. 3. Configure in Sight AI as above. 4. Build downstream modules. ### n8n / Pipedream / others Same pattern: create a webhook trigger node, paste the URL into Sight AI, build the rest of the workflow. ## Reference | Concern | Answer | | --------------- | --------------------------------------------------------------------- | | Endpoint method | `POST` | | Auth | `X-SightAI-Signature: sha256=` | | Replay window | 5 minutes (`X-SightAI-Timestamp` in ms) | | Upsert key | `article.id` | | Dedupe key | `event_id` | | Image dedup | Don't re-download once stored — gate on "is the image already saved?" | | Cache busting | `revalidatePath` (Next.js) or framework equivalent | | Test events | `payload.test === true` and/or `event_id` starts with `test_` | | Retries | Up to 3 with exponential backoff, on 5xx / timeout only | | Auto-pause | After 10 consecutive failures | ## Next steps * [Generate articles to send via webhook](/ai-content/overview) * [Automate with Autopilot](/ai-content/autopilot) * [Set up Bing IndexNow so new URLs are indexed instantly](/integrations/bing-indexnow) # Wix Integration Source: https://docs.trysight.ai/integrations/wix Automatically publish AI-generated articles to your Wix blog. ## Overview The Wix integration allows Sight AI to publish articles directly to your Wix blog. Connect your Wix account and start publishing AI-generated content automatically. ## Requirements * **Wix website** -- With blog functionality enabled * **Wix Blog app** -- Installed on your site * **Wix API key** -- Generated from your Wix dashboard * **Wix Site ID** -- Found in your Wix site settings * **Account access** -- Admin access to your Wix site ## Setup Instructions ### Step 1: Get Your Wix Site ID 1. Log in to your [Wix Dashboard](https://manage.wix.com) 2. Go to **Settings** > **General** 3. Your **Site ID** is displayed in the site details (or in the browser URL bar) 4. Copy the Site ID ### Step 2: Generate a Wix API Key 1. In your Wix Dashboard, go to **Settings** > **API Keys** (or visit the [Wix API Keys Manager](https://manage.wix.com/account/api-keys)) 2. Click **"Generate API Key"** 3. Name it **"Sight AI"** 4. Grant the following permissions: * **Wix Blog** -- Read and Write * **Wix Media** -- Read and Write 5. Click **"Generate Key"** 6. Copy the API key (you won't be able to see it again) ### Step 3: Connect Wix in Sight AI 1. Go to **Integrations** in Sight AI 2. Click **Wix** 3. Enter your **Wix Site ID** 4. Paste your **API Key** 5. Click **"Connect"** Sight AI will validate your credentials and pull in your CMS collections. ### Step 4: Select CMS Collection 1. Choose the CMS collection you want to publish articles to (e.g., "Blog Posts") 2. Configure your publishing preferences ### Step 5: Configure Settings 1. Set your default **author name** 2. Choose your default **publish status** 3. Save your settings ## Configuration Options ### Publish Status * **Published** -- Articles go live immediately * **Draft** -- Articles are saved for review ### Author Set a default author name for published articles. ### Categories If your Wix blog uses categories, select a default category for synced articles. ## Publishing Articles ### Manual Sync 1. Open the article in Sight AI 2. Click **"Sync to CMS"** 3. Select Wix as the target 4. Confirm and publish ### Autopilot Publishing When Autopilot is enabled, articles automatically publish to your Wix blog based on your configuration. ## What Gets Synced * **Title** -- Post title * **Content** -- Full content with formatting * **Featured Image** -- Main cover image * **In-Body Images** -- Images within the content * **Excerpt** -- Post summary * **URL Slug** -- SEO-friendly URL * **Categories** -- If configured * **Tags** -- If configured ## Troubleshooting ### Connection Issues * Ensure you have the Wix Blog app installed * Verify you have admin access to the site * Try disconnecting and reconnecting * Clear your browser cache and try again ### Articles Not Appearing * Check if articles are saved as drafts * Verify the blog is published on your Wix site * Look in Wix Dashboard > Blog > Posts ### Formatting Issues * Wix may render some HTML differently * Review articles in Wix editor after syncing * Make minor adjustments if needed ## Active CMS Sight AI supports only **one active CMS integration per site** at a time. When you connect Wix and set it as your active CMS, articles are published to your Wix blog instead of any previously active CMS. You can switch to a different CMS at any time from the **Integrations** hub -- your Wix configuration and previously published posts are preserved. ## Disconnecting To disconnect Wix: 1. Go to **Integrations** 2. Click **Wix** 3. Click **"Disconnect"** 4. Confirm the disconnection Previously published posts remain on your Wix blog. ## Next Steps * [Generate your first article](/ai-content/overview) * [Set up Autopilot publishing](/ai-content/autopilot) * [Configure search engine indexing](/indexing/how-it-works) # WordPress Integration Source: https://docs.trysight.ai/integrations/wordpress Automatically publish AI-generated articles to your WordPress site. ## Overview The WordPress integration allows Sight AI to publish articles directly to your WordPress site using our custom WordPress plugin. This provides secure API key authentication and seamless article syncing. ## Setup Instructions ### Step 1: Install the WordPress Plugin Install the Sight AI Publisher plugin on your WordPress site: 1. Download the plugin from the **Setup** tab in Sight AI 2. Go to **WordPress Admin > Plugins > Add New > Upload Plugin** 3. Choose the downloaded ZIP file and click **"Install Now"** 4. Activate the plugin after installation ### Step 2: Generate an API Key In your WordPress admin: 1. Navigate to **Sight AI > API Keys** 2. Click **"Generate New API Key"** 3. Copy the API key (you won't see it again!) 4. Paste it in the Sight AI integration form ### Step 3: Choose How New Articles Are Published The Setup tab now surfaces a clear publish-vs-draft choice so you decide upfront how new articles should land in WordPress: * **Publish immediately** *(default for new connections)* — new articles go live on your blog right away. Best for hands-off publishing. * **Save as draft** — articles wait in WordPress as drafts. You publish each one manually. > We default to **Publish immediately** because the most common confusion was: "I generated articles, Sight AI says they synced, but nothing appears on my blog." That happens when articles silently land as drafts. Publishing immediately makes the behaviour match user expectation. You can always switch to Draft on the Settings tab if you prefer manual review. If you need **Pending Review** or **Private**, configure them on the **Settings** tab — those modes are still supported but live behind a less-prominent control because they're rarely used. ### Step 4: Configure the Rest of the Settings On the **Settings** tab you can also set: * **Default Category** — automatically assign to a WordPress category * **Default Author** — set which WordPress author is credited ([learn how authors work](/integrations/wordpress-authors)) * **Sync Featured Images** — auto-upload featured and in-body images to WordPress Media Library * **Sync SEO Metadata** — automatically sync SEO titles and meta descriptions (compatible with Yoast SEO, RankMath, and other SEO plugins) ### Step 5: Start Publishing Once connected, you can publish articles directly from Sight AI: 1. Go to any article in your dashboard 2. Click **"Sync to WordPress"** 3. Choose publishing options 4. Your article will be instantly published! ## What Gets Synced * **Title** -- Article title * **Content** -- Full HTML content with formatting * **Featured Image** -- Uploaded to WordPress Media Library * **In-Body Images** -- Uploaded and embedded in content * **Meta Description** -- As excerpt (Yoast/RankMath compatible) * **Slug** -- SEO-friendly URL * **Category** -- Assigned category * **Author** -- Assigned author ## Autopilot Publishing When Autopilot is enabled (Starter plan and above), articles are automatically published to WordPress based on your configuration settings. ## Troubleshooting ### Connection Failed * **Check plugin activation:** Ensure the Sight AI plugin is activated * **Verify API key:** Make sure you copied the full API key * **Check site URL:** Ensure the URL matches your WordPress site exactly * **Try regenerating:** Generate a new API key if needed ### "Access Forbidden" Error If you see an "Access forbidden" or "This site is private" error, your WordPress site visibility settings may be blocking API access. * **Site must be Public:** Go to **Settings > Reading** (or **Settings > General** on WordPress.com) and ensure your site is set to **"Public"** * **Private sites block API:** Sites set to "Private" or "Coming Soon" will reject all API requests, including from Sight AI * **WordPress.com users:** Check your site visibility in **Settings > General > Privacy** and select "Public" * **Staging sites:** WordPress.com staging sites must also be set to Public for the integration to work ### Articles Not Appearing * **Check status:** Articles may be saved as drafts * **Clear cache:** WordPress caching plugins may delay visibility * **Check WordPress:** Look in Posts > All Posts for the article ### Images Not Uploading * **Check permissions:** Your WordPress user needs upload capability * **Check file size:** Large images may exceed PHP limits * **Check uploads folder:** Ensure WordPress can write to uploads ## Active CMS Sight AI supports only **one active CMS integration per site** at a time. When you connect WordPress and set it as your active CMS, articles are synced to WordPress instead of any previously active CMS. You can switch to a different CMS at any time from the **Integrations** hub -- your WordPress configuration and previously published articles are preserved. ## Disconnecting To disconnect WordPress: 1. Go to **Integrations** 2. Click **WordPress** 3. Click **"Disconnect"** 4. Confirm the disconnection Previously published articles remain on your WordPress site. ## Next Steps * [WordPress authors](/integrations/wordpress-authors) — how author names work when publishing * [Generate your first article](/ai-content/overview) * [Set up Autopilot publishing](/ai-content/autopilot) * [Configure search engine indexing](/indexing/how-it-works) # WordPress Authors Source: https://docs.trysight.ai/integrations/wordpress-authors How author names work when Sight AI publishes articles to WordPress. ## How authors work with Sight AI When Sight AI sends an article to WordPress, it needs to know **who should be listed as the author** on that post — the name readers see on your blog. Here’s the simple version: 1. **Authors live in WordPress.** Sight AI does not create WordPress user accounts. Anyone you want credited on synced articles should already be set up as a user in your WordPress site. 2. **Sight AI reads your existing authors.** After you connect WordPress, Sight AI can see the authors on your site (typically admins, editors, and authors). You can refresh this list from the WordPress integration **Settings** tab. 3. **Pick a default author.** Choose one person as your default. New articles synced from Sight AI will be credited to that author unless you choose someone else for a specific article. 4. **You can override per article.** When syncing an individual article, you can pick a different author if you want someone else to get the byline. That’s it — Sight AI matches your article to a person who already exists in WordPress. It does not sync author profiles, bios, or photos back and forth; it simply assigns the post to the right WordPress user. ## Setting up authors in WordPress If you need to add team members, change who can publish, or understand WordPress user roles, that all happens inside WordPress — not in Sight AI. WPBeginner’s guide explains what a WordPress author is and how author roles work on your site. ## Common questions ### Why don’t I see the author I want? The person may not exist in WordPress yet, or their account may not have a role that allows them to be listed as an author (for example, **Author**, **Editor**, or **Administrator**). Add or update the user in WordPress, then click **Refresh authors** in Sight AI. ### Can Sight AI create authors for me? No. Create users in WordPress first, then select them in Sight AI. ### What if I don’t pick a default author? Sight AI will still publish the article. WordPress will assign an author using its own fallback rules — often an editor, author, or admin on your site. ### Does Autopilot use my default author? Yes. When Autopilot publishes to WordPress, it uses the default author you set in your WordPress integration settings (unless you’ve configured a different author for that workflow). ## Related * [WordPress Integration](/integrations/wordpress) — full setup guide * [Autopilot](/ai-content/autopilot) — automatic publishing settings # Zapier Integration Source: https://docs.trysight.ai/integrations/zapier Connect Sight AI to 5,000+ apps using Zapier's powerful automation platform. ## Overview The Zapier integration allows you to connect Sight AI to over 5,000+ apps using Zapier's "Webhooks by Zapier" trigger. When articles are published, Sight AI sends data to your Zapier webhook, which can then trigger any action in your connected apps. ## Popular Use Cases * **Slack/Discord notifications** -- Get notified when new articles are ready * **Project management** -- Create cards in Notion, Airtable, Trello, or Asana * **Google Workspace** -- Add entries to Google Sheets or create Google Docs * **Custom CMS** -- Connect to platforms not natively supported * **Email marketing** -- Trigger newsletter drafts in Mailchimp or ConvertKit * **Social media** -- Queue posts to Buffer or Hootsuite ## How It Works Zapier uses webhooks to receive data from Sight AI. Here's the flow: 1. You create a Zap in Zapier with "Webhooks by Zapier" as the trigger 2. Zapier gives you a unique webhook URL 3. You add that URL to Sight AI's webhook integration 4. When articles are published, Sight AI sends data to Zapier 5. Zapier triggers your configured actions ## Setup Instructions ### Step 1: Create a Zap in Zapier 1. Log into your [Zapier account](https://zapier.com) 2. Click **"Create Zap"** 3. Search for **"Webhooks by Zapier"** as your trigger app 4. Select it as your trigger ### Step 2: Choose "Catch Hook" 1. Select **"Catch Hook"** as the event type 2. Click **Continue** 3. Zapier will generate a unique webhook URL 4. **Copy this URL** -- you'll need it in the next step The webhook URL looks like: `https://hooks.zapier.com/hooks/catch/...` ### Step 3: Add Webhook URL to Sight AI 1. In Sight AI, go to **Integrations > Webhook** 2. Paste your Zapier webhook URL 3. Click **"Save"** [Learn more about webhook configuration](/integrations/webhook) ### Step 4: Test the Connection 1. In Sight AI's webhook settings, click **"Send Test"** 2. This sends a sample payload to Zapier 3. Back in Zapier, click **"Test trigger"** 4. You should see the test data from Sight AI ### Step 5: Configure Your Zap Actions 1. Add action steps to your Zap (Slack message, Google Sheet row, etc.) 2. Map the article fields from Sight AI to your action 3. Test your complete Zap 4. Turn on your Zap when ready ## Available Article Data When Zapier receives a webhook from Sight AI, these fields are available for mapping: | Field | Description | | ------------------------------ | -------------------------------------------------- | | `article.title` | The article headline | | `article.slug` | URL-friendly article identifier | | `article.content` | Full article HTML content | | `article.summary` | Article excerpt/summary | | `article.seo_title` | SEO-optimized title | | `article.seo_meta_description` | Meta description for SEO | | `article.main_image_url` | Featured image URL | | `article.target_keyword` | Primary SEO keyword | | `article.category` | Article category | | `article.author_name` | Author attribution | | `site.name` | Your site name | | `site.host` | Your site domain (base domain without www) | | `site.canonical_host` | Your site domain as entered (preserves www if set) | ## Trigger Modes In Sight AI's webhook settings, you can choose when webhooks are sent: * **Manual** (default) -- Webhooks are sent when you click "Sync to Webhook" on an article * **Automatic** -- Webhooks are sent automatically when article generation completes ## Tips & Best Practices ### Use Zapier Filters Add Zapier filters to only trigger actions for specific article types, categories, or keywords. This gives you fine-grained control over your automation. ### Monitor Your Zaps Check Zapier's "Zap History" to see webhook deliveries and debug any issues. You can also view delivery logs in Sight AI's Webhook integration page. ### Build Multi-Step Zaps Create powerful workflows by chaining multiple actions. For example: 1. Receive article from Sight AI 2. Create a draft in your CMS 3. Add a row to Google Sheets for tracking 4. Send a Slack notification to your team ## Example Zaps ### Slack Notification Get notified in Slack when new articles are ready: 1. Trigger: Webhooks by Zapier (Catch Hook) 2. Action: Slack > Send Channel Message 3. Map `article.title` and `article.summary` to the message ### Google Sheets Tracking Track all generated articles in a spreadsheet: 1. Trigger: Webhooks by Zapier (Catch Hook) 2. Action: Google Sheets > Create Spreadsheet Row 3. Map article fields to columns (title, keyword, category, etc.) ### Notion Database Add articles to a Notion database for content management: 1. Trigger: Webhooks by Zapier (Catch Hook) 2. Action: Notion > Create Database Item 3. Map fields to your Notion database properties ## Troubleshooting ### Zap Not Triggering * Make sure your Zap is turned **ON** in Zapier * Verify the webhook URL is correctly pasted in Sight AI * Check Sight AI's delivery logs for any errors * Test the connection using the **"Send Test"** button ### Data Not Showing in Zapier * Click "Test trigger" in Zapier after sending a test from Sight AI * Make sure you're using the correct webhook URL * Try refreshing the Zapier editor ### Actions Failing * Check the Zap History for specific error messages * Verify your connected apps are properly authenticated * Ensure required fields are mapped correctly ## Next Steps * [Configure webhook settings](/integrations/webhook) * [Set up Autopilot for automated generation](/ai-content/autopilot) * [Learn about article generation](/ai-content/overview) # Scheduling Articles Source: https://docs.trysight.ai/planner/scheduling Schedule articles to be published at specific dates and times. ## Overview Scheduling lets you plan your content calendar in advance by setting specific dates and times for articles to be published to your connected CMS. Instead of publishing immediately, you can queue articles and let Sight AI handle the rest. ## How to Schedule an Article 1. Open the **Planner** from the left sidebar. 2. Click on the article you want to schedule, or select it from the List view. 3. Click the **Schedule** button in the article detail panel. 4. Choose your desired **date and time** using the date picker. 5. Confirm your CMS publishing settings (if applicable). 6. Click **Confirm Schedule** to finalize. The article's status will change to **Scheduled** and it will appear on your calendar at the selected date. ## Schedule Options ### Date Picker The date picker lets you select any future date and time. Times are displayed in your local timezone and automatically converted for publishing. ### Publish Immediately If you don't want to wait, you can skip scheduling and publish right away by clicking **Publish Now** instead of Schedule. The article will be sent to your CMS immediately. ## CMS Publishing Settings When scheduling an article, Sight AI uses the CMS integration connected to your site. Make sure your CMS is properly connected before scheduling: * **WordPress** -- Articles are published as posts with the configured status. * **Webflow** -- Articles are added to your designated CMS collection. * **Other integrations** -- Articles are sent via webhook or the platform's API. If no CMS is connected, the article will be marked as Published internally but won't be sent anywhere externally. ## Viewing Scheduled Articles ### Calendar View Scheduled articles appear on their target date in the calendar. They're color-coded with the **Scheduled** status color so they're easy to spot. ### List View In the List view, filter by **Scheduled** status to see all upcoming articles. The list shows the scheduled date and time for each article. ## Modifying a Schedule ### Reschedule To change the date or time of a scheduled article: 1. Click the article in the Planner. 2. Click **Reschedule**. 3. Pick a new date and time. 4. Confirm the change. ### Cancel a Schedule To cancel a scheduled article and return it to Draft status: 1. Click the article in the Planner. 2. Click **Unschedule**. 3. The article reverts to **Draft** status and is removed from the calendar. ## What Happens at the Scheduled Time When the scheduled time arrives, Sight AI automatically processes the article: 1. **Preparation** -- The system retrieves the article content and metadata. 2. **CMS connection** -- Sight AI connects to your configured CMS integration. 3. **Publishing** -- The article is sent to your CMS and published. 4. **Indexing** -- If indexing is enabled, Sight AI submits the URL to search engines via IndexNow and Google Sitemap. 5. **Status update** -- The article status changes from Scheduled to **Published**. ## Considerations * **Timezone** -- All scheduled times use your local timezone as set in your account settings. * **CMS availability** -- If your CMS is unreachable at the scheduled time, Sight AI will retry automatically. * **AI credits** -- Scheduling an article does not consume additional credits. Credits were spent when the article was generated. ## Troubleshooting ### Article Didn't Publish at the Scheduled Time * Verify your CMS integration is still connected and credentials are valid. * Check that the CMS site is online and accessible. * Look for error messages in the article's detail view. * If the issue persists, try publishing manually and reconnecting your CMS. ### Article Published at the Wrong Time * Confirm your timezone is set correctly in your account settings. * Remember that times are displayed in your local timezone -- if you recently changed timezones, double-check your scheduled articles. ## Best Practices * **Schedule articles during peak traffic hours** for your audience to maximize engagement. * **Spread articles across the week** rather than publishing everything on one day. * **Review scheduled articles the day before** they go live to catch any last-minute edits. * **Keep your CMS integration healthy** -- periodically verify the connection to avoid publishing failures. * **Use the Calendar view** to visually balance your content schedule and avoid gaps. # Using the Content Planner Source: https://docs.trysight.ai/planner/using-planner Organize and manage your content calendar with the Planner. ## Overview The Content Planner is your central hub for organizing, scheduling, and tracking all of your articles in Sight AI. Whether you prefer a visual calendar or a sortable list, the Planner gives you full control over your content pipeline -- from draft to published. ## Accessing the Planner Navigate to **Planner** in the left sidebar of your dashboard. The Planner opens in the Calendar view by default. ## Autopilot Toggle The Planner includes an **Autopilot toggle** at the top of the page. Use this to turn Autopilot on or off for your site: * **Toggle on** -- Autopilot begins generating articles daily according to your configured schedule. * **Toggle off** -- Autopilot stops generating new articles. Your keyword queue and settings are preserved so you can resume at any time. For more details on Autopilot, see [How Autopilot Works](/autopilot/how-autopilot-works). ## Views ### Calendar View The Calendar view displays your articles in a **monthly layout**, giving you a visual overview of your content schedule at a glance. * **Color coding** -- Articles are color-coded by status so you can quickly identify drafts, scheduled posts, and published content. * **Drag and drop** -- Reschedule articles by dragging them to a new date on the calendar. * **Click to expand** -- Click any article to view its details, edit, or change its status. ### List View The List view displays your articles in a **table format** that's easy to sort, search, and filter. * **Sortable columns** -- Sort by title, status, date, keyword, or article type. * **Searchable** -- Use the search bar to quickly find articles by title or keyword. * **Bulk selection** -- Select multiple articles for bulk actions. ## Article Statuses Each article in the Planner has a status that reflects where it is in the content pipeline: | Status | Description | | -------------- | -------------------------------------------------------------------- | | **Draft** | Article has been generated and is ready for review or editing. | | **Generating** | Article is currently being created by the AI pipeline. | | **Ready** | Article has been reviewed and is ready to be scheduled or published. | | **Scheduled** | Article is set to publish at a specific date and time. | | **Published** | Article has been published to your connected CMS. | | **Failed** | Article generation encountered an error. You can retry or delete it. | ## Managing Articles ### View an Article Click any article in the Planner to open its detail view. From here you can read the full content, check SEO metadata, and see the article's history. ### Edit an Article Click an article and select **Edit** to open it in the content editor. You can modify the title, body, meta description, images, and more before publishing. ### Delete an Article Click an article and select **Delete** to permanently remove it. Deleted articles cannot be recovered, so make sure you no longer need the content before deleting. ## Bulk Actions Select multiple articles in the List view using the checkboxes, then use the bulk actions toolbar to: * **Delete** multiple articles at once * **Change status** for several articles simultaneously * **Reschedule** a batch of articles to new dates ## Filtering and Searching Use the filter and search tools at the top of the Planner to narrow down your view: * **Filter by status** -- Show only articles with a specific status (e.g., Draft, Scheduled). * **Filter by date range** -- Focus on a specific time period. * **Search by keyword** -- Find articles matching a keyword or topic. * **Filter by article type** -- Show only specific article types (e.g., Explainer, Listicle). ## Keyboard Shortcuts Speed up your workflow with these keyboard shortcuts: | Shortcut | Action | | -------- | ----------------------- | | **N** | Create a new article | | **/** | Focus the search bar | | **C** | Switch to Calendar view | | **L** | Switch to List view | ## Best Practices * **Review your Planner weekly** to stay on top of upcoming content and avoid gaps in your publishing schedule. * **Use statuses consistently** so your team knows exactly where each article stands. * **Schedule articles in advance** to maintain a steady content cadence without last-minute rushes. * **Leverage bulk actions** when managing large content libraries to save time. * **Combine filters** to quickly find the articles that need your attention most. # Managing Teams and Roles Source: https://docs.trysight.ai/teams/managing-teams Collaborate with team members and manage access to your Sight AI account. ## Overview Sight AI supports team collaboration so multiple people can work together on content, AI visibility, and site management. You can invite team members, assign roles, and control who has access to what. ## Team Structure When you create a Sight AI account, a **default team** is automatically created for you. You are assigned the **Owner** role, giving you full control over the team, its members, and billing. All sites, articles, and data belong to the team -- not individual users. This means every team member with the appropriate role can access shared resources. ## Roles ### Owner * Full control over the team, including billing, settings, and member management. * Can invite and remove members, change roles, and delete the team. * **Only one Owner per team.** Ownership can be transferred by contacting support. ### Admin * Can manage content, sites, and integrations. * Can invite new members and manage existing members (except the Owner). * **Cannot** access billing or subscription settings. ### Member * View-only access to articles, the Planner, and AI visibility data. * Cannot create, edit, or delete content. * Cannot manage team settings or invite others. ## Inviting Team Members 1. Go to **Settings** > **Team** in your dashboard. 2. Click **Invite Member**. 3. Enter the person's email address. 4. Select a role -- **Admin** or **Member**. 5. Click **Send Invitation**. The invited person will receive an email with a link to join your team. ## Accepting an Invitation When you receive a team invitation: 1. Click the **Accept Invitation** link in the email. 2. If you already have a Sight AI account, you'll be added to the team automatically. 3. If you don't have an account, you'll be prompted to create one before joining. ## Managing Team Members ### Change a Member's Role 1. Go to **Settings** > **Team**. 2. Find the member you want to update. 3. Click the role dropdown next to their name. 4. Select the new role. Role changes take effect immediately. ### Remove a Member 1. Go to **Settings** > **Team**. 2. Find the member you want to remove. 3. Click **Remove** next to their name. 4. Confirm the removal. Removed members immediately lose access to the team and all its data. ## Switching Teams If you belong to multiple teams, you can switch between them: 1. Click your **team name** in the top-left corner of the dashboard. 2. Select the team you want to switch to from the dropdown. Your dashboard updates to show the selected team's data, sites, and articles. ## Creating Additional Teams To create a new team: 1. Click your **team name** in the top-left corner. 2. Click **Create New Team**. 3. Enter a name for the team. 4. You'll be assigned as the Owner of the new team. Each team has its own subscription, sites, and AI credit pool. Teams are billed independently. ## Transferring Ownership If you need to transfer ownership of a team to another member, contact support at **[support@trysight.ai](mailto:support@trysight.ai)**. For security reasons, ownership transfers are handled manually by the Sight AI team. ## Team Settings From **Settings** > **Team**, you can: * **Rename your team** -- Update the team name displayed in the dashboard. * **View all members** -- See everyone on the team and their roles. * **Manage invitations** -- View pending invitations and resend or revoke them. ## Best Practices * **Use the fewest permissions necessary** -- Assign the Member role to people who only need to view content, and reserve Admin for those who actively manage it. * **Keep one Owner** -- Make sure the Owner role belongs to someone who manages billing and has ultimate responsibility for the account. * **Review members regularly** -- Remove team members who no longer need access to keep your account secure. * **Use separate teams for separate clients** -- If you manage content for multiple businesses, create a dedicated team for each one.