# Answer engine
Source: https://docs.pointer.so/ai/answer-engine
AI-powered answers that provide accurate, cited responses from your knowledge base.
## How it works
Pointer processes user questions through a sophisticated workflow designed to maximize accuracy and transparency:
Parses the question to understand what information is needed and what level of detail to provide in the response.
Uses graph-based connections to search through the knowledge base and find the most relevant documentation and content.
Creates an answer that matches the question's complexity — brief for simple questions, detailed for complex ones. Includes proper formatting and code samples where needed.
Adds numbered citations throughout the response that link directly to source documents. Citations include preview text on hover.
## Key features
Uses relationships between knowledge sources to find relevant information and reduce incorrect responses.
Formats responses with appropriate code blocks, lists, and structure based on the content.
Includes numbered citations that link to sources, with preview text on hover.
Adjusts response length and detail based on the complexity of the question.
## User experience
### Asking questions
Pointer handles a wide range of query types:
* Product feature explanations
* Technical implementation guidance
* Troubleshooting and support questions
* Company policies and procedures
* Integration and setup instructions
## Citation system
### Inline citation markers
Answers include numbered citation markers (e.g., \[1], \[2], \[3]) that link directly to the sources used to generate the answer. These markers appear throughout the response text wherever specific information is referenced.
### Hover details
When users hover over citation markers, they see detailed information about the source, including the source title and direct quote from the section that was used to generate the answer.
### Source listings
At the bottom of every answer, users can view:
* **Complete source list** with clickable links
* **Public knowledge base** sources only (internal sources remain private)
* **Direct access** to referenced documentation
Only public sources from your knowledge base are cited and linked in responses. Internal or private sources contribute to answer accuracy but maintain their privacy settings.
## Knowledge base integration
The effectiveness of Pointer's answer engine depends heavily on your [knowledge base](/knowledge/adding-sources) configuration:
### Source optimization
* **Comprehensive coverage**: Include detailed product documentation, FAQs, and support materials
* **Regular updates**: Keep sources current to ensure accurate responses
* **Clear structure**: Well-organized information improves retrieval accuracy
* **Public accessibility**: Mark appropriate sources as public for citation linking
The more comprehensive and well-structured your knowledge base, the more accurate and helpful your Answer Engine responses will be. Consider adding multiple perspectives on the same topics to improve coverage.
## Analytics and insights
Pointer provides detailed analytics to help you understand user needs and improve your knowledge base. For more information, see the [Analytics](/analytics/reports) section.
## Best practices
Ensure comprehensive coverage by including:
* Detailed product documentation with examples
* Frequently asked questions and answers
* Step-by-step implementation guides
* Troubleshooting procedures and solutions
* Company policies and support procedures
Organize content for optimal retrieval:
* Use clear, descriptive headings and sections
* Include relevant keywords and terminology
* Provide multiple examples for complex topics
* Cross-reference related information
* Keep information current and accurate
Regularly review analytics to:
* Identify frequently asked questions not covered in your knowledge base
* Update outdated information that may lead to incorrect responses
* Add new sources based on emerging user needs
* Optimize source structure based on citation patterns
* Address knowledge gaps revealed by unanswered queries
Ensure answer accuracy by:
* Regularly auditing and updating knowledge base sources
* Removing outdated or incorrect information
* Adding authoritative sources for technical topics
* Providing clear, unambiguous information
* Testing answer quality with common user questions
Answer quality depends on the comprehensiveness and accuracy of your knowledge base. Regularly review and update your sources to maintain optimal performance.
## Technical implementation
Pointer is easy to set up and requires minimal maintenance. For more information on getting started, view our [quickstart guide](/quickstart).
## Pricing
The answer engine feature is available on all plans. To learn more about pricing, see the [Pricing](/faqs/pricing) page.
# Copilot
Source: https://docs.pointer.so/ai/copilot
Deploy a second cursor to guide users through your app with interactive, AI-powered step-by-step guides.
## How it works
When users ask questions, Pointer analyzes them and provides step-by-step visual guidance:
When users ask questions related to navigation, feature usage, or task completion, Pointer's AI automatically identifies the intent and determines if a visual guide would be helpful.
By recognizing UI elements and leveraging your knowledge base, Pointer creates personalized step-by-step guides that match the user's question and current context.
A second cursor appears on screen, highlighting relevant elements and providing clear instructions for each step of the process.
## Key features
AI automatically identifies when users need visual guidance and generates appropriate step-by-step guides.
A second cursor moves to highlight relevant elements on the page, making it easy for users to follow along.
Each step provides clear, context-aware instructions based on your product's knowledge base.
Users can progress automatically through action detection or manually using navigation controls.
## User experience
### Starting a guide
When Copilot detects that a user's question would benefit from a visual guide:
1. **Question analysis**: The AI analyzes the user's question in the chat widget
2. **Guide preview**: The first step of the guide is presented to the user
3. **Activation**: A "Show me" button appears, allowing users to start the interactive walkthrough
### Following guide steps
Each guide step includes:
* **Visual cursor**: A second cursor that moves to highlight the relevant element
* **Step instructions**: Clear, contextual guidance for the current action
* **Progress controls**:
* **Auto-detection**: Pointer automatically detects when users complete actions
* **Manual navigation**: Right arrow button to advance manually
* **Exit option**: X icon to close the guide at any time
Users can seamlessly switch between automatic progression and manual control throughout the guide.
## Guide generation
Pointer creates intelligent guides by combining multiple data sources:
### UI analysis
* Real-time analysis of on-screen elements
* Element positioning and interaction capabilities
* Current page state and available actions
### Knowledge base
Pointer leverages your [knowledge base](/knowledge/adding-sources) to:
* Understand product-specific terminology and workflows
* Provide accurate, contextual instructions
* Ensure guides align with your product's intended user experience
The more comprehensive your knowledge base, the more accurate and helpful your guides will be. Consider adding detailed product documentation, user workflows, and common use cases.
## Analytics and insights
Pointer provides detailed analytics to help you understand user behavior and guide effectiveness. For more information, see the [Analytics](/analytics/reports) section.
## Best practices
Ensure your knowledge base includes:
* Detailed feature documentation
* Step-by-step workflows for common tasks
* Screenshots and visual references
* User role-specific instructions
Regularly review analytics to identify:
* High-performing guides that users complete successfully
* Common abandonment points that may need simplification
* Frequently requested topics that might benefit from proactive guidance
Use guide analytics alongside user feedback to:
* Identify confusing or ineffective guide steps
* Understand when users prefer automatic vs. manual progression
* Discover new use cases for guided experiences
* Continuously improve guide quality and user satisfaction
## Technical implementation
Pointer is easy to set up and requires minimal maintenance. For more information on getting started, view our [quickstart guide](/quickstart).
We use a combination of real-time UI understanding and your knowledge base to create guides.
We only analyze what's visible in the browser's DOM – we never access your source code or business logic.
To get a sense of what this means, just open up your browser's developer tools and look at the "Elements" tab (purely HTML and CSS).
## Pricing
The copilot feature is only available on our Growth and Enterprise plans. To learn more about pricing, see the [Pricing](/faqs/pricing) page.
# Reports
Source: https://docs.pointer.so/analytics/reports
Access analytics, user insights, and usage data to understand how users interact with Pointer.
## Reports overview
Track guide metrics and user feedback to measure effectiveness.
Analyze questions and responses to improve interactions.
Monitor user journeys and feature engagement.
## Guide analytics
### Performance metrics
Track information about guides created and how users interact with them.
#### Guide creation trends
View the number of guides created across different time periods:
* **Time-series graph**: You can view a visual representation of guide creation over the last 7 or 30 days.
* **Daily breakdown**: You can see peak usage periods and identify patterns in user needs.
* **Trend analysis**: You can understand whether guide usage is increasing or decreasing over time.
#### Guide effectiveness
Monitor how users interact with generated guides:
* **Average steps per guide**: You can track the complexity and depth of guides created for users.
* **Completion patterns**: You can understand how far users progress through multi-step guides.
* **User engagement**: You can analyze which types of guides generate the most user interaction.
### User feedback analysis
#### Feedback sentiment
A pie chart visualization showing the distribution of user feedback:
* **Positive feedback**: This shows the percentage of users who found guides helpful.
* **Negative feedback**: This highlights areas where guides may need improvement.
* **Feedback trends**: This displays how sentiment changes over time.
#### Time period selection
All guide analytics can be viewed for flexible time ranges:
* **Last 7 days**: This provides recent performance data and immediate trends.
* **Last 30 days**: This offers broader patterns and monthly insights.
Guide analytics help you understand which types of user questions generate the most effective guides and where you might need to improve your product and documentation.
## Frequently asked questions
### Question analysis
The dashboard automatically analyzes all user conversations to identify the most common inquiries:
#### Top 5 questions
View the most frequently asked questions across all user interactions:
* **Question ranking**: Questions are ordered by frequency of occurrence.
* **Auto-generated answers**: The system provides AI-powered responses based on your knowledge base.
* **Context awareness**: Questions are grouped by topic and user intent for better organization.
#### Question insights
Understand what users need most:
* **Knowledge gaps**: This identifies questions that frequently appear but lack comprehensive answers.
* **Topic clustering**: Related questions are grouped together for better understanding.
* **Trending topics**: This shows emerging questions that indicate new user needs.
### Using FAQ insights
Leverage frequently asked questions data to:
* **Improve knowledge base**: You can add missing content for commonly asked questions.
* **Optimize responses**: You can enhance existing answers based on user question patterns.
* **Content planning**: You can create targeted content addressing user needs.
* **Product development**: You can identify features or information users seek most.
## Conversation logs
### Comprehensive conversation history
Access detailed logs of every user interaction with Pointer:
#### Conversation metadata
Each conversation entry includes:
* **Date and time**: This shows when the conversation occurred.
* **Conversation title**: The system generates an auto-generated title based on the main topic.
* **Length**: This displays the number of messages exchanged.
* **Guide presence**: This indicates whether a Copilot guide was generated during the conversation.
* **User feedback**: This shows positive or negative sentiment from the user.
#### Expandable details
Click on any conversation to view:
* **Complete message log**: You can see the full conversation history between user and AI.
* **Guide details**: You can access the step-by-step breakdown of any guides created.
* **User context**: You can view information about the user who initiated the conversation.
* **Response quality**: You can see analysis of AI response effectiveness.
### Conversation management
#### Pagination options
Navigate through conversation logs efficiently:
* **Default view**: The system displays 10 conversations per page.
* **Extended views**: You can choose to display 25 or 50 conversations per page for faster browsing.
* **Chronological order**: The latest conversations appear first.
#### Filtering and search
Find specific conversations using:
* **Date ranges**: You can filter by specific time periods.
* **Feedback type**: You can show only positive or negative feedback conversations.
* **Guide presence**: You can filter conversations that included guide generation.
* **User segments**: You can view conversations from specific user groups.
Use conversation logs to identify patterns in user questions and improve your knowledge base content based on real user interactions.
## User tracking analytics
### Individual user insights
When [user tracking](/analytics/user-tracking) is enabled, view detailed information about each tracked user:
#### User profiles
Access comprehensive user information:
* **Basic information**: This includes name, email, avatar, and profile details.
* **Custom fields**: This covers plan type, company information, and other custom data.
* **Account status**: This shows user role, subscription level, and access permissions.
#### User activity
Track individual user engagement:
* **Conversation history**: You can view all conversations initiated by the specific user.
* **Recent events**: You can see the latest user actions and interactions.
* **Feature usage**: You can determine which Pointer features the user engages with most.
* **Session patterns**: You can analyze the frequency and duration of user sessions.
## Credit usage analytics
### Usage breakdown
Monitor your Pointer credit consumption with detailed analytics:
#### Daily usage graph
A comprehensive bar chart showing credit usage over time:
* **Time period**: This provides a daily breakdown of credit consumption.
* **Category split**: Each bar is divided into three colored sections:
* **Search credits**: These are used for knowledge base queries and information retrieval.
* **Embedding credits**: These are consumed during content processing and indexing.
* **Chat credits**: These are utilized for AI conversations and response generation.
#### Usage patterns
Identify trends in your credit consumption:
* **Peak usage days**: You can understand when users are most active.
* **Category distribution**: You can see which features consume the most credits.
* **Growth trends**: You can track how usage changes over time.
* **Budget planning**: You can forecast future credit needs based on historical data.
### Cost optimization
#### Usage insights
Optimize your credit allocation by understanding:
* **Feature efficiency**: You can determine which features provide the best ROI.
* **User patterns**: You can see how different user segments affect credit consumption.
* **Scaling impact**: You can understand how user growth affects overall credit usage.
* **Optimization opportunities**: You can identify areas where you might reduce unnecessary consumption.
Monitor credit usage regularly to avoid unexpected overages and ensure optimal performance during peak usage periods. You will be notified when you are approaching your credit limit.
# User tracking
Source: https://docs.pointer.so/analytics/user-tracking
Identify users, track interactions, and analyze behavior to deliver personalized experiences and insights.
# User tracking
User tracking enables you to identify users in your application, personalize their experiences, and gather detailed analytics about user behavior.
## How it works
Provide user data to Pointer when users authenticate, including a unique user ID and optional profile information.
Automatically track user interactions and optionally record custom events for deeper insights.
View detailed user analytics and behavior patterns in your Pointer dashboard.
## Key benefits
Maintain consistent user identity across sessions for seamless experiences and accurate analytics.
Create customized content and guidance based on user data and behavior patterns.
Monitor completion of onboarding flows, feature adoption, and user engagement over time.
Access comprehensive user insights and interaction data in your dashboard.
## Setting up user tracking
### Basic implementation
Provide user data to the `PointerProvider` when initializing:
```typescript
import { PointerProvider } from 'pointer-sdk';
function App() {
return (
{children}
);
}
```
At minimum, you must provide a `userId` to identify the user. Additional fields are optional but recommended for better personalization and analytics.
### Dynamic user management
For applications where user data changes during the session, use the `useUser` hook:
```typescript
import { useUser } from 'pointer-sdk';
function AuthenticatedApp() {
const { userData, setUserData, clearUserData } = useUser();
// Set user data after login
const handleLogin = (authState) => {
setUserData({
userId: authState.user.id,
name: authState.user.name,
email: authState.user.email,
customData: {
plan: authState.user.plan,
teamId: authState.user.teamId
}
});
};
// Clear user data on logout
const handleLogout = () => {
clearUserData();
};
return (
Welcome, {userData?.name}
);
}
```
## User data structure
### Required fields
A stable, unique identifier for the user from your authentication system.
### Optional fields
The user's full name for personalization and display purposes.
The user's email address for identification and communication.
URL to the user's profile picture or avatar image.
Any additional JSON-serializable data you want to associate with the user.
## Event tracking
Track custom events to understand how users interact with your application:
```typescript
import { useUser } from 'pointer-sdk';
function FeaturePage() {
const { trackEvent } = useUser();
const handleFeatureUsage = () => {
// Your feature logic here
// Track the event
trackEvent({
eventType: 'FEATURE_USAGE',
eventName: 'export_report',
metadata: {
reportType: 'analytics',
format: 'csv',
dataRange: '30_days'
}
});
};
return (
);
}
```
### Event structure
Category of the event (e.g., `FEATURE_USAGE`, `ACCOUNT_UPDATE`, `WORKFLOW_COMPLETION`)
Specific action or milestone (e.g., `export_report`, `subscription_changed`, `completed_setup`)
Optional additional context for the event, such as feature settings or workflow details
## Authentication integration
```typescript app/layout.tsx
import { PointerProvider } from 'pointer-sdk';
import { getSession } from '@/lib/auth';
export default async function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
const session = await getSession();
const userData = session?.user ? {
userId: session.user.id,
name: session.user.name,
email: session.user.email,
customData: {
plan: session.user.plan
}
} : undefined;
return (
{children}
);
}
```
```typescript
import { useAuth0 } from '@auth0/auth0-react';
import { useEffect } from 'react';
import { useUser } from 'pointer-sdk';
function Auth0Integration() {
const { user, isAuthenticated, isLoading } = useAuth0();
const { setUserData, clearUserData } = useUser();
useEffect(() => {
if (isLoading) return;
if (isAuthenticated && user) {
setUserData({
userId: user.sub,
name: user.name,
email: user.email,
avatarUrl: user.picture,
customData: {
emailVerified: user.email_verified
}
});
} else {
clearUserData();
}
}, [isAuthenticated, isLoading, user]);
return null;
}
```
```typescript
import { useEffect } from 'react';
import { useUser } from 'pointer-sdk';
import { onAuthStateChanged } from 'firebase/auth';
import { auth } from './firebaseConfig';
function FirebaseAuthIntegration() {
const { setUserData, clearUserData } = useUser();
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, (firebaseUser) => {
if (firebaseUser) {
setUserData({
userId: firebaseUser.uid,
name: firebaseUser.displayName || undefined,
email: firebaseUser.email || undefined,
avatarUrl: firebaseUser.photoURL || undefined,
customData: {
emailVerified: firebaseUser.emailVerified
}
});
} else {
clearUserData();
}
});
return () => unsubscribe();
}, []);
return null;
}
```
## Analytics and insights
User tracking data becomes available in your Pointer analytics dashboard, providing insights into:
* **User profiles**: Profile information, session history, and feature usage
* **Behavior patterns**: Flow completion rates, feature adoption, and engagement metrics
* **User segments**: Group users by plan type, company, or custom data
To view user analytics, go to the [Analytics](/analytics/reports) section.
## Data privacy and security
User data is automatically persisted in the browser's localStorage to maintain identity across sessions.
Avoid storing sensitive information in the user's customData field as it will be persisted to localStorage and could be accessible to client-side code.
## Best practices
* Use stable, persistent user IDs from your authentication system
* Never use email addresses as the primary userId
* Ensure the userId remains consistent across sessions and devices
* Focus on important user milestones and achievements
* Track feature adoption and usage patterns
* Include business metrics and conversion events
* Set user data immediately after successful login
* Clear user data during logout processes
* Handle session expiration and renewal
## Troubleshooting
### User data not appearing
If user tracking data isn't showing up in your analytics:
1. **Verify user ID**: Ensure you're providing a valid, non-empty `userId`
2. **Check authentication flow**: Confirm `setUserData` is called after successful login
3. **Review console errors**: Look for JavaScript errors that might prevent tracking
### Inconsistent user identification
When users appear as different entities in analytics:
1. **Check userId consistency**: Ensure the same ID is used across sessions
2. **Review authentication logic**: Verify user data is set correctly during login
3. **Clear localStorage**: Test with cleared browser storage to eliminate cached data
# Domains
Source: https://docs.pointer.so/customization/domains
Configure allowed domains to control where Pointer can be used.
## Overview
Pointer only works on domains you explicitly approve. This ensures your widget is used securely and only on your authorized websites.
## Domain configuration
### Accessing domain settings
Configure your allowed domains in the Pointer dashboard:
1. Navigate to [Settings](https://app.pointer.so/settings?tab=general) page on the Pointer dashboard
2. Locate the "Allowed origins" section
3. Add your domains to the approved list
### Security restrictions
Outside of local development environments, Pointer automatically blocks requests from domains that are not explicitly allowed. This security measure prevents:
* **Unauthorized usage**: Stops other websites from using your Pointer widget
* **Data protection**: Ensures your knowledge base and analytics remain secure
* **Resource control**: Prevents unexpected credit consumption from unauthorized domains
## Adding domains
### Domain format
When adding domains to your allowed list, include:
* **Production domains**: Your live website URLs (e.g., `yourdomain.com`)
* **Development domains**: Staging or testing environments (e.g., `staging.yourdomain.com`)
When you add a domain like `yourdomain.com`, all subdomains (such as `app.yourdomain.com`, `docs.yourdomain.com`, etc.) are automatically allowed. You don't need to add each subdomain separately.
### Protocol considerations
* **HTTPS domains**: Include your secure production domains
* **HTTP domains**: Only if necessary for development or specific use cases
* **Local development**: `localhost` and local IP addresses are automatically allowed during development
Local development environments (localhost, 127.0.0.1) are automatically allowed and don't need to be explicitly added to your domain list.
## Behavioral controls
Behavioral controls are available for users on the Growth plan and above.
### Disabling guides on specific domains
Growth plan users can selectively disable guides (second cursor walkthroughs) on any of their allowed origins. This provides fine-grained control over where interactive guidance appears.
**Common use case**: If you want to add Pointer to both your product and documentation site, you may only want guides to appear in your product interface, not on your documentation pages.
### Automatic guide disabling
Pointer automatically disables guides in the following scenarios:
* **Documentation subdomains**: Domains that start with `docs.` (e.g., `docs.yourdomain.com`)
* **Documentation paths**: URLs that contain `/docs` in the path (e.g., `yourdomain.com/docs/getting-started`)
### Manual configuration
For custom domain setups or specific requirements:
1. Navigate to the [Playground](https://app.pointer.so/playground)
2. Click the "Behavior" tab
3. Select domains you want to disable guides on
4. Save your changes
You can mix and match guide settings across different domains. For example, enable guides on `app.yourdomain.com` while keeping them disabled on `docs.yourdomain.com`. In the case above, we've disabled guides on `pointer.so` and `docs.pointer.so`, but left them enabled on `app.pointer.so`.
## Best practices
Add only the exact domains where you deploy Pointer:
* Include all production and staging environments
* Avoid using wildcards unless absolutely necessary
* Remove unused domains to maintain security
Verify domain settings work correctly:
* Test widget functionality on each allowed domain
* Check console for any security-related errors
* Confirm analytics tracking works properly
Keep your domain list current:
* Add new domains when deploying to additional environments
* Remove domains that are no longer in use
* Update domains when changing hosting providers
## Troubleshooting
### Widget not loading
If the Pointer widget fails to load on your website:
1. **Check domain list**: Ensure your domain is added to the allowed origins
2. **Verify URL format**: Confirm the domain matches your website's URL
3. **Clear cache**: Refresh your browser cache and try again
4. **Check console**: Look for CORS or security-related error messages
### Common issues
* **Protocol differences**: `http://` and `https://` versions may need separate entries
* **Trailing slashes**: Ensure domain format matches your actual URL structure
* **Completely different domains**: Only different root domains (like `example.com` vs `anotherdomain.com`) need separate entries
Always test widget functionality after adding or modifying domains in your allowed origins list.
# Styling
Source: https://docs.pointer.so/customization/styling
Customize your Pointer widget and command menu appearance using the visual playground editor with real-time preview.
The Pointer [playground](https://app.pointer.so/playground) provides a visual editor for customizing your widget and command menu appearance and behavior in real-time.
Choose between two distinct presentation styles:
* **Classic chat widget**: Traditional chat bubble design with standard positioning in the bottom corner
* **Command menu**: Modern, keyboard-driven interface with navigation categories and streamlined design
## Display section
### Content blocks
When using the widget interface, you can configure up to 5 content blocks:
#### Chat block (required)
* **Chat avatar**: Upload an avatar image
* **Title**: Display name for your AI assistant
* **Description**: Brief explanation of capabilities
#### External link block
* **Title**: Descriptive link text
* **URL**: Destination link
#### Featured item block
* **Title**: Headline for featured content
* **Description**: Announcement or information text
* **URL**: Link for more details
* **Image**: Visual element
#### Email block
* **Title**: Label for email action
* **Email address**: Target email for messages
In the playground, you can drag and drop blocks to reorder them as needed.
## Welcome section
### Conversation launch
* **Launch into conversation**: Toggle to automatically open chat view
* **Home view**: When disabled, shows blocks and options first
### Welcome messages
* **Heading**: Primary greeting message (e.g., "Hi there 👋")
* **Subheading**: Supporting text or call-to-action (e.g., "How can we help?")
### Try asking suggestions
Questions appear in the home view before entering chat:
* Include different types of inquiries
* Real-time character count indicators
* Tailor examples to your specific product or service
Sample questions help reduce user hesitation and demonstrate your AI assistant's capabilities.
## Triggers section
### Custom trigger toggle
* **Default behavior**: Widget appears with standard launcher button
* **Custom integration**: Hide default launcher and use your own trigger element
### Trigger ID setup
When custom triggers are enabled:
* Specify the ID of the HTML element that should trigger the widget
* Example: `pointer-trigger` or `help-button`
* Your development team adds this ID to the appropriate element
For more information on how to set up custom triggers, see the [custom triggers](/integrate/product#custom-triggers) section of the product integration guide.
Custom triggers are ideal for integrating Pointer into existing help sections or navigation menus.
## Design section
### Color customization
Configure colors for consistent branding:
#### Primary colors
* **Primary color**: Main brand color for buttons and key elements
* **Secondary color**: Supporting color for accents
* **Tertiary color**: Additional color for backgrounds
#### Interactive elements
* **Accent color**: Highlight color for special emphasis
* **Interactive color**: Color for clickable elements
* **Background color**: Main widget background
* **Border color**: Color for dividers and outlines
Colors update in real-time with HEX code display.
Your colors automatically adapt between light and dark themes. Learn more about customizing theme-specific elements in our [Themes guide](/customization/themes).
### Logo customization
* **File formats**: .png, .jpeg (max 2MB)
* **Placement**: Appears in widget header
* **Best practices**: Use high-resolution images with transparent backgrounds
### Launcher customization
Customize the floating chat button's appearance:
* **Background color**: Custom color for the launcher button
* **Icon selection**: Choose from `zap`, `question`, `chat`, `sparkles`, or standard Pointer icon
Test color and icon choices across different devices to ensure accessibility and visibility.
## Display section
### Content structure
When using the command menu interface, organize your help content into sections and action items:
#### Sections
Organize your navigation into logical categories:
* **Section names**: Custom labels like "Quick actions", "Navigation", or "Resources"
* **Multiple sections**: Create as many sections as needed for your help structure
#### Action items
Each section contains individual action items:
* **Item titles**: Clear, descriptive names for each action
* **Icons**: Visual indicators using the [Lucide](https://lucide.dev/) icon library
* **Destinations**: Links to pages in your product or external resources
## Welcome section
### Search functionality
* **Search placeholder**: Default is "Search or ask..."
* **AI integration**: "Ask AI" functionality with accent color highlighting
Full search functionality across your application and resources will be available soon.
### Navigation experience
* **Category organization**: Structure your help content logically
* **Quick access**: Users can navigate with arrow keys and Enter selection
* **Search integration**: Seamless transition from search to AI assistance
### Try asking suggestions
Questions appear in the home view when startin a new conversation:
* Include different types of inquiries
* Real-time character count indicators
* Tailor examples to your specific product or service
Sample questions help reduce user hesitation and demonstrate your AI assistant's capabilities.
## Triggers section
### Keyboard shortcuts
* **Primary shortcut**: `⌘K` (macOS) / `Ctrl+K` (Windows/Linux)
* **Global access**: Works from anywhere when SDK is initialized
### Custom trigger toggle
* **Default behavior**: Widget appears with standard launcher button
* **Custom integration**: Hide default launcher and use your own trigger element
### Trigger ID setup
When custom triggers are enabled:
* Specify the ID of the HTML element that should trigger the widget
* Example: `pointer-trigger` or `help-button`
* Your development team adds this ID to the appropriate element
For more information on how to set up custom triggers, see the [custom triggers](/integrate/product#custom-triggers) section of the product integration guide.
Custom triggers are ideal for integrating Pointer into existing help sections or navigation menus.
## Design section
### Color customization
Configure colors for consistent branding:
#### Primary colors
* **Primary color**: Main brand color for buttons and key elements
* **Secondary color**: Supporting color for accents
* **Tertiary color**: Additional color for backgrounds
#### Interactive elements
* **Accent color**: Highlight color for special emphasis
* **Interactive color**: Color for clickable elements
* **Background color**: Main widget background
* **Border color**: Color for dividers and outlines
Colors update in real-time with HEX code display.
Your colors automatically adapt between light and dark themes. Learn more about customizing theme-specific elements in our [Themes guide](/customization/themes).
## Real-time preview
The playground provides instant feedback:
* **Interface switching**: Toggle between home and chat views
* **Keyboard simulation**: Preview keyboard navigation behavior
* **Category management**: Real-time preview of navigation structure changes
* **Icon testing**: Immediate feedback on icon selections
* **Responsive preview**: Check appearance on different screen sizes
* **Theme testing**: Preview in both light and dark modes
## Advanced configuration
### Navigation behavior
* **Router integration**: Automatic detection of React Router, Next.js, and other navigation systems
* **External links**: Automatic handling of external URLs (opens in new tab)
* **Email links**: Direct mailto: handling for contact items
### Keyboard navigation
* **Arrow key navigation**: Move through menu items
* **Enter selection**: Activate highlighted items
* **Escape handling**: Close menu or return to previous view
* **Tab management**: Proper focus handling within modal
### Performance optimization
* **Icon caching**: Efficient loading and caching of icons
* **Lazy loading**: Components load on demand
* **State persistence**: User preferences and session data saved locally
## Best practices
* **Command menu**: Ideal for power users, developer-focused products, and streamlined navigation
* **User context**: Consider your audience's technical comfort level
* **Integration**: Choose based on existing UI patterns in your application
* **Logical grouping**: Organize navigation items into intuitive categories
* **Clear naming**: Use descriptive, action-oriented labels
* **Icon consistency**: Choose icons that clearly represent their functions
* **Manageable categories**: Aim for 3-6 categories with 3-8 items each
* **Color harmony**: Use existing brand colors
* **Typography**: Match your application's design language
* **Icon style**: Maintain consistent icon weight and style
* **Testing**: Validate appearance on your actual site
* **Accessibility**: Ensure high-contrast colors for readability
* **Keyboard users**: Test command menu keyboard navigation thoroughly
* **Welcome content**: Write clear, helpful welcome messages
* **User testing**: Gather feedback from real users
* **Keyboard shortcuts**: Test that ⌘K doesn't conflict with existing shortcuts
* **Custom triggers**: Verify trigger elements work correctly
* **Domain configuration**: Ensure proper setup across all environments
* **Performance**: Optimize images and test loading times
* **Documentation**: Document customizations and navigation structure for your team
# Themes
Source: https://docs.pointer.so/customization/themes
Customize Pointer's appearance across light and dark modes.
Pointer automatically adapts between light and dark modes based on user system preferences. You can customize colors, logos, and images for both themes in the [Playground](https://app.pointer.so/playground) page of the dashboard.
## What you'll customize
Brand colors that automatically adapt to light and dark themes.
Upload separate logo variants optimized for each theme.
Theme-specific images for featured content blocks.
## Color customization
Configure your brand colors in the Design section of the playground. All colors automatically adapt between light and dark modes.
### Available colors
* **Primary color**: Main brand color for buttons and key elements
* **Secondary color**: Supporting text and secondary elements
* **Tertiary color**: Background elements and subtle accents
* **Accent color**: Special emphasis and highlights
* **Interactive color**: Buttons, links, and clickable elements
* **Background color**: Main widget background
* **Border color**: Dividers and structural elements
Colors update in real-time with HEX code display. Use the theme toggle to preview both light and dark modes.
## Logo variants
Upload separate logo assets optimized for each theme to ensure optimal visibility.
Logo and featured image theming are specifically for the widget view, not the command menu view.
### Setup process
1. **Light mode logo**: Upload your primary logo (works on light backgrounds)
2. **Dark mode logo**: Upload a light-colored variant (works on dark backgrounds)
3. **Test visibility**: Use the theme toggle to verify both logos display correctly
4. **Auto-fallback**: If no dark variant is provided, the light logo is used
**Supported formats**: .png, .jpeg (max 2MB)
## Featured image theming
Featured content blocks support theme-specific images for optimal contrast in both modes.
### Configuration
1. **Standard images**: Upload your default featured item images
2. **Dark variants**: Optionally add theme-specific images for dark mode
3. **Preview testing**: Toggle themes to verify image visibility and contrast
4. **Fallback behavior**: Light mode images are used if dark variants aren't provided
Providing dark mode variants ensures optimal contrast and visual consistency across all themes.
## Theme behavior
### Automatic detection
* Respects user's system theme preferences
* Updates automatically when users change their device theme
* No page reload required for theme changes
### Manual preview
* Toggle between light and dark modes in the playground
* Test your customizations in both themes before publishing
* Preview syncs with your dashboard theme by default
## Best practices
* Create high-contrast versions for each theme
* Use transparent backgrounds when possible
* Test logos at different sizes to ensure readability
* Maintain brand consistency across both themes
* Choose colors based on function, not just appearance
* Test combinations in both light and dark contexts
* Ensure sufficient contrast ratios for accessibility
* Maintain brand identity while optimizing for each theme
* Provide theme-specific variants when possible
* Ensure text in images remains readable in both themes
* Use appropriate color schemes for each theme
* Test images across different devices and screen sizes
## Troubleshooting
### Assets not switching themes
* Verify dark mode assets are uploaded correctly
* Clear browser cache and refresh
* Check file formats (.png, .jpeg supported)
* Ensure files are under 2MB
### Color contrast issues
* Use browser developer tools to check contrast ratios
* Test with users who have visual accessibility needs
* Consider high contrast mode compatibility
Always test your themed widget in both light and dark modes before publishing to ensure optimal user experience.
# Get in touch
Source: https://docs.pointer.so/faqs/contact-us
Learn about all the ways you can contact us.
The best way to get in touch with us is by email at [team@pointer.so](mailto:team@pointer.so).
As a paying customer, you'll have access to a private Slack channel where you can ask questions and get help.
# Features
Source: https://docs.pointer.so/faqs/features
Your questions about Pointer's features, answered. Still need help? Contact us.
Pointer can ingest a wide variety of content sources including:
* Documentation websites and help centers
* PDF documents and files
* Markdown and text files
* FAQ databases
* Knowledge base articles
* API documentation
* Product guides and tutorials
We also support custom integrations for specialized content sources. [Contact us](mailto:team@pointer.so) to discuss your specific content needs.
Currently, Pointer focuses on text-based content for optimal AI processing and response generation. While we can reference and mention images in context, the AI responses are text-based.
For multimedia content integration, [reach out to our team](mailto:team@pointer.so) to discuss custom solutions for your use case.
Pointer is not open source and operates as a managed enterprise service. This approach allows us to provide:
* Enterprise-grade security and compliance
* Continuous AI model improvements
* Dedicated support and maintenance
* Scalable infrastructure
All hosting and maintenance is handled by our team. [Contact us](mailto:team@pointer.so) if you have specific deployment requirements.
Pointer integrates with a wide range of platforms including:
* Documentation platforms (GitBook, Mintlify, etc.)
* Help desk systems (Zendesk, Intercom, Help Scout, etc.)
* CMS platforms (WordPress, Webflow, Drupal, etc.)
* Knowledge bases (Guru, Document360, Helpjuice, etc.)
* Custom APIs and databases
We also provide REST APIs for custom integrations. [Contact us](mailto:team@pointer.so) to discuss your integration needs.
Yes, Pointer can be configured to:
* Qualify leads through conversational AI
* Capture end-user information when needed
* Track user engagement and common questions
These features are part of our enterprise solutions. [Reach out](mailto:team@pointer.so) to learn more about lead generation capabilities.
Pointer takes data privacy and security seriously. You can learn more about our security offerings [here](https://pointer.so/security).
[Contact us](mailto:team@pointer.so) for detailed security documentation and compliance information.
# Pricing
Source: https://docs.pointer.so/faqs/pricing
Your questions about pricing, answered. Still need help? Contact us.
Not yet. We work closely with every customer to make sure Pointer is set up the right way. [Book a demo](https://cal.com/nealchopra/demo) so we can tailor a solution to your product and workflow.
We offer three plans:
* Pro – \$150/month
* Growth – \$500/month
* Enterprise – Custom pricing for high scale, security needs, and advanced support
Each plan has a different credit limit:
* Pro – 450 credits
* Growth – 1500 credits
* Enterprise – Custom
Credits are calculated as follows:
* 1 credit = 1 message
* 3 credits = 1 guide (usually 3–4 steps)
On the Growth plan, you can mix and match how you use credits across answers and guides.
To calculate which plan is right for you, take your monthly support ticket volume and multiply by 5. This gives you a rough estimate of how many credits you’ll need.
You’ll be able to purchase additional credits as needed. Overages are charged at 2–3x the base rate per request.
Yes — we offer a 14-day free trial for all new accounts.
Billing is based on projects. Each project is billed independently, which works well if you have multiple products or environments using Pointer.
Pointer branding stays visible on Pro and Growth plans. If you need a white-labeled experience, we offer that as an add-on to Enterprise plans.
You can change your plan anytime. Changes take effect at the end of your current billing period.
# Troubleshooting
Source: https://docs.pointer.so/faqs/troubleshooting
Common issues and solutions for Pointer integration. Still need help? Contact us.
If the Pointer widget isn't appearing, check the following:
**1. Verify your project ID**
* Ensure you're using the correct project ID from your [Pointer dashboard](https://app.pointer.so)
* Check that there are no typos in the project ID
**2. Check script placement**
* Make sure the script is placed in the `` section or before the closing `` tag
* Verify the script URL is correct: `https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js`
**3. Check browser console for errors**
* Open Developer Tools (F12) and look for JavaScript errors
* Common errors include CORS issues or blocked scripts
**4. Verify allowed origins**
* Check your [project settings](https://app.pointer.so/settings?tab=general) and ensure your domain is in the allowed origins list
If none of these steps resolve the issue, [contact our support team](mailto:team@pointer.so) with your project ID and website URL.
Pointer is designed to have minimal impact on your website's performance:
**Performance optimizations:**
* The widget loads asynchronously and doesn't block page rendering
* Initial script size is optimized and compressed
* Additional resources are lazy-loaded only when the widget is activated
* CDN delivery ensures fast loading times globally
**Best practices:**
* Use the `async` attribute when adding the script tag
* Place the script near the end of your `` tag if performance is critical
* Consider conditional loading for specific pages if needed
If you're experiencing performance issues, [contact us](mailto:team@pointer.so) and we can help optimize the integration for your specific needs.
If the widget loads but isn't functioning properly:
**1. Check your knowledge base**
* Ensure you've uploaded content to your [knowledge sources](https://app.pointer.so/knowledge)
* Verify that your content has been processed (this can take a few minutes)
**2. Test with simple questions**
* Try asking basic questions related to your uploaded content
* Check if the AI responds with "I don't know" or no response at all
**3. Review your project settings**
* Verify your project is active and properly configured
* Check if there are any API key or authentication issues
**4. Browser compatibility**
* Test in different browsers (Chrome, Firefox, Safari, Edge)
* Disable browser extensions that might interfere with JavaScript
If the issue persists, [contact our support team](mailto:team@pointer.so) with details about the questions you're testing and your project configuration.
If you've set up a custom trigger button but it's not opening the widget:
**1. Verify trigger configuration**
* Check that the trigger ID in your [playground settings](https://app.pointer.so/playground) matches your button's ID exactly
* Ensure "Set custom trigger" is enabled in your project settings
**2. Check button implementation**
* Verify your button has the correct `id` attribute
* Make sure the button is present in the DOM when the script loads
**3. Script parameter**
* Ensure your script includes the `triggerId` parameter:
```html
```
**4. JavaScript conflicts**
* Check for JavaScript errors that might prevent event handlers from attaching
* Test if other click events on your page are working
Need help with custom triggers? [Contact us](mailto:team@pointer.so) for assistance.
If the Pointer widget is conflicting with your website's styling:
**1. CSS specificity issues**
* Check if your site's CSS is overriding widget styles
* Use browser Developer Tools to inspect style conflicts
**2. Z-index problems**
* The widget uses a high z-index value to appear above other content
* If it's appearing behind other elements, you may need to adjust your site's z-index values
**3. Mobile responsiveness**
* Test the widget on different screen sizes
* Check if it's properly positioned on mobile devices
**4. Brand customization**
* Pointer offers extensive customization options in enterprise plans
* We can match your brand colors, fonts, and overall design
For styling conflicts or customization needs, [reach out to our team](mailto:team@pointer.so) for solutions.
If you're not seeing analytics data in your dashboard:
**1. Wait for data processing**
* Analytics data may take up to 24 hours to appear
* Ensure you've had actual user interactions with the widget
**2. Check integration tracking**
* Verify the widget is properly loaded and functioning
* Test a few questions yourself to generate initial data
**3. Review data collection settings**
* Ensure analytics tracking is enabled in your project settings
* Check if privacy settings are affecting data collection
**4. Time zone and date range**
* Verify you're looking at the correct date range in analytics
* Check if time zone settings are correct
If analytics issues persist, [contact our support team](mailto:team@pointer.so) for assistance with data tracking.
Platform-specific troubleshooting tips:
**WordPress:**
* Ensure your theme allows custom scripts in the header
* Check if security plugins are blocking external scripts
* Try using a plugin like "Head & Footer Code" if direct editing isn't working
**Shopify:**
* Make sure you're editing the correct theme file (`theme.liquid`)
* Check theme permissions and backup before making changes
* Some Shopify apps may interfere with custom scripts
**Single Page Applications (SPAs):**
* The widget may need to be reinitialized on route changes
* Consider implementing the widget reload for dynamic content
For platform-specific integration help, [contact us](mailto:team@pointer.so) with details about your platform and any error messages you're seeing.
To properly test your Pointer integration:
**1. Use staging environment**
* Test on a staging or development version of your site first
* Add your staging domain to allowed origins in project settings
**2. Browser testing**
* Test in multiple browsers and devices
* Check both desktop and mobile experiences
**3. Functionality testing**
* Ask various types of questions to test AI responses
* Test custom triggers and interactive elements
* Verify analytics tracking is working
# Docs
Source: https://docs.pointer.so/integrate/docs
Add Pointer's answer engine to your documentation site.
## What you'll get
When you integrate Pointer into your documentation site, your users will have access to:
* **Answer engine**: instant answers to user questions based on your documentation content and knowledge base
## Prerequisites
* A documentation website (any framework: Mintlify, GitBook, Docusaurus, VitePress, etc.)
* Access to edit your site's HTML or add custom scripts
* A [Pointer project](https://app.pointer.so) with your project ID
## Installation
Perfect for any documentation site where you can add custom HTML/JavaScript.
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project or select an existing one
3. Copy your project ID from the setup section
Add the Pointer script to your documentation site. The exact location depends on your platform:
```html
```
1. Go to your GitBook space settings
2. Navigate to "Integrations" → "Custom Scripts"
3. Add the script in the "Head" section:
```html
```
Add the script to your `docusaurus.config.js` file:
```javascript docusaurus.config.js
module.exports = {
// ... other config
scripts: [
{
src: 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id',
async: true,
},
],
};
```
Add the script to your `.vitepress/config.js` file:
```javascript .vitepress/config.js
export default {
head: [
[
'script',
{
src: 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id',
async: true
}
]
]
}
```
Add the script to your `next.config.js` file:
```javascript next.config.js
const withNextra = require('nextra')({
theme: 'nextra-theme-docs',
themeConfig: './theme.config.tsx',
})
module.exports = withNextra({
// ... other config
async headers() {
return [
{
source: '/(.*)',
headers: [
{
key: 'X-Frame-Options',
value: 'DENY',
},
],
},
]
},
// Add script via Head component in _app.tsx instead
})
```
Then in your `pages/_app.tsx`:
```typescript pages/_app.tsx
import Head from 'next/head'
export default function App({ Component, pageProps }) {
return (
<>
>
)
}
```
This integration requires a ReadMe Business plan or higher, as it relies on custom HTML.
1. Navigate to **Appearance** in your project settings
2. Open the **Custom Include Tags** tab
3. Add the script to the **HEAD HTML** section:
```html
```
4. Press **Save** to apply your changes
Create a `pointer-widget.tsx` client component in your Fumadocs project:
```typescript pointer-widget.tsx
"use client";
import { useEffect } from "react";
export function PointerWidget() {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}, []);
return null;
}
```
Then import it in the `` of your root `layout.tsx` file:
```typescript layout.tsx
import { PointerWidget } from "@/app/pointer-widget";
import { RootProvider } from "fumadocs-ui/provider";
import "fumadocs-ui/style.css";
import { Inter } from "next/font/google";
import type { ReactNode } from "react";
const inter = Inter({
subsets: ["latin"],
});
export default function Layout({ children }: { children: ReactNode }) {
return (
{children}
);
}
```
1. Navigate to the `.vuepress` directory
2. Add the script to your `config.js` file:
```javascript config.js
export default {
head: [
[
"script",
{
src: "https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id",
async: true,
defer: true,
},
],
],
};
```
Reload your documentation site and look for the Pointer widget in the bottom-right corner. You can test the connection in your [project settings](https://app.pointer.so/settings?tab=setup).
For better organization and caching, you can create a separate JavaScript file.
Create a new file called `pointer.js` in your documentation site's static assets folder:
```javascript pointer.js
// Load Pointer SDK
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
})();
```
Add a reference to your `pointer.js` file in your documentation site:
```html
```
Or for specific platforms:
For Mintlify, simply place the `pointer.js` file in the root of your docs directory.
```javascript docusaurus.config.js
module.exports = {
scripts: ['/pointer.js'],
};
```
1. Open the `docs.yml` file used to configure Fern
2. Add the script to the `js` section:
```yaml docs.yml
js:
- path: ./pointer.js
strategy: lazyOnload
```
3. Create a `pointer.js` file at the root of your documentation repo with the content from Step 1 above.
Deploy your changes and verify the Pointer widget appears on your documentation site.
## Best practices
### Allowed origins
Always configure allowed origins in your [project settings](https://app.pointer.so/settings?tab=general) to prevent unauthorized use of your project ID.
### Performance
* Pointer automatically lazy loads to minimize impact on your documentation site's load time
* Consider loading the script asynchronously to avoid blocking page rendering
* The widget only loads when needed, keeping your docs fast
### Content optimization
* Pointer works best when it has access to your documentation content
* Add your documentation as a [knowledge source](https://app.pointer.so/knowledge) to improve answer quality
* Consider adding FAQ content and troubleshooting guides to your knowledge base
## Advanced configuration
### Custom triggers
If you want the Pointer widget to appear on a specific button instead of the default floating widget:
1. On the [playground page](https://app.pointer.so/playground), toggle "Set custom trigger" to true and set the trigger ID.
2. Create your custom trigger button in your documentation:
```html
```
3. Update your script to include the trigger ID:
```javascript pointer.js
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id&triggerId=help-button';
script.async = true;
document.head.appendChild(script);
})();
```
### Conditional loading
Load Pointer only on specific pages or for certain users:
```javascript
// Only load on documentation pages
if (window.location.pathname.startsWith('/docs/')) {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}
```
### Environment-specific loading
```javascript pointer.js
// Only load in production
if (window.location.hostname !== 'localhost' && window.location.hostname !== '127.0.0.1') {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}
```
## Next steps
After successfully integrating Pointer into your documentation:
Upload your documentation content, FAQ, and troubleshooting guides in the [knowledge section](https://app.pointer.so/knowledge) to train your AI assistant.
Use the [playground](https://app.pointer.so/playground) to customize your widget's appearance and responses to match your documentation style.
Track how users interact with your AI assistant in the [analytics dashboard](https://app.pointer.so/analytics) to identify knowledge gaps.
Based on user questions, continuously improve your documentation and knowledge base to provide better answers.
# Help center
Source: https://docs.pointer.so/integrate/help-center
Add Pointer's answer engine to your help center or support portal.
## What you'll get
When you integrate Pointer into your help center, your users will have access to:
* **Answer engine**: instant answers to user questions based on your support documentation and knowledge base
## Prerequisites
* A help center or support portal (Zendesk Guide, Help Scout Docs, etc.)
* Access to edit custom HTML/JavaScript in your help center
* A [Pointer project](https://app.pointer.so) with your project ID
## Installation
Perfect for any help center platform where you can add custom HTML/JavaScript.
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project or select an existing one
3. Copy your project ID from the setup section
Add the Pointer script to your help center. The exact location depends on your platform:
```html
```
1. Click **Zendesk Products** in the top bar, then select **Guide**
2. Navigate to **Guide Admin**
3. Click **Customize** on the theme you want to edit
4. Click **Edit code** to open the theme code editor
5. In the **templates** section, find the `document_head.hbs` file
6. Add the script tag:
```html
```
7. Click **Publish** to save your changes
1. Click the **Manage** dropdown in the top bar, then select **Docs**
2. Select the knowledge base you want to add the widget to
3. Click **Custom Code** in the left sidebar
4. In the **Insert `` Code** section, add the script:
```html
```
5. Click **Save** to apply your changes
1. Go to **Admin** → **Portals** → **Portal Customization**
2. Click **Layout & Pages** → **Portal Pages**
3. Select **Header** or **Footer** section
4. Add the script tag in the custom HTML section:
```html
```
5. Click **Save** and **Publish**
1. Go to **Settings** → **Messenger** → **Messenger settings**
2. Navigate to **Custom attributes** → **Company data**
3. Add a custom script in your website header that loads on article pages:
```html
```
For Intercom Articles, you may need to add the script to your main website and conditionally load it on help center pages.
Visit your help center and look for the Pointer widget in the bottom-right corner. You can test the connection in your [project settings](https://app.pointer.so/settings?tab=setup).
For better organization and caching, you can create a separate JavaScript file.
Create a new file called `pointer.js` and upload it to your help center's assets:
```javascript pointer.js
// Load Pointer SDK
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
})();
```
Add a reference to your `pointer.js` file in your help center:
```html
```
1. Upload `pointer.js` to your theme assets
2. Reference it in `document_head.hbs`:
```html
```
1. Upload the file to your website's static assets
2. Reference it in the Custom Code section:
```html
```
Deploy your changes and verify the Pointer widget appears on your help center.
## Best practices
### Allowed origins
Always configure allowed origins in your [project settings](https://app.pointer.so/settings?tab=general) to prevent unauthorized use of your project ID.
### Performance
* Pointer automatically lazy loads to minimize impact on your help center's load time
* Consider loading the script asynchronously to avoid blocking page rendering
* The widget only loads when needed, keeping your help center fast
### Content optimization
* Pointer works best when it has access to your support documentation
* Add your help center articles as a [knowledge source](https://app.pointer.so/knowledge) to improve answer quality
* Include FAQ content, troubleshooting guides, and common solutions in your knowledge base
### User experience
* Position the widget where users naturally look for help
* Consider the widget as a complement to your existing search functionality
* Monitor common questions to identify content gaps in your help center
## Advanced configuration
### Custom triggers
If you want the Pointer widget to appear on a specific button instead of the default floating widget:
1. On the [playground page](https://app.pointer.so/playground), toggle "Set custom trigger" to true and set the trigger ID.
2. Create your custom trigger button in your help center:
```html
```
3. Update your script to include the trigger ID:
```javascript pointer.js
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id&triggerId=ai-help-button';
script.async = true;
document.head.appendChild(script);
})();
```
### Conditional loading
Load Pointer only on specific help center sections:
```javascript
// Only load on article pages
if (window.location.pathname.includes('/articles/') || window.location.pathname.includes('/hc/')) {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}
```
### Integration with existing support tools
```javascript
// Load Pointer but hide if other support tools are active
(function() {
// Check if other support widgets are present
const hasIntercom = window.Intercom !== undefined;
const hasZendesk = window.zE !== undefined;
if (!hasIntercom && !hasZendesk) {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}
})();
```
## Next steps
After successfully integrating Pointer into your help center:
Upload your help articles, FAQs, and troubleshooting guides in the [knowledge section](https://app.pointer.so/knowledge) to train your AI assistant.
Use the [playground](https://app.pointer.so/playground) to customize your widget's appearance and responses to match your help center's branding.
Track how users interact with your AI assistant in the [analytics dashboard](https://app.pointer.so/analytics) to identify common questions and content gaps.
Based on user questions, continuously improve your help content and consider automating responses to frequently asked questions.
# Product
Source: https://docs.pointer.so/integrate/product
Add Pointer's copilot and answer engine to your application.
## What you'll get
When you integrate Pointer into your product, your users will have access to:
* **AI copilot**: an intelligent assistant that can help users navigate your app, understand features, and complete tasks
* **Answer engine**: instant answers to user questions based on your product documentation and knowledge base
## Prerequisites
* A web application (any framework or vanilla JavaScript)
* Node.js 16.0+ (for React/npm-based projects)
* A [Pointer project](https://app.pointer.so) with your project ID
## Installation
Perfect for React and React-based frameworks (e.g. Next.js, Remix, Vite, etc.).
```bash npm
npm install pointer-sdk
```
```bash pnpm
pnpm add pointer-sdk
```
```bash yarn
yarn add pointer-sdk
```
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project or select an existing one
3. Copy your project ID from the setup section
Wrap your application with the `PointerProvider` component. Place it as high as possible in your component tree.
```typescript
import { PointerProvider } from 'pointer-sdk';
function App() {
return (
);
}
```
```typescript app/layout.tsx
import { PointerProvider } from "pointer-sdk";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
{children}
);
}
```
```typescript pages/_app.tsx
import { PointerProvider } from "pointer-sdk";
import type { AppProps } from "next/app";
export default function App({ Component, pageProps }: AppProps) {
return (
);
}
```
```typescript app/root.tsx
import { PointerProvider } from "pointer-sdk";
export default function App() {
return (
);
}
```
```typescript src/main.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { PointerProvider } from 'pointer-sdk';
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(
);
```
Start your development server and look for the Pointer widget in the bottom-right corner of your application. You can test the connection in your [project settings](https://app.pointer.so/settings?tab=setup).
If you want to enable Pointer's [command menu](/customization/styling#command-menu) you must pass your router to the `PointerProvider`. View more [below](#router-setup-for-command-menu).
Perfect for any non-React application (e.g. Vue, Angular, Svelte, etc.).
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project or select an existing one
3. Copy your project ID from the setup section
Add the Pointer script to your HTML file, ideally right before the closing `` tag:
```html index.html
```
Add the script to your `public/index.html` file:
```html public/index.html
Vue App
```
Add the script to your `src/index.html` file:
```html src/index.html
Angular App
```
Add the script to your `app.html` file:
```html app.html
Svelte App
%sveltekit.body%
```
Reload your application and look for the Pointer widget in the bottom-right corner. You can test the connection in your [project settings](https://app.pointer.so/settings?tab=setup).
## Best practices
### Allowed origins
Always configure allowed origins in your [project settings](https://app.pointer.so/settings?tab=general) to prevent unauthorized use of your project ID.
### Performance
* Pointer automatically lazy loads to minimize impact on your app's initial load time.
* Place the `PointerProvider` as close as possible to the components that need it, but high enough to cover your entire app.
### User experience
* Pointer works best when it has context about your app. Consider adding [knowledge sources](https://app.pointer.so/knowledge) to help the AI understand your product.
* Use the [playground](https://app.pointer.so/playground) to customize the widget's appearance to match your brand.
## Advanced configuration
### Conditional loading
You might want to load Pointer only in production or for specific user segments:
```typescript
function App() {
const shouldLoadPointer = process.env.NODE_ENV === 'production';
if (shouldLoadPointer) {
return (
);
}
return ;
}
```
### Custom triggers
If you want the Pointer widget to appear on a specific button, follow these steps:
1. On the [playground page](https://app.pointer.so/playground), toggle "Set custom trigger" to true and set the trigger ID.
2. In your code, set the `triggerId` in the `PointerProvider` component.
3. In your app, add a button with the ID of the trigger ID.
```typescript
import { PointerProvider } from 'pointer-sdk';
// In your root file
function App() {
return (
);
}
// In your app
function HelpButton() {
return (
);
}
```
The Pointer widget will not be visible by default, but will appear when the button is clicked.
### Router setup for command menu
If you want to use Pointer's command menu view to allow users to navigate through your application, you need to pass a router instance to enable smooth navigation.
```typescript
"use client";
import { useRouter } from "next/navigation";
import { PointerProvider } from "pointer-sdk";
export default function Layout({ children }: { children: React.ReactNode }) {
const router = useRouter();
return (
{children}
);
}
```
```typescript
import { useRouter } from "next/router";
import { PointerProvider } from "pointer-sdk";
export default function App({ Component, pageProps }) {
const router = useRouter();
return (
);
}
```
```typescript
import { useNavigate } from "react-router-dom";
import { PointerProvider } from "pointer-sdk";
function App() {
const navigate = useNavigate();
return (
);
}
```
## Next steps
After successfully integrating Pointer into your product:
Upload your product documentation, help articles, and other relevant content in the [knowledge section](https://app.pointer.so/knowledge) to train your AI assistant.
Use the [playground](https://app.pointer.so/playground) to customize your widget's appearance, behavior, and responses to match your brand and user needs.
Monitor how users interact with your AI assistant in the [analytics dashboard](https://app.pointer.so/analytics) to identify common questions and improve your knowledge base.
Invite team members and set up appropriate permissions in your [team settings](https://app.pointer.so/team) to collaborate on your AI assistant.
# Website
Source: https://docs.pointer.so/integrate/website
Add Pointer's answer engine to your marketing website with JavaScript.
## What you'll get
When you integrate Pointer into your marketing website, your visitors will have access to:
* **Answer engine**: instant answers to visitor questions based on your company knowledge and content
## Prerequisites
* A marketing website (Code-based, Webflow, WordPress, Framer, etc.)
* Access to edit custom HTML/JavaScript on your website
* A [Pointer project](https://app.pointer.so) with your project ID
## Installation
Perfect for any website platform where you can add custom HTML/JavaScript.
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project or select an existing one
3. Copy your project ID from the setup section
Add the Pointer script to your website. The exact location depends on your platform:
```html
```
1. Navigate to **Site settings** (not the designer)
2. Open the **Custom code** tab
3. Add the script to the **Head code** section:
```html
```
4. Press **Save** to apply your settings
5. Publish your site to make the changes live
1. Open **Site Settings** in the drop-down menu
2. Click on the **Open Settings** tab
3. Go to the **General** section
4. Scroll to the **Custom Code** section
5. Add the script to the **Start of `` tag** section:
```html
```
5. Click **Save** to apply your changes
This method requires installing a plugin to add custom code.
1. Open WordPress admin panel
2. Select the **Plugins** tab
3. Open the **Add New Plugin** section
4. Install the **Head & Footer Code** plugin
5. Under the **Tools** tab, open **Head & Footer Code**
6. Add the script to the **HEAD Code** section:
```html
```
7. Click **Save Changes**
1. In the **Home** menu, click **Settings**
2. Click **Advanced**, then click **Code Injection**
3. Add the script to the **Header** section:
```html
```
4. Click **Save**
1. Go to **Settings** in your site dashboard
2. Click **Custom Code** under **Advanced**
3. Click **+ Add Custom Code**
4. Paste the script and set it to load on **All Pages** in the **Head**:
```html
```
5. Click **Apply**
1. Go to **Online Store** → **Themes**
2. Click **Actions** → **Edit code**
3. Open `theme.liquid` in the **Layout** folder
4. Add the script before the closing `` tag:
```html
```
5. Click **Save**
1. Go to **Settings** → **Code injection**
2. Add the script to the **Site Header** section:
```html
```
3. Click **Save**
Add the script to your `gatsby-config.js` file:
```javascript gatsby-config.js
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-html-head',
options: {
scripts: [
{
src: 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id',
async: true
}
]
}
}
]
}
```
Or add it directly to your HTML template.
Visit your website and look for the Pointer widget in the bottom-right corner. You can test the connection in your [project settings](https://app.pointer.so/settings?tab=setup).
For better organization and caching, you can create a separate JavaScript file.
Create a new file called `pointer.js` and upload it to your website's assets:
```javascript pointer.js
// Load Pointer SDK
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
})();
```
Add a reference to your `pointer.js` file in your website:
```html
```
1. Upload `pointer.js` to your Webflow assets
2. Reference it in the Custom Code → Head section:
```html
```
1. Upload the file to your website's `/wp-content/themes/your-theme/js/` directory
2. Reference it in your theme's header or via the Head & Footer Code plugin:
```html
```
Deploy your changes and verify the Pointer widget appears on your website.
For websites using Google Tag Manager for script management.
1. Go to your Google Tag Manager workspace
2. Click **Tags** → **New**
3. Choose **Custom HTML** as the tag type
In the HTML section, add:
```html
```
1. Set the trigger to **All Pages** or specific pages where you want Pointer to appear
2. Save the tag with a descriptive name like "Pointer AI Assistant"
3. Submit and publish your GTM container
Visit your website and verify the Pointer widget appears. Use GTM Preview mode to test before publishing.
## Best practices
### Allowed origins
Always configure allowed origins in your [project settings](https://app.pointer.so/settings?tab=general) to prevent unauthorized use of your project ID.
### Performance
* Pointer automatically lazy loads to minimize impact on your website's load time
* Consider loading the script asynchronously to avoid blocking page rendering
* The widget only loads when needed, keeping your site fast
### Content optimization
* Pointer works best when it has access to your company knowledge
* Add your website content, FAQs, and product information as [knowledge sources](https://app.pointer.so/knowledge)
* Include pricing information, feature descriptions, and common sales questions
### User experience
* Position the widget where visitors naturally look for help
* Consider the customer journey and where AI assistance would be most valuable
* Monitor conversations to identify common questions and improve your content
### Conversion optimization
* Use Pointer to qualify leads and route them to appropriate sales channels
* Provide instant answers to common pre-purchase questions
* Track which questions lead to conversions in your analytics
## Advanced configuration
### Custom triggers
If you want the Pointer widget to appear on a specific button instead of the default floating widget:
1. On the [playground page](https://app.pointer.so/playground), toggle "Set custom trigger" to true and set the trigger ID.
2. Create your custom trigger button on your website:
```html
```
3. Update your script to include the trigger ID:
```javascript pointer.js
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id&triggerId=ask-ai-button';
script.async = true;
document.head.appendChild(script);
})();
```
### Conditional loading
Load Pointer only on specific pages or for certain visitors:
```javascript
// Only load on product and pricing pages
if (window.location.pathname.includes('/products/') ||
window.location.pathname.includes('/pricing')) {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
document.head.appendChild(script);
}
```
### A/B testing integration
```javascript
// Load different configurations based on A/B test variants
(function() {
const isVariantB = Math.random() < 0.5; // Your A/B testing logic
const projectId = isVariantB ? 'pt_proj_variant-b-id' : 'pt_proj_variant-a-id';
const script = document.createElement('script');
script.src = `https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=${projectId}`;
script.async = true;
document.head.appendChild(script);
})();
```
### Lead tracking integration
```javascript
// Example integration with marketing analytics
(function() {
const script = document.createElement('script');
script.src = 'https://cdn.pointer.so/pointer-sdk@latest/pointer.browser.js?projectId=pt_proj_your-project-id';
script.async = true;
// Track when Pointer loads for analytics
script.onload = function() {
if (typeof gtag !== 'undefined') {
gtag('event', 'pointer_loaded', {
'event_category': 'ai_assistant',
'event_label': 'widget_ready'
});
}
};
document.head.appendChild(script);
})();
```
## Next steps
After successfully integrating Pointer into your website:
Upload your website content, product documentation, and sales materials in the [knowledge section](https://app.pointer.so/knowledge) to train your AI assistant.
Use the [playground](https://app.pointer.so/playground) to customize your widget's appearance, messaging, and behavior to match your brand and conversion goals.
Track how visitors interact with your AI assistant in the [analytics dashboard](https://app.pointer.so/analytics) to identify opportunities for optimization.
Based on visitor questions and behavior, continuously improve your content and consider adding conversion-focused prompts to guide visitors toward desired actions.
# Introduction
Source: https://docs.pointer.so/introduction
Get started with Pointer and turn support into a growth engine. Reduce tickets, lower churn, and guide users to their “aha” moment.
Documentation
Get started with Pointer and turn support into a growth
engine. Reduce tickets, lower churn, and guide users to their "aha" moment.
Get started with Pointer in your app, docs, and more — in just a few minutes.
Deploy a second cursor to your app to guide users through your app.
Add AI to your docs or help center to answer user questions.
Add your company's knowledge to power Pointer's AI answers.
# Adding sources
Source: https://docs.pointer.so/knowledge/adding-sources
Add rules, files, and web links to give Pointer additional context about your product.
The knowledge base allows Pointer to better understand your product and provide accurate, contextual responses to user questions. If you do not have robust documentation, you can still use Pointer, but your responses might be less accurate.
## Knowledge source types
Pointer supports three distinct types of knowledge sources, each optimized for different use cases:
Always-active guidelines that influence every AI response, perfect for company policies and key instructions.
Upload any text-based document to add detailed product information, documentation, and reference materials.
Automatically scrape and maintain web content, keeping your knowledge base current with live documentation.
## Rules
Rules are high-priority knowledge elements. They're perfect for establishing consistent guidelines, company policies, and important context that should **always** be considered.
### Creating rules
To create a rule:
1. Visit the [Pointer dashboard](https://app.pointer.so)
2. Navigate to the [Knowledge](https://app.pointer.so/knowledge) page
3. Click the **Add rule** button
4. Enter the rule title and content
5. Click the **Save** button
### Rules overview
Rules consist of two components:
* **Title**: A descriptive name that identifies the rule's purpose
* **Content**: The rule text, which must be between 30 and 5,000 characters
### When to use rules
Rules are ideal for:
* **Company policies** that affect all customer interactions
* **Product guidelines** that should always be referenced
* **Brand voice** and communication standards
* **Critical warnings** or important notices
* **Foundational concepts** that apply across your entire product
Keep rules focused and specific. Since they're included in every query, well-crafted rules significantly improve response quality while poorly written ones can introduce confusion.
### Rule prioritization
When multiple rules are relevant to a query, Pointer automatically prioritizes the most applicable ones based on:
* **Contextual relevance** to the user's specific question
* **Query intent** and the type of response needed
* **Content specificity** and how directly the rule addresses the topic
## Files
Files are perfect for detailed documentation, manuals, guides, and reference materials.
### Creating files
To create a file:
1. Visit the [Pointer dashboard](https://app.pointer.so)
2. Navigate to the [Knowledge](https://app.pointer.so/knowledge) page
3. Click the **Add file** button
### Supported file formats
You can upload various text-based file formats including:
* **Markdown files** (.md, .mdx)
* **Text documents** (.txt)
* **Documentation files** (.rst, .asciidoc)
* **Rich text files** (.rtf)
* **Other text-based formats**
### Best practices for files
Organize files with clear headings and sections. This helps Pointer understand the content and answer questions more accurately.
Ensure files contain complete feature explanations, step-by-step procedures, common use cases and examples, troubleshooting information, and related context and background.
Keep files current by regularly reviewing content for accuracy and updating files when features change.
Because files are not publicly available, Pointer will not able to directly cite them in responses (but can still use them to answer questions).
## Links
Add URLs to automatically scrape and maintain live content in your knowledge base. Links keep your information current without manual updates.
### Adding links
To add a link to your knowledge base:
1. Visit the [Pointer dashboard](https://app.pointer.so)
2. Navigate to the [Knowledge](https://app.pointer.so/knowledge) page
3. Click the **Add link** button
4. Enter the complete URL you want to scrape
5. Click the **Save** button
### Manual re-scraping
Click the **refresh icon** next to any link to manually re-scrape its content and update your knowledge base with the latest information. Although we automatically re-scrape links weekly, this is an additional way to ensure your knowledge base is up to date.
### Related link discovery
Click the **magnifying glass icon** to discover related links. Pointer analyzes the current link and finds related pages. For example, if you add a link to your website (e.g., [https://pointer.so](https://pointer.so)), it will find related pages (e.g., [https://pointer.so/pricing](https://pointer.so/pricing)).
### Link best practices
Choose links to official documentation, company info, technical specs, troubleshooting guides, and policies.
Use the discovery feature to find related pages and ensure you're capturing all relevant information.
Regularly check that links remain accessible and active. If a link is broken, Pointer will not be able to scrape it.
## Access permissions
Knowledge base management requires appropriate permissions:
### Admin access required
Only **admins** of your Pointer project can manage knowledge sources (including adding, removing, and updating sources).
### Why admin-only access
This restriction ensures that only trusted team members can manage knowledge sources.
Ensure your team has designated admin members who can maintain the knowledge base. Without admin access, team members cannot add or modify knowledge sources.
## Optimizing your knowledge base
### Comprehensive coverage
Create a robust knowledge base by combining all source types. This includes:
* **Rules**: For company policies and key instructions
* **Files**: For detailed documentation, manuals, guides, and reference materials
* **Links**: For live content and up-to-date information
Make sure to include information that addresses frequent user inquiries and provides multiple perspectives.
### Maintaining quality
Ensure high-quality responses by:
* **Regular content audits**: Review and update sources periodically
* **Removing outdated information**: Delete or update obsolete content
* **Testing AI responses**: Ask common questions to verify answer quality
* **Monitoring analytics**: Use [analytics](/analytics/reports) to identify knowledge gaps
# Crawler
Source: https://docs.pointer.so/knowledge/crawler
Automatically analyze your product with the Pointer CLI to build comprehensive knowledge.
The Pointer Crawler enables you to automatically gather and analyze content from your product, creating a comprehensive knowledge base for AI-powered features.
## Prerequisites
* Node.js version 16 or higher
* Access to [Pointer dashboard](https://app.pointer.so)
## Installation
Install the Pointer CLI globally using npm:
```bash
npm install -g pointer-cli
```
Verify the installation:
```bash
pointer --version
```
## Authentication
### Create an API key
Go to your [Keys settings](https://app.pointer.so/settings?tab=keys) in the Pointer dashboard.
Click **Create new key** and provide:
* **Name**: Descriptive identifier (e.g., "CLI Production")
* **Description**: Optional context about key usage
* **Expiration**: Optional expiry date (defaults to never expire)
Save the generated key immediately - it won't be shown again. Keys follow the format:
```
pt_sec_*****************************************
```
### Configure authentication
Set your secret key using one of these methods:
```bash
export POINTER_SECRET_KEY="pt_sec_your_key_here"
```
```bash
pointer init --secret-key pt_sec_your_key_here
```
Environment variables are recommended for security. Command-line options may expose keys in shell history.
## Core workflow
### Step 1: Initialize your website
Start by adding your website to the crawler configuration:
```bash
pointer init
```
The interactive prompt will guide you through:
1. Entering a friendly name for identification
2. Providing your website URL
3. Confirming the configuration
### Step 2: Scrape your content
Begin the automated content collection:
```bash
pointer scrape
```
Choose from interactive options:
* **Scraping mode**: Headless (fast) or Browser (with authentication)
* **Crawl depth**: Fast (surface content) or Deep (interactive elements)
* **PII protection**: Configure sensitivity and redaction settings
The CLI saves your progress automatically. If interrupted, it will offer to resume from where it left off.
### Step 3: Upload for analysis
Send your scraped content to Pointer for processing:
```bash
pointer upload
```
The CLI will:
1. Display a summary of collected data
2. Confirm the upload scope
3. Transfer content to your knowledge base
## Command reference
### Primary commands
| Command | Description | Authentication |
| ----------------- | ---------------------------------------- | -------------- |
| `pointer init` | Add a website to crawl | Required |
| `pointer scrape` | Collect content from configured websites | Required |
| `pointer upload` | Transfer scraped data to Pointer | Required |
| `pointer status` | Check crawl processing status | Required |
| `pointer list` | View local scraped data | Not required |
| `pointer cleanup` | Remove all local data | Not required |
| `pointer purge` | Delete server-side crawl data | Required |
### Global options
Available for all commands:
| Option | Description |
| ------------------------ | ----------------------------------------------- |
| `-s, --secret-key ` | API secret key (overrides environment variable) |
| `-v, --version` | Display CLI version |
| `--help` | Show command help |
### Scraping options
Configure `pointer scrape` behavior:
| Option | Description | Default |
| --------------------------- | ------------------------------------- | ---------------------- |
| `--max-pages ` | Maximum pages to crawl | 200 |
| `--concurrency ` | Parallel page processing | 2 |
| `--fast` | Use fast crawl mode | Interactive prompt |
| `--no-pii-protection` | Disable PII detection | PII protection enabled |
| `--pii-sensitivity ` | Set detection level (low/medium/high) | Interactive prompt |
| `--log-level ` | Logging verbosity | info |
## Best practices
Run commands without options for guided workflows:
```bash
pointer init # Interactive website setup
pointer scrape # Guided crawling configuration
pointer upload # Selection-based upload
```
The CLI provides clear prompts and smart defaults for all operations.
* Store API keys in environment variables
* Never commit keys to version control
* Set expiration dates for temporary access
* Use browser mode only when authentication is required
* Enable PII protection for user-facing applications
* Monitor crawl status before uploading
* Review scraped content with `pointer list` before uploading
* Use `pointer cleanup` to remove local data after successful uploads
* Keep crawl sessions organized with descriptive website names
## Automation examples
While the CLI is designed for interactive use, automation is supported for CI/CD pipelines:
```bash
# Automated crawling with predetermined settings
pointer scrape --max-pages 100 --concurrency 5 --fast --no-pii-protection
# Direct status check for specific crawl
pointer status --crawl-id abc123 --pages
# Skip confirmations for scripted cleanup
pointer purge --crawl-id abc123 --force
```
Use automation options carefully. Interactive mode provides safety confirmations and validation that prevent common errors.
## Troubleshooting
### Authentication errors
If you encounter authentication issues:
1. Verify your API key is valid in the [dashboard](https://app.pointer.so/settings?tab=keys)
2. Check environment variable is set correctly: `echo $POINTER_SECRET_KEY`
3. Ensure the key hasn't expired
4. Confirm you have necessary permissions
### Crawling interruptions
The crawler automatically saves progress. If interrupted:
```bash
pointer scrape
# Will prompt: "Resume from where it left off?"
```
### Upload limitations
* Maximum 500 pages per upload (API limit)
* Large crawls are automatically truncated
* Use `--max-pages` to control crawl size upfront
## Next steps
After successfully crawling and uploading your content:
1. View your enriched knowledge base in the [Knowledge section](https://app.pointer.so/knowledge)
2. Configure [AI features](/ai/answer-engine) to leverage the collected data
3. Monitor [analytics](/analytics/reports) to understand content usage
4. Set up regular crawls to keep knowledge current
# Updating content
Source: https://docs.pointer.so/knowledge/updating-content
Maintain, optimize, and manage your knowledge base to ensure best performance.
Maintaining an up-to-date knowledge base ensures that Pointer provides accurate, reliable information.
## Updating different source types
Each knowledge source type requires different maintenance approaches.
### Rules
Rules affect all AI responses and require careful consideration when updating.
#### When to update rules
Update rules when company policies or procedures change, core product functionality evolves significantly, communication standards or brand voice updates, or new warnings or important notices need to be added.
#### How to update rules
1. **Review existing rules** for accuracy and relevance
2. **Edit rule content** while maintaining the 30-5,000 character limit
3. **Update rule titles** to reflect current purpose
4. **Test changes** by asking questions that should trigger the updated rules
When updating rules, consider the impact on all AI responses. Test thoroughly to ensure changes improve rather than confuse the overall user experience.
### Files
Files are the easiest source type to update and should be refreshed regularly.
#### File replacement process
1. **Prepare updated content** with current information
2. **Upload new file** with the same or updated filename
3. **Delete outdated files** that are no longer relevant
#### File maintenance schedule
Review files weekly, update after feature releases, conduct quarterly reviews, and update when significant changes occur.
### Links
Links are automatically re-scraped weekly. You should monitor link health regularly, verify scraped content accuracy, and remove broken or irrelevant links.
#### Manual re-scraping
Click the **refresh icon** next to any link to manually re-scrape its content and update your knowledge base with the latest information. Although we automatically re-scrape links weekly, this is an additional way to ensure your knowledge base is up to date.
#### Related link discovery
Click the **magnifying glass icon** to discover related links. Pointer analyzes the current link and finds related pages. For example, if you add a link to your website (e.g., [https://pointer.so](https://pointer.so)), it will find related pages (e.g., [https://pointer.so/pricing](https://pointer.so/pricing)).
## Optimizing content
Identify gaps where users ask follow-up questions frequently, AI responses lack sufficient detail, important background information is missing, or related concepts need better explanation. You can use [analytics](/analytics/reports) to identify these gaps.
Remove or consolidate duplicate information across sources, conflicting instructions or guidelines, outdated content that contradicts current information, and unnecessary complexity in explanations.
Make content more actionable by adding step-by-step procedures, including specific examples and use cases, providing exact specifications and requirements, and clarifying ambiguous statements.
Ensure consistency by using current product terminology, maintaining consistent naming conventions, updating deprecated terms or features, and aligning with brand voice guidelines.
## Best practices
### Establish update workflows
Assign team members to maintain specific content areas, establish regular update schedules, track changes, and test updates to ensure quality.
### Quality assurance
Verify accuracy of new content through fact-checking, ensure consistency with existing information, test AI responses, and maintain backups of critical content.
Always test knowledge base changes before deploying to users. Incorrect information can significantly impact user experience and trust.
# Quickstart
Source: https://docs.pointer.so/quickstart
Get started with Pointer in under 5 minutes.
## Add to your site
Pointer can be added to different types of products. Choose the guide that best matches what you're building:
Add Pointer's copilot and answer engine to your application.
Add Pointer's answer engine to your documentation site.
Add Pointer's answer engine to your help center or support portal.
Add Pointer's answer engine to your marketing website with JavaScript.
## Quick setup
If you want to get started quickly with the basic setup before diving into specific integrations:
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project
3. Copy your project ID from the setup section
```bash
npm install pointer-sdk
```
```typescript
import { PointerProvider } from 'pointer-sdk';
function App() {
return (
);
}
```
1. Login to the [Pointer dashboard](https://app.pointer.so)
2. Create a new project
3. Copy your project ID from the setup section
```html
```
For detailed, step-by-step instructions specific to your use case, follow one of the integration guides above. They include framework-specific examples, best practices, and troubleshooting tips.
## Next steps
After choosing and following your specific integration guide:
1. Configure allowed origins in your [project settings](https://app.pointer.so/settings?tab=general) for security
2. Customize your widget in the [playground](https://app.pointer.so/playground)
3. Add knowledge sources to in the [knowledge section](https://app.pointer.so/knowledge)
4. Test the integration on the [setup page](https://app.pointer.so/settings?tab=setup)