Overview
Competitor monitoring tracks how often rival brands are mentioned by AI platforms when answering questions in your category — alongside your own brand. Each tracking run produces a side-by-side comparison of mention rates and visibility scores.
What the data tells you
Mention rate
% of prompts where the brand is named at all
Visibility score
Weighted score (0–100) accounting for prominence and position
Platform breakdown
Which AI platform favours which competitor
Share of voice
Your brand's % share of total category mentions
Competitor limits depend on your plan: 5 on Starter, 10 on Pro, unlimited on Enterprise. Competitors are tracked on every run alongside your brand automatically.
Add Competitors
Competitors are identified by brand name and optional domain. Linksii scrapes their logo automatically when a domain is provided. Limits depend on your plan (5 Starter, 10 Pro, unlimited Enterprise).
List current competitors
curl "https://www.linksii.com/api/v1/competitors?workspace_id=ws_01HXYZ" \ -H "Authorization: Bearer lnk_your_api_key_here"
Add competitors
# Add multiple competitors (workspace_id and name are required, domain is optional)
curl -X POST https://www.linksii.com/api/v1/competitors \
-H "Authorization: Bearer lnk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"workspace_id": "ws_01HXYZ", "name": "Asana", "domain": "asana.com"}'
curl -X POST https://www.linksii.com/api/v1/competitors \
-H "Authorization: Bearer lnk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"workspace_id": "ws_01HXYZ", "name": "Monday.com", "domain": "monday.com"}'
curl -X POST https://www.linksii.com/api/v1/competitors \
-H "Authorization: Bearer lnk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"workspace_id": "ws_01HXYZ", "name": "Notion", "domain": "notion.so"}'Competitor response
{
"data": {
"id": "comp_01HABC",
"workspace_id": "ws_01HXYZ",
"domain": "asana.com",
"name": "Asana",
"logo_url": "https://www.linksii.com/logos/asana.png",
"is_active": true,
"created_at": "2025-06-01T10:00:00Z"
}
}Competitors are tracked automatically on every future tracking run — no changes needed to your tracking calls. Deactivate a competitor with { "is_active": false } to stop tracking them without deleting.
How Tracking Runs Work
Tracking runs are triggered from the Linksii application UI (Tracking page) or automatically via the daily cron job. Once competitors are added, they are included in every tracking run automatically — no extra configuration needed. After a run completes, use GET /api/v1/tracking with include_competitors=true to fetch results for both your brand and competitors.
Compare Results
After a run completes, fetch tracking results filtered to a specific run to get both your brand and competitor data. Results include per-platform breakdowns.
curl "https://www.linksii.com/api/v1/tracking?workspace_id=ws_01HXYZ&include_competitors=true&limit=20" \
-H "Authorization: Bearer lnk_your_api_key_here" \
| jq '[.data[] | {brand: .brand_name, platform: .platform, score: .score, mention_count: .mention_count}]'Comparison output example
Brand Comparison (avg across platforms): My SaaS Score: 72/100 Mentions: 8 Asana Score: 81/100 Mentions: 14 Monday.com Score: 76/100 Mentions: 11 Notion Score: 69/100 Mentions: 7
Full results response shape
{
"data": [
{
"run_id": "run_01HPQR",
"workspace_id": "ws_01HXYZ",
"brand_name": "My SaaS",
"competitor_id": null,
"platform": "chatgpt",
"score": 74,
"mention_count": 9,
"mention_rate": 0.75,
"status": "complete",
"ran_at": "2025-06-01T10:07:00Z"
},
{
"run_id": "run_01HPQR",
"workspace_id": "ws_01HXYZ",
"brand_name": "Asana",
"competitor_id": "comp_01HABC",
"platform": "chatgpt",
"score": 83,
"mention_count": 15,
"mention_rate": 0.92,
"status": "complete",
"ran_at": "2025-06-01T10:07:00Z"
}
],
"meta": { "total": 8, "limit": 20, "offset": 0 }
}Track Over Time
Fetch results after each daily run and store them in your own database to build trend charts. The snippet below stores results to a local JSON file as a simple example.
#!/bin/bash # weekly-fetch.sh — run this from cron after Linksii's daily scan completes # Fetches the latest tracking results and appends to a local JSONL file DATE=$(date -u +%Y-%m-%d) RESULT=$(curl -s "https://www.linksii.com/api/v1/tracking?workspace_id=ws_01HXYZ&include_competitors=true&limit=20" \ -H "Authorization: Bearer $LINKSII_API_KEY") echo "$RESULT" >> tracking-history.jsonl echo "[$DATE] Fetched results: $(echo $RESULT | jq '.meta.total') entries"
For production time-series storage, use a database with a time-indexed table. Include run_id, brand_name, platform, and ran_at as indexed columns.
Error Handling
| Code | Cause & Fix |
|---|---|
| 400 | Invalid domain format. Use bare domains (asana.com) not full URLs (https://asana.com/product). |
| 409 | Competitor domain already exists in this workspace. List competitors first to avoid duplicates. |
| 422 | Competitor limit reached for your plan (5 Starter, 10 Pro, unlimited Enterprise). Upgrade your plan or remove an existing competitor. |
| 404 | Competitor not found when updating. Verify the competitor ID belongs to the target workspace. |
Checking for duplicates before adding
# List competitors and check if domain exists before adding DOMAIN="asana.com" EXISTS=$(curl -s "https://www.linksii.com/api/v1/competitors?workspace_id=ws_01HXYZ" \ -H "Authorization: Bearer lnk_your_api_key_here" \ | jq --arg d "$DOMAIN" '[.data[] | select(.domain == $d)] | length') if [ "$EXISTS" -gt 0 ]; then echo "$DOMAIN already tracked" else echo "Adding $DOMAIN..." fi