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:
| Type | Description |
|---|---|
Own | Your brand (the primary brand) |
Competitor | A company in the same market as your brand |
Other | A real brand that is not a direct competitor, such as a publisher or a company in an adjacent market |
Context | A 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 source | Meaning |
|---|---|
Pending | A prompt run has just discovered the brand and it has not been classified yet. Its type reads Other until then. |
Automatic | Lumar 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. |
User | A 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.
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:
| Field | Description |
|---|---|
avgVisibilityScore | Composite score (0-100) combining citation and mention quality |
avgCitationQualityScore | Average quality score for citations |
avgBrandMentionQualityScore | Average quality score for brand mentions |
avgBrandPosition | Average citation position in responses |
avgBrandSentiment | Average sentiment score for brand mentions |
totalBrandCitations | Total number of citations |
domain | Primary domain associated with the brand |
Search brands
Search brands by name without requiring date range or brand ID parameters:
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.
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:
mutation UpdateAiVisibilityBrand(
$accountId: ObjectID!
$aiVisibilityBrandId: ObjectID!
$type: AiVisibilityBrandType!
) {
updateAiVisibilityBrand(
input: {
accountId: $accountId
aiVisibilityBrandId: $aiVisibilityBrandId
type: $type
}
) {
aiVisibilityBrand {
id
name
type
typeSource
}
}
}
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.
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.
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.
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
AiVisibilityBrand-- Brand typeAiVisibilityBrandListItem-- Brand list item with metricsAiVisibilityBrandType-- Brand classificationAiVisibilityBrandTypeSource-- Who set a brand's typeAiVisibilityBrandDomain-- Associated domains