Skip to main content

Brands

Brands are discovered automatically from AI provider responses. When an AI response cites a URL or mentions a brand name, the system resolves it against existing brands (case-insensitive) or creates a new one.

Each brand has a type:

TypeDescription
OwnYour brand (the primary brand)
CompetitorA company in the same market as your brand
OtherA real brand that is not a direct competitor, such as a publisher or a company in an adjacent market
ContextA platform that appears in answers without competing in your market, such as Google, ChatGPT, Wikipedia or Reddit. Counted in appearances, excluded from share of voice

How a brand's type is set​

typeSource on a brand says who set its type:

Type sourceMeaning
PendingA prompt run has just discovered the brand and it has not been classified yet. Its type reads Other until then.
AutomaticLumar classified the brand when a prompt run first discovered it. When the classification is not confident, or cannot be completed, the brand stays Other. Brands that existed before automatic classification and still read Other also report Automatic.
UserA user set the type with updateAiVisibilityBrand.

Lumar classifies a brand once, when it is first discovered. Later runs that find the same brand leave its type alone, and a type a user sets is never overwritten, including while a classification is still in progress. Brands merged into another brand take that brand's type and type source.

List brands​

Retrieve brands for a project with visibility metrics. The aiVisibilityBrandId parameter specifies which brand's perspective to use for calculating metrics.

Operation: query GetAiVisibilityBrands( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! $dateRange: AiVisibilityDateRangeInput ) { getAiVisibilityBrands( accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId dateRange: $dateRange first: 20 orderBy: [{ field: avgVisibilityScore, direction: DESC }] ) { nodes { id rawId name type primary avgVisibilityScore avgCitationQualityScore avgBrandMentionQualityScore avgBrandPosition avgBrandSentiment totalBrandCitations domain } pageInfo { hasNextPage endCursor } totalCount } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE", "dateRange": { "start": "2025-01-01", "end": "2025-01-31" } }
GetAiVisibilityBrandsTry in Explorer
GraphQL
query GetAiVisibilityBrands(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
$dateRange: AiVisibilityDateRangeInput
) {
getAiVisibilityBrands(
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
dateRange: $dateRange
first: 20
orderBy: [{ field: avgVisibilityScore, direction: DESC }]
) {
nodes {
id
rawId
name
type
primary
avgVisibilityScore
avgCitationQualityScore
avgBrandMentionQualityScore
avgBrandPosition
avgBrandSentiment
totalBrandCitations
domain
}
pageInfo {
hasNextPage
endCursor
}
totalCount
}
}

Sorting​

Brands can be sorted by: name, domain, avgVisibilityScore, avgCitationQualityScore, avgBrandMentionQualityScore, avgBrandPosition, avgBrandSentiment, totalBrandCitations, type.

Default sort is avgVisibilityScore DESC when a date range is provided, or name ASC when omitted.

Metrics​

When a dateRange is provided, each brand includes these computed metrics:

FieldDescription
avgVisibilityScoreComposite score (0-100) combining citation and mention quality
avgCitationQualityScoreAverage quality score for citations
avgBrandMentionQualityScoreAverage quality score for brand mentions
avgBrandPositionAverage citation position in responses
avgBrandSentimentAverage sentiment score for brand mentions
totalBrandCitationsTotal number of citations
domainPrimary domain associated with the brand

Search brands​

Search brands by name without requiring date range or brand ID parameters:

Operation: query SearchAiVisibilityBrands( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! $search: String! ) { searchAiVisibilityBrands( input: { accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId search: $search } ) { id rawId name type } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE", "search": "competitor" }
SearchAiVisibilityBrandsTry in Explorer
GraphQL
query SearchAiVisibilityBrands(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
$search: String!
) {
searchAiVisibilityBrands(
input: {
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
search: $search
}
) {
id
rawId
name
type
}
}

Top brands​

Get the top brands ranked by visibility score. Returns a fixed-size result set (up to ~8 brands) with the focus brand always included. Useful for leaderboard-style displays.

Operation: query GetAiVisibilityTopBrands( $accountId: ObjectID! $aiVisibilityProjectId: ObjectID! $aiVisibilityBrandId: ObjectID! $dateRange: AiVisibilityDateRangeInput ) { getAiVisibilityTopBrands( accountId: $accountId aiVisibilityProjectId: $aiVisibilityProjectId aiVisibilityBrandId: $aiVisibilityBrandId dateRange: $dateRange ) { totalRankedBrands brands { id rawId name type rank avgVisibilityScore avgCitationQualityScore avgBrandMentionQualityScore totalBrandCitations totalBrandMentions avgBrandPosition avgBrandSentiment domain } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityProjectId": "QWlWaXNpYmlsaXR5UHJvamVjdDE", "aiVisibilityBrandId": "QWlWaXNpYmlsaXR5QnJhbmQx", "dateRange": { "start": "2025-01-01", "end": "2025-01-31" } }
GetAiVisibilityTopBrandsTry in Explorer
GraphQL
query GetAiVisibilityTopBrands(
$accountId: ObjectID!
$aiVisibilityProjectId: ObjectID!
$aiVisibilityBrandId: ObjectID!
$dateRange: AiVisibilityDateRangeInput
) {
getAiVisibilityTopBrands(
accountId: $accountId
aiVisibilityProjectId: $aiVisibilityProjectId
aiVisibilityBrandId: $aiVisibilityBrandId
dateRange: $dateRange
) {
totalRankedBrands
brands {
id
rawId
name
type
rank
avgVisibilityScore
avgCitationQualityScore
avgBrandMentionQualityScore
totalBrandCitations
totalBrandMentions
avgBrandPosition
avgBrandSentiment
domain
}
}
}

The totalRankedBrands field indicates how many brands were ranked in total. Each brand includes a rank field showing its position.

You can scope top brands to a specific topic or prompt using the optional aiVisibilityTopicId or aiVisibilityPromptId parameters.

Update brand type​

Classify a brand as Competitor, Other or Context. The change sets the brand's typeSource to User, so automatic classification never changes it again:

Operation: mutation UpdateAiVisibilityBrand( $accountId: ObjectID! $aiVisibilityBrandId: ObjectID! $type: AiVisibilityBrandType! ) { updateAiVisibilityBrand( input: { accountId: $accountId aiVisibilityBrandId: $aiVisibilityBrandId type: $type } ) { aiVisibilityBrand { id name type typeSource } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityBrandId": "QWlWaXNpYmlsaXR5QnJhbmQy", "type": "Competitor" }
UpdateAiVisibilityBrandTry in Explorer
GraphQL
mutation UpdateAiVisibilityBrand(
$accountId: ObjectID!
$aiVisibilityBrandId: ObjectID!
$type: AiVisibilityBrandType!
) {
updateAiVisibilityBrand(
input: {
accountId: $accountId
aiVisibilityBrandId: $aiVisibilityBrandId
type: $type
}
) {
aiVisibilityBrand {
id
name
type
typeSource
}
}
}
note

You cannot update the type of a merged brand directly. Update the target brand instead, and all merged brands will be synced automatically.

Merge brands​

When the same entity appears under different names (e.g. "Lumar" and "Deepcrawl"), you can merge them. Merged brands are excluded from the brand list but their data is included in the target brand's aggregations.

Operation: mutation MergeAiVisibilityBrands( $accountId: ObjectID! $aiVisibilitySourceBrandIds: [ObjectID!]! $aiVisibilityTargetBrandId: ObjectID! ) { mergeAiVisibilityBrands( input: { accountId: $accountId aiVisibilitySourceBrandIds: $aiVisibilitySourceBrandIds aiVisibilityTargetBrandId: $aiVisibilityTargetBrandId } ) { targetBrand { id name type } sourceBrands { id name isMerged mergedIntoAiVisibilityBrandId } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilitySourceBrandIds": ["QWlWaXNpYmlsaXR5QnJhbmQz", "QWlWaXNpYmlsaXR5QnJhbmQ0"], "aiVisibilityTargetBrandId": "QWlWaXNpYmlsaXR5QnJhbmQy" }
MergeAiVisibilityBrandsTry in Explorer
GraphQL
mutation MergeAiVisibilityBrands(
$accountId: ObjectID!
$aiVisibilitySourceBrandIds: [ObjectID!]!
$aiVisibilityTargetBrandId: ObjectID!
) {
mergeAiVisibilityBrands(
input: {
accountId: $accountId
aiVisibilitySourceBrandIds: $aiVisibilitySourceBrandIds
aiVisibilityTargetBrandId: $aiVisibilityTargetBrandId
}
) {
targetBrand {
id
name
type
}
sourceBrands {
id
name
isMerged
mergedIntoAiVisibilityBrandId
}
}
}

You can merge multiple source brands into a single target in one operation. Cascading merges are handled automatically -- if a source brand already has other brands merged into it, those are redirected to the new target.

Validation rules​

  • Cannot merge the primary brand
  • Cannot merge an already-merged brand
  • Cannot merge into a brand that is itself merged
  • Cannot merge a brand into itself
  • Source and target must be in the same project

Unmerge a brand​

Separate a previously merged brand. The brand reappears in the brand list with its original data.

Operation: mutation UnmergeAiVisibilityBrand( $accountId: ObjectID! $aiVisibilityBrandId: ObjectID! ) { unmergeAiVisibilityBrand( input: { accountId: $accountId aiVisibilityBrandId: $aiVisibilityBrandId } ) { aiVisibilityBrand { id name isMerged } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityBrandId": "QWlWaXNpYmlsaXR5QnJhbmQz" }
UnmergeAiVisibilityBrandTry in Explorer
GraphQL
mutation UnmergeAiVisibilityBrand(
$accountId: ObjectID!
$aiVisibilityBrandId: ObjectID!
) {
unmergeAiVisibilityBrand(
input: {
accountId: $accountId
aiVisibilityBrandId: $aiVisibilityBrandId
}
) {
aiVisibilityBrand {
id
name
isMerged
}
}
}

Promote a merged brand​

Promote a merged brand to become the new "main" brand in a merge group. All sibling brands are redirected to point to the newly promoted brand.

Operation: mutation PromoteAiVisibilityBrand( $accountId: ObjectID! $aiVisibilityBrandId: ObjectID! ) { promoteAiVisibilityBrand( input: { accountId: $accountId aiVisibilityBrandId: $aiVisibilityBrandId } ) { promotedBrand { id name isMerged } previousMainBrand { id name isMerged } } }Variables: { "accountId": "TjAwN0FjY291bnQxMjM0NQ", "aiVisibilityBrandId": "QWlWaXNpYmlsaXR5QnJhbmQz" }
PromoteAiVisibilityBrandTry in Explorer
GraphQL
mutation PromoteAiVisibilityBrand(
$accountId: ObjectID!
$aiVisibilityBrandId: ObjectID!
) {
promoteAiVisibilityBrand(
input: {
accountId: $accountId
aiVisibilityBrandId: $aiVisibilityBrandId
}
) {
promotedBrand {
id
name
isMerged
}
previousMainBrand {
id
name
isMerged
}
}
}

For example, if brands A and B are merged into C, promoting A makes it the new main with B and C merged into A.

Schema reference​