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.
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:
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:
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.
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:
| Value | Description |
|---|---|
daily | Every day (default) |
weekly | Once per week |
every_two_weeks | Every two weeks |
monthly | Once 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:
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-- Whentrue, cited pages from your brand's domains are automatically crawled and evaluated after each prompt runfreshnessThresholdDays-- Number of days (1-90, default 7) before a previously crawled URL is considered stale and re-crawled
Theme sentiment capture
brandThemeSentimentCaptureEnabled-- Whentrue, 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 oncreateAiVisibilityProject, so a project can opt in before its first prompt runs.
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.
mutation DeleteAiVisibilityProject(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
) {
deleteAiVisibilityProject(
input: {
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
}
) {
aiVisibilityProject {
id
}
}
}
Schema reference
AiVisibilityProject-- Project typeCreateAiVisibilityProjectInput-- Creation inputUpdateAiVisibilityProjectInput-- Update inputAiVisibilityScheduleCadence-- Schedule options