Skip to main content

Projects

A project is the top-level container for AI Visibility monitoring. Each project has a primary brand, a set of AI providers, and a schedule that controls automatic prompt execution.

List projects

Retrieve all AI Visibility projects for an account. Results include metadata like topic and prompt counts, configured AI providers, and the primary brand domain.

Operation: query GetAiVisibilityProjects($accountId: ObjectID!) { getAiVisibilityProjects( accountId: $accountId first: 10 ) { nodes { id rawId name totalTopics totalPrompts aiProviderTypes primaryBrandDomain primaryBrandRawId scheduleCadence nextScheduleRunAt autoCrawlEnabled freshnessThresholdDays createdAt updatedAt } pageInfo { hasNextPage endCursor } totalCount } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ" }
GetAiVisibilityProjectsTry in Explorer
GraphQL
query GetAiVisibilityProjects($accountId: ObjectID!) {
getAiVisibilityProjects(
accountId: $accountId
first: 10
) {
nodes {
id
rawId
name
totalTopics
totalPrompts
aiProviderTypes
primaryBrandDomain
primaryBrandRawId
scheduleCadence
nextScheduleRunAt
autoCrawlEnabled
freshnessThresholdDays
createdAt
updatedAt
}
pageInfo {
hasNextPage
endCursor
}
totalCount
}
}

You can search projects by name using the search parameter:

Operation: query SearchAiVisibilityProjects($accountId: ObjectID!, $search: String!) { getAiVisibilityProjects( accountId: $accountId first: 10 search: $search ) { nodes { id name primaryBrandDomain } totalCount } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "search": "my brand" }
SearchAiVisibilityProjectsTry in Explorer
GraphQL
query SearchAiVisibilityProjects($accountId: ObjectID!, $search: String!) {
getAiVisibilityProjects(
accountId: $accountId
first: 10
search: $search
) {
nodes {
id
name
primaryBrandDomain
}
totalCount
}
}

Sorting

Projects can be sorted by: name, primaryBrandDomain, totalTopics, totalPrompts.

Get a single project

Fetch a specific project by its ID:

Operation: query GetAiVisibilityProject( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! ) { getAiVisibilityProject( accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId ) { id rawId name scheduleCadence nextScheduleRunAt autoCrawlEnabled freshnessThresholdDays primaryBrand { id rawId name } aiProviders { id name type } createdAt updatedAt } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE" }
GetAiVisibilityProjectTry in Explorer
GraphQL
query GetAiVisibilityProject(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
) {
getAiVisibilityProject(
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
) {
id
rawId
name
scheduleCadence
nextScheduleRunAt
autoCrawlEnabled
freshnessThresholdDays
primaryBrand {
id
rawId
name
}
aiProviders {
id
name
type
}
createdAt
updatedAt
}
}

Create a project

Creating a project requires a name, brand name, and brand domain. The primary brand is automatically created as an own type brand.

Operation: mutation CreateAiVisibilityProject( $accountId: ObjectID! $name: String! $brandName: String! $brandDomain: String! $scheduleCadence: AiVisibilityScheduleCadence $brandThemeSentimentCaptureEnabled: Boolean! ) { createAiVisibilityProject( input: { accountId: $accountId name: $name brandName: $brandName brandDomain: $brandDomain scheduleCadence: $scheduleCadence brandThemeSentimentCaptureEnabled: $brandThemeSentimentCaptureEnabled } ) { aiVisibilityProject { id rawId name scheduleCadence nextScheduleRunAt brandThemeSentimentCaptureEnabled createdAt } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "name": "My Brand Monitoring", "brandName": "Lumar", "brandDomain": "lumar.io", "scheduleCadence": "Daily", "brandThemeSentimentCaptureEnabled": false }
CreateAiVisibilityProjectTry in Explorer
GraphQL
mutation CreateAiVisibilityProject(
$accountId: ObjectID!
$name: String!
$brandName: String!
$brandDomain: String!
$scheduleCadence: AiVisibilityScheduleCadence
$brandThemeSentimentCaptureEnabled: Boolean!
) {
createAiVisibilityProject(
input: {
accountId: $accountId
name: $name
brandName: $brandName
brandDomain: $brandDomain
scheduleCadence: $scheduleCadence
brandThemeSentimentCaptureEnabled: $brandThemeSentimentCaptureEnabled
}
) {
aiVisibilityProject {
id
rawId
name
scheduleCadence
nextScheduleRunAt
brandThemeSentimentCaptureEnabled
createdAt
}
}
}

Schedule cadence

The scheduleCadence field controls how often prompts are automatically sent to AI providers:

ValueDescription
dailyEvery day (default)
weeklyOnce per week
every_two_weeksEvery two weeks
monthlyOnce per month

The schedule cadence also affects the maximum number of prompts allowed in a project. More frequent cadences allow fewer prompts per project.

AI providers

By default, all AI providers included in your subscription are linked to the project. You can optionally specify aiVisibilityAiProviderIds to select a subset of providers.

Update a project

Update a project's name, schedule cadence, or content evaluation settings:

Operation: mutation UpdateAiVisibilityProject( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! $name: String $scheduleCadence: AiVisibilityScheduleCadence $autoCrawlEnabled: Boolean $freshnessThresholdDays: Int $brandThemeSentimentCaptureEnabled: Boolean ) { updateAiVisibilityProject( input: { accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId name: $name scheduleCadence: $scheduleCadence autoCrawlEnabled: $autoCrawlEnabled freshnessThresholdDays: $freshnessThresholdDays brandThemeSentimentCaptureEnabled: $brandThemeSentimentCaptureEnabled } ) { aiVisibilityProject { id name scheduleCadence autoCrawlEnabled freshnessThresholdDays brandThemeSentimentCaptureEnabled } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE", "name": "Updated Project Name", "scheduleCadence": "Weekly", "autoCrawlEnabled": true, "freshnessThresholdDays": 14, "brandThemeSentimentCaptureEnabled": true }
UpdateAiVisibilityProjectTry in Explorer
GraphQL
mutation UpdateAiVisibilityProject(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
$name: String
$scheduleCadence: AiVisibilityScheduleCadence
$autoCrawlEnabled: Boolean
$freshnessThresholdDays: Int
$brandThemeSentimentCaptureEnabled: Boolean
) {
updateAiVisibilityProject(
input: {
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
name: $name
scheduleCadence: $scheduleCadence
autoCrawlEnabled: $autoCrawlEnabled
freshnessThresholdDays: $freshnessThresholdDays
brandThemeSentimentCaptureEnabled: $brandThemeSentimentCaptureEnabled
}
) {
aiVisibilityProject {
id
name
scheduleCadence
autoCrawlEnabled
freshnessThresholdDays
brandThemeSentimentCaptureEnabled
}
}
}

Content evaluation settings

  • autoCrawlEnabled -- When true, cited pages from your brand's domains are automatically crawled and evaluated after each prompt run
  • freshnessThresholdDays -- Number of days (1-90, default 7) before a previously crawled URL is considered stale and re-crawled

Theme sentiment capture

  • brandThemeSentimentCaptureEnabled -- When true, the project requests per-theme brand sentiment capture on its prompt runs. Off by default. This is a request, not a guarantee: capture is performed by the prompt tracker, which may not honour the request, so theme sentiment data can remain empty even while the setting is enabled. An empty sentiment series is therefore a normal state, not an error. The setting can also be passed on createAiVisibilityProject, so a project can opt in before its first prompt runs.
caution

Changing scheduleCadence may reduce the allowed prompt count. If the current prompt count exceeds the new limit, the update will fail with AI_VISIBILITY_PROMPTS_LIMIT_REACHED.

Delete a project

Soft-deletes a project. This is a destructive operation.

Operation: mutation DeleteAiVisibilityProject( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! ) { deleteAiVisibilityProject( input: { accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId } ) { aiVisibilityProject { id } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE" }
DeleteAiVisibilityProjectTry in Explorer
GraphQL
mutation DeleteAiVisibilityProject(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
) {
deleteAiVisibilityProject(
input: {
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
}
) {
aiVisibilityProject {
id
}
}
}

Schema reference