<a href="https://llmrefs.com/ai-seo-api">![llmrefs-js](https://raw.githubusercontent.com/LLMrefs/llmrefs-js/HEAD/assets/llmrefs-readme.png)</a>

<div align="center">
  <h1>llmrefs</h1>
  <a href="https://www.npmjs.com/package/llmrefs"><img src="https://img.shields.io/npm/v/llmrefs.svg?style=flat&color=brightgreen" target="_blank" /></a>
  <a href="https://github.com/LLMrefs/llmrefs-js/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-black" /></a>
  <a href="https://llmrefs.com/"><img src="https://img.shields.io/badge/maintainer-LLMrefs-F59E0B" /></a>
  <br />
  <hr />
</div>

#### `llmrefs` is maintained by [LLMrefs](https://llmrefs.com/) - AI SEO brand visibility & LLM rank tracker.

---

## **✅ Open source AI search analytics & LLM visibility Javascript SDK**

---

- Track your brand's visibility across AI search engines (LLMs)
- Monitor keyword rankings and share of voice
- Analyze AI-generated responses and brand mentions
- Get detailed analytics for AI SEO performance
- Full TypeScript support with detailed type definitions

## Installation

```bash
npm install llmrefs
```

## Quick Start

```typescript
import { LLMrefs } from 'llmrefs';

// Initialize the client
const llmrefs = new LLMrefs({
  apiKey: 'your_api_key', // or set LLMREFS_API_KEY env variable
});

// List organizations
const organizations = await llmrefs.organizations.list();

// List projects for an organization
const projects = await llmrefs.projects.list({
  organizationId: 'org-123',
});

// List keywords for a project
const keywords = await llmrefs.keywords.list({
  projectId: 'proj-456',
  organizationId: 'org-123',
});

// Get detailed keyword analytics
const keywordData = await llmrefs.keywords.get({
  keywordId: 'kw-789',
  projectId: 'proj-456',
  organizationId: 'org-123',
});
```

## API Reference

### Authentication

Sign up for a free API key at 👉 [llmrefs.com/signup](https://llmrefs.com/signup).

You can provide your API key in two ways:

**1. Pass it when initializing the client:**

```typescript
const llmrefs = new LLMrefs({ apiKey: 'your_api_key' });
```

**2. Set it as an environment variable:**

```bash
export LLMREFS_API_KEY=your_api_key

const llmrefs = new LLMrefs(); // Will use LLMREFS_API_KEY env variable
```

### Listing Organizations

Get all organizations you have access to:

```typescript
const organizations = await llmrefs.organizations.list();

console.log(organizations);
// => [
//   { id: 'org-1', name: 'My Organization' },
//   { id: 'org-2', name: 'Another Organization' },
//   ...
// ]
```

### Listing Projects

Get all projects for a specific organization:

```typescript
const projects = await llmrefs.projects.list({
  organizationId: 'org-123',
});

console.log(projects);
// => [
//   { id: 'proj-1', name: 'My Project', domain: 'example.com' },
//   { id: 'proj-2', name: 'Another Project', domain: 'test.com' },
//   ...
// ]
```

### Listing Keywords

Get all active keywords for a project:

```typescript
const keywords = await llmrefs.keywords.list({
  organizationId: 'org-123',
  projectId: 'proj-456',
});

console.log(keywords);
// => [
//   {
//     id: 'kw-1',
//     value: 'artificial intelligence',
//     location: 'US',
//     searchVolume: 10000
//   },
//   ...
// ]
```

### Listing Search Engines

Get all available AI search engines (LLMs) tracked by LLMrefs:

```typescript
const searchEngines = await llmrefs.keywords.searchEngines();

console.log(searchEngines);
// => [
//   { value: 'openai_chatgpt', name: 'OpenAI ChatGPT' },
//   { value: 'google_ai_mode', name: 'Google AI Mode' },
//   ...
// ]
```

### Listing Locations

Get all available locations tracked by LLMrefs:

```typescript
const locations = await llmrefs.keywords.locations();

console.log(locations);
// => [
//   { value: 'united_states', name: 'United States' },
//   { value: 'united_kingdom', name: 'United Kingdom' },
//   ...
// ]
```

### Getting Keyword Analytics

Get detailed AI SEO analytics for a specific keyword:

```typescript
const keywordData = await llmrefs.keywords.get({
  keywordId: 'kw-789',
  organizationId: 'org-123',
  projectId: 'proj-456',
  filters: {
    searchEngines: ['openai_chatgpt', 'google_ai_mode'], // Optional: filter by specific AI search engines
  },
});

console.log(keywordData);
// => {
//   id: 'kw-789',
//   value: 'artificial intelligence',
//   location: 'US',
//   searchVolume: 10000,
//   rankings: [
//     {
//       rank: 1,
//       brandId: 'brand-1',
//       shareOfVoice: '50%',
//       averagePosition: '1.5',
//       sources: ['source1', 'source2']
//     },
//     ...
//   ],
//   sources: [
//     {
//       source: 'source1',
//       mentionRate: '30%',
//       averagePosition: '2.0',
//       brandIds: ['brand-1']
//     },
//     ...
//   ],
//   responses: [
//     {
//       prompt: 'What is artificial intelligence?',
//       searchEngine: 'openai_chatgpt',
//       text: 'AI response text...',
//       brandsIds: ['brand-1'],
//       sources: ['source1']
//     },
//     ...
//   ],
//   brands: [
//     { id: 'brand-1', name: 'My Brand', domain: 'mybrand.com' },
//     ...
//   ]
// }
```

## Features in Detail

### AI Search Analytics

- Track your brand's visibility across multiple AI search engines (LLMs)
- Monitor keyword rankings and share of voice metrics
- Analyze how AI models respond to prompts surrounding your keywords topics
- View search volume for keywords across AI search engines
- Get insights into brand mentions and positioning

### Keyword Tracking

- Monitor keyword performance across different AI platforms
- Track rankings, average positions, and share of voice
- Filter results by specific AI search engines
- Access historical and real-time analytics data

## Error Handling

The SDK throws descriptive errors for invalid API keys, failed requests, and API errors:

```typescript
try {
  const organizations = await llmrefs.organizations.list({});
} catch (error) {
  console.error('Error listing organizations:', error.message);
}
```

## TypeScript Support

The SDK is written in TypeScript and provides comprehensive type definitions:

```typescript
import {
  LLMrefs,
  LLMrefsOptions,
  ListOrganizationsOptions,
  ListProjectsOptions,
  ListKeywordsOptions,
  GetKeywordOptions,
} from 'llmrefs';

// All options are fully typed
const options: GetKeywordOptions = {
  keywordId: 'kw-789',
  projectId: 'proj-456',
  organizationId: 'org-123',
};
```

## Types

### LLMrefsOptions

| Property | Type     | Description          | Required                     |
| -------- | -------- | -------------------- | ---------------------------- |
| `apiKey` | `string` | Your LLMrefs API key | `false` (if set via env var) |

### ListOrganizationsOptions

No properties required. Pass an empty object `{}`.

### ListProjectsOptions

| Property         | Type     | Description     | Required |
| ---------------- | -------- | --------------- | -------- |
| `organizationId` | `string` | Organization ID | `true`   |

### ListKeywordsOptions

| Property         | Type     | Description     | Required |
| ---------------- | -------- | --------------- | -------- |
| `organizationId` | `string` | Organization ID | `true`   |
| `projectId`      | `string` | Project ID      | `true`   |

### GetKeywordOptions

| Property                | Type       | Description                       | Required |
| ----------------------- | ---------- | --------------------------------- | -------- |
| `keywordId`             | `string`   | Keyword ID                        | `true`   |
| `organizationId`        | `string`   | Organization ID                   | `true`   |
| `projectId`             | `string`   | Project ID                        | `true`   |
| `filters`               | `object`   | Optional filters                  | `false`  |
| `filters.searchEngines` | `string[]` | Filter by AI search engine values | `false`  |

## License

Distributed under the MIT License. See LICENSE for more information.

## Links

If you need support please contact us at 👉 [hello@llmrefs.com](mailto:hello@llmrefs.com)

- [LLMrefs Website](https://llmrefs.com/)
- [API Documentation](https://llmrefs.com/ai-seo-api)
- [OpenAPI Schema](https://llmrefs.com/api/openapi.json)

---

Built by [LLMrefs](https://llmrefs.com/) with ❤️, AI search analytics.
